Configuring Apple App Store as a Source
In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Apple App Store option from the list of connectors. Click Next and you’ll be prompted to add your access.1. Add account access
Apple authenticates every request with a key you generate in App Store Connect. Create it before starting the setup:1
Open the App Store Connect API page
In App Store Connect, go to Users and Access, select the Integrations tab, and choose App Store Connect API in the left column. Make sure the Team Keys tab is selected — individual keys cannot read sales and financial reports.
2
Generate a key with the Admin role
Click Generate API Key, give it a name, and select the Admin role under Access. Apple only lets a key with the Admin role turn on analytics reports, which is what makes the report tables fill in automatically.
3
Download the private key
Click Download API Key to save the
.p8 file. Apple allows this download only once — if the file is lost, you have to generate a new key.- Key ID: The identifier shown in the Active column next to your key on the Integrations page.
- Issuer ID: Shown near the top of the same Integrations page. It is the same for every team key of your account.
-
Private key (.p8): The full contents of the
.p8file you downloaded, including the BEGIN and END lines. Open the file in a text editor and paste everything. - Vendor Number: Found in App Store Connect under Payments and Financial Reports. It is only needed for the Sales Reports and Finance Reports streams; every App Store analytics stream works without it.
- Start Date: The earliest date from which records will be synced.
- Load historical analytics data: (Default: enabled) Asks Apple once for a snapshot of all available analytics history. Leave it on for a new source — without it, analytics reports only cover the period after the source was created.
2. Select streams
Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones. Most analytics reports come in two versions, Standard and Detailed. They describe the same events: Detailed adds attribution columns (source info, campaign, page title) and, in exchange, applies stricter privacy thresholds that can omit low-volume rows. Pick one per report — selecting both puts two overlapping aggregations of the same events in your catalog, and any straightforward SUM across them counts the same activity twice.Tip: The stream can be found more easily by typing its name.Select the streams and click Next.
3. Configure data streams
Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.- Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
- Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
- Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
- Sync Type: you can choose between INCREMENTAL and FULL_TABLE.
- Incremental: every time the extraction happens, we’ll get only the new data - which is good if, for example, you want to keep every record ever fetched.
- Full table: every time the extraction happens, we’ll get the current state of the data - which is good if, for example, you don’t want to have deleted data in your catalog.
4. Configure data source
Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. Apple publishes analytics data once a day, so a daily trigger matches how often new data actually exists. Optionally, you can define some additional settings:- Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
- Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
5. Check your new source
You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.How Apple limits the data
These are Apple’s own rules, not Nekt’s, and they shape what you can expect to see:- Analytics history starts on January 1, 2024. Subscription State and Subscription Event reports start on January 1, 2025.
- Report data expires after 35 days. Apple deletes a report instance 35 days after producing it. Keeping your source on a daily trigger means the data is always collected well inside that window.
- Daily sales reports are kept for one year. The source does not look further back than that.
- A day is complete two to five days later, depending on the report. Apple restates a day when late events arrive, and the source re-reads the most recent day on every run so those corrections update the existing rows instead of duplicating them.
- Privacy thresholds apply. Usage reports only count users who opted in to share data with Apple and developers, rows representing fewer than five users or devices are omitted, and a small amount of statistical noise is added. Low-volume apps and brand-new features may show no data at all.
- Rate limit: Apple allows roughly 3,500 requests per hour per API key. The connector tracks the remaining budget and slows down on its own when it runs low.
Streams and Fields
Available streams
The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description.Analytics reports measure estimated proceeds in USD. Finance Reports are the only stream carrying settled amounts in your payout currency, which is why the two do not match exactly.
Fields by stream
Below you’ll find the main data streams from the Apple App Store and their corresponding fields:Apps
Apps
Every app registered in your App Store Connect account.Key Fields:
id- App Store Connect resource ID of the app, used to link every other streamname- Name of the app as it appears on the App Storebundle_id- Bundle ID of the app, matching the one used in Xcodesku- Unique ID for the app that is not visible on the App Storeprimary_locale- Primary locale, used when localized information is unavailable in a territorycontent_rights_declaration- Whether the app contains third-party contentis_or_ever_was_made_for_kids- Whether the app is, or has ever been, in the Made for Kids category
Customer Reviews
Customer Reviews
Ratings and written reviews customers left on the App Store.Key Fields:
id- Unique identifier of the reviewapp_id- Resource ID of the reviewed appapp_name- Name of the reviewed apprating- Star rating the customer gave, 1 to 5title- Title the customer wrote for the reviewbody- Review text the customer wrotereviewer_nickname- Nickname the customer usedterritory- App Store territory the review was written increated_date- When the review was created, used as the incremental replication key
App Store Downloads
App Store Downloads
How often your app is downloaded from the App Store.Key Fields:
date- Date the downloads occurredapp_name,app_apple_identifier- The app the row refers todownload_type- First-time download, redownload, manual update, auto-update or restoreapp_version- App version being downloadeddevice,platform_version- Device and OS versionsource_type- Where the user discovered the app (App Store search, browse, app referrer, web referrer)page_type- Product page, in-app event page, store sheet or no pageterritory- App Store country or regioncounts- Total number of downloadssource_info,campaign,page_title- Attribution detail, Detailed stream only
App Store Purchases
App Store Purchases
Paid app and in-app purchase revenue on the App Store.Key Fields:
date- Date the purchase occurredpurchase_type- Type of purchase madecontent_name,content_apple_identifier- What was purchasedpayment_method- Payment type used to charge the customerpurchases- Count of purchases; negative values are refundsproceeds_in_usd- Estimated proceeds: customer price minus taxes and Apple’s commissionsales_in_usd- Estimated salespaying_users- Unique paying users; not summable across rowsapp_download_date- When the app was downloaded, if within the previous 30 daysterritory,device,platform_version- Where and on what the purchase happened
App Store Discovery and Engagement
App Store Discovery and Engagement
How users interact with your app on the App Store itself.Key Fields:
date- Date the event occurredevent- Type of event that occurredengagement_type- User action, if any, on the impression or pagepage_type- Page type associated with the eventsource_type- Where the user discovered the appcounts- Total number of eventsunique_counts- Total number of unique users who performed the event
App Store Installations and Deletions
App Store Installations and Deletions
Installs and deletions, among users who opted in to share usage data.Key Fields:
date- Date the event occurredevent- Type of usage event (installation or deletion)download_type- Type of download that preceded the eventapp_version,device,platform_version- What the event happened oncounts- Total count of eventsunique_devices- Number of unique devices that generated the events
App Sessions
App Sessions
How often people open your app and how long they spend in it.Key Fields:
date- Date the sessions occurredapp_version,device,platform_version- What the sessions ran onsessions- Number of sessionstotal_session_duration- Total duration of all sessions, in secondsunique_devices- Unique devices contributing to the sessionsterritory- App Store country or region
App Crashes
App Crashes
Crash counts by app version and device type.Key Fields:
date- Date the crashes occurredapp_version- App version associated with the crashdevice,platform_version- Device and OS versioncrashes- Total number of crashesunique_devices- Number of unique devices on which the app crashed
Subscription State
Subscription State
Daily snapshot of your subscriptions.Key Fields:
date- Date the snapshot was generated forstate_metric,state_metric_grouping- The subscription state being countedsubscription_name,subscription_identifier- The subscriptionsubscription_duration,billing_frequency,billing_period- Terms of the subscriptionsubscription_group,subscription_group_identifier- Group the subscription belongs tooffer_type,offer_name,offer_pricing,offer_duration- Redeemed offerfamily_sharing- Whether the subscription is shared with an iCloud familycancellation_reason- Why the subscription was canceledcounts- Number of subscriptions
Subscription Events
Subscription Events
Changes across the subscription lifecycle.Key Fields:
event_date- Date the event occurredevent_sub_type,event_grouping- The lifecycle event being countedsubscription_name,subscription_identifier- The subscriptionplan_change_type- Upgrade, crossgrade or downgrade when users switch plansprevious_subscription_name,previous_subscription_identifier- The plan switched away frompaid_service_days_recovered- Paid days recovered through the billing grace periodcancellation_reason- Why the subscription was canceledcounts- Number of events
App Store Pre-Orders
App Store Pre-Orders
Pre-orders placed and canceled for your app.Key Fields:
date- Date the pre-order activity occurredpre_order_start_date- Date the app became available for pre-orderpre_order_end_date- Last date the app is available for pre-orderpre_orders_placed- Total number of pre-orders placedpre_orders_canceled- Total number of pre-orders canceledterritory,device,source_type- Where the pre-order came from
Sales Reports
Sales Reports
The daily Summary Sales report from Sales and Trends. Requires the Vendor Number.Key Fields:
report_date- Day the report covers, used as the incremental replication keysku,title,version- The product soldproduct_type_identifier- Type of transaction, such as an initial download or an updateunits- Aggregated units; negative values are refundsdeveloper_proceeds_per_unit- Amount received per unitcustomer_price- Price per unit billed to the customercustomer_currency,currency_of_proceeds- Currencies involvedcountry_code- App Store country or region of the saledevice,supported_platforms- Where the purchase happenedsubscription,period,preserved_pricing,proceeds_reason- Subscription detail
Finance Reports
Finance Reports
The consolidated financial report per fiscal month, covering every region. Requires the Vendor Number.Key Fields:
report_date- Fiscal month the report covers, as YYYY-MMstart_date,end_date- Period boundaries on Apple’s fiscal calendarvendor_identifier- SKU of the app, or product ID of the in-app purchasequantity- Aggregated units soldpartner_share- Proceeds received per unitextended_partner_share- Quantity multiplied by the partner share: the amount earnedpartner_share_currency- Currency of the amounts earnedsale_or_return- S for a sale, R for a returncountry_of_sale- Country of the salecustomer_price,customer_currency- What the customer paid
Every stream also carries an
additional_fields column. It is normally empty and holds any column Apple adds to a report before the connector models it, so new data is never silently dropped.