Blog / Implementation

App Store Server Notifications V2 explained for founders

App Store Server Notifications V2 are Apple’s server-to-server lifecycle messages about subscription events such as renewals, expirations, refunds, and billing changes. Founders should think of them as the operating feed that keeps access and revenue state current.

  • These notifications are operational, not optional, for serious subscription handling.
  • They keep the backend informed when subscription state changes outside the app session.
  • Founders should understand what they mean even if they never read raw payloads themselves.

Definitions used in this guide

Public SDK key

A publishable key that is safe to ship in client code and scopes requests to the correct project and environment.

Server-side verification

Checking purchase, webhook, or notification data on your backend before granting access.

Environment separation

Keeping sandbox and production data apart so test transactions never contaminate live reporting or access.

What should be true before you start?

The key mindset is that subscriptions change even when the user is not opening the app. Renewals, refunds, billing problems, and expirations all happen in the background.

  • Treat lifecycle events as part of the backend, not a UI concern.
  • Plan how those events update entitlements and customer state.
  • Keep environment and signature verification discipline in place.

How should you implement this step by step?

The technical shape is server-to-server delivery. Apple sends lifecycle events, your backend verifies them, and the subscription system updates the customer record and access state accordingly.

  • Configure the notification endpoint on the backend.
  • Verify the incoming message and its environment before processing it.
  • Map each relevant lifecycle event into subscription and entitlement state changes.
  • Expose the resulting state in dashboards and customer views so product and support can act on it.
Why notifications matter to founders
Lifecycle eventWhy it mattersFounder-facing impact
RenewalRevenue and access continueConfirms retained subscriber value
Billing issueRevenue becomes at-riskNeeds recovery visibility
Refund or expirationAccess or revenue can change fastAffects support and retention analysis

Where do teams make mistakes?

The biggest error is assuming the app itself will always be present to discover subscription changes.

  • Treating server notifications as optional implementation detail.
  • Not mapping lifecycle changes into customer-facing entitlement state.
  • Ignoring environment separation between test and live notification flows.

How does Crossdeck operationalize the workflow?

Crossdeck uses server-side lifecycle ingestion so the app can ask simple entitlement questions while the backend tracks the moving parts.

That gives founders a more reliable operating picture and reduces the risk of stale access or invisible churn states.

Frequently asked questions

Do founders need to read the raw notification payloads?

Usually no. Founders mainly need to understand what lifecycle states exist and why they matter to access, revenue, and support workflows.

Why can the app not handle this alone?

Because many subscription changes happen while the app is closed, and the backend needs to stay current independently of user sessions.

What should the dashboard show after a notification arrives?

It should show the updated subscription state, entitlement effect, and customer context so the change is operationally meaningful.

Does Crossdeck work across iOS, Android, and web?

Yes. Crossdeck is designed around one customer timeline across Apple, Google Play, Stripe, and web or mobile product events, so the same entitlement and revenue model can travel across surfaces.

What should I do after reading this guide?

Use the CTA in this article to start free or go straight into read api key and authentication docs so you can turn the concept into a verified implementation.

Take this into the product

Connect the App Store rail and let the backend consume lifecycle notifications instead of expecting the app to discover every subscription change on its own.