{
  "data": {
    "a": {
      "slug": "apple-ads",
      "name": "Apple Ads Platform API",
      "vendor": "Apple",
      "vendorUrl": "https://ads.apple.com",
      "kind": "http-api",
      "category": "advertising",
      "summary": "Apple's Ads Platform API creates and manages App Store and Apple Maps campaigns, ad groups, keywords, ads, creatives and budgets, and returns performance reports. Agents call REST endpoints at api.ads.apple.com/v1 with an OAuth 2 client credentials token.",
      "url": "https://www.anchorterminal.com/tools/apple-ads",
      "markdownUrl": "https://www.anchorterminal.com/tools/apple-ads.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/apple-ads.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/apple-ads.json",
      "repo": "https://github.com/apple/apple-ads-platform-api-python",
      "license": "Proprietary service under the Apple Advertising Services Terms of Service. The client libraries are MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.ads.apple.com/v1",
      "packages": [
        {
          "registry": "npm",
          "name": "@apple/apple-ads-platform"
        },
        {
          "registry": "pypi",
          "name": "apple-ads-platform"
        }
      ],
      "auth": "oauth",
      "authNotes": "Access is self-serve for an advertiser. An account administrator invites a user with an API role, and that user uploads a public key in the Apple Ads interface and signs a JWT client secret with the private key. The OAuth 2 client credentials grant at appleid.apple.com returns a one-hour bearer token with the single scope `searchadsorg`. The role (read and write, or read only, account-wide or for one campaign group) limits what calls can do. A third-party provider acting for advertisers registers an OAuth 2 application with Apple by email.",
      "pricing": "free",
      "pricingNotes": "No fee for API access is stated in the docs, the help article or the terms. Ad spend is billed per tap up to a maximum the advertiser sets, and no rates or minimum are published. Apple advertises a 100 USD credit for eligible new App Store advertisers. No sandbox or test account was found, and whether an account needs a payment method before API use was not established (checked 2026-10-09).",
      "priceSummary": "Free",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Apple Ads Platform API documentation or the Apple Advertising Services Terms of Service (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://developer.apple.com/documentation/apple-ads-platform-api",
      "capabilities": [
        "ads.reporting",
        "ads.campaigns",
        "ads.budgets",
        "ads.creatives"
      ],
      "tags": [
        "hosted",
        "free",
        "oauth",
        "sdk",
        "audit-log",
        "bug-bounty",
        "closed-source",
        "self-serve"
      ],
      "lastRelease": "2026-08-14",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 53.8,
        "grade": "D",
        "agentReady": false,
        "rank": 699,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 7,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 69,
          "maintenance": 48,
          "payments": 20,
          "reliability": 35,
          "schema": 69,
          "security": 68,
          "transparency": 66
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": 0,
        "verdict": "Every response carries `RateLimit-*` headers and a 429 carries `Retry-After`, Apple maintains MIT client libraries in four languages, and read-only API roles exist. The API was first released in August 2026. No status page, SLA, published OpenAPI file, idempotency key or test account was found, and a person must create the credentials in the Apple Ads interface.",
        "bestFor": "An agent that manages or reports on App Store search campaigns, or Apple Maps campaigns, for an advertiser whose administrator can grant an API role.",
        "strengths": [
          "Every response carries `RateLimit-Limit`, `RateLimit-Remaining` and `RateLimit-Reset` headers, and a 429 adds `Retry-After`, with a sample backoff client in the docs",
          "Apple maintains client libraries for Swift, Python, Java and Node.js under the MIT licence, generated from its OpenAPI document and handling the token cycle",
          "API roles include API Account Read Only and a campaign group API Read Only role, so a reporting agent needs no write access",
          "Each documentation page links a Markdown twin at the same address with `.md`",
          "Change history endpoints return audit summaries and change detail records for entities in an ad account"
        ],
        "weaknesses": [
          "The Platform API was first released in August 2026 and its changelog has one entry. The Campaign Management API 5 it replaces is sunset on 26 January 2027",
          "No status page, incident history or SLA was found in the pages read, and the rate limit quota is given only in response headers",
          "The OpenAPI document the client libraries are generated from is not published, and developer.apple.com has no llms.txt",
          "No idempotency key, validate-only mode or test account was found. A PUT that includes an array replaces the whole array",
          "The terms let Apple use advertiser and campaign data to develop and train AI models, retain account data after use ends, and require written approval of any announcement about the services"
        ],
        "agentNotes": [
          "Send `Authorization: Bearer {access_token}` and `X-AP-Context: adAccountId={adAccountId}` on every ad account call. Get the account id from `GET /v1/acls`",
          "Request a new access token every 3,600 seconds from `https://appleid.apple.com/auth/oauth2/token` with scope `searchadsorg`. The signed client secret lasts at most 180 days",
          "Read `RateLimit-Remaining` on each response. On a 429 wait the `Retry-After` seconds, then double the wait up to 16 seconds",
          "List and filter with POST to a `/query` endpoint, not GET with query parameters. Deleted entities return only when a filter asks for them",
          "On PUT send only the fields to change, and send the complete desired array for any array field. Create campaigns with `\"status\": \"PAUSED\"` before review"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "D",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 53.8
          }
        ],
        "editorialScores": {
          "ergonomics": 69,
          "maintenance": 48,
          "payments": 20,
          "reliability": 35,
          "schema": 69,
          "security": 68,
          "transparency": 49
        },
        "provenanceScore": 83
      },
      "connect": {
        "install": "npm install @apple/apple-ads-platform",
        "http": "curl \"https://api.ads.apple.com/v1/acls\" \\\n  -H \"Authorization: Bearer {access_token}\""
      },
      "letme": {
        "capability": "https://letme.dev/ads.reporting",
        "tool": "https://letme.dev/apple-ads"
      },
      "sameCompany": [
        "mlx-lm"
      ],
      "area": "communication",
      "provenance": {
        "legalEntity": "Apple Inc.",
        "domain": "apple.com",
        "domainRegistered": "1987-02-19",
        "endpointOnVendorDomain": true,
        "terms": "https://ads.apple.com/terms-of-service",
        "privacy": "https://www.apple.com/legal/privacy/",
        "statusPage": "",
        "changelog": "https://developer.apple.com/documentation/Apple-Ads-Platform-API/changelog-apple-ads-platform-api",
        "securityTxt": "valid",
        "checked": "2026-10-09",
        "notes": [
          "The Apple Advertising Services Terms of Service (effective 28 July 2026) govern the advertising services. They do not mention the API, and no separate API terms were found.",
          "The contracting entity is Apple Inc. for ad content served in the United States and Apple Distribution International Ltd. for most other locations, with other entities for Canada, Latin America, Japan, Australia and New Zealand, Southeast Asia and mainland China (Countries and Regions Specific Terms, 1 May 2026).",
          "The terms cite Apple's Privacy Policy at www.apple.com/privacy. The policy page at www.apple.com/legal/privacy/ is drawn by script and its text did not reach our reader. The Apple Advertising and Privacy notice (11 May 2026) was read.",
          "API calls go to https://api.ads.apple.com/v1 and token requests to https://appleid.apple.com/auth/oauth2/token. The documentation is at developer.apple.com.",
          "www.apple.com/.well-known/security.txt has Contact, Acknowledgments, Policy and Expires (2027-10-06) lines.",
          "No status page for Apple Ads was linked from the pages read.",
          "RDAP gives a registration date of 1987-02-19 for apple.com."
        ],
        "score": 83
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/apple-ads.json",
      "live": {
        "slug": "apple-ads",
        "probe": {
          "target": "https://api.ads.apple.com/v1",
          "method": "get",
          "lastAt": "2026-10-10T04:40:40.938707Z",
          "lastOk": false,
          "lastStatus": 503,
          "lastMs": 477,
          "lastNote": "server error",
          "authRequired": false,
          "uptime24h": 0,
          "uptime30d": 0,
          "p50ms24h": 0,
          "p95ms24h": 0,
          "samples24h": 133,
          "samples30d": 133,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 85,
              "ok": 0
            },
            {
              "date": "2026-10-10",
              "probes": 48,
              "ok": 0
            }
          ],
          "outages": [
            {
              "start": "2026-10-09T15:42:56.297965171Z",
              "end": "0001-01-01T00:00:00Z",
              "note": "HTTP 503 server error"
            }
          ]
        },
        "versions": [
          {
            "registry": "github",
            "name": "apple/apple-ads-platform-api-python",
            "version": "v1.109.0",
            "released": "2026-08-14",
            "seenAt": "2026-10-09T16:40:00.215659958Z"
          },
          {
            "registry": "npm",
            "name": "@apple/apple-ads-platform",
            "version": "1.109.0",
            "seenAt": "2026-10-09T16:39:58.989527402Z"
          },
          {
            "registry": "pypi",
            "name": "apple-ads-platform",
            "version": "1.109.0",
            "released": "2026-08-14",
            "seenAt": "2026-10-09T16:40:00.003963299Z"
          }
        ],
        "githubStars": 32,
        "npmWeekly": 6024,
        "pypiWeekly": 394,
        "pages": [
          {
            "url": "https://developer.apple.com/documentation/Apple-Ads-Platform-API/changelog-apple-ads-platform-api",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:35:01.531863928Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e4a638dcba02"
          },
          {
            "url": "https://www.apple.com/legal/privacy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-09T18:48:09.045163836Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "26c270f23c46"
          },
          {
            "url": "https://ads.apple.com/terms-of-service",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:32:14.161112367Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "6ab5918e07a0"
          }
        ],
        "updatedAt": "2026-10-10T04:40:40.938707Z"
      }
    },
    "answer": "Google Ads API scores 76.4 (BB) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in every scored category.",
    "b": {
      "slug": "google-ads-api",
      "name": "Google Ads API",
      "vendor": "Google",
      "vendorUrl": "https://developers.google.com/google-ads/api",
      "kind": "http-api",
      "category": "advertising",
      "summary": "Google's API for managing Google Ads accounts, campaigns, budgets, audiences, ads and performance reports over gRPC or REST, with OAuth 2.0 access. Google also publishes an open-source, read-only MCP server that runs Google Ads Query Language reports.",
      "url": "https://www.anchorterminal.com/tools/google-ads-api",
      "markdownUrl": "https://www.anchorterminal.com/tools/google-ads-api.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/google-ads-api.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/google-ads-api.json",
      "repo": "https://github.com/googleads/google-ads-python",
      "license": "Proprietary service under the Google Ads API terms. The client libraries and the google-ads-mcp server are Apache-2.0",
      "transports": [
        "http",
        "stdio",
        "streamable-http"
      ],
      "remoteUrl": "https://googleads.googleapis.com",
      "packages": [
        {
          "registry": "pypi",
          "name": "google-ads"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 access token as a Bearer header, with the single scope https://www.googleapis.com/auth/adwords, from a user flow or a service account added to the Google Ads account. The Google Cloud project that owns the credentials carries the access level. Test is granted on enabling the API, Explorer and Basic by application in the Cloud console (Basic after brand verification), and Standard by a manual audit of about 10 business days. Developer tokens were sunset on 9 September 2026. Calls through a manager account also need the `login-customer-id` header. New refresh tokens need 2-step verification.",
      "pricing": "free",
      "pricingNotes": "No charge for API calls was found. Advertising spend is billed to the Google Ads account, and the terms allow fees for policy non-compliance. A new Cloud project gets Test access on enabling the API, and test accounts have no billing and serve no ads, so development needs no contract or card. Daily operations are capped at 2,880 (Explorer) or 15,000 (Basic) on production accounts.",
      "priceSummary": "Free",
      "where": "both",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer documentation or the API terms (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 3,
      "popularity": {
        "githubStars": 753,
        "npmWeekly": null,
        "pypiWeekly": 3147170,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://developers.google.com/google-ads/api/docs/get-started/introduction",
      "capabilities": [
        "ads.reporting",
        "ads.campaigns",
        "ads.budgets",
        "ads.audiences",
        "ads.creatives"
      ],
      "tags": [
        "hosted",
        "official",
        "free-tier",
        "mcp",
        "oauth",
        "python",
        "java",
        "enterprise",
        "status-page",
        "sandbox"
      ],
      "lastRelease": "2026-09-23",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 76.4,
        "grade": "BB",
        "agentReady": true,
        "rank": 33,
        "ranked": true,
        "rankOf": 950,
        "categoryRank": 1,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 87,
          "maintenance": 87,
          "payments": 40,
          "reliability": 82,
          "schema": 84,
          "security": 71,
          "transparency": 82
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Test accounts are free and need no approval, and `validate_only` checks a change without running it. Production access needs a Google Cloud project approved at Explorer level or above and a person to set up OAuth. One OAuth scope covers both reads and writes. The official MCP server is read-only, self-hosted and at version 0.0.4.",
        "bestFor": "It suits an agent that reports on or manages Google Ads accounts for an advertiser or agency that can get a Cloud project approved.",
        "strengths": [
          "`validate_only` on mutate requests validates a change without executing it, and mutates are atomic unless `partial_failure` is set",
          "Test accounts serve no ads and have no billing, and a new Cloud project gets Test access when the API is enabled",
          "No incident on Google Ads or the Google Ads API in the Ads Status Dashboard feed from 24 October 2025 to 3 October 2026",
          "Published sunset timetable, with each major version live for about 12 months and at most two upgrades a year",
          "`change_event` reports who changed what, the client type and old and new values for the past 30 days"
        ],
        "weaknesses": [
          "One OAuth scope, `adwords`, covers reading, editing, creating and deleting. Read-only access depends on the Google Ads user role",
          "Production accounts need Explorer access (2,880 operations a day) or higher. Basic needs brand verification and Standard a manual audit of about 10 business days",
          "The per-second rate limit has no published number, since it's a token bucket that varies with server load",
          "No idempotency keys were found in the reviewed documentation",
          "The official MCP server is read-only, self-hosted and at v0.0.4, and it isn't in the official MCP registry"
        ],
        "agentNotes": [
          "Send `validateOnly: true` on a mutate first. It returns errors without making the change. Batch jobs don't support it",
          "Create campaigns with status PAUSED and enable them in a separate step, since an enabled campaign with a budget can spend",
          "Send `login-customer-id` (digits only, no hyphens) when you reach a client account through a manager account",
          "A failed request still counts against the daily operation quota. Paging with a valid `next_page_token` doesn't",
          "Wait at least 12 hours between account budget changes on one account, and use the Data Manager API for new Customer Match or offline conversion work"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 76.4
          }
        ],
        "editorialScores": {
          "ergonomics": 87,
          "maintenance": 87,
          "payments": 40,
          "reliability": 82,
          "schema": 84,
          "security": 71,
          "transparency": 67
        },
        "provenanceScore": 96
      },
      "connect": {
        "install": "pip install google-ads",
        "http": "curl -i -X POST \\\n  https://googleads.googleapis.com/v25/customers/CUSTOMER_ID/googleAds:searchStream \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer ACCESS_TOKEN\" \\\n  -H \"login-customer-id: LOGIN_CUSTOMER_ID\" \\\n  --data-binary \"@query.json\"",
        "config": {
          "mcpServers": {
            "google-ads-mcp": {
              "args": [
                "run",
                "--spec",
                "git+https://github.com/googleads/google-ads-mcp.git",
                "google-ads-mcp"
              ],
              "command": "pipx",
              "env": {
                "GOOGLE_APPLICATION_CREDENTIALS": "/path/to/credentials.json",
                "GOOGLE_PROJECT_ID": "YOUR_PROJECT_ID"
              }
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/ads.reporting",
        "tool": "https://letme.dev/google-ads-api"
      },
      "sameCompany": [
        "gemini-api",
        "gemini-embedding",
        "vertex-ai-tuning",
        "google-model-armor",
        "google-imagen",
        "google-veo",
        "google-lyria",
        "google-speech-to-text",
        "gemini-live",
        "google-adk",
        "google-secret-manager",
        "google-cloud-document-ai",
        "google-weather-api",
        "chrome-devtools-mcp",
        "google-maps-platform",
        "google-cloud-translation",
        "google-calendar-api",
        "firebase-cloud-messaging",
        "google-drive-api",
        "gemini-cli",
        "google-search-console",
        "google-forms",
        "google-sheets-api",
        "gmail-api"
      ],
      "area": "communication",
      "provenance": {
        "legalEntity": "Google LLC",
        "domain": "google.com",
        "domainRegistered": "1997-09-15",
        "domainNote": "The endpoint is on googleapis.com, Google's API domain. google.com was registered in 1997.",
        "endpointOnVendorDomain": true,
        "terms": "https://developers.google.com/google-ads/api/terms",
        "privacy": "https://policies.google.com/privacy",
        "statusPage": "https://ads.google.com/status/publisher/",
        "changelog": "https://developers.google.com/google-ads/api/docs/release-notes",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "The Google Ads API terms name Google LLC for most countries, Google Ireland Limited for EMEA and Google Asia Pacific Pte. Ltd. for APAC.",
          "The terms page says it was last updated on 21 February 2019 and still defines the developer token, which Google sunset on 9 September 2026.",
          "RDAP for google.com gives a registration date of 1997-09-15.",
          "www.google.com/.well-known/security.txt expires on 1 April 2030 and names g.co/vulnz, security@google.com and the vulnerability reward programme.",
          "Google publishes a discovery document for the REST interface and protocol buffer definitions for gRPC, not an OpenAPI spec."
        ],
        "score": 96
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/google-ads-api.json",
      "live": {
        "slug": "google-ads-api",
        "probe": {
          "target": "https://googleads.googleapis.com",
          "method": "get",
          "lastAt": "2026-10-10T04:40:50.349948028Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 45,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 47,
          "p95ms24h": 99,
          "samples24h": 248,
          "samples30d": 391,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 93,
              "ok": 93
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 48,
              "ok": 48
            }
          ]
        },
        "vendorStatus": {
          "page": "https://ads.google.com/status/publisher",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-10T00:50:37.821323489Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "googleads/google-ads-python",
            "version": "33.0.0",
            "released": "2026-09-23",
            "seenAt": "2026-10-09T16:55:23.161552916Z"
          },
          {
            "registry": "pypi",
            "name": "google-ads",
            "version": "33.0.0",
            "released": "2026-09-23",
            "seenAt": "2026-10-09T16:55:22.973534278Z"
          }
        ],
        "githubStars": 753,
        "pypiWeekly": 3140805,
        "securityTxt": {
          "url": "https://google.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2030-04-01T00:00:00z",
          "checkedAt": "2026-10-09T15:39:28.443612679Z"
        },
        "pages": [
          {
            "url": "https://developers.google.com/google-ads/api/docs/release-notes",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-09T18:35:46.935439122Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "dc6ee6118a62"
          },
          {
            "url": "https://developers.google.com/google-ads/api/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-09T18:35:49.322469601Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b2c89bed13ba"
          }
        ],
        "updatedAt": "2026-10-10T04:40:50.349948028Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Apple",
        "b": "Google",
        "name": "Vendor"
      },
      {
        "a": "https://api.ads.apple.com/v1",
        "b": "https://googleads.googleapis.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP, stdio, Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Free",
        "b": "Free",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under the Apple Advertising Services Terms of Service. The client libraries are MIT",
        "b": "Proprietary service under the Google Ads API terms. The client libraries and the google-ads-mcp server are Apache-2.0",
        "name": "Licence"
      },
      {
        "a": "none",
        "b": "3",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-08-14",
        "b": "2026-09-23",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "2019-02-21",
        "name": "Terms last updated"
      },
      {
        "a": "couldn't be read",
        "b": "2026-10-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "none",
        "b": "753 stars, 3.1M PyPI/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Google Ads API scores 76.4 (BB) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in every scored category.",
        "question": "Which is better for AI agents, Apple Ads Platform API or Google Ads API?"
      },
      {
        "answer": "Both use an OAuth sign-in.",
        "question": "Do Apple Ads Platform API and Google Ads API need an API key?"
      },
      {
        "answer": "Yes. Apple Ads Platform API has a hosted endpoint at https://api.ads.apple.com/v1 and Google Ads API at https://googleads.googleapis.com.",
        "question": "Can an agent call Apple Ads Platform API and Google Ads API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": null,
        "also": null,
        "goodFor": "An agent that manages or reports on App Store search campaigns, or Apple Maps campaigns, for an advertiser whose administrator can grant an API role.",
        "slug": "apple-ads",
        "watchFor": "The Platform API was first released in August 2026 and its changelog has one entry. The Campaign Management API 5 it replaces is sunset on 26 January 2027"
      },
      {
        "aheadOn": [
          "Reliability, 82 against 35",
          "Schema \u0026 documentation, 84 against 69",
          "Agent ergonomics, 87 against 69",
          "Payments \u0026 pricing, 40 against 20",
          "Maintenance \u0026 community, 87 against 48",
          "Transparency \u0026 trust, 82 against 66"
        ],
        "also": [
          "Agent-ready, a grade of BB or better",
          "Runs on your own machine"
        ],
        "goodFor": "It suits an agent that reports on or manages Google Ads accounts for an advertiser or agency that can get a Cloud project approved.",
        "slug": "google-ads-api",
        "watchFor": "One OAuth scope, `adwords`, covers reading, editing, creating and deleting. Read-only access depends on the Google Ads user role"
      }
    ],
    "job": {
      "capability": "ads.reporting",
      "name": "Ad reporting"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-apple-ads.json",
        "title": "Amazon Ads API vs Apple Ads Platform API",
        "url": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-apple-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-google-ads-api.json",
        "title": "Amazon Ads API vs Google Ads API",
        "url": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-google-ads-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-linkedin-marketing-api.json",
        "title": "Apple Ads Platform API vs LinkedIn Marketing APIs",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-linkedin-marketing-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-meta-marketing-api.json",
        "title": "Apple Ads Platform API vs Meta Marketing API",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-meta-marketing-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-microsoft-advertising-api.json",
        "title": "Apple Ads Platform API vs Microsoft Advertising API",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-microsoft-advertising-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-snapchat-ads.json",
        "title": "Apple Ads Platform API vs Snapchat Ads API",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-snapchat-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/apple-ads-vs-x-ads.json",
        "title": "Apple Ads Platform API vs X Ads API",
        "url": "https://www.anchorterminal.com/compare/apple-ads-vs-x-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api.json",
        "title": "Google Ads API vs LinkedIn Marketing APIs",
        "url": "https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api.json",
        "title": "Google Ads API vs Meta Marketing API",
        "url": "https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api.json",
        "title": "Google Ads API vs Microsoft Advertising API",
        "url": "https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-ads-api-vs-snapchat-ads.json",
        "title": "Google Ads API vs Snapchat Ads API",
        "url": "https://www.anchorterminal.com/compare/google-ads-api-vs-snapchat-ads"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-ads-api-vs-x-ads.json",
        "title": "Google Ads API vs X Ads API",
        "url": "https://www.anchorterminal.com/compare/google-ads-api-vs-x-ads"
      }
    ],
    "scores": [
      {
        "apple-ads": 35,
        "by": 47,
        "edge": "google-ads-api",
        "google-ads-api": 82,
        "key": "reliability",
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "apple-ads": 69,
        "by": 15,
        "edge": "google-ads-api",
        "google-ads-api": 84,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "apple-ads": 69,
        "by": 18,
        "edge": "google-ads-api",
        "google-ads-api": 87,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "apple-ads": 68,
        "by": 3,
        "edge": "google-ads-api",
        "google-ads-api": 71,
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "apple-ads": 20,
        "by": 20,
        "edge": "google-ads-api",
        "google-ads-api": 40,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "apple-ads": 48,
        "by": 39,
        "edge": "google-ads-api",
        "google-ads-api": 87,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "apple-ads": 66,
        "by": 16,
        "edge": "google-ads-api",
        "google-ads-api": 82,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Google Ads API scores 76.4 (BB) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in every scored category. Both do ad reporting.",
    "verdicts": {
      "apple-ads": "Every response carries `RateLimit-*` headers and a 429 carries `Retry-After`, Apple maintains MIT client libraries in four languages, and read-only API roles exist. The API was first released in August 2026. No status page, SLA, published OpenAPI file, idempotency key or test account was found, and a person must create the credentials in the Apple Ads interface.",
      "google-ads-api": "Test accounts are free and need no approval, and `validate_only` checks a change without running it. Production access needs a Google Cloud project approved at Explorer level or above and a person to set up OAuth. One OAuth scope covers both reads and writes. The official MCP server is read-only, self-hosted and at version 0.0.4."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api",
    "json": "https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api.md",
    "slim": "https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api.min.md"
  },
  "markdown": "Google Ads API scores 76.4 (BB) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in every scored category. Both do ad reporting.\n\n- Apple Ads Platform API: grade D, 53.8/100, rank #699 of 950. Markdown https://www.anchorterminal.com/tools/apple-ads.md · JSON https://www.anchorterminal.com/api/v1/tools/apple-ads.json\n- Google Ads API: grade BB, 76.4/100, rank #33 of 950. Markdown https://www.anchorterminal.com/tools/google-ads-api.md · JSON https://www.anchorterminal.com/api/v1/tools/google-ads-api.json\n- Best advertising platform APIs for AI agents: https://www.anchorterminal.com/best/advertising/index.md\n- All 28 advertising comparisons: https://www.anchorterminal.com/compare/advertising/index.md\n\n## Which one, for what\n\n### Apple Ads Platform API (D)\n\nGood for: An agent that manages or reports on App Store search campaigns, or Apple Maps campaigns, for an advertiser whose administrator can grant an API role.\n\nWatch for: The Platform API was first released in August 2026 and its changelog has one entry. The Campaign Management API 5 it replaces is sunset on 26 January 2027\n\n### Google Ads API (BB)\n\nGood for: It suits an agent that reports on or manages Google Ads accounts for an advertiser or agency that can get a Cloud project approved.\n\nAhead on:\n- Reliability, 82 against 35\n- Schema \u0026 documentation, 84 against 69\n- Agent ergonomics, 87 against 69\n- Payments \u0026 pricing, 40 against 20\n- Maintenance \u0026 community, 87 against 48\n- Transparency \u0026 trust, 82 against 66\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n- Runs on your own machine\n\nWatch for: One OAuth scope, `adwords`, covers reading, editing, creating and deleting. Read-only access depends on the Google Ads user role\n\n\n## Score by category\n\n| Category | Weight | Apple Ads Platform API | Google Ads API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 35 | 82 | Google Ads API +47 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 69 | 84 | Google Ads API +15 |\n| Agent ergonomics | 13% (16.2 this run) | 69 | 87 | Google Ads API +18 |\n| Security \u0026 auth | 14% (17.5 this run) | 68 | 71 | Google Ads API +3 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 20 | 40 | Google Ads API +20 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 48 | 87 | Google Ads API +39 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 66 | 82 | Google Ads API +16 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **53.8 · D** | **76.4 · BB** | |\n\n## Facts side by side\n\n| Fact | Apple Ads Platform API | Google Ads API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Apple | Google |\n| Hosted endpoint | `https://api.ads.apple.com/v1` | `https://googleads.googleapis.com` |\n| Transports | HTTP | HTTP, stdio, Streamable HTTP |\n| Auth | OAuth | OAuth |\n| Pricing | Free | Free |\n| x402 | no | no |\n| Licence | Proprietary service under the Apple Advertising Services Terms of Service. The client libraries are MIT | Proprietary service under the Google Ads API terms. The client libraries and the google-ads-mcp server are Apache-2.0 |\n| Tools exposed | none | 3 |\n| Read-only variant documented | no | no |\n| llms.txt | no | no |\n| Last release | 2026-08-14 | 2026-09-23 |\n| Terms last updated | no date given | 2019-02-21 |\n| Privacy policy last updated | couldn't be read | 2026-10-01 |\n| Customer content may train models | yes | yes |\n| Terms restrict automated access | not found in the text | not found in the text |\n| Terms restrict benchmarking | not found in the text | not found in the text |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | not found in the text | yes |\n| Popularity | none | 753 stars, 3.1M PyPI/wk |\n\n## Verdicts\n\n**Apple Ads Platform API.** Every response carries `RateLimit-*` headers and a 429 carries `Retry-After`, Apple maintains MIT client libraries in four languages, and read-only API roles exist. The API was first released in August 2026. No status page, SLA, published OpenAPI file, idempotency key or test account was found, and a person must create the credentials in the Apple Ads interface.\n\n**Google Ads API.** Test accounts are free and need no approval, and `validate_only` checks a change without running it. Production access needs a Google Cloud project approved at Explorer level or above and a person to set up OAuth. One OAuth scope covers both reads and writes. The official MCP server is read-only, self-hosted and at version 0.0.4.\n\n## Before you call either\n\n### Apple Ads Platform API\n\n1. Send `Authorization: Bearer {access_token}` and `X-AP-Context: adAccountId={adAccountId}` on every ad account call. Get the account id from `GET /v1/acls`\n2. Request a new access token every 3,600 seconds from `https://appleid.apple.com/auth/oauth2/token` with scope `searchadsorg`. The signed client secret lasts at most 180 days\n3. Read `RateLimit-Remaining` on each response. On a 429 wait the `Retry-After` seconds, then double the wait up to 16 seconds\n4. List and filter with POST to a `/query` endpoint, not GET with query parameters. Deleted entities return only when a filter asks for them\n5. On PUT send only the fields to change, and send the complete desired array for any array field. Create campaigns with `\"status\": \"PAUSED\"` before review\n\n### Google Ads API\n\n1. Send `validateOnly: true` on a mutate first. It returns errors without making the change. Batch jobs don't support it\n2. Create campaigns with status PAUSED and enable them in a separate step, since an enabled campaign with a budget can spend\n3. Send `login-customer-id` (digits only, no hyphens) when you reach a client account through a manager account\n4. A failed request still counts against the daily operation quota. Paging with a valid `next_page_token` doesn't\n5. Wait at least 12 hours between account budget changes on one account, and use the Data Manager API for new Customer Match or offline conversion work\n\n## Questions\n\n### Which is better for AI agents, Apple Ads Platform API or Google Ads API?\n\nGoogle Ads API scores 76.4 (BB) on agent readiness against Apple Ads Platform API's 53.8 (D), and leads in every scored category.\n\n### Do Apple Ads Platform API and Google Ads API need an API key?\n\nBoth use an OAuth sign-in.\n\n### Can an agent call Apple Ads Platform API and Google Ads API without installing anything?\n\nYes. Apple Ads Platform API has a hosted endpoint at https://api.ads.apple.com/v1 and Google Ads API at https://googleads.googleapis.com.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api.json, and with the fewest tokens: https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"apple-ads\", \"b\": \"google-ads-api\"}`. From a terminal: `anchor compare apple-ads google-ads-api`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/apple-ads.json and https://www.anchorterminal.com/api/v1/tools/google-ads-api.json\n\n## Other comparisons with Apple Ads Platform API or Google Ads API\n\n- [Amazon Ads API vs Apple Ads Platform API](https://www.anchorterminal.com/compare/amazon-ads-api-vs-apple-ads.md)\n- [Amazon Ads API vs Google Ads API](https://www.anchorterminal.com/compare/amazon-ads-api-vs-google-ads-api.md)\n- [Apple Ads Platform API vs LinkedIn Marketing APIs](https://www.anchorterminal.com/compare/apple-ads-vs-linkedin-marketing-api.md)\n- [Apple Ads Platform API vs Meta Marketing API](https://www.anchorterminal.com/compare/apple-ads-vs-meta-marketing-api.md)\n- [Apple Ads Platform API vs Microsoft Advertising API](https://www.anchorterminal.com/compare/apple-ads-vs-microsoft-advertising-api.md)\n- [Apple Ads Platform API vs Snapchat Ads API](https://www.anchorterminal.com/compare/apple-ads-vs-snapchat-ads.md)\n- [Apple Ads Platform API vs X Ads API](https://www.anchorterminal.com/compare/apple-ads-vs-x-ads.md)\n- [Google Ads API vs LinkedIn Marketing APIs](https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api.md)\n- [Google Ads API vs Meta Marketing API](https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api.md)\n- [Google Ads API vs Microsoft Advertising API](https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api.md)\n- [Google Ads API vs Snapchat Ads API](https://www.anchorterminal.com/compare/google-ads-api-vs-snapchat-ads.md)\n- [Google Ads API vs X Ads API](https://www.anchorterminal.com/compare/google-ads-api-vs-x-ads.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-10",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Apple Ads Platform API vs Google Ads API",
        "url": ""
      }
    ],
    "description": "Google Ads scores 76.4 (BB) to Apple Ads Platform's 53.8 (D) for ad reporting. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "Apple Ads Platform API D 53.8",
      "Google Ads API BB 76.4",
      "scores"
    ],
    "h1": "Apple Ads Platform API vs Google Ads API",
    "image": "https://www.anchorterminal.com/assets/og/compare-apple-ads-vs-google-ads-api.png",
    "path": "/compare/apple-ads-vs-google-ads-api",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Apple Ads Platform vs Google Ads for AI agents (2026)",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/apple-ads-vs-google-ads-api"
  },
  "tokens": {
    "markdown": 2350,
    "slim": 680
  },
  "version": 1
}
