Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

AppsFlyer through HeyMetra's MCP server

AppsFlyer × HeyMetra

Installs, cost and revenue by media source and campaign.

Your subscription revenue lives in AppsFlyer. What you paid to get those subscribers does not. Ask about both in the same sentence.

MCP Registry Transport Auth Connector page

https://mcp.heymetra.com/mcp

Ask it things like

Which media sources drove the most installs last month?

What did each campaign cost per install last month?

Which campaigns returned more revenue than they cost?

How did installs and cost move day by day this month?

No dashboard, no export, no query language. You ask in the assistant you already use and the answer comes back with the account it came from.

Connect AppsFlyer

1. Open the Security centre in AppsFlyer

Sign in to AppsFlyer, open the account menu at the top right and choose Security centre, then Manage your AppsFlyer API tokens. You need an account admin to see this screen.

It is an account-level screen, not a per-app one. One token covers every app in the account; which app HeyMetra reads is decided by the app ID in the next step, not by the token.

2. Create a token of type API

The screen offers more than one kind. Choose API. Copy the value in full: it runs past seven hundred characters, so select all of it rather than what fits in the box.

AppsFlyer revoked every token issued before 10 March 2026. An older one that has been sitting in a password manager will fail, and the failure looks like a permission problem rather than an expiry.

3. Find the app ID

On Android it is the package name, exactly as the Play Store shows it, such as com.example.app. On iOS it is the letters id followed by the App Store number, such as id123456789.

One connection is one app. AppsFlyer publishes no way to ask a token which apps it may report on, so a second app is a second connection.

4. Paste both in HeyMetra and save

Choose AppsFlyer on the Connections screen, paste the token and the app ID, and save. HeyMetra checks the pair against AppsFlyer immediately, by asking for one finished day, so a token that cannot actually report fails here rather than later in a conversation.

5. Name your reporting currency

Optional, and worth doing. AppsFlyer publishes no currency anywhere in its reports, so without this every amount comes back with no currency stated rather than with the wrong one assumed.

6. Add HeyMetra to the assistant you use

Claude, ChatGPT, Cursor or Codex. HeyMetra gives you the address and the key to paste, and AppsFlyer answers there.

Then add HeyMetra to your assistant

Add HeyMetra once and it is there in every conversation. The address is the same everywhere:

https://mcp.heymetra.com/mcp

One command

npx add-mcp https://mcp.heymetra.com/mcp

add-mcp is a third-party installer that writes the configuration for Claude Code, Codex, Cursor, Antigravity, VS Code and seventeen other agents. It infers the name from the address, so the server lands as heymetra. Run against this endpoint before it was written here.

Or by hand

Claude — Settings → Customize → Connectors → Add custom connector

Paste the address above into Settings → Customize → Connectors → Add custom connector.

On Team and Enterprise plans only an owner can add it, under Organization settings.

Full walkthrough: heymetra.com/mcp/claude/

ChatGPT — Settings → Security and login → Developer mode, then chatgpt.com/plugins

Paste the address above into Settings → Security and login → Developer mode, then chatgpt.com/plugins.

The address has to end in /mcp here.

Full walkthrough: heymetra.com/mcp/chatgpt/

Grok — grok.com/connectors → New Connector → Custom

Paste the address above into grok.com/connectors → New Connector → Custom.

XAI calls this “bring your own MCP”.

Full walkthrough: heymetra.com/mcp/grok/

Perplexity — Settings → Connectors → Custom connector → Remote

Paste the address above into Settings → Connectors → Custom connector → Remote.

Perplexity documents it as a Pro, Max and Enterprise feature.

Full walkthrough: heymetra.com/mcp/perplexity/

Claude Code — claude mcp add --transport http
claude mcp add --transport http heymetra https://mcp.heymetra.com/mcp

Or a .mcp.json in the project root; /mcp inside a session shows what connected.

Full walkthrough: heymetra.com/mcp/claude-code/

Codex — ~/.codex/config.toml
[mcp_servers.heymetra]
url = "https://mcp.heymetra.com/mcp"

Under an [mcp_servers.] section, then codex mcp login.

Full walkthrough: heymetra.com/mcp/codex/

Cursor — ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
  "mcpServers": {
    "heymetra": { "url": "https://mcp.heymetra.com/mcp" }
  }
}

Leave the static OAuth fields empty; HeyMetra does not need them.

Full walkthrough: heymetra.com/mcp/cursor/

Antigravity — ~/.gemini/config/mcp_config.json, or .agents/mcp_config.json in a project
{
  "mcpServers": {
    "heymetra": { "serverUrl": "https://mcp.heymetra.com/mcp" }
  }
}

The key is serverUrl, not url, unlike every other JSON client.

Full walkthrough: heymetra.com/mcp/antigravity/

What it may and may not touch

Propose a change to this account. Nothing is sent until you approve it, and HeyMetra cannot undo it afterwards.

Permissions are switched on per connection, and one you leave off is a tool your assistant never sees.

Permission What it covers Changes anything?
Full account access Lets your assistant read anything in this account to answer your questions. The figures are the provider's own, not ones HeyMetra has checked. It can also propose changes: none is applied until you approve it, and HeyMetra cannot undo one afterwards — 31 days a report. A longer question is refused rather than answered with a fortnight's figures.; AppsFlyer allows 120 reports a day for the account and 24 per app, and that allowance is SHARED with the export page in the AppsFlyer dashboard. Reports pulled here are reports you cannot download there that day.; Re-engagement and acquisition count different people. A re-engagement figure is not part of an install figure, and the same person can appear in both.; A cohort follows the people who ARRIVED in a period forwards, so it never adds up to that period's own installs or revenue.; Apple's SKAdNetwork figures for iOS are a second count of the same campaigns, not a part of the first: they cover every device rather than only those that allowed tracking, and adding the two counts an install twice.; A SKAdNetwork postback arrives at least a day after the install and version 4 sends two more later still, so the last few days are always still filling in.; Cost is whatever the media source chose to report, and most report nothing. An absent cost is unknown, not zero, so ROI and cost-per-install are withheld rather than computed from a gap.; AppsFlyer does not state a currency anywhere in its reports. Unless one was entered when connecting, the amounts are in the app account's own currency and nothing here can say which.; Revenue is GROSS: what the buyer paid, before the store's cut and tax. The rates AppsFlyer deducts can be read, but no net figure is computed from them, because that needs the country of each purchase and the reports do not carry one.; The rows carry the people. AppsFlyer's raw columns include device identifiers, the advertising id, the IP address and the device model of an app's users.; Ninety days. AppsFlyer deletes raw data past that and no request reaches it; the aggregate reports go further back.; Twenty-four pulls a day per report type, and that allowance is SHARED with the export page in the AppsFlyer dashboard. Raw data read here is raw data you cannot download there that day.; Real time, so the same question asked twice can return different rows.. Yes — every change waits for your approval
What each permission lets an assistant do, in full
  • Ask anything about this account and get the answer from its live data. Reads only, and the figures are the provider's own rather than ones HeyMetra has checked.
  • Propose a change to this account. Nothing is sent until you approve it, and HeyMetra cannot undo it afterwards.

Anything that would change something comes back as a proposal you approve, inside bounds that live in code rather than in a prompt: ±50% on a budget, 5 campaigns per action and 20 changes a rolling day, and an approval that expires after 30 minutes. How that works.

When something goes wrong

Saving fails and says the token was rejected, on a token you have used before.

Why: Tokens issued before 10 March 2026 19:00 UTC were revoked by AppsFlyer, and a revoked token is refused the same way a wrong one is.

Fix: Generate a new token of type API in the Security centre.

Saving fails although AppsFlyer clearly knows the app: the app ID is right and the token is new.

Why: Reporting through the Pull API is part of the AppsFlyer plan rather than a setting on the token. An account without it can list its apps and cannot read a single daily figure.

Fix: Ask your AppsFlyer account manager whether Pull API reporting is on your plan. No token change will substitute for it.

Saving fails saying that app ID is not in the account.

Why: The iOS form is the letters id followed by the App Store number, and a bare number or a bundle identifier is a different string.

Fix: Use com.example.app on Android and id123456789 on iOS. The app's own page in AppsFlyer shows the exact value.

An export you started in the AppsFlyer dashboard is refused for the rest of the day.

Why: The report allowance is shared. AppsFlyer permits 120 reports a day per account and 24 per app, counted across the API and the dashboard's own export page together.

Fix: The allowance resets at 00:00 UTC. HeyMetra reuses a recent answer where it can, so exploring through your assistant uses less of it than the same questions asked by hand. It is still one allowance, not two.

The iOS numbers do not match what the ad network reports.

Why: On iOS, AppsFlyer counts devices that allowed tracking and Apple's SKAdNetwork reports every device with the detail removed. They are two counts of the same campaigns and neither contains the other.

Fix: Ask for the SKAdNetwork figures alongside, and read them as a second measurement. Adding the two counts every install that appears in both twice.

What HeyMetra reads from AppsFlyer

One connection is one app. Ask your assistant about installs, cost, revenue, clicks and impressions for a period, grouped by day, media source, campaign, channel, country or app, up to 31 days at a time. Figures AppsFlyer marks as not reported are labelled as such instead of being summed into a total that looks complete. When you connect, you choose whether your assistant may also propose changes: creating an imported audience, adding people to one or removing them, and a request to erase one user's data. Every change it proposes waits for your approval.

About AppsFlyer

AppsFlyer is the mobile attribution and marketing analytics platform that ties installs, in-app events, and revenue back to the media that drove them. It’s the source of truth for mobile ROI and channel performance.

One connection, not seven

The reason to read AppsFlyer through HeyMetra rather than through a server that only knows AppsFlyer is everything else it can answer in the same breath:

Ads — Google Ads · Meta

Analytics — Google Analytics 4 · Google Search Console · PostHog

Ecommerce — Shopify · Trendyol · WooCommerce

Revenue & CRM — Stripe · HubSpot · Zoho CRM · Zoho SalesIQ · Zoho Marketing Automation

Mobile — AppsFlyer · RevenueCat · Adapty · App Store Connect

Work — Google Calendar · Google Meet · Jira

Channels — Slack · Telegram

The full catalogue is at heymetra.com/connectors/.

Links


Built by Zeisoft, who make HeyMetra. Not affiliated with AppsFlyer. This README is generated from HeyMetra's live connector catalogue and refreshed daily; corrections are welcome as issues.

About

Read AppsFlyer from Claude, ChatGPT, Cursor and other MCP clients through HeyMetra's remote MCP server — one connection across ads, analytics, store and revenue. Unofficial, by Zeisoft.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages