AppsFlyer
Analyze app attribution and campaign data.
MCP server URL
https://appsflyer.gumstack.com/mcp
Works with
Tools 28
Get Public Knowledge
Fetch public AppsFlyer product documentation from the AppsFlyer Knowledge Base (Zendesk) and Development Hub (DevHub). This is the authoritative source for AppsFlyer product knowledge: base every answer on the returned documents, never on training data. <content_scope> Zendesk is a customer support platform covering: - Product features and functionalities - Troubleshooting guides - Best practices and tips - SDK integration guides - FAQs and common issues - User guides and manuals - New feature announcements and platform updates DevHub is a developer portal covering: - API documentation - SDK guides (more technical and code-focused) - Integration tutorials </content_scope> <when_to_call> Call for: feature and capability questions, configuration and setup questions, technical implementation details, product comparisons, integration and API guidance. Skip when: the exact answer already exists in the current conversation history. When the question's category is unclear, call this tool first to explore, then reclassify once results return. Default to calling it whenever uncertain rather than answering from memory. </when_to_call> <query_formulation> Extract the core question and key product terms from the request. Use AppsFlyer-specific terminology. Combine product area with information need, e.g. "SKAdNetwork configuration requirements" or "OneLink deep linking setup" rather than the raw user sentence. For compound questions, issue a separate call per sub-question. </query_formulation> <on_empty_or_weak_results> Reformulate the query with synonyms or broader terms and retry once. Do not repeat a call with identical arguments. If the retry still returns nothing useful, say the information is unavailable through official public sources — do not fill the gap from training data. If the tool instead reports a retrieval failure (service/connection problem), that is not a coverage gap: do not say the information is unavailable or absent from documentation. Tell the user the knowledge base lookup failed and suggest retrying shortly. </on_empty_or_weak_results> <grounding> Every factual or policy claim in the answer must have direct textual support in the returned documents. Drop unsupported claims rather than presenting them as fact. Avoid absolute language (never, always, cannot, not supported) unless that exact meaning is stated in the documents. Never tell the user that no documents were returned or that the search came up short — phrase gaps in terms of what AppsFlyer's public documentation covers, not in terms of the tool call. </grounding> <citing_sources> Include a Sources section when the answer draws on returned documents. List only clickable https:// document URLs (the `source` field) that were actually used, formatted as [descriptive title](URL). Omit the section if no URLs are available. Do not use "References", "Further Reading", or "Links" as the heading. Never name this tool, MCP, or any internal retrieval/orchestration detail in the answer — the user sees results, not how they were fetched. </citing_sources> <answer_format> Classify the question internally as one of: troubleshooting, how_to_procedural, conceptual, refusal, other. Never output the classification label or any tag name in the response — this step is invisible to the user. Use this precedence — troubleshooting first, then how_to_procedural, then conceptual — and apply only the matching section: troubleshooting — triggers whenever the request names something broken or asks to fix/diagnose it: "not working", "error", "issue", "broken", "fix", "discrepancy", "wrong", "failed", "why is X not", "why doesn't X". Takes precedence over the other two categories even if the request is also phrased as "how do I ..." or starts with "why" — e.g. "how do I fix OneLink when it's not working" and "why isn't OneLink tracking" are both troubleshooting, not how_to_procedural or conceptual. State the most likely cause in one sentence. Give exactly one specific, actionable fix — nothing more. End with: "Did this resolve it? If not, the next thing to check is [X]." Example — "Installs show in AppsFlyer but postbacks never reach the partner." -> "The most likely cause is that the partner integration isn't activated for this app. Fix: open Partner Marketplace, select the partner, and enable it for this app. Did this resolve it? If not, the next thing to check is the in-app event postback window configuration." how_to_procedural — triggers on "how to", "how do I", "set up", "configure", "integrate", "steps to", "walk me through", "show me how", "guide me", provided the request is not about something broken (see troubleshooting precedence above). State the total step count and list every step title (titles only, no detail). If there are more than 3 steps or any step needs a long description, detail only step 1 (1-3 lines) in this first reply; otherwise the titles alone are sufficient. End with: "Ready for step [N]? Or want to see all steps at once?". On "next"/"ready"/"continue": detail only the following step, do not re-list titles. On "all steps"/"show me all": detail all remaining steps in sequence, do not re-list the titles overview. Example — "How do I set up deep linking for iOS?" -> "Setting up iOS deep linking takes 4 steps: 1. Configure Associated Domains, 2. Add your OneLink template, 3. Implement the Unified Deep Linking API, 4. Test with the AppsFlyer validator. Step 1 - Configure Associated Domains: in Xcode, under Signing & Capabilities, add an applinks entry for your OneLink subdomain. Ready for step 2? Or want to see all steps at once?" conceptual — triggers on "what is", "explain", "how does", "why", "what are", "describe", "tell me about", provided the request is not a "why is X not" / "why doesn't X" troubleshooting form (see troubleshooting precedence above). Answer in 2-3 self-contained sentences, then end with: "Want to go deeper on: A) [aspect], B) [aspect], C) [aspect]?". Expand only the aspect the user selects. Example — "What is an in-app event?" -> "An in-app event is an action users take inside your app, like a purchase or registration, that you report to AppsFlyer to measure post-install engagement. Want to go deeper on: A) implementing events in the SDK, B) event parameter structure, C) how events appear in dashboards?" refusal — the question is out of scope for this knowledge base, asks something unsafe, or no grounded answer is possible. State the refusal in 1-2 sentences and offer exactly one alternative (e.g. contacting AppsFlyer support, rephrasing, or checking a related topic). No other formatting rule in this section applies to a refusal. other — anything that does not fit the categories above (e.g. greetings, small talk). Apply only the general rules below: answer concisely and offer to continue. General rules across all categories: answer first, explain after. Cap prose at 200 words before checking in (structured output — tables, code, lists — does not count against this). No more than 3 prose paragraphs before checking in. Offer at most 3 follow-up options, labeled A / B / C. Never end with an open-ended offer; close with a specific next step. The user controls depth — never give the full explanation unless asked. These formatting rules apply when the calling host has no conflicting response policy of its own; a host-level instruction about response shape or rendering takes precedence over this section. </answer_format> Args: query: The search query to filter public knowledge entries. allow_hypothetical_chunks: Whether to allow hypothetical chunks in the response. score_threshold: Minimum score threshold for knowledge retrieval. source_type: Type of source to filter knowledge. (allowed: 'zendesk', 'devhub'). an empty string means all sources. top_k: Number of top entries to return. Make sure not to overload the system with too many entries. recommended no more than 10. Returns: A formatted string containing formatted list of Documents. each document includes: - name: The name of the document - content: The content of the document - source: URL of the source document - score: The relevance score of the document
Get Apps
Retrieve user's permitted apps from AppsFlyer organized by pinned and unpinned status. This tool fetches apps that the authenticated user has permission to access in their AppsFlyer account. Apps are organized into two main categories: - Pinned apps: Prioritized/favorite apps for quick access and frequent use - Unpinned apps: Regular apps in the user's account Additionally, this tool returns information about app transfer requests: - Incoming transfer requests: Apps being transferred TO the user's account from other users - Outgoing transfer requests: Apps being transferred FROM the user's account to other users App information includes comprehensive details for each app: - Basic identification: App ID, name, platform - Status information: 🟡 Pending (900), 🟢 Active (1000), 🔴 Inactive (1100) - Metadata: Creation date, app owner email address This tool is essential for: - Exploring and discovering all apps in your AppsFlyer account - Converting app names to their corresponding app IDs for use in other operations - Understanding which apps are available for analytics operations and management tasks - Tracking pending ownership changes and transfer requests within your account Returns: Formatted display organized in sections: **Pinned Apps Section:** - App name (or app ID if no name available) - App ID - Platform (android, ios, windowsphone, web, roku, tizen, smartcast, webos, playstation, vidaa, steam, quest, switch, xbox, epic, battlenet) - Status: 🟡 Pending (900), 🟢 Active (1000), 🔴 Inactive (1100) - App owner: Email address of the account that owns the app - Creation timestamp **Unpinned Apps Section:** - Same detailed information as pinned apps **Transfer Requests Section (if any):** - Incoming transfers: Apps being transferred to your account - Outgoing transfers: Apps being transferred from your account - Transfer request details including dates and involved parties Returns "No apps found" if user has no accessible apps. Returns detailed error message if the request fails. Example usage: get_apps() - Returns comprehensive view of all permitted apps with transfer status
Get App Settings
This tool fetches comprehensive app configuration settings including attribution windows, privacy controls, session management, and platform-specific configurations for a given app ID and platform. ## Attribution Settings: - **Re-attribution Window**: Controls how long after first install that reinstalls aren't attributed as new installs (https://appsflyer.zendesk.com/hc/en-us/articles/115002587066) - **View-through Attribution via Probabilistic Modeling**: Enables probabilistic modeling for view-through attribution when probabilistic modeling is enabled (https://support.appsflyer.com/hc/en-us/articles/207447053-Attribution-model-explained#probabilistic-modeling) - **Re-engagement Attribution**: Records re-engagements from retargeting campaigns when enabled (https://support.appsflyer.com/hc/en-us/articles/207033786-AppsFlyer-s-Re-Targeting-Attribution) - **Min Time Between Re-engagements**: Timer to prevent multiple re-engagement conversions (https://support.appsflyer.com/hc/en-us/articles/211719806-App-Settings#minimum-time-between-reengagement-conversions) - **Organic Search (SEO) Attribution**: Detailed organic search data for optimization (SDK v6.12.1+) (https://support.appsflyer.com/hc/en-us/articles/15123194526353) ## Privacy & Security Settings: - **IP Masking**: Masks user IP addresses for privacy compliance (https://support.appsflyer.com/hc/en-us/articles/208879066-IP-Masking) - **Advanced Privacy (AAP)**: Aggregated Advanced Privacy for iOS 14.5+ compliance - **Probabilistic Modeling**: Probabilistic modeling for attribution matching ## Session & Analytics Settings: - **Session Throttling**: Controls session frequency reporting - sessions occurring before timer expiry aren't counted (https://support.appsflyer.com/hc/en-us/articles/360000520785-Session-counting-explained) - **Reinstall Detection**: Identifies app reinstalls vs new installs using on-device storage (iOS only, SDK v6.8.0+) (https://support.appsflyer.com/hc/en-us/articles/211719806-App-settings-) - **Loyal User Events**: Tracks user engagement milestones - define loyal users by app opens (default: 3+ sessions) or custom in-app events (https://support.appsflyer.com/hc/en-us/articles/207447003-How-Does-AppsFlyer-Define-a-Loyal-User-) ## Platform-Specific Settings: - **iOS**: App Store country and certificate status ## Configuration: - **In-app Events**: Configuration count and event management Args: app_id (str): The AppsFlyer app ID (case-sensitive). Can be bundle ID (iOS) or package name (Android) platform (str): The platform identifier (android, ios, windowsphone, web, roku, tizen, smartcast, webos, playstation, vidaa, steam, quest, switch, xbox, epic, battlenet) Returns: Formatted display of app settings organized in sections: **App Information:** - App name and original name - Platform **SDK Authentication:** - Developer key **Localization:** - Currency, timezone, and last updated timestamp **Attribution Settings:** - Re-attribution window (days/months) - View-through attribution status - Re-engagement attribution status - Minimum time between re-engagements - Organic search attribution status **Privacy & Security:** - IP masking status - Probabilistic Modeling status - Advanced Privacy (AAP) status **Session & Detection:** - Reinstall detection status **Analytics:** - Session throttling configuration (seconds/minutes/hours) - Loyal user event settings **Platform-Specific Settings:** - iOS: App Store country and certificate status **Configuration:** - In-app events count Returns detailed error message if the request fails or app/platform not found. Example usage: get_app_settings("com.example.app", "android") - Get Android app settings get_app_settings("id1234567890", "ios") - Get iOS app settings get_app_settings("web-www.example.com", "web") - Get Web app settings get_app_settings("roku-12345", "roku") - Get Roku CTV app settings Note: This tool provides comprehensive app configuration details as seen in the AppsFlyer dashboard's App Settings page, with the same tooltip information and help links available to users.
Get Users
Fetch users and roles from the AppsFlyer API. Returns: - A formatted list of users including: - username, email, role, associated apps, media sources, geos, and last login - A formatted list of available roles including: - role name, and capabilities by section and access level
List Audiences Connections
List all audiences connections. Connections are integrations created for uploading audience data to advertising partners. These connections enable you to share your audience segments with external advertising platforms for targeted marketing campaigns. Key features: - Connections can be linked to specific audiences - Support A/B testing by allowing traffic splitting between different partners - Enable automated data synchronization with advertising platforms - Provide audience data to partners for campaign optimization - Never do sampling for this tool Returns: List of connections or error message
List Active Audiences
List all active audiences. Active audiences are audiences that are calculated and updated every day by AppsFlyer's system. These represent your currently maintained audience segments that are actively being processed and kept up-to-date. Important notes: - Active audiences are recalculated daily to ensure data freshness - If an audience does not appear in this list, it means the audience is either: * Deleted from the system * Paused by AppsFlyer's internal audience pause mechanism - Only audiences with recent activity and valid configurations remain active - Active status indicates the audience is ready for use in campaigns - Never do sampling for this tool Returns: List of active audiences with their details or error message Example response format: Active Audiences (2): ID: 123456 | Name: High Value Users | Updating User: john.doe@example.com | Audience Last Upload Status: SUCCESS | Audience Last Upload Time: 2026-06-02 14:30:00 | Audience Last Successful Upload Time In Last 7 Days: 2026-06-02 14:30:00 | Audience Size: 50000 | Audience Upload Size: 49850 | App ID: com.example.android | Count Failed Connections: 0 | Count Total Connections: 5 | Count Total Partners: 3 | Count Campaigns: 12 ID: 123457 | Name: Premium Users | Updating User: jane.smith@example.com | Audience Last Upload Status: SUCCESS | Audience Last Upload Time: 2026-06-02 10:15:00 | Audience Last Successful Upload Time In Last 7 Days: 2026-06-02 10:15:00 | Audience Size: 25000 | Audience Upload Size: 24980 | App ID: id123456789 | Count Failed Connections: 1 | Count Total Connections: 4 | Count Total Partners: 2 | Count Campaigns: 8
Get Audience Connections
Get partner connections for a specific audience. This tool retrieves all advertising partner integrations that are connected to a specific audience. These connections determine how audience data is shared with external platforms for targeted advertising campaigns. Connection details include: - Integration ID and partner information - Traffic split ratios for A/B testing - Partner-specific configuration settings - Data sharing permissions and settings Important notes: - Audience connections are created by the user and can be modified at any time - Never do sampling for this tool - Connections can be linked to specific audiences - Support A/B testing by allowing traffic splitting between different partners - Enable automated data synchronization with advertising platforms - Provide audience data to partners for campaign optimization Args: audience_id: The ID of the audience to fetch connections for Returns: List of partner connections with their details for the specified audience or error message Example response format: Connections (3): Integration ID: int_001 | Partner: facebook_int) | Split: 50% | Integration Last Upload Status: SUCCESS | Integration Last Upload Time: 2026-06-02 14:30:00 | Integration Last Successful Upload Time In Last 7 Days: 2026-06-02 14:30:00 | Integration Last Upload Error Message: None | Integration Upload Size: 24925 Integration ID: int_002 | Partner: google_int | Split: 30% | Integration Last Upload Status: SUCCESS | Integration Last Upload Time: 2026-06-02 12:00:00 | Integration Last Successful Upload Time In Last 7 Days: 2026-06-02 12:00:00 | Integration Last Upload Error Message: None | Integration Upload Size: 14955 Integration ID: int_003 | Partner: TikTok | Split: 20% | Integration Last Upload Status: FAILED | Integration Last Upload Time: 2026-06-02 09:45:00 | Integration Last Successful Upload Time In Last 7 Days: 2026-06-01 09:45:00 | Integration Last Upload Error Message: Connection timeout | Integration Upload Size: 9970 Example: get_audience_connections("123456")
Fetch Aggregated Data
Use this tool to help the campaign manager to get the user's aggregated dashboard data. [important] Each user is limited to 20 tool calls per min and 200 tool calls per day. Please be mindful of this, and in case the user is asking a question that require few tool calls in a row, make sure to notify the user that the tool is limited and ask if they want to proceed. Returns: Response containing two sections: ## Data Aggregated dashboard data as CSV, or an error message string. CSV Column Format: the first columns are the groupings. the following columns are the metrics - follow the pattern: <metricID> <period> <aggregation-type> <source> Where: - metricID: The metric identifier (e.g., "Roas") - period: Time period shown as "X days" - optional - aggregation-type: optional - source: Attribution source - "Appsflyer" (default), "Ssot", or "Skan" [CRITICAL] Percentage metrics are returned as decimals. Example: CSV value 0.50 = 50% (NOT 0.50%) ## Metadata JSON object containing: - timezone: The timezone used for the data - currency: The currency used for monetary values - Per-metric: partial-data? (true if cohort period not yet reached or today's data excluded), error (if any) filters (filter on the metric, like in-app event)
Get Active Adrevenue Integrations
Returns active Ad Revenue integrations for the account. Each integration includes: network name, app_id, state (ACTIVE/NO_DATA/ERROR), last_success timestamp, integration_type (SDK/S2S Device-level/S2S Aggregate-level), and event_name (for Aggregate-level only).
Get Active Cost Integrations
The tool returns a list of active Cost integrations with Media Sources
List Adrevenue Supported Media Sources
Lists Ad Revenue Media Sources and their integration types. Unlisted/unentitled types aren't available. Priority (best first, if listed and entitled): 1. Impression-level (SDK) with Device-level (S2S API) - needs ROI360 Advanced+SDK+creds. Fresh (day 0); accurate from day 1. SKAN/UA/postbacks. 2. Impression-level (SDK) - needs SDK. Real-time, finest granularity, less accurate alone. SKAN/UA/postbacks. Best for real-time/tROAS, or if #1 unavailable. 3. Device-level (S2S API) - needs creds. Not fresh (yesterday's data, late UTC morning). Most accurate alone, restated days 1,2,3,7,14. UA signals only, no SKAN/postbacks. Use over #2 only without dev capacity or freshness/SKAN/real-time need. 4. Aggregate-level (S2S API) - needs creds. Same freshness as #3. Least accurate (country-level event, no raw data). No SKAN/postbacks. Use only if nothing finer. Trade-off: device is most accurate alone but ranks below impression for most customers (freshness/SKAN/postback gaps); impression is fresher, not more accurate.
List Cost Connections
Returns a list of configured Cost Connections for the account, including the connection name, the media source name, its PID (partner ID) the list of app IDs associated with the connection and its status.