How Adapty syncs data with the stores
Adapty exchanges product data with the App Store and Google Play, but the exchange is neither constant nor complete. Most values move only when you act — when you push a product to the stores, or upload new prices. Some never move at all, so Adapty and the store can show different prices for the same product.
What Adapty reads from the stores
Adapty reads product lists, base plans, prices, and transactions from the store. To change a product or a price, change it in the store console. To see the country-specific prices it holds, download the price CSV from Edit product.
| What Adapty reads | How it arrives (App Store) | How it arrives (Google Play) |
|---|---|---|
| Product list and review status | Through the App Store Connect API key | Through the service account |
| Base plans | Not applicable | Part of the subscription product |
| Country-specific prices | When you link or edit a store product | When you link or edit a store product |
| Transactions, renewals, and refunds | Through App Store server notifications | Through real-time developer notifications |
| The price the customer paid | With each transaction | With each transaction |
What Adapty writes to the stores
Products, prices, and introductory trials start in Adapty and reach the store when you take an action, never on a schedule.
| What Adapty writes | When it reaches the App Store | When it reaches Google Play |
|---|---|---|
| New products | When you push a product to the stores | When you push a product to the stores |
| Country-specific prices | When you upload the price CSV | When you upload the price CSV |
| Introductory free trial | When you push a new product | Never — create it in Google Play Console instead |
Adapty compares your CSV against the current store prices and updates only the prices that differ, so you can upload the whole file safely. Existing subscribers keep the price they signed up at unless you select Apply to existing subscribers.
What you set in Adapty only
The store never changes any of these settings.
| Item | Why it stays in Adapty |
|---|---|
| The price of a store product you connected | A placeholder, fixed at creation. It helps you tell products apart, but it never reaches the store. Analytics, integrations, and the SDK all use the store’s real prices. |
| Access levels | Adapty grants access to your paid content. The stores have no equivalent. |
| Promotional and win-back offer IDs | Adapty needs the ID to sign the purchase. You create the offer itself in the store console. |
What happens on the device
The price a customer sees on a paywall comes from StoreKit or Google Play Billing when the paywall opens, not from Adapty. A price you change in the store console reaches your customers as soon as the store publishes it. You don’t need an app release, and you don’t need to change anything in Adapty.
In the other direction, the Adapty SDK sends each purchase to Adapty with the price, currency, and country attached. Adapty uses those values to record revenue in the customer’s own currency.
Stripe, Paddle, and custom stores
The Stripe and Paddle integrations carry transactions, not your product catalog. Purchases reach Adapty through the provider’s webhook, or, for custom stores, from your own backend. You add each product and price ID by hand. An ID missing in Adapty matches nothing, so those transactions and their revenue never appear. For Stripe and Paddle, the same happens when the product exists but has no Subscription duration. Nothing flags either case, so add an ID and a duration for every product you sell.
Product and price discrepancies
Some differences between Adapty and the store console are by design and change nothing about what your customers pay. Others mean revenue goes unrecorded.
| What you see | Likely causes | What to do |
|---|---|---|
| The price in Adapty differs from the store | The Products screen shows the price you entered when you created the product. If you pushed the product to the stores, Adapty used it to set the starting price there. You can’t change it afterwards, so once the stores own the price the two drift apart. The prices customers pay now are country-specific prices. | Nothing. Your customers are charged the store’s price, and revenue reports use the amount actually paid. To change what they pay, edit the price in each store’s console, or upload a price CSV to change both stores at once. |
| Your product is missing from the product dropdown | Three possible reasons: Store credentials that stopped working return an empty list. A product created in the last 10 minutes may not have reached Adapty’s cached copy of the App Store list. The selected Subscription duration filters the list: Lifetime, Non-Subscriptions, and Consumables show one-time products, and every other value shows subscriptions. | Set Subscription duration to match the product’s type in the store. If you created the product in the last few minutes, retry shortly. Otherwise verify your store credentials. |
| An introductory offer doesn’t appear in Adapty | Adapty creates an introductory offer only when you push a new product to the store, and lists only the offers it created. An offer you set up in the store console yourself never appears in the Edit product window. | Nothing. Introductory offers apply automatically when a customer is eligible, so they don’t need to be added to Adapty. |
| A discount didn’t apply at purchase | The customer may not have qualified — the decision is made by the store, not Adapty. Alternatively, an App Store promotional offer was not applied because Adapty couldn’t sign it with your In-App Purchase Key. | Confirm the key is uploaded and valid, then review the offer’s conditions in the store. |
| Stripe transactions stopped appearing after a price change | Changing a price in Stripe creates a new price_id, and Adapty matches events on the exact product_id + price_id pair. Events for the new price match nothing, while Stripe still reports the webhook as delivered. | Add the new price_id to the product in Adapty — revenue goes unrecorded until you do. See Stripe. |
| A customer bought a product but got no access level | The store product ID they bought isn’t linked to a product in Adapty. Adapty records the purchase against a product row it creates automatically, and that row carries no access level. | Create the product in Adapty with the exact store product ID, and assign it an access level. |
| Updates no longer arrive | One of your store credentials has stopped working. Each one powers a different part of the exchange. | Find the part that stopped and replace only its credential — see If updates stop arriving. |
If updates stop arriving
Adapty doesn’t flag credentials that stopped working. Each credential is responsible for one part of the exchange, so the symptom tells you which one to replace.
| What stopped | Credential to replace |
|---|---|
| The product list, review statuses, or pushing products and prices to the store | App Store: the App Store Connect API key. Google Play: the service account key file. |
| New transactions, renewals, and refunds | App Store: server notifications. Google Play: real-time developer notifications. |
| Promotional offers at purchase | App Store: the In-App Purchase Key. |
| Purchase validation for every customer | App Store: the shared secret. Google Play: the service account key file. |
Replacing a credential in the store console doesn’t update it in Adapty. Upload the new one in App settings.