{
  "data": {
    "a": {
      "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": 31,
        "ranked": true,
        "rankOf": 722,
        "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",
        "google-adk",
        "google-secret-manager",
        "google-weather-api",
        "chrome-devtools-mcp",
        "google-maps-platform",
        "google-cloud-translation",
        "google-calendar-api",
        "google-drive-api",
        "gemini-cli",
        "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-08T19:52:51.715835773Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 51,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 48,
          "p95ms24h": 97,
          "samples24h": 50,
          "samples30d": 50,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 50,
              "ok": 50
            }
          ]
        },
        "vendorStatus": {
          "page": "https://ads.google.com/status/publisher",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:38:37.535546754Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "googleads/google-ads-python",
            "version": "33.0.0",
            "released": "2026-09-23",
            "seenAt": "2026-10-08T16:13:37.184328114Z"
          },
          {
            "registry": "pypi",
            "name": "google-ads",
            "version": "33.0.0",
            "released": "2026-09-23",
            "seenAt": "2026-10-08T16:13:37.03050822Z"
          }
        ],
        "githubStars": 753,
        "pypiWeekly": 3147170,
        "securityTxt": {
          "url": "https://google.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2030-04-01T00:00:00z",
          "checkedAt": "2026-10-08T15:38:39.75078566Z"
        },
        "pages": [
          {
            "url": "https://developers.google.com/google-ads/api/docs/release-notes",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:17:38.977243791Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "dc6ee6118a62"
          },
          {
            "url": "https://developers.google.com/google-ads/api/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:17:41.93239623Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b2c89bed13ba"
          }
        ],
        "updatedAt": "2026-10-08T19:52:51.715835773Z"
      }
    },
    "answer": "Google Ads API scores 76.4 (BB) on agent readiness against Meta Marketing API's 67.7 (B), and leads in every scored category.",
    "b": {
      "slug": "meta-marketing-api",
      "name": "Meta Marketing API",
      "vendor": "Meta Platforms, Inc.",
      "vendorUrl": "https://developers.facebook.com",
      "kind": "http-api",
      "category": "advertising",
      "summary": "Meta's Marketing API creates and manages campaigns, ad sets, ads, creatives and audiences across Facebook, Instagram, Messenger and WhatsApp, and reports performance through Ads Insights. It is a versioned Graph API with OAuth access tokens.",
      "url": "https://www.anchorterminal.com/tools/meta-marketing-api",
      "markdownUrl": "https://www.anchorterminal.com/tools/meta-marketing-api.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/meta-marketing-api.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/meta-marketing-api.json",
      "repo": "https://github.com/facebook/facebook-python-business-sdk",
      "license": "Proprietary service under the Meta Platform Terms. The Business SDKs and the codegen specs on GitHub carry Meta's own platform licence, which allows use only with Meta's APIs",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://graph.facebook.com",
      "packages": [
        {
          "registry": "pypi",
          "name": "facebook-business"
        },
        {
          "registry": "npm",
          "name": "facebook-nodejs-business-sdk"
        },
        {
          "registry": "pypi",
          "name": "meta-ads"
        }
      ],
      "auth": "oauth",
      "authNotes": "Every call needs an access token from a Meta developer app with the Marketing API product added. Access is self-serve at the Limited tier. A user token comes from the Facebook Login OAuth dialogue with the `ads_read` or `ads_management` scope, and a system user token, created in Meta Business Suite, doesn't expire. Managing ad accounts owned by other businesses needs advanced access to those permissions through App Review, and business verification may be required. Full access (higher rate limits and the Business Manager API) is granted from the App Dashboard after 500 successful calls in 15 days with an error rate under 15 per cent.",
      "pricing": "free",
      "pricingNotes": "No charge for API calls was found in the Platform Terms or the Marketing API documentation. Access tiers differ by rate limit, and ad spend is billed to the ad account. An agent can start without a contract. Limited access is automatic when the Marketing API product is added to an app, and a sandbox ad account takes read and write calls with no funding source (checked 2026-10-08).",
      "priceSummary": "Free",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Marketing API documentation, the llms.txt indexes or the Platform Terms (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 1604,
        "npmWeekly": 500852,
        "pypiWeekly": 1089043,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://developers.facebook.com/docs/marketing-apis/",
      "llmsTxt": "https://developers.facebook.com/documentation/ads-commerce/llms.txt",
      "capabilities": [
        "ads.reporting",
        "ads.campaigns",
        "ads.budgets",
        "ads.audiences",
        "ads.creatives"
      ],
      "tags": [
        "hosted",
        "free",
        "oauth",
        "app-review",
        "sandbox",
        "mcp",
        "cli",
        "llms-txt",
        "python",
        "typescript",
        "php",
        "ruby",
        "java",
        "status-page",
        "bug-bounty"
      ],
      "lastRelease": "2026-09-21",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 67.7,
        "grade": "B",
        "agentReady": false,
        "rank": 201,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 2,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 77,
          "maintenance": 74,
          "payments": 30,
          "reliability": 80,
          "schema": 76,
          "security": 61,
          "transparency": 68
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Reporting, campaign, budget, audience and creative endpoints sit behind `ads_read` and `ads_management` scopes, with a `validate_only` option and sandbox ad accounts for checking a change before it spends. New apps are held to a score of 60 per ad account, with a 300-second block at the limit, and the documented requests pass the access token as a parameter.",
        "bestFor": "The direct route to Facebook, Instagram, Messenger, WhatsApp and Threads advertising for reporting, campaign and budget changes, audiences and creatives.",
        "strengths": [
          "`execution_options=validate_only` runs the validation rules on a campaign write without performing it, and sandbox ad accounts accept writes with no funding source",
          "`ads_read` is a read-only scope, and system users hold only the ad accounts, Pages and catalogues assigned to them",
          "llms.txt indexes and a Markdown copy of every guide and reference page, with a section of rules for AI agents",
          "Rate limits are published with numbers per tier, with usage headers that estimate the time until access returns",
          "Breaking changes ship only in numbered versions with at least 90 days' notice, and v26.0 followed on 29 July 2026"
        ],
        "weaknesses": [
          "Default Limited access allows a score of 60 per ad account (read 1, write 3) and blocks for 300 seconds at the limit",
          "The documented request style passes `access_token` as a request parameter, and system user tokens don't expire",
          "No idempotency key was found in the reviewed documentation, so a retried create can make a second campaign",
          "npm's `facebook-nodejs-business-sdk` is still 24.0.1 from 21 November 2025, while GitHub is at v26.0.2 and v24.0 expired on 6 October 2026",
          "The Marketing API changelog and versioning pages still name v25.0 as current, ten weeks after v26.0"
        ],
        "agentNotes": [
          "Put a version in every path, such as /v26.0/act_\u003cAD_ACCOUNT_ID\u003e/campaigns. Unversioned Marketing API calls fail",
          "Create campaigns, ad sets and ads with `status=PAUSED`, and send `execution_options=[\"validate_only\"]` first to test a write without making it",
          "Ask for `ads_read` alone when the task is reporting. `ads_management` can change budgets and activate spend",
          "Read `X-Business-Use-Case-Usage` and `X-Ad-Account-Usage` after each call and wait for `estimated_time_to_regain_access` on errors 17, 613 and 80004",
          "Change an ad set budget at most four times an hour and an account spending limit at most ten times a day"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 67.7
          }
        ],
        "editorialScores": {
          "ergonomics": 77,
          "maintenance": 74,
          "payments": 30,
          "reliability": 80,
          "schema": 76,
          "security": 61,
          "transparency": 41
        },
        "provenanceScore": 94
      },
      "connect": {
        "install": "pip install facebook_business",
        "http": "curl -G \\\n  -d \"access_token=\u003cACCESS_TOKEN\u003e\" \\\n  \"https://graph.facebook.com/v25.0/me/adaccounts\"",
        "claudeCode": "claude mcp add --transport http --client-id \u003cMETA_APP_ID\u003e meta-ads https://mcp.facebook.com/ads"
      },
      "letme": {
        "capability": "https://letme.dev/ads.reporting",
        "tool": "https://letme.dev/meta-marketing-api"
      },
      "sameCompany": [
        "whatsapp-cloud-api"
      ],
      "area": "communication",
      "provenance": {
        "legalEntity": "Meta Platforms, Inc.",
        "domain": "facebook.com",
        "domainRegistered": "1997-03-29",
        "endpointOnVendorDomain": true,
        "terms": "https://developers.facebook.com/terms",
        "privacy": "https://www.facebook.com/privacy/policy/",
        "statusPage": "https://metastatus.com",
        "changelog": "https://developers.facebook.com/documentation/ads-commerce/marketing-api/marketing-api-changelog",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "The Meta Platform Terms (last updated 3 February 2026) name Meta Platforms, Inc. for UK data transfers and Meta Platforms Ireland Limited as controller of EEA data.",
          "The API answers at graph.facebook.com and the Ads MCP server at mcp.facebook.com, both facebook.com subdomains.",
          "www.facebook.com/.well-known/security.txt names a contact, the bug bounty policy at bugbounty.meta.com and a vulnerability disclosure policy, and expires on 7 November 2026. developers.facebook.com has no security.txt of its own.",
          "RDAP for facebook.com gives a registration date of 1997-03-29.",
          "The privacy policy and the data processing terms on facebook.com render only with JavaScript, so their text wasn't read.",
          "The Marketing API changelog page still shows v25.0 as the latest version. The Graph API changelog and the v26.0 changelog page show v26.0 from 29 July 2026."
        ],
        "score": 94
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/meta-marketing-api.json",
      "live": {
        "slug": "meta-marketing-api",
        "probe": {
          "target": "https://graph.facebook.com",
          "method": "get",
          "lastAt": "2026-10-08T19:52:55.803908315Z",
          "lastOk": true,
          "lastStatus": 400,
          "lastMs": 131,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 131,
          "p95ms24h": 189,
          "samples24h": 50,
          "samples30d": 50,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 50,
              "ok": 50
            }
          ]
        },
        "vendorStatus": {
          "page": "https://metastatus.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T19:38:46.86130519Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "facebook/facebook-python-business-sdk",
            "version": "26.0.2",
            "released": "2026-09-21",
            "seenAt": "2026-10-08T16:20:32.10844618Z"
          },
          {
            "registry": "npm",
            "name": "facebook-nodejs-business-sdk",
            "version": "24.0.1",
            "seenAt": "2026-10-08T16:20:30.20877898Z"
          },
          {
            "registry": "pypi",
            "name": "facebook-business",
            "version": "26.0.2",
            "released": "2026-09-21",
            "seenAt": "2026-10-08T16:20:30.005647872Z"
          },
          {
            "registry": "pypi",
            "name": "meta-ads",
            "version": "1.2.0",
            "released": "2026-09-29",
            "seenAt": "2026-10-08T16:20:31.070786739Z"
          }
        ],
        "githubStars": 1605,
        "npmWeekly": 500852,
        "pypiWeekly": 1089043,
        "securityTxt": {
          "url": "https://facebook.com/.well-known/security.txt",
          "state": "valid",
          "expires": "2026-11-07T07:38:40-08:00",
          "checkedAt": "2026-10-08T15:38:40.384187776Z"
        },
        "pages": [
          {
            "url": "https://developers.facebook.com/documentation/ads-commerce/marketing-api/marketing-api-changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:17:35.237810199Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f3469d786112"
          },
          {
            "url": "https://www.facebook.com/privacy/policy/",
            "kind": "privacy",
            "status": 0,
            "checkedAt": "2026-10-08T18:27:43.275272381Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "blockedByRobots": true
          },
          {
            "url": "https://developers.facebook.com/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:17:39.648337351Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b317e3abcc1f"
          }
        ],
        "updatedAt": "2026-10-08T19:52:55.803908315Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Google",
        "b": "Meta Platforms, Inc.",
        "name": "Vendor"
      },
      {
        "a": "https://googleads.googleapis.com",
        "b": "https://graph.facebook.com",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, stdio, Streamable HTTP",
        "b": "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 Google Ads API terms. The client libraries and the google-ads-mcp server are Apache-2.0",
        "b": "Proprietary service under the Meta Platform Terms. The Business SDKs and the codegen specs on GitHub carry Meta's own platform licence, which allows use only with Meta's APIs",
        "name": "Licence"
      },
      {
        "a": "3",
        "b": "none",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-09-23",
        "b": "2026-09-21",
        "name": "Last release"
      },
      {
        "a": "2019-02-21",
        "b": "2026-02-03",
        "name": "Terms last updated"
      },
      {
        "a": "2026-10-01",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "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": "yes",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "753 stars, 3.1M PyPI/wk",
        "b": "1.6k stars, 501k npm/wk, 1.1M PyPI/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Google Ads API scores 76.4 (BB) on agent readiness against Meta Marketing API's 67.7 (B), and leads in every scored category.",
        "question": "Which is better for AI agents, Google Ads API or Meta Marketing API?"
      },
      {
        "answer": "Both use an OAuth sign-in.",
        "question": "Do Google Ads API and Meta Marketing API need an API key?"
      },
      {
        "answer": "Yes. Google Ads API has a hosted endpoint at https://googleads.googleapis.com and Meta Marketing API at https://graph.facebook.com.",
        "question": "Can an agent call Google Ads API and Meta Marketing API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Schema \u0026 documentation, 84 against 76",
          "Agent ergonomics, 87 against 77",
          "Security \u0026 auth, 71 against 61",
          "Payments \u0026 pricing, 40 against 30",
          "Maintenance \u0026 community, 87 against 74",
          "Transparency \u0026 trust, 82 against 68"
        ],
        "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"
      },
      {
        "aheadOn": null,
        "also": null,
        "goodFor": "The direct route to Facebook, Instagram, Messenger, WhatsApp and Threads advertising for reporting, campaign and budget changes, audiences and creatives.",
        "slug": "meta-marketing-api",
        "watchFor": "Default Limited access allows a score of 60 per ad account (read 1, write 3) and blocks for 300 seconds at the limit"
      }
    ],
    "job": {
      "capability": "ads.reporting",
      "name": "Ads reporting"
    },
    "others": [
      {
        "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/amazon-ads-api-vs-meta-marketing-api.json",
        "title": "Amazon Ads API vs Meta Marketing API",
        "url": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-meta-marketing-api"
      },
      {
        "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-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/linkedin-marketing-api-vs-meta-marketing-api.json",
        "title": "LinkedIn Marketing APIs vs Meta Marketing API",
        "url": "https://www.anchorterminal.com/compare/linkedin-marketing-api-vs-meta-marketing-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/meta-marketing-api-vs-microsoft-advertising-api.json",
        "title": "Meta Marketing API vs Microsoft Advertising API",
        "url": "https://www.anchorterminal.com/compare/meta-marketing-api-vs-microsoft-advertising-api"
      }
    ],
    "scores": [
      {
        "by": 2,
        "edge": "google-ads-api",
        "google-ads-api": 82,
        "key": "reliability",
        "meta-marketing-api": 80,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 8,
        "edge": "google-ads-api",
        "google-ads-api": 84,
        "key": "schema",
        "meta-marketing-api": 76,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 10,
        "edge": "google-ads-api",
        "google-ads-api": 87,
        "key": "ergonomics",
        "meta-marketing-api": 77,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 10,
        "edge": "google-ads-api",
        "google-ads-api": 71,
        "key": "security",
        "meta-marketing-api": 61,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 10,
        "edge": "google-ads-api",
        "google-ads-api": 40,
        "key": "payments",
        "meta-marketing-api": 30,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 13,
        "edge": "google-ads-api",
        "google-ads-api": 87,
        "key": "maintenance",
        "meta-marketing-api": 74,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 14,
        "edge": "google-ads-api",
        "google-ads-api": 82,
        "key": "transparency",
        "meta-marketing-api": 68,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Google Ads API scores 76.4 (BB) on agent readiness against Meta Marketing API's 67.7 (B), and leads in every scored category. Both do ads reporting.",
    "verdicts": {
      "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.",
      "meta-marketing-api": "Reporting, campaign, budget, audience and creative endpoints sit behind `ads_read` and `ads_management` scopes, with a `validate_only` option and sandbox ad accounts for checking a change before it spends. New apps are held to a score of 60 per ad account, with a 300-second block at the limit, and the documented requests pass the access token as a parameter."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api",
    "json": "https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api.md",
    "slim": "https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api.min.md"
  },
  "markdown": "Google Ads API scores 76.4 (BB) on agent readiness against Meta Marketing API's 67.7 (B), and leads in every scored category. Both do ads reporting.\n\n- Google Ads API: grade BB, 76.4/100, rank #31 of 722. Markdown https://www.anchorterminal.com/tools/google-ads-api.md · JSON https://www.anchorterminal.com/api/v1/tools/google-ads-api.json\n- Meta Marketing API: grade B, 67.7/100, rank #201 of 722. Markdown https://www.anchorterminal.com/tools/meta-marketing-api.md · JSON https://www.anchorterminal.com/api/v1/tools/meta-marketing-api.json\n\n## Which one, for what\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- Schema \u0026 documentation, 84 against 76\n- Agent ergonomics, 87 against 77\n- Security \u0026 auth, 71 against 61\n- Payments \u0026 pricing, 40 against 30\n- Maintenance \u0026 community, 87 against 74\n- Transparency \u0026 trust, 82 against 68\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### Meta Marketing API (B)\n\nGood for: The direct route to Facebook, Instagram, Messenger, WhatsApp and Threads advertising for reporting, campaign and budget changes, audiences and creatives.\n\nWatch for: Default Limited access allows a score of 60 per ad account (read 1, write 3) and blocks for 300 seconds at the limit\n\n\n## Score by category\n\n| Category | Weight | Google Ads API | Meta Marketing API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 82 | 80 | Google Ads API +2 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 84 | 76 | Google Ads API +8 |\n| Agent ergonomics | 13% (16.2 this run) | 87 | 77 | Google Ads API +10 |\n| Security \u0026 auth | 14% (17.5 this run) | 71 | 61 | Google Ads API +10 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 30 | Google Ads API +10 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 87 | 74 | Google Ads API +13 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 82 | 68 | Google Ads API +14 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **76.4 · BB** | **67.7 · B** | |\n\n## Facts side by side\n\n| Fact | Google Ads API | Meta Marketing API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Google | Meta Platforms, Inc. |\n| Hosted endpoint | `https://googleads.googleapis.com` | `https://graph.facebook.com` |\n| Transports | HTTP, stdio, Streamable HTTP | HTTP |\n| Auth | OAuth | OAuth |\n| Pricing | Free | Free |\n| x402 | no | no |\n| Licence | Proprietary service under the Google Ads API terms. The client libraries and the google-ads-mcp server are Apache-2.0 | Proprietary service under the Meta Platform Terms. The Business SDKs and the codegen specs on GitHub carry Meta's own platform licence, which allows use only with Meta's APIs |\n| Tools exposed | 3 | none |\n| Read-only variant documented | no | yes |\n| llms.txt | no | yes |\n| Last release | 2026-09-23 | 2026-09-21 |\n| Terms last updated | 2019-02-21 | 2026-02-03 |\n| Privacy policy last updated | 2026-10-01 | couldn't be read |\n| Customer content may train models | yes | not found in the text |\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 | yes | not found in the text |\n| Popularity | 753 stars, 3.1M PyPI/wk | 1.6k stars, 501k npm/wk, 1.1M PyPI/wk |\n\n## Verdicts\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**Meta Marketing API.** Reporting, campaign, budget, audience and creative endpoints sit behind `ads_read` and `ads_management` scopes, with a `validate_only` option and sandbox ad accounts for checking a change before it spends. New apps are held to a score of 60 per ad account, with a 300-second block at the limit, and the documented requests pass the access token as a parameter.\n\n## Before you call either\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### Meta Marketing API\n\n1. Put a version in every path, such as /v26.0/act_\u003cAD_ACCOUNT_ID\u003e/campaigns. Unversioned Marketing API calls fail\n2. Create campaigns, ad sets and ads with `status=PAUSED`, and send `execution_options=[\"validate_only\"]` first to test a write without making it\n3. Ask for `ads_read` alone when the task is reporting. `ads_management` can change budgets and activate spend\n4. Read `X-Business-Use-Case-Usage` and `X-Ad-Account-Usage` after each call and wait for `estimated_time_to_regain_access` on errors 17, 613 and 80004\n5. Change an ad set budget at most four times an hour and an account spending limit at most ten times a day\n\n## Questions\n\n### Which is better for AI agents, Google Ads API or Meta Marketing API?\n\nGoogle Ads API scores 76.4 (BB) on agent readiness against Meta Marketing API's 67.7 (B), and leads in every scored category.\n\n### Do Google Ads API and Meta Marketing API need an API key?\n\nBoth use an OAuth sign-in.\n\n### Can an agent call Google Ads API and Meta Marketing API without installing anything?\n\nYes. Google Ads API has a hosted endpoint at https://googleads.googleapis.com and Meta Marketing API at https://graph.facebook.com.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api.json, and with the fewest tokens: https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"google-ads-api\", \"b\": \"meta-marketing-api\"}`. From a terminal: `anchor compare google-ads-api meta-marketing-api`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/google-ads-api.json and https://www.anchorterminal.com/api/v1/tools/meta-marketing-api.json\n\n## Other comparisons with Google Ads API or Meta Marketing API\n\n- [Amazon Ads API vs Google Ads API](https://www.anchorterminal.com/compare/amazon-ads-api-vs-google-ads-api.md)\n- [Amazon Ads API vs Meta Marketing API](https://www.anchorterminal.com/compare/amazon-ads-api-vs-meta-marketing-api.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 Microsoft Advertising API](https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api.md)\n- [LinkedIn Marketing APIs vs Meta Marketing API](https://www.anchorterminal.com/compare/linkedin-marketing-api-vs-meta-marketing-api.md)\n- [Meta Marketing API vs Microsoft Advertising API](https://www.anchorterminal.com/compare/meta-marketing-api-vs-microsoft-advertising-api.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-08",
    "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": "Google Ads API vs Meta Marketing API",
        "url": ""
      }
    ],
    "description": "Google Ads API scores 76.4 (BB) on agent readiness against Meta Marketing API's 67.7 (B), and leads in every scored category. Both do ads reporting. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Google Ads API BB 76.4",
      "Meta Marketing API B 67.7",
      "scores"
    ],
    "h1": "Google Ads API vs Meta Marketing API",
    "image": "https://www.anchorterminal.com/assets/og/compare-google-ads-api-vs-meta-marketing-api.png",
    "path": "/compare/google-ads-api-vs-meta-marketing-api",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Google Ads API vs Meta Marketing API for AI agents, BB 76.4 vs B 67.7",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api"
  },
  "tokens": {
    "markdown": 2150,
    "slim": 730
  },
  "version": 1
}
