Open-source SDK under MIT license

Know if your push notifications really land

Device-level delivery confirmation: iOS and Android. FCM and APNs confirm dispatch, never delivery. PushProof fills this gap, without changing your sending stack!

npm install @pushproof/capacitor
Device-level
Real delivery, not assumed
0 MAU
Billing by receipt volume

FCM and APNs do not confirm delivery on the device

When you send a push, you know at best that it was accepted for distribution. Never that it reached the phone.

Without device-level confirmation

  • No reliable device-side receipt
  • Impossible to measure delivery rate
  • Third-party solutions billed by MAU
  • Locked-in SDK and dashboard

With Pushproof

  • Device-level iOS (NSE) and Android receipts
  • Sent vs delivered rate in a dashboard
  • Billing by ingested receipt volume
  • Open-source SDK

Four reasons to use Pushproof

A reusable native SDK, a backend that aggregates, and a pricing model aligned with actual usage.

Real delivery, not assumed

An iOS extension (NSE) and Android service capture delivery on the device (including when the app is closed). Each push carries a notif_id to correlate send and receipt.

Pay for usage, not your MAU

Billing by ingested receipt volume. Your active users don't inflate the bill.

Open plugin, managed service

The native SDK (Swift + Kotlin) and wrappers are MIT-licensed. You pay for ingestion, aggregation and the dashboard.

Per-user tracking Pro

Add a user_id when sending: "did this user receive this notification?", list received/missing recipients per campaign. Pushproof does not know your users' real identity (hashed at ingestion).

From send to delivery confirmation, in 4 steps

You send notifications, Pushproof receives receipts and calculates rates.

1 · Send

Your backend injects a notif_id (UUID) into the payload — and optionally a user_id for Pro tracking

2 · Receive

iOS NSE or Android FirebaseMessagingService intercepts the push

3 · Receipt

POST to api.pushproof.dev/v1/receipts with the ingestion key

4 · Confirmation

Delivered/sent rate available in the dashboard by app, platform and campaign

By ingested receipt volume

No MAU billing. One account = one app. You pay for ingested receipt volume and dashboard features — your data is retained, with no tier-based purge.

Free

to validate

€0

  • 5,000 receipts / month
  • 1 mobile app
  • Data retained
  • Global rate
Start

Pro

to scale

€29/month

  • 2M receipts / month
  • 1 mobile app
  • Data retained
  • Per-user tracking (user_id)
  • Alerts · read API
Choose Pro

Scale

large apps

€79/month

  • 10M receipts / month
  • 1 mobile app
  • Data retained
  • Per-user tracking (user_id)
  • Alerts · read API
  • Priority support
Choose Scale

Frequently asked questions

Do FCM and APNs confirm delivery on the device?

No. They confirm acceptance for distribution by the Apple or Google relay. The notification may never reach the device — and you won't know.

How does Pushproof confirm receipt?

On iOS, a Notification Service Extension (NSE) is woken when a push arrives, before it's displayed. On Android, a FirebaseMessagingService intercepts data messages. In both cases, a request is sent to our system containing the notif_id and the user_id if present in the payload.

What is per-user tracking?

This Pro plan feature activates automatically when you add an opaque user_id to the payload (your app's internal identifier — never email or phone). You can then answer "did this user receive this notification?" and list received or missing recipients for a campaign, via the dashboard or API. Pushproof stores a hash — not the identifier in plain text.

Is the iOS delivery rate guaranteed at 100%?

No, and we don't promise it. iOS may suspend the NSE (delivery confirmation) under memory or battery pressure. The displayed rate is a lower bound of the actual rate. This is exactly the same bias as commercial solutions: OneSignal, Airship.

What is the difference with OneSignal or Airship?

These platforms solve confirmation but bill by MAU (monthly active users) and place the feature behind paid tiers. Pushproof bills only by ingested receipt volume.

Which frameworks are supported?

The native SDK (Swift + Kotlin) is framework-agnostic. The first wrapper shipped is @pushproof/capacitor (Ionic/Capacitor). React Native and Flutter will follow based on demand — the backend serves all ecosystems via the same protocol.

Stop guessing. Start measuring.

5,000 free receipts per month. Open-source SDK, integration in under an hour.