App Store Server Notifications without a serverApp Store events, on your lock screen.
App Store Server Notifications need a server to land on. Paste an Acciti URL into App Store Connect instead, and failed renewals and refunds arrive on your phone. No backend, no handler, nothing to deploy.
How do you receive App Store Server Notifications without a server?
Create a connector, copy its ingest URL, and paste it into App Store Connect as your production server URL. Acciti verifies each signed notification, decodes it and sends it to every device you're signed in on.
App Store Connect also takes a sandbox URL. Point it at the same connector and test purchases arrive with (Sandbox) in the title, so an Xcode test never reads as revenue.
How is an App Store notification verified?
Acciti runs two checks before anything reaches your phone.
Apple signed it
It's about your app
Which App Store notifications will I hear?
Failed renewals, refunds and Apple's test notification are on from the start, and they don't grow with your sales. New subscribers and renewals arrive as often as people buy, so they start off. Turn on the ones you want to hear.
TESTApple's own test notification, sent when you ask for one.QuietOnSUBSCRIBEDA new subscriber.QuietOffSUBSCRIBEDRESUBSCRIBEA lapsed customer subscribed again, or joined through Family Sharing.QuietOffDID_RENEWA subscription renewed. A trial converting to paid also counts.QuietOffDID_RENEWBILLING_RECOVERYA renewal that had been failing went through.QuietOffONE_TIME_CHARGEA one-off purchase: a consumable, a non-consumable or a non-renewing subscription.QuietOffOFFER_REDEEMEDA customer redeemed a subscription offer.QuietOffDID_FAIL_TO_RENEWA renewal failed with no grace period, so access has stopped.HighOnDID_FAIL_TO_RENEWGRACE_PERIODA renewal failed, and the customer keeps access through the grace period.NormalOnGRACE_PERIOD_EXPIREDA billing grace period ended without a payment.NormalOffEXPIREDA subscription expired.NormalOffREFUNDApple refunded a purchase.HighOnREFUND_REVERSEDApple reversed a refund, so the purchase stands again.NormalOffCONSUMPTION_REQUESTA customer asked Apple for a refund, and Apple wants consumption data.NormalOffDID_CHANGE_RENEWAL_STATUSAUTO_RENEW_DISABLEDAuto-renew went off. The subscription runs to the end of the period.NormalOffDID_CHANGE_RENEWAL_STATUSAUTO_RENEW_ENABLEDAuto-renew went back on.QuietOffDID_CHANGE_RENEWAL_PREFUPGRADEA customer moved to a more expensive plan, in effect immediately.QuietOffDID_CHANGE_RENEWAL_PREFDOWNGRADEA customer moved to a cheaper plan at the next renewal.NormalOffPRICE_INCREASEPENDINGA price increase is waiting for the customer to agree.NormalOffPRICE_INCREASEACCEPTEDA customer agreed to a price increase.QuietOffREVOKEA Family Sharing purchase stopped being shared.QuietOff
Anything else Apple sends is recorded without a notification. The dashboard lists the types your connector received without a rule, so you can add rules for what your app actually sends.
You write the message.
A rule sets the title, body and sound. Apple's formats are translated first: a price reads 9.99 USD instead of 9990, and a refund reason reads as words. Text inside double brackets disappears when Apple didn't send the value, so a free trial never shows 0 USD.
{ "eventType": "REFUND", "priority": 1, "titleTemplate": "Refunded[[ ({{familySharing}})]][[ ({{sandbox}})]]", "bodyTemplate": "[[{{transaction.price}} ]]refunded[[ for {{transaction.productId}}]].", "enabled": true}A sound for each event
On your wrist
Nothing to run
Sandbox kept apart
Questions
- How do I receive App Store Server Notifications without a server?
- Paste an Acciti ingest URL into App Store Connect as your production server URL. Acciti verifies each signed notification and sends it to your phone. You don't write or deploy a webhook handler.
- How are App Store Server Notifications verified?
- Each notification is a JWS whose certificate chain ends at Apple's root CA, so there's no shared secret to rotate. The first notification that verifies records your bundle ID, and every later one must match it.
- Which App Store notifications alert me?
- Failed renewals, refunds and Apple's test notification are on from the start. New subscribers, renewals, expiries, plan changes, price increases, offers and refund requests are available but off, because they arrive as often as people buy. Types without a rule are recorded, and the dashboard lists them so you can write one.
- How do I tell a sandbox notification from a real sale?
- Sandbox notifications carry the environment in the title, so a test purchase reads "Renewed (Sandbox)" and a real one reads "Renewed". Point App Store Connect's sandbox URL at the same connector, or at a second one with its own sender and sound.
- Why do several renewals arrive at once?
- Apple sends a notification for every family member who shares a subscription. Those read "Renewed (Family Sharing)" and name no price, so the one with a price is the sale.
- My server already receives these notifications. Can it keep them?
- Yes. App Store Connect takes one production URL, so point it at Acciti and turn on forwarding to your server's URL. Every notification that verifies is posted on unchanged and signed, whether or not it alerts you.
- Does this replace App Store Connect?
- No. Acciti tells you the moment something happens. Revenue reports, trends and payouts stay in App Store Connect.
Stripe, GitHub, Sentry, Grafana and Better Stack connect the same way. See every connector.
The next refund rings your phone.
Create an App Store connector and paste its URL into App Store Connect. Apple's next notification lands on your phone.