Integration
Apple App Store + Bastle
What syncs from Apple App Store, what it makes possible, and how to connect it.
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?
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.
- 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.
- 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.
- 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.
- 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.
- Google PlayBetaThe Google Play integration tracks Play Billing subscription revenue through the Android Publisher API, authenticated with a service account, and receives Real-time Developer Notifications delivered as Cloud Pub/Sub push messages. Subscription products and base plans become Bastle plans, and regional prices are converted to integer cents rather than parsed as decimals.
- StripeBetaThe Stripe integration turns a Stripe account into Bastle's subscription data model: prices become plans, subscriptions carry their add-ons and discounts, and charges carry the Stripe fee from the balance transaction. Ongoing changes arrive over a signature-verified webhook endpoint within seconds of happening in Stripe, so MRR, churn and failed-payment state track the billing account rather than a nightly export.
- PaddleBetaThe Paddle integration reads Paddle Billing — the current platform, not Paddle Classic — importing prices as plans plus customers, subscriptions, transactions and adjustments. Because Paddle is a merchant of record, its own reported fee totals are treated as authoritative, so net revenue reflects what Paddle actually remitted rather than an estimate.
- Universal APILiveBastle's write API accepts subscription data from any billing system, including one you built yourself. A single batched import endpoint upserts plans, customers, subscriptions, charges and refunds against your own external ids, and a read API returns the same metrics the dashboard renders. It is available today, self-serve, with scoped API keys.
Apple App Store and Bastle: common questions
How does Bastle handle Apple's commission?
Can I see subscribers who signed up years ago?
Does this work with a sandbox environment?
Can I combine App Store revenue with web billing?
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.