Skip to content
DocsApp Store and Instagram

Sources

Connect App Store Connect and Instagram

The two App Store Connect keys, the store funnel by source and campaign, and how Instagram posts are joined to signups and MRR.

These two sources cover what happens before someone reaches your app or your site. App Store Connect shows how people find your app in the store: impressions, product page views and downloads, by source and campaign. Instagram shows how each post performed, next to the signups and MRR its tagged link brought. For the overviews, see App Store Connect and Instagram.

Only workspace owners can connect or change these sources.

App Store Connect

Joinsight reads Apple's Analytics Reports API. Apple doesn't serve these reports on demand: an app first needs a report request, and Apple then generates reports for it every day. Downloading the reports needs a key with the Sales and Reports, Finance or Admin role, and that is the key Joinsight stores. Creating a report request needs the Admin role. When your app has no requests yet, Joinsight asks for an Admin key for that one call and doesn't store it.

Step 1: connect a Sales and Reports key

  1. In App Store Connect, open Users and Access, then Integrations, and generate a team API key with the Sales and Reports role. Finance works too.
  2. Download the .p8 file. Apple lets you download it only once.
  3. On the App Store Connect card in Joinsight, enter the Key ID, the Issuer ID (the UUID shown above the key list in App Store Connect) and the Private key (.p8). You can choose the file or paste its contents, including the BEGIN and END lines.
  4. Select Connect key.

Joinsight checks the key with Apple and lists the apps it can see. The private key is stored encrypted and never shown again.

Step 2: pick the app

Choose the app in the App list and select Use this app. If the app already has report requests, Joinsight reuses them, checks that the key can read their reports, and the first reports arrive within 1 to 2 days. If it has none, the card asks for an Admin key under Request the reports with an Admin key, once, and shows Setup not finished until the reports are requested.

Step 3: request the reports, if the app has none

  1. Generate a second team API key, with the Admin role.
  2. Enter it under Request the reports with an Admin key, once and select Request reports.
  3. Revoke the Admin key in App Store Connect right after.

Joinsight uses the Admin key for this one call and doesn't store it. It creates two report requests:

  • An ongoing request, which Apple fills with new reports every day.
  • A one-time snapshot, for history from before you connected. This one is best effort: Apple sometimes fails it or returns it empty, and the ongoing data doesn't depend on it.

The key from step 1 stays in place and downloads the reports.

If you connected an Admin key in step 1

An Admin key entered in step 1 can create the requests itself, so step 3 is skipped. It is then the stored key, and the card shows an Admin key badge and a Swap the Admin key for a Sales key notice. Generate a key with the Sales and Reports role (Finance also works), enter it in the form under that notice, and select Replace key. Joinsight checks that the new key can read the app's reports before switching. Then revoke the Admin key in App Store Connect.

Joinsight can only tell a key is Admin when it creates a request, so if the app already had requests, the card can't flag an Admin key. Use a Sales and Reports key in step 1 to stay on the safe side.

What is read

Joinsight downloads two of Apple's daily reports, preferring the detailed variants because only they break numbers down by campaign:

ReportWhat Joinsight takes from it
App Store Discovery and EngagementImpressions and product page views
App DownloadsFirst-time downloads and redownloads. Updates and restores are left out

Both are stored per day, by source type and by campaign. Source types are Apple's categories for where a visit came from, such as App Store search, browse, web referrer and app referrer. App Store Connect source types explains what each one means.

Each daily report is downloaded once, and its days replace what was stored for them, so downloading the same report twice gives the same numbers.

Delay and thresholds

App Store data arrives 1 to 2 days late, and the first reports appear 1 to 2 days after you request them. Until then the card's Latest day says "No data yet". Joinsight checks for new reports every 6 hours.

Apple applies privacy thresholds, so small numbers can be missing from the reports. Campaigns are the most visible case: Apple only shows a campaign in the detailed reports after 24 hours and at least 5 first-time downloads, counting downloads within 24 hours of the click. A campaign link with a handful of downloads may not appear at all.

App Store campaign links (pt and ct parameters on your App Store URL) tell Apple which page or post sent a visitor. To build them in Joinsight:

  1. In App Store Connect, create one campaign link under Analytics, Acquisition, Campaigns.
  2. Paste it, or just its pt number, into Provider token on the App Store Connect card and select Save token.
  3. On the Content and channels screen, open the Link builder, choose App Store campaign link, and give each page or post its own Campaign token, up to 40 characters.

Downloads then show per campaign in the funnel. App Store campaign links covers naming and the limits Apple puts on them, and Channels and campaign links covers tagging in general.

The store funnel

The App Store view on the Content and channels screen puts the store and RevenueCat side by side for the selected period:

  • Impressions
  • Product page views, with the share of impressions
  • Downloads, with the share of page views
  • Trials started, from RevenueCat
  • New mobile MRR, from RevenueCat, with current mobile MRR

Below that, a table breaks impressions, page views and downloads down by Source or by Campaign, with conversion from page view to download.

Apple's data is aggregate: it counts downloads, it doesn't say who downloaded. So downloads can't be tied to individual customers, and the trials and MRR figures cover the whole app for the period, not each row. Reading them together still answers useful questions, such as whether a week with more search downloads also brought more trials. Connect RevenueCat to fill in the last two figures.

When Apple stops the request

Apple stops a report request if its reports go undownloaded for a while. If that happens, the card's Reports line reads "Stopped by Apple", syncs fail with a message saying so, and a data-health alert fires.

To restart, enter an Admin key under Apple stopped the report request and select Re-request reports. That key is used for this one request and isn't stored: your current key stays in place. You can revoke the Admin key right after.

Disconnecting App Store Connect

Select Disconnect at the bottom of the card and confirm with Disconnect App Store Connect. Joinsight deletes the stored key at once. A cleanup job that runs once a day then deletes the imported store data, so it's usually gone within a day and always within 30 days. If you connect again before the cleanup has run, possibly for another app, the old data is deleted before the first import starts.

Joinsight doesn't delete anything in App Store Connect. Revoke the key there yourself. The report requests stay on Apple's side; Apple stops them once nobody downloads the reports.

Instagram

Instagram insights are not generally available yet. They are in private beta while Meta reviews Joinsight's app, and are switched on per workspace. On the Connections screen the card shows Private beta, and without access it explains that you can't connect yet. The public integration page lists Instagram as coming soon.

You don't need the connection to attribute Instagram traffic. Tagged links from the link builder work today, for every workspace: visits, signups and MRR are attributed through the link's UTM tags. What the connection adds is each post's own metrics next to those numbers.

Connect an Instagram account

Select Connect Instagram on the Instagram card. This uses Instagram Login and asks for two permissions: basic profile and media access, and access to insights. Joinsight never posts.

Only professional accounts can connect, meaning Business or Creator accounts. A personal account is refused with a note to switch; switching is free in the Instagram app. Insights for media posted before the account became professional may be unavailable, and those posts show without numbers.

What is read

Joinsight syncs every 3 hours. The first sync reads the last 90 days of posts. After that, each sync re-reads the last 28 days, so a post's numbers keep growing as people find it.

MediaMetrics
PostsViews, reach, likes, comments, saves, shares, profile visits
ReelsViews, reach, likes, comments, saves, shares
StoriesViews, reach, shares, profile visits

Story insights disappear after 24 hours, which is why the interval is short: stories are read every 3 hours while they are up. Metrics Instagram doesn't offer for a given item are left out rather than shown as zero.

Each new post and reel is also added as an annotation on your charts, so a jump in signups sits next to the post that may explain it. Stories are too frequent to annotate.

Keeping the token alive

Instagram access lasts 60 days. Joinsight refreshes it once a day during a sync, so as long as syncs run, it doesn't expire. The card shows Access token with its expiry date. If it gets within 7 days of expiring, the card shows Expires soon: reconnect and a data-health alert fires. Select Reconnect to sign in again.

How a post is joined to revenue

The Instagram app often strips the referrer, and Instagram never says who tapped a link. So the join runs through the link itself. In the link builder on the Content and channels screen, choose Website link (UTM) and one of the Instagram placements:

Placementutm_sourceutm_mediumutm_campaignutm_content
Instagram bioinstagramsocialbiooptional
Instagram storyinstagramsocialstoryoptional
Instagram postinstagramsocialpostthe post's media ID

For a post link, pick the post from the Post list once Instagram is connected; without the connection, the field is Post media ID. Publish the post first, then put its link in your bio or a story while the post is fresh.

When a visitor arrives through that link, the snippet records the post's media ID as part of the first touch. If that visitor later signs up and pays, the customer's first touch carries the same ID, and the Instagram view on the Content and channels screen shows the post with its views and reach next to the sessions, signups, paying customers and new MRR it brought. Those numbers are measured, not modeled.

Sessions come from the snippet, which only records visitors who consented to tracking. Visitors who block scripts, or open the link on one device and sign up on another, aren't credited to the post. Install the tracking snippet covers consent, and Instagram link in bio tracking covers the tagging approach in more depth.

Disconnecting Instagram

Select Disconnect at the bottom of the card and confirm with Disconnect Instagram. Joinsight deletes the stored token at once. The cleanup job that runs once a day then deletes the synced posts, their insights and the post annotations on your charts, which quote the captions, so they're usually gone within a day and always within 30 days. Reconnecting with another Instagram account replaces the previous account's posts and annotations, and reconnecting before the cleanup has run starts from a clean import.

Disconnecting doesn't remove Joinsight from your Instagram account's connected apps; do that in Instagram's settings if you want to. Tagged links keep working after you disconnect, because they don't depend on the connection.

Sync status

Both cards use the same statuses as every other source: Waiting to sync, Setup not finished, Syncing, Synced with a time, Sync failing and Access revoked. Setup not finished appears on the App Store Connect card until an app is picked and its reports are requested. Connect Stripe and RevenueCat explains what each one means and which errors appear on the card. A key that can no longer read reports, or an Instagram token that was revoked or expired, moves the connection to Access revoked until you replace the key or reconnect.