MCP.Market

Apple Ads MCP server

by Happygallo·io.github.Happygallo/apple-ads·v1.0.3·7 stars

Manage Apple Search Ads campaigns, keywords, budgets, and reports via API v5.

B75/100grade B
What users say
No reviews yet
Be the first
Safety scan
B75/100

full report

Adoption
New

7 stars70 downloads/wk

Reviews

Write one

Nobody has reviewed Apple Ads yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Apple Ads tools (54, 18 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • add_negative_keywords

    Add negative keywords to block wasteful search terms from triggering your ads. Campaign-level negatives block across all ad groups; ad-group-level negatives only block within that ad group. Use get_search_term_report to identify high-spend/low-conversion terms to block.

  • add_targeting_keywords

    Add new targeting keywords to an ad group. Keywords determine which App Store search queries trigger your ads. Match types: EXACT matches the exact query only (higher relevance, lower volume). BROAD matches related queries and synonyms (higher volume, may need negatives). Start with EXACT for proven terms and BROAD for discovery, then use get_search_term_report to refine.

  • create_adwrite action

    Create a new ad within an ad group. Requires a creativeId — use list_creatives to find available creatives, or create_creative to make a new one from a product page. Each ad group can have multiple ads with different creatives. Apple will automatically optimize delivery toward the best-performing creative. Defaults: status=ENABLED.

  • create_ad_groupwrite action

    Create a new ad group within a campaign. After creation, add targeting keywords (add_targeting_keywords) to start matching search queries. Optionally create ads with custom creatives (create_ad). Defaults: status=ENABLED, pricingModel=CPC, startTime=today. The defaultBidAmount is used for keywords that don't have an individual bid. Set cpaGoal to enable Apple's cost-per-acquisition optimization.

  • create_budget_orderwrite action

    Create a new budget order to authorize spending. Budget orders are the top-level billing entity — campaigns draw from them. Requires name, budget amount, and start date. The budget order must be approved before campaigns can spend against it.

  • create_campaignwrite action

    Create a new Apple Search Ads campaign. After creation, you MUST create at least one ad group (create_ad_group) and add keywords (add_targeting_keywords) before the campaign can serve ads. Defaults applied: status=ENABLED, currency=USD, supplySource=APPSTORE_SEARCH_RESULTS. adChannelType and billingEvent are auto-set based on supply source (SEARCH/TAPS for search results, DISPLAY/IMPRESSIONS for s

  • create_creativewrite action

    Create a new creative for use in ads. Creatives are based on App Store product pages. Use list_product_pages to find available product pages for the app, then provide the productPageId. After creation, use create_ad to attach the creative to an ad group. Each ad group can have multiple ads with different creatives for A/B testing.

  • create_impression_share_reportwrite action

    Create an async custom impression share report. Returns a report ID — poll with get_impression_share_report_by_id until status is COMPLETED. These reports provide detailed impression share data not available in standard keyword reports. Takes minutes to generate.

  • delete_adwrite action

    Permanently delete an ad. This action CANNOT be undone. The ad group must have at least one remaining ad, or it will stop serving. Consider pausing instead (update_ad with status=PAUSED).

  • delete_ad_groupwrite action

    Permanently delete an ad group and all its keywords and ads. This action CANNOT be undone. Consider pausing instead (update_ad_group with status=PAUSED) to preserve data.

  • delete_campaignwrite action

    Permanently delete a campaign and all its child ad groups, keywords, and ads. This action CANNOT be undone. The campaign must be paused before deletion. Consider pausing instead if you might need the data later.

  • delete_negative_keywordswrite action

    Permanently delete negative keywords in bulk. After deletion, ads may start showing for previously blocked search terms. Only delete if you're sure those terms are no longer wasteful.

  • delete_targeting_keywordswrite action

    Permanently delete targeting keywords from an ad group in bulk. This CANNOT be undone — the keyword and its historical association are removed. Consider pausing instead (update_targeting_keywords with status=PAUSED) to preserve bid history.

  • find_ad_rejection_reasons

    Find ad rejection reasons across your account, or get a specific rejection reason by ID. Use this when ads are not serving to understand why Apple rejected them and what to fix.

  • find_app_assets

    Find app assets (screenshots, app previews, etc.) using filters. Useful for checking which visual assets are available before creating creatives. Filter by device class, orientation, or asset type using conditions.

  • get_ad

    Get full details of a specific ad including its creative association, serving status, and any rejection reasons.

  • get_ad_group

    Get full configuration of a specific ad group: bid settings, CPA goal, status, and scheduling. Use get_adgroup_report for performance metrics.

  • get_ad_report

    Get performance metrics per ad variation within a campaign. Compare creative performance to identify which ad variations drive the best CPA and conversion rates. Use this to decide which creatives to scale and which to pause.

  • get_adgroup_report

    Get performance metrics for ad groups within a campaign. Compare ad group performance to identify which targeting strategies work best. Returns impressions, taps, installs, spend, CPA, CPT per ad group. Drill down further with get_keyword_report.

  • get_app_details

    Get detailed information about an app by Adam ID including app name, category, and store metadata. Set includeLocales=true to also fetch localized names and descriptions per language/region.

  • get_app_eligibility

    Check if an app is eligible for Apple Search Ads in specific countries and supply sources. Shows eligibility state, device class, and minimum age per country. Use before creating a campaign to verify the app can run ads in target markets.

  • get_budget_analysis

    Analyze budget utilization and efficiency across ALL campaigns. Shows spend vs budget, daily run rate, days until budget exhaustion, and cost per install. Use to identify under-spending campaigns (increase bids/keywords) and over-spending campaigns (reduce bids/budgets).

  • get_budget_orderwrite action

    Get full details of a specific budget order including budget amount, remaining balance, supply sources, and billing contacts.

  • get_campaign_details

    Get full configuration of a specific campaign: targeting settings, budgets (total + daily), countries, supply sources, billing event, and status. Use get_campaign_report for performance metrics instead.

  • get_campaign_report

    Get performance metrics for one or all campaigns over a date range. Returns impressions, taps, installs, spend, CPA, CPT, TTR, and conversion rates. Use for high-level performance analysis. For deeper analysis, drill down with get_adgroup_report or get_keyword_report.

  • get_campaign_snapshot

    Get a comprehensive snapshot of a campaign in ONE call: campaign config, all ad groups, top keywords by spend, top search terms, and daily performance trends. Designed to give AI all the context needed for optimization analysis without multiple tool calls. Start here for any campaign health check or optimization task.

  • get_creative

    Get full details of a specific creative including its associated app, type, state, and timestamps.

  • get_geo_performance

    Get performance metrics broken down by country or region for a campaign. Shows impressions, taps, installs, spend, CPA per market. Use to identify which countries deliver the best ROI and where to increase/decrease investment or adjust geo targeting.

  • get_impression_share_report_by_id

    Get an impression share report by ID. Poll until state=COMPLETED (typically 1-5 minutes). The report contains detailed impression share and rank data per keyword.

  • get_keyword_report

    Get keyword-level performance metrics: impressions, taps, installs, spend, CPA, CPT, and conversion rate per keyword. Essential for bid optimization — identify high-CPA keywords to lower bids or pause, and high-converting keywords to increase bids. Also includes impression share data in the raw JSON (insights.impressionShare). Use get_search_term_report for the actual user queries that triggered e

  • get_me_details

    Get details about the currently authenticated API user including user ID and parent org ID. Useful for debugging authentication issues.

  • get_negative_keyword

    Get details of a specific negative keyword by ID at the campaign or ad group level.

  • get_product_page_by_id

    Get details of a specific product page by ID. Product pages are App Store page variations used to create custom creatives. Set includeLocales=true to also fetch locale-specific details (names, descriptions per language).

  • get_search_term_report

    Get actual user search queries that triggered your ads, with full performance metrics. THIS IS THE MOST VALUABLE TOOL for keyword optimization — reveals which search terms convert well (add as keywords), which waste money (add as negatives), and which keywords trigger irrelevant searches.

  • get_targeting_keyword

    Get details of a specific targeting keyword: text, match type, bid amount, and status. Use get_keyword_report for performance metrics.

  • list_ad_groups

    List or search ad groups. Provide campaignId to scope to one campaign, or omit to search across all campaigns (org-level). Supports filtering by conditions (e.g., status, defaultBidAmount) and sorting. Returns ad group ID, name, status, default bid, and CPA goal.

  • list_ads

    List or search ads. Provide campaignId + adGroupId for a direct listing, campaignId alone to search within a campaign, or omit both for org-level search. Supports filtering and sorting. Returns ad ID, name, creative, status, and rejection reasons if any.

  • list_budget_orders

    List all budget orders in the account. Budget orders define the overall spending authorization and billing relationship. Shows order name, budget, status (ACTIVE/INACTIVE/EXHAUSTED), and date range.

  • list_campaigns

    List or search campaigns in the account. Returns campaign ID, name, status, budgets, countries, and supply sources. Use without parameters for a quick overview. Add conditions to filter (e.g., status=ENABLED) or sortBy to rank results. This is typically the first tool to call when exploring an account.

  • list_creatives

    List or search creatives in the account. Creatives link product pages to ads — you need a creative before you can create_ad. Filter by adamId to find creatives for a specific app, or use conditions for advanced filtering.

  • list_impression_share_reports

    List all custom impression share reports with their status (QUEUED, RUNNING, COMPLETED, FAILED). Use to find previously created reports.

  • list_negative_keywords

    List negative keywords at campaign or ad group level. Negative keywords prevent your ads from showing for specific search terms. Use get_search_term_report to identify wasteful terms, then add_negative_keywords to block them. NOTE: The Apple Search Ads API does not support filter conditions on negative keyword endpoints — use sorting and client-side filtering instead.

  • list_organizations

    List all organizations (campaign groups) you have access to. Shows org ID, name, currency, payment model, and your roles. Call this first to find the right org, then use switch_organization to set the active org for all subsequent API calls.

  • list_product_pages

    List all product pages for an app. Product pages are App Store page variations that can be used as creatives for custom product page ads. Shows which page is the default and each page's state (VISIBLE, etc.).

  • list_targeting_keywords

    List or search targeting keywords in a campaign. Provide adGroupId for keywords in a specific ad group, or omit to search across all ad groups. Returns keyword text, match type, bid, and status. Use get_keyword_report for performance metrics instead.

  • search_apps

    Search for apps eligible for Apple Search Ads campaigns by name or keyword. Returns app name, Adam ID (needed for create_campaign), and developer info. Set returnOwnedApps=true to only show apps you own.

  • search_geolocations

    Search or look up geo locations for campaign geo targeting. Search by name (query) to find locations, or provide geoIds to look up specific locations by ID. Returns location display name, entity type (Country/AdminArea/Locality), and ID for use in ad group targeting.

  • switch_organization

    Switch the active organization context. All subsequent API calls (campaigns, reports, etc.) will operate under this org. The switch persists across sessions. Use list_organizations to see available orgs and their IDs.

  • update_adwrite action

    Update an ad's name or status. Setting status to PAUSED stops delivery for this specific ad variation only; other ads in the same ad group continue serving.

  • update_ad_groupwrite action

    Update an ad group's configuration. Only provided fields are changed. Changing defaultBidAmount affects all keywords that don't have individual bids. Setting status to PAUSED stops delivery for this ad group only.

  • update_budget_orderwrite action

    Update an existing budget order. Can change name, budget amount, and end date. Increasing budget extends spending capacity; decreasing it may cause campaigns to pause if they've exceeded the new limit.

  • update_campaignwrite action

    Update a campaign's configuration. Only provided fields are changed; omitted fields are left unchanged. Important: changing countriesOrRegions will clear existing geo targeting (ad-group-level locality/admin area targets). Budget changes take effect immediately. Setting status to PAUSED stops all ad delivery.

  • update_negative_keywordswrite action

    Update negative keywords in bulk at the campaign or ad group level. Change status (ACTIVE/PAUSED), match type, or text. Pausing a negative keyword allows the previously blocked search term to trigger ads again.

  • update_targeting_keywordswrite action

    Update targeting keywords in bulk — change status (ACTIVE/PAUSED) and/or bid amounts. Use to pause underperforming keywords or adjust bids based on get_keyword_report data. Pass an array of 1 for single-keyword updates. Bid changes take effect immediately and affect future auctions.

Public scan report

scanner v0.1.10 · 2026-09-27 · same rubric, same numbers if you re-run it

no findings
  • Code scan53 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 195 days ago4/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Overall 75/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Apple Ads compares

Against every graded Web search MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
75/100
higher than 45% of 3,470 Web search servers
Tools
54
the typical Web search server has 5
Tools that change things
33%
typical: 0%. Fewer write tools means less an agent can break
GitHub stars
7
more than 83% of 1,786 Web search servers
Downloads a week
70
more than 48% of 827 Web search servers with a package

What its tools let an agent do: 34 read · 8 create · 7 change · 5 delete

Install Apple Ads in Claude Code, Cursor or VS Code

Runs npx -y apple-ads-mcp on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add apple-ads -- npx -y apple-ads-mcp
Add to Cursor

What the publisher says

From the Apple Ads repository's README, as published. We do not edit it. Read it on GitHub

Apple Ads MCP

MCP server for the Apple Search Ads API v5. Connect it to any MCP-compatible AI client and manage your campaigns, keywords, budgets, and reporting through natural language.

Quick Start • Tools • Resources • Prompts • Clients

Ask your AI things like:

"How did my campaigns perform last week?"

"Pause the brand campaign and increase the budget on discovery to $500."

"What search terms are triggering my ads? Add the best ones as exact-match keywords."

Supports 54 tools, 3 resources, and 6 prompts — campaigns, ad groups, keywords, creatives, budgets, search terms, geo targeting, impression share, and performance reports.

Features at a glance

Quick Start

  1. Get your Apple credentials (~10 min, one-time)
  2. Generate your key pair (2 commands)
  3. Add to your MCP client
  4. Start chatting

Setup

Step 1 — Invite an API user

Done by the account admin at searchads.apple.com.

  1. Go to Settings → User Management → Invite User
  2. Enter the email of the person who will use the API
  3. Set the role:
  • API Account Manager — full read/write access
  • API Account Read Only — view-only access
  1. Send the invitation

The API user must be a different Apple ID from the admin. If you're the admin, use a second Apple ID.

Step 2 — Accept and copy your credentials

Done by the invited user.

  1. Accept the email invitation and sign in to searchads.apple.com
  2. Go to Settings → API tab
  3. Copy and save these three values:
  • clientId — starts with SEARCHADS.
  • teamId — starts with SEARCHADS.
  • keyId — a UUID

Step 3 — Generate your key pair

Open Terminal and run:

openssl ecparam -genkey -name prime256v1 -noout -out ~/apple-ads-key.pem && \
openssl pkcs8 -topk8 -nocrypt -in ~/apple-ads-key.pem -out ~/apple-ads-key-pkcs8.pem

Then generate the public key:

openssl ec -in ~/apple-ads-key-pkcs8.pem -pubout -out ~/apple-ads-key-public.pem

This creates:

  • ~/apple-ads-key-pkcs8.pem — private key (keep this safe, used in your config)
  • ~/apple-ads-key-public.pem — public key (upload to Apple next)

Step 4 — Upload public key to Apple

Print your public key:

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Apple Ads: common questions

Is Apple Ads MCP server safe?
Mostly: it is graded B (75/100). Read the Apple Ads safety report
How do I install Apple Ads?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Apple Ads need an API key?
No secret keys are declared. It reads 5 settings from the environment.
Is Apple Ads maintained?
The last commit was 232 days ago (2026-03-17). The latest release is v1.0.3.
What can I use instead of Apple Ads?
Servers from other publishers that do the same job: HIG Doctor MCP server, Apple Notes MCP server and Immich Photo Manager MCP server.
How does Apple Ads compare with other Web search MCP servers?
safety score 75/100 (higher than 45% of 3,470 Web search servers); tools 54 (the typical Web search server has 5); tools that change things 33% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to Apple Ads

Same job from other publishers: the closest match first, then the best rated.

  • HIG Doctor
    Apple Human Interface Guidelines search, lookup, and project audits for AI coding agents.
    B
  • Apple Notes
    Inspect, search, create, edit, move, and organize notes in Apple Notes on macOS.
    A
  • Immich Photo Manager
    Photo management for self-hosted Immich: search, albums, duplicates, faces, PDF reports. 94 tools.
    B
  • Apple Mail MCP
    Apple Mail MCP server with full-coverage FTS5 body search, reliable on large mailboxes.
    A