Open-source SDK under MIT license

Know if your push notifications really land

Device-level delivery confirmation: iOS and Android. FCM (Google) and APNs (Apple) confirm that notifications were sent, but never that they were received on the device. 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
  • Dashboard showing sent vs received rate
  • Billing by ingested receipt volume
  • Open-source SDK

Four reasons to use Pushproof

A reusable native SDK, a backend that aggregates and displays the results, 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 — invite as many teammates who can view the dashboard as you want, all at no extra cost! You pay based on ingested receipt volume; your data is retained, with no tier-based purge.

Free

to validate

€0

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

Pro

to scale

€29/month

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

Scale

large apps

€79/month

  • 10M receipts / month
  • 1 mobile app
  • Unlimited team members
  • 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.

Can I invite my team?

Yes — on all plans, including Free. Invite as many colleagues as you want to view the dashboard in read-only mode, at no extra cost. Only the account owner manages billing and API keys.

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.