In-app message reporting
Read an in-app message's views, clicks and dismissals, and see exactly what the SDK counts as each.
Every in-app message has a report. Open it from Engage › In-App with Open report on the message's row.
The report
Pick a Period: Today (UTC), by hour, Last 7 days, Last 30 days or Last 90 days. Days are UTC. Numbers refresh at most once a minute.
| Metric | Means |
|---|---|
| Views | Times the message was on screen. The hint below counts distinct devices |
| Clicks | Times someone acted on it: a button, or a tap on the message. The hint counts distinct devices |
| Click rate | Clicks divided by views |
| Dismissals | Times someone closed it without acting |
| Devices that may see it | For a segment message, the devices in its audience. Not shown for Everyone |
Below the totals:
- Over time charts views, clicks and dismissals by day, or by hour for today.
- By platform splits them by iOS, Android and web.
- Clicks by button shows clicks per button. Tap on the message counts taps on the message itself.
A message with a question shows Answers and Answer rate instead of clicks, plus an Answers tab. See Surveys and ratings. A message with a goal, control group or variants has an Experiment card. See Experiments.
What counts
The SDK reports three events in its normal event batches: in_app_viewed, in_app_clicked and in_app_dismissed. Because of batching, a view can take a while to appear, and an offline device reports when it reconnects.
A view
A view counts when the message is actually on screen, not when its trigger fires.
- A message waiting out a delay or behind another message counts when it appears. If it no longer applies by then, it never appears and isn't counted.
- A message that couldn't be drawn isn't counted and reports nothing.
- A custom HTML message counts once its page is ready. A page not ready within 5 seconds is dropped and not counted.
- Test messages are never counted.
- Each view has its own id, so a batch sent twice counts once.
Every limit, such as "at most once a day", counts the views this device recorded.
A click
At most one click per view: the first action on the message.
| Template | Counts as the click |
|---|---|
| Templates with buttons | A tap on a button, or on the message when it has a tap action |
| Image-only templates | A tap on the picture |
| Custom HTML | The first grovs.track() or grovs.open() call, including from a data-grovs-action="track" or ="open" element or a plain link. Closing doesn't count |
The click is reported before the action runs, so it's recorded even if the action leaves the app.
A dismissal
A dismissal is a close without a click. The SDK records why:
| Reason | When |
|---|---|
close_button | The close button, the Escape key on the web, or grovs.close() in a custom HTML page |
backdrop | A tap outside the message |
swipe | A swipe on a banner or card (iOS) |
app | Your app closed it through the SDK, or the page went away |
Two closes aren't counted as Dismissals:
- Screen rotation. A Portrait only or Landscape only message closes when the device turns. It's reported with reason
orientation, since the person didn't dismiss it. - After an answer. Once a question is answered, any close counts as answered.
In custom HTML, a person can track an event (a click) and then close the page, so one view can have both a click and a dismissal.
Reading the numbers
- Views and devices. Three views by one person is three views and one device. Device counts aren't people: someone with a phone and a laptop counts twice.
- Control groups. Held-back people never see the message and add no views. The Experiment card compares them with viewers.
- Edits. Editing a live message doesn't reset its report. Each click carries the revision it was shown with, so clicks on a since-removed button still count.
- Ended messages keep their report.
The raw events are also in your analytics and the event stream, with the message's campaign_id, revision, template and, for clicks, button_id and action.