App Store Connect tells you what each app sold. It doesn't know what the app costs to run, so it can't tell you whether the app made money.
MarginDeck 1.9 brings each app's monthly net proceeds into MarginDeck, next to the costs you've recorded for it. There are two ways to get them in. You can connect an API key, or you can import the monthly report file. Both save the same records, so doing both never counts a month twice.
What MarginDeck reads
Both ways read Apple's Summary Sales Report, the report you can download from Sales and Trends.
- Net proceeds: for each row, Developer Proceeds × Units. Refunds have negative units, so they lower the month.
- One total per app: in-app purchases and subscriptions are added to the app they belong to.
- Paid sales only: free downloads and updates are left out.
- Calendar months in Pacific time, because Apple dates its reports that way.
- The currency of each storefront: a sale in Australia is reported in AUD and a sale in the UK in GBP. MarginDeck keeps each currency and converts it for totals using the European Central Bank's monthly reference rates.
The ECB doesn't publish rates for some App Store currencies, including TWD, SAR, AED and VND. Revenue in those currencies is saved with its original amount and marked as not counted. It is left out of totals rather than converted at a guessed rate.
Sales reports show what sold. What Apple pays you follows its financial reports, which use Apple's fiscal months, final adjustments and the exchange rate on the day of payment. So a month in MarginDeck can differ a little from your payment (Apple explains the differences).
Option 1: connect App Store Connect
- In App Store Connect, open Users and Access › Integrations › Team Keys. If this is your first key, the Account Holder has to request API access first.
- Generate a key named MarginDeck with Sales and Reports access. That is all it needs. It doesn't need Finance or Admin access.
- Download the
.p8file and copy the Issuer ID and Key ID. Apple lets you download the file only once. - In Payments and Financial Reports, copy the number after "Vendor #" at the top left.
- In MarginDeck, open Settings › Revenue Sources › App Store Connect and choose Connect App Store Connect. Enter the IDs and the vendor number, choose the
.p8file, then choose Check and Save.
MarginDeck tests the key and keeps it in this Mac's Keychain. Then it runs the first sync.
| Sync | What it reads |
|---|---|
| First sync | The past 12 months. Apple keeps sales reports for one year. |
| Every sync after that | The last 3 months, so Apple's later corrections are picked up |
The current month is the total of Apple's daily reports up to yesterday. The previous month also comes from daily reports until the 8th of the month. From then on, MarginDeck reads Apple's monthly report for it.
To sync, choose Sync Revenue on the Revenue page or in Settings. The dashboard also syncs on its own when you open it, at most once every 6 hours. The first time an app appears, MarginDeck asks which product it belongs to. After that, a sync saves without asking and tells you what changed, such as a new month or an updated one.
Option 2: import the monthly sales report
You don't need an API key for this. It is useful if you'd rather not create one.
- In App Store Connect, open Trends and choose Sales and Trends Reports in the sidebar. Under Summary Sales Report, choose your vendor, click the date and switch it to a month, then choose Download. The file is named like
S_M_85412345_20261031.txt.gz. A name starting withS_D_means you downloaded a daily report. - Drag the file onto MarginDeck's Revenue page, or choose + › Import Report File… and pick it. The
.txt.gzfile and the unpacked.txtboth work, and you can import several files at once. - Check the preview. Each month is marked New, Replaces (showing the amount saved before) or Unchanged. The first time, choose a product for each app. Then choose Save Import.
Keep the file's original name. MarginDeck reads the vendor number in it (S_M_<vendor>_…) to know which account the report belongs to. Only monthly sales reports are accepted. A daily or weekly report gets a message asking for the monthly one. The download under Payments and Financial Reports is a different report, which MarginDeck can't read.
Importing the same month again, or importing a month you've already synced, replaces it rather than adding to it.
Have revenue on Gumroad, Paddle, Lemon Squeezy or another platform? Hand the report to Claude or Codex and confirm it in MarginDeck as one batch.
If you also use RevenueCat
RevenueCat reports one total per project per month, and a project can include App Store, Google Play and Stripe revenue. That total can't be split by app. So for each month MarginDeck counts either RevenueCat's total or the App Store report, never both.
To know which apps a RevenueCat project includes, MarginDeck compares bundle IDs. It needs two things for that:
- RevenueCat connected with 1.9's permissions. If Settings says Reconnect next to RevenueCat, reconnect once.
- App Store Connect connected. A SKU isn't always the bundle ID, and only App Store Connect can tell MarginDeck an app's bundle ID. If you only import report files, MarginDeck asks once per app: "Is this app's revenue already in RevenueCat?"
For an app that is in a RevenueCat project, each month works like this:
| RevenueCat that month | The App Store month |
|---|---|
| Has revenue | Shown in grey: "In RevenueCat, not counted" |
| Has no record | Counted |
| Shows 0 | Counted. A project that is set up but not used reports 0 every month. |
To change it, open the app's product on the Revenue page and choose ⋯ next to any month. Under RevenueCat, choose Decide Automatically, Not in RevenueCat, or the RevenueCat project that includes the app. Your choice applies to every month of that app.
From RevenueCat revenue to profit per app covers the RevenueCat side.
What stays on your Mac
The key stays in your Mac's Keychain and is never included in backups. Requests go straight from your Mac to Apple. For each app and month, MarginDeck keeps only the net amount in each currency, along with the app's name, SKU, bundle ID and your vendor number. Disconnecting removes the key, and the months you've already saved stay.
FAQ
What access does the key need?
Sales and Reports. It must be a team key. Individual keys can't read sales reports.
Why doesn't a month match what Apple paid me?
Sales reports and payments use different months and exchange rates (see above). Over several months, the two should come out close.
Why does a row say "No TWD exchange rate, not counted"?
The ECB doesn't publish a rate for that currency, so MarginDeck can't convert it to your display currency. The original amount stays visible, but totals and profit leave it out.
Can I get months older than a year?
Not from sales reports. Apple keeps daily, weekly and monthly reports for one year (report availability). Add older revenue by hand if you need it.
Is the API key required to import files?
No. Report files work on their own. Connect App Store Connect if you want MarginDeck to keep the last few months up to date, or to match apps with RevenueCat automatically.