Skip to content

Integration

Apple App Store + Bastle

What syncs from Apple App Store, what it makes possible, and how to connect it.

Beta

This connector works and can be connected today, with edge cases still being closed. Check the first month against the source before you rely on it.

What does the Apple App Store integration do?

The Apple App Store integration tracks auto-renewable subscription revenue for iOS apps through the App Store Server API, with real-time updates from App Store Server Notifications V2. Apple's commission is applied as the fee on each charge, so net revenue reflects the developer's actual proceeds rather than the storefront price.

What syncs

Bastle reads the following from Apple App Store and normalises it into the same entities every other source produces. Ingestion is read-only: nothing is created, changed or cancelled upstream.

  • Auto-renewable subscription products → plans.
  • Subscribers and their subscription state, derived from Apple's signed transaction and renewal payloads.
  • Transactions → charges, with Apple's commission recorded as the fee. The rate is configurable, so a Small Business Program membership is reflected rather than assumed.
  • Refunds, including revocations.
  • Lifecycle notifications: renewal, cancellation, billing retry, grace period and price increase consent.
  • Cadence: notification-driven, so seconds behind Apple. Historical import run manually today.

Once connected

What Apple App Store data unlocks

Connecting a source is not the point; what you can answer afterwards is. These are the questions this data makes answerable.

Subscription metrics App Store Connect does not give you

Apple reports proceeds and subscriber counts. Bastle produces MRR, churn, retention curves and cohorts on the same definitions used for web billing.

Commission-aware revenue

Apple's cut is applied as a fee on each charge, at a rate you set. A developer in the Small Business Program pays a different rate, and assuming the standard one would understate net revenue meaningfully.

Web and app revenue in one book

An app that also sells subscriptions on the web can hold both as sources and see a single MRR figure instead of reconciling two dashboards each month.

Billing retry states surfaced

Apple's billing retry and grace period states are the app-store equivalent of a failed payment, and they arrive as events rather than being hidden inside a status field.

Setup

Connecting Apple App Store

The whole flow, start to first chart. No implementation call and no data engineer.

  1. Create an App Store Connect API keyUsers and Access → Keys. Download the private key file once — Apple will not provide it again — and note the issuer id and key id.
  2. Connect the app in Settings → IntegrationsProvide the issuer id, key id, private key and bundle id. Set the environment when you want to point at Apple's sandbox instead of production.
  3. Set the notification URL in App Store ConnectPoint App Store Server Notifications V2 at /api/webhooks/apple-app-store. Bastle verifies Apple's signed payloads against Apple's own certificate chain.
  4. Set your commission rateThe default is the standard rate. Change it if you are in the Small Business Program, otherwise every charge will record a fee larger than Apple actually took.

Why app-store revenue needs its own handling

A storefront subscription is not a card charge. Apple sells to the customer, takes a commission and pays out proceeds, and it exposes state — billing retry, grace period, price increase consent — that has no direct equivalent on the web. Modelling that as a normal charge produces revenue figures that are too high by the commission and churn figures that are wrong in both directions, because a subscriber in billing retry has neither paid nor cancelled.

Verification

Apple signs notifications as JWS, and the connector verifies the certificate chain up to Apple's own root certificate before trusting a payload. Client authentication uses a short-lived signed token minted per request from your private key. Nothing here depends on a third-party JWT library.

The 180-day window

Apple's notification history goes back roughly 180 days. For subscribers older than that, the connector accepts a list of seed transaction ids so their history can be pulled explicitly. Without those seeds, a long-lived subscriber base will look younger than it is — which matters a great deal for retention curves and is exactly the sort of quiet gap that is worth naming.

What "beta" means here

The connector is written and the inbound webhook route verifies signatures and writes normalised rows, so a connected account keeps up with changes as they happen. What is not self-serve yet is the historical backfill: the code that walks your provider's API from the beginning exists in the connector, but the scheduled runner that triggers it is still a stub, so first-time imports are run by hand with us. Expect to email someone once during setup, and expect that to stop being true.

Bastle is free while in beta, connectors included. There is no tier that unlocks a provider.

Related

Other sources

Companies billing through Apple App Store usually have at least one of these in the stack too.

Apple App Store and Bastle: common questions

How does Bastle handle Apple's commission?

It is applied as the fee on each charge, using a rate you configure. The default is the standard rate; set it to the Small Business Program rate if you qualify, otherwise net revenue will be understated by the difference.

Can I see subscribers who signed up years ago?

Only with help. Apple's notification history covers roughly the last 180 days, so older subscribers need seed transaction ids supplied during setup for their history to be pulled. Without them the subscriber base will appear younger than it is.

Does this work with a sandbox environment?

Yes. Setting the source environment to sandbox targets Apple's sandbox App Store Server API, which is the right way to check the mapping before connecting production data.

Can I combine App Store revenue with web billing?

Yes, and it is the main reason to connect it. Sources coexist in a workspace, so App Store subscriptions and web subscriptions roll into one MRR figure computed on one set of definitions.

Connect Apple App Store and see your own history.

Bastle backfills what Apple App Store will serve, then keeps current over webhooks — usually a couple of minutes before the first real chart. Free while in beta, no card required.