Docs
grovs.io Start for free

Delivery and reporting

Campaign statuses, what targeted, delivered, opened and failed mean, and how Grovs keeps the numbers right.

All Cloud plans and self-hosted Enterprise · Requires iOS SDK 3.1.0, Android SDK 3.1.0

Open a campaign from Engage › Push to see its report. Numbers update live while it sends, and the counts are kept as long as the campaign exists.

Campaign status

StatusMeaning
DraftBeing written. Only drafts can be edited.
ScheduledWaiting for its send time. Can be cancelled.
EvaluatingGrovs is resolving the audience: seconds for a list, longer for a large segment.
SendingPushes are being handed to Apple and Google. Can be cancelled.
SentEvery device handed off. The last pushes reach Apple and Google seconds later, and pushes they asked to retry keep going out after that.
Waiting for the winnerSent to the test share of an experiment. The rest get the winning variant later.
FailedThe audience couldn't be resolved. The report shows why.
CancelledStopped before every device got it.

Why a campaign fails:

ReasonWhat happenedWhat to do
Segment busyThe segment couldn't be evaluated in ten attempts over about three hours.Retry later with Duplicate.
Segment invalidThe segment was archived, its definition no longer works, or its time window expired.Fix the segment.
Segment too heavyThe segment query was too expensive to run.Narrow the segment.
Evaluation errorSomething else went wrong.Contact support.

Reach

Reach tracks every device in the audience:

NumberMeaning
TargetedDevices selected for this push. Excludes the control group.
No channelNo push token on file, or a web or desktop device. Skipped.
Not foundA user ID or device ID in your list that Grovs doesn't know.
QueuedHanded to the push service, no result yet.
DeliveredAccepted by APNs or FCM. Not proof it was shown: the phone may be off or notifications disabled.
FailedRejected by APNs or FCM, or not sent. See Failures.
OpenedTapped, as reported by the SDK.
CancelledNot sent because the campaign was cancelled first.
Control groupHeld back on purpose, for comparison.
Waiting for the winnerOutside the test share. Sent once a variant is chosen.

The report also shows audience size in people and devices. A segment whose time window reaches past your data retention is marked incomplete.

How opens are counted

  • An open is a tap on the notification reported by the SDK. Dismissing it or tapping a custom action button doesn't count. See Push notifications on iOS.
  • Each device counts once per campaign, however many taps or SDK retries.
  • The open is recorded as a push_open event with the campaign ID, visible in your analytics.
  • A tap on a push with a deep link isn't also counted as a link open, and later events from that device aren't attributed to the link. The push gets the credit, once.
  • Android devices don't report opens yet.

Failures

Failures by reason groups failed devices by Apple's or Google's answer. APNs reasons keep their name; FCM failures show the HTTP status.

ReasonMeaning
UnregisteredApp uninstalled or token expired. Grovs removes the token.
BadDeviceTokenA malformed token, or one from the other APNs environment. See Tokens.
PayloadTooLargeThe notification exceeded the size limit.
FCM 404Device not registered. Grovs removes the token.
no_appNo push credentials for this platform. Add them in Developers › SDK Setup.
no_tokenThe device lost its token between the audience freeze and delivery.
cappedThe person already hit the daily maximum. See Daily cap.
app_removedYour push credentials were replaced or removed while the push waited.

More reasons: Limits and troubleshooting.

Deliveries

The Deliveries table lists every device with its status, platform, visitor, any error, and open time. Filter by status, for example to find every failed device.

Per-device rows are kept for 30 days after the send. Report counts are kept for good.

How the numbers stay accurate

  • At least once. Grovs marks a push queued and hands it off in one step, so a crash never sends a batch twice. If the push service stops after Apple or Google accepted a push but before saving that, the push is resent on restart. A rare duplicate is possible; a lost push is not.
  • Retries. APNs 429, 500 and 503 are retried every 10 seconds until accepted. FCM 5xx is retried with backoff, and FCM 429 up to 8 retries.
  • Reconciliation. Every minute, Grovs settles devices still Queued after 10 minutes from the push service's own record. If a result was lost, the report catches up on its own.
Last updated 2026-10-26
Was this page helpful?