{
  "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": 629,
        "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-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-08T18:20:30.798433744Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 44,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 43,
          "p95ms24h": 97,
          "samples24h": 33,
          "samples30d": 33,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 33,
              "ok": 33
            }
          ]
        },
        "vendorStatus": {
          "page": "https://ads.google.com/status/publisher",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T17:50:43.370819693Z"
        },
        "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-08T18:20:30.798433744Z"
      }
    },
    "answer": "Google Ads API scores 76.4 (BB) on agent readiness against Microsoft Advertising API's 60.3 (C), and leads in every scored category.",
    "b": {
      "slug": "microsoft-advertising-api",
      "name": "Microsoft Advertising API",
      "vendor": "Microsoft",
      "vendorUrl": "https://learn.microsoft.com/en-us/advertising/guides/",
      "kind": "http-api",
      "category": "advertising",
      "summary": "Microsoft's API for Microsoft Advertising (formerly Bing Ads) search, shopping and audience campaigns. It covers campaign management, bulk upload and download, reporting, ad insight, billing and account management over REST and SOAP.",
      "url": "https://www.anchorterminal.com/tools/microsoft-advertising-api",
      "markdownUrl": "https://www.anchorterminal.com/tools/microsoft-advertising-api.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/microsoft-advertising-api.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/microsoft-advertising-api.json",
      "repo": "https://github.com/BingAds/BingAds-Python-SDK",
      "license": "Proprietary service. The .NET, Java, Python and PHP SDKs are MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://campaign.api.bingads.microsoft.com/CampaignManagement/v13",
      "packages": [
        {
          "registry": "pypi",
          "name": "msads"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 authorisation code grant through Microsoft Entra ID with the single scope `https://ads.microsoft.com/msads.manage`, or Google OAuth 2.0 with an `IdentityProvider` header. Every call also needs a developer token, which a Super Admin requests self-serve in the Microsoft Advertising developer settings. A person registers the app and grants consent in a browser, and multi-factor authentication is required. Access follows the user's role (Super Admin, Standard, Advertiser Campaign Manager, Viewer). No partner or sales approval was found in the reviewed documentation.",
      "pricing": "free",
      "pricingNotes": "No fee for API access was found in the reviewed documentation, and no statement that it is free either. Advertising spend is billed to the advertiser's account. The sandbox needs no payment method (sign-up has a Skip payment information step) and takes the shared developer token BBD37VB98, so testing can start without a contract or card (checked 2026-10-08).",
      "priceSummary": "Free",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Microsoft Advertising guides or reference pages (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": 7,
      "popularity": {
        "githubStars": 128,
        "npmWeekly": null,
        "pypiWeekly": 18920,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://learn.microsoft.com/en-us/advertising/guides/",
      "capabilities": [
        "ads.reporting",
        "ads.campaigns",
        "ads.budgets",
        "ads.audiences",
        "ads.creatives"
      ],
      "tags": [
        "hosted",
        "official",
        "oauth",
        "rest",
        "soap",
        "sandbox",
        "mcp",
        "python",
        "java",
        "dotnet",
        "php",
        "status-page"
      ],
      "lastRelease": "2026-09-29",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 60.3,
        "grade": "C",
        "agentReady": false,
        "rank": 360,
        "ranked": true,
        "rankOf": 629,
        "categoryRank": 4,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 63,
          "maintenance": 61,
          "payments": 30,
          "reliability": 60,
          "schema": 79,
          "security": 60,
          "transparency": 64
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Version 13 covers campaigns, budgets, audiences, ads and reports over REST with JSON, with a sandbox that needs no payment method and four official SDKs. Call-rate limits are unpublished, no public OpenAPI file or idempotency key was found, and one OAuth scope covers every operation. The SOAP interface retires on 31 January 2027.",
        "bestFor": "Agents that manage or report on Microsoft Advertising accounts, including Google Ads imports.",
        "strengths": [
          "Sandbox with its own endpoints, a shared developer token (BBD37VB98) and sign-up that skips payment information. Ads created there are never served",
          "REST with JSON on every operation page beside SOAP, and Learn returns any page as Markdown for `Accept: text/markdown`",
          "Monthly dated release notes, and SDK 13.0.30 for .NET, Java, Python and PHP published on 29 September 2026",
          "Viewer role is read-only, and a developer token adds no access beyond the signed-in user's role",
          "Official MCP server in open beta with seven read-only tools, filters, sorting and page tokens"
        ],
        "weaknesses": [
          "Call-rate limits carry no numbers. The docs describe a 60-second sliding window, and call the Bulk and Reporting limits internal and subject to change",
          "No public OpenAPI file found. The contract is six WSDLs for SOAP, which retires on 31 January 2027, and a generated client inside the SDKs",
          "One OAuth scope, `msads.manage`, covers reads and writes alike",
          "21 status posts tagged Reporting API between 20 July and 7 October 2026, all for delayed reporting data, one lasting six days",
          "No idempotency key or validate-only mode found, so a retried add can create a duplicate"
        ],
        "agentNotes": [
          "Build and test against the sandbox hosts (`*.api.sandbox.bingads.microsoft.com`) with developer token BBD37VB98. Sandbox and production credentials are separate",
          "Send `Authorization: Bearer \u003ctoken\u003e`, `DeveloperToken`, `CustomerId` and `CustomerAccountId` on REST calls. Use the account ID, never the eight-character account number",
          "Create campaigns with `Status` set to `Paused`, then read them back before activating. No validate-only mode was found",
          "On error 117 (CallRateExceeded) wait 60 seconds. On Bulk error 4204 wait up to 15 minutes",
          "Read `PartialErrors` on every add, update and delete. A call can succeed for some items and fail for others"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 60.3
          }
        ],
        "editorialScores": {
          "ergonomics": 63,
          "maintenance": 61,
          "payments": 30,
          "reliability": 60,
          "schema": 79,
          "security": 60,
          "transparency": 38
        },
        "provenanceScore": 90
      },
      "connect": {
        "install": "pip install msads",
        "http": "curl -X POST https://clientcenter.api.sandbox.bingads.microsoft.com/CustomerManagement/v13/User/Query \\\n  -H \"Authorization: Bearer $MSADS_ACCESS_TOKEN\" \\\n  -H \"DeveloperToken: BBD37VB98\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"UserId\": null}'",
        "config": {
          "servers": {
            "microsoft-ads-mcp": {
              "oauth": {
                "clientId": "\u003cclient-id\u003e"
              },
              "type": "http",
              "url": "https://partner.api.bingads.microsoft.com/ext/mcp/vnext?toolSetNames=OpenBeta"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/ads.reporting",
        "tool": "https://letme.dev/microsoft-advertising-api"
      },
      "sameCompany": [
        "azure-foundry-fine-tuning",
        "azure-ai-content-safety",
        "azure-speech-to-text",
        "azure-text-to-speech",
        "microsoft-agent-framework",
        "microsoft-execution-containers",
        "microsoft-entra-agent-id",
        "azure-key-vault",
        "azure-devops-mcp",
        "microsoft-learn-mcp",
        "playwright-mcp",
        "azure-mcp",
        "azure-translator",
        "microsoft-graph-calendar",
        "dynamics-365-sales",
        "microsoft-excel-graph",
        "outlook-mail-graph"
      ],
      "area": "communication",
      "provenance": {
        "legalEntity": "Microsoft Corporation",
        "domain": "microsoft.com",
        "domainRegistered": "1991-05-02",
        "domainNote": "The endpoints are on api.bingads.microsoft.com and the status page on status.ads.microsoft.com. microsoft.com publishes a security.txt, but it passed its Expires date on 2026-09-23.",
        "endpointOnVendorDomain": true,
        "terms": "https://about.ads.microsoft.com/en/resources/policies/microsoft-advertising-agreement",
        "privacy": "https://www.microsoft.com/en-us/privacy/privacystatement",
        "statusPage": "https://status.ads.microsoft.com",
        "changelog": "https://learn.microsoft.com/en-us/advertising/guides/release-notes?view=bingads-13",
        "securityTxt": "expired",
        "checked": "2026-10-08",
        "notes": [
          "The Microsoft Advertising Agreement link redirects to help.ads.microsoft.com, which renders only with JavaScript, so we couldn't read the terms.",
          "www.microsoft.com/.well-known/security.txt carries Expires: 2026-09-23T16:00:00.000Z and points to the MSRC researcher portal, bounty policy and coordinated disclosure policy.",
          "ads.microsoft.com/.well-known/security.txt redirects to a page-not-found error.",
          "RDAP for microsoft.com gives a registration date of 1991-05-02.",
          "The status page is a WordPress blog whose posts are readable through its RSS feed and JSON API."
        ],
        "score": 90
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/microsoft-advertising-api.json",
      "live": {
        "slug": "microsoft-advertising-api",
        "probe": {
          "target": "https://campaign.api.bingads.microsoft.com/CampaignManagement/v13",
          "method": "get",
          "lastAt": "2026-10-08T18:20:34.798467368Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 439,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 442,
          "p95ms24h": 542,
          "samples24h": 33,
          "samples30d": 33,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 33,
              "ok": 33
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.ads.microsoft.com",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-08T17:50:51.532385114Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "BingAds/BingAds-Python-SDK",
            "version": "v13.0.30",
            "released": "2026-09-29",
            "seenAt": "2026-10-08T16:20:36.673165866Z"
          },
          {
            "registry": "pypi",
            "name": "msads",
            "version": "13.0.30",
            "released": "2026-09-30",
            "seenAt": "2026-10-08T16:20:34.683272294Z"
          }
        ],
        "githubStars": 128,
        "pypiWeekly": 18920,
        "securityTxt": {
          "url": "https://microsoft.com/.well-known/security.txt",
          "state": "expired",
          "expires": "2026-09-23T16:00:00.000Z",
          "checkedAt": "2026-10-08T15:39:08.216544687Z"
        },
        "pages": [
          {
            "url": "https://learn.microsoft.com/en-us/advertising/guides/release-notes?view=bingads-13",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:19.962608646Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "a3c1ed0e4724"
          },
          {
            "url": "https://about.ads.microsoft.com/en/resources/policies/microsoft-advertising-agreement",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:14:55.315820849Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "7abf9893ad2d"
          }
        ],
        "updatedAt": "2026-10-08T18:21:19.962608646Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Google",
        "b": "Microsoft",
        "name": "Vendor"
      },
      {
        "a": "https://googleads.googleapis.com",
        "b": "https://campaign.api.bingads.microsoft.com/CampaignManagement/v13",
        "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. The .NET, Java, Python and PHP SDKs are MIT",
        "name": "Licence"
      },
      {
        "a": "3",
        "b": "7",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-09-23",
        "b": "2026-09-29",
        "name": "Last release"
      },
      {
        "a": "2019-02-21",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2026-10-01",
        "b": "2026-09-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "couldn't be read",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "753 stars, 3.1M PyPI/wk",
        "b": "128 stars, 19k PyPI/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Google Ads API scores 76.4 (BB) on agent readiness against Microsoft Advertising API's 60.3 (C), and leads in every scored category.",
        "question": "Which is better for AI agents, Google Ads API or Microsoft Advertising API?"
      },
      {
        "answer": "Both use an OAuth sign-in.",
        "question": "Do Google Ads API and Microsoft Advertising API need an API key?"
      },
      {
        "answer": "Yes. Google Ads API has a hosted endpoint at https://googleads.googleapis.com and Microsoft Advertising API at https://campaign.api.bingads.microsoft.com/CampaignManagement/v13.",
        "question": "Can an agent call Google Ads API and Microsoft Advertising API without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 82 against 60",
          "Schema \u0026 documentation, 84 against 79",
          "Agent ergonomics, 87 against 63",
          "Security \u0026 auth, 71 against 60",
          "Payments \u0026 pricing, 40 against 30",
          "Maintenance \u0026 community, 87 against 61",
          "Transparency \u0026 trust, 82 against 64"
        ],
        "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": "Agents that manage or report on Microsoft Advertising accounts, including Google Ads imports.",
        "slug": "microsoft-advertising-api",
        "watchFor": "Call-rate limits carry no numbers. The docs describe a 60-second sliding window, and call the Bulk and Reporting limits internal and subject to change"
      }
    ],
    "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-microsoft-advertising-api.json",
        "title": "Amazon Ads API vs Microsoft Advertising API",
        "url": "https://www.anchorterminal.com/compare/amazon-ads-api-vs-microsoft-advertising-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-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/linkedin-marketing-api-vs-microsoft-advertising-api.json",
        "title": "LinkedIn Marketing APIs vs Microsoft Advertising API",
        "url": "https://www.anchorterminal.com/compare/linkedin-marketing-api-vs-microsoft-advertising-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": 22,
        "edge": "google-ads-api",
        "google-ads-api": 82,
        "key": "reliability",
        "microsoft-advertising-api": 60,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 5,
        "edge": "google-ads-api",
        "google-ads-api": 84,
        "key": "schema",
        "microsoft-advertising-api": 79,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 24,
        "edge": "google-ads-api",
        "google-ads-api": 87,
        "key": "ergonomics",
        "microsoft-advertising-api": 63,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 11,
        "edge": "google-ads-api",
        "google-ads-api": 71,
        "key": "security",
        "microsoft-advertising-api": 60,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 10,
        "edge": "google-ads-api",
        "google-ads-api": 40,
        "key": "payments",
        "microsoft-advertising-api": 30,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 26,
        "edge": "google-ads-api",
        "google-ads-api": 87,
        "key": "maintenance",
        "microsoft-advertising-api": 61,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 18,
        "edge": "google-ads-api",
        "google-ads-api": 82,
        "key": "transparency",
        "microsoft-advertising-api": 64,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Google Ads API scores 76.4 (BB) on agent readiness against Microsoft Advertising API's 60.3 (C), 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.",
      "microsoft-advertising-api": "Version 13 covers campaigns, budgets, audiences, ads and reports over REST with JSON, with a sandbox that needs no payment method and four official SDKs. Call-rate limits are unpublished, no public OpenAPI file or idempotency key was found, and one OAuth scope covers every operation. The SOAP interface retires on 31 January 2027."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api",
    "json": "https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api.md",
    "slim": "https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api.min.md"
  },
  "markdown": "Google Ads API scores 76.4 (BB) on agent readiness against Microsoft Advertising API's 60.3 (C), and leads in every scored category. Both do ads reporting.\n\n- Google Ads API: grade BB, 76.4/100, rank #31 of 629. Markdown https://www.anchorterminal.com/tools/google-ads-api.md · JSON https://www.anchorterminal.com/api/v1/tools/google-ads-api.json\n- Microsoft Advertising API: grade C, 60.3/100, rank #360 of 629. Markdown https://www.anchorterminal.com/tools/microsoft-advertising-api.md · JSON https://www.anchorterminal.com/api/v1/tools/microsoft-advertising-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- Reliability, 82 against 60\n- Schema \u0026 documentation, 84 against 79\n- Agent ergonomics, 87 against 63\n- Security \u0026 auth, 71 against 60\n- Payments \u0026 pricing, 40 against 30\n- Maintenance \u0026 community, 87 against 61\n- Transparency \u0026 trust, 82 against 64\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### Microsoft Advertising API (C)\n\nGood for: Agents that manage or report on Microsoft Advertising accounts, including Google Ads imports.\n\nWatch for: Call-rate limits carry no numbers. The docs describe a 60-second sliding window, and call the Bulk and Reporting limits internal and subject to change\n\n\n## Score by category\n\n| Category | Weight | Google Ads API | Microsoft Advertising API | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 82 | 60 | Google Ads API +22 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 84 | 79 | Google Ads API +5 |\n| Agent ergonomics | 13% (16.2 this run) | 87 | 63 | Google Ads API +24 |\n| Security \u0026 auth | 14% (17.5 this run) | 71 | 60 | Google Ads API +11 |\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 | 61 | Google Ads API +26 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 82 | 64 | Google Ads API +18 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **76.4 · BB** | **60.3 · C** | |\n\n## Facts side by side\n\n| Fact | Google Ads API | Microsoft Advertising API |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Google | Microsoft |\n| Hosted endpoint | `https://googleads.googleapis.com` | `https://campaign.api.bingads.microsoft.com/CampaignManagement/v13` |\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. The .NET, Java, Python and PHP SDKs are MIT |\n| Tools exposed | 3 | 7 |\n| Read-only variant documented | no | yes |\n| llms.txt | no | no |\n| Last release | 2026-09-23 | 2026-09-29 |\n| Terms last updated | 2019-02-21 | couldn't be read |\n| Privacy policy last updated | 2026-10-01 | 2026-09-01 |\n| Customer content may train models | yes | yes |\n| Terms restrict automated access | not found in the text | couldn't be read |\n| Terms restrict benchmarking | not found in the text | couldn't be read |\n| Terms or service can change without notice | not found in the text | couldn't be read |\n| Arbitration or class-action waiver | yes | couldn't be read |\n| Popularity | 753 stars, 3.1M PyPI/wk | 128 stars, 19k 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**Microsoft Advertising API.** Version 13 covers campaigns, budgets, audiences, ads and reports over REST with JSON, with a sandbox that needs no payment method and four official SDKs. Call-rate limits are unpublished, no public OpenAPI file or idempotency key was found, and one OAuth scope covers every operation. The SOAP interface retires on 31 January 2027.\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### Microsoft Advertising API\n\n1. Build and test against the sandbox hosts (`*.api.sandbox.bingads.microsoft.com`) with developer token BBD37VB98. Sandbox and production credentials are separate\n2. Send `Authorization: Bearer \u003ctoken\u003e`, `DeveloperToken`, `CustomerId` and `CustomerAccountId` on REST calls. Use the account ID, never the eight-character account number\n3. Create campaigns with `Status` set to `Paused`, then read them back before activating. No validate-only mode was found\n4. On error 117 (CallRateExceeded) wait 60 seconds. On Bulk error 4204 wait up to 15 minutes\n5. Read `PartialErrors` on every add, update and delete. A call can succeed for some items and fail for others\n\n## Questions\n\n### Which is better for AI agents, Google Ads API or Microsoft Advertising API?\n\nGoogle Ads API scores 76.4 (BB) on agent readiness against Microsoft Advertising API's 60.3 (C), and leads in every scored category.\n\n### Do Google Ads API and Microsoft Advertising API need an API key?\n\nBoth use an OAuth sign-in.\n\n### Can an agent call Google Ads API and Microsoft Advertising API without installing anything?\n\nYes. Google Ads API has a hosted endpoint at https://googleads.googleapis.com and Microsoft Advertising API at https://campaign.api.bingads.microsoft.com/CampaignManagement/v13.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api.json, and with the fewest tokens: https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"google-ads-api\", \"b\": \"microsoft-advertising-api\"}`. From a terminal: `anchor compare google-ads-api microsoft-advertising-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/microsoft-advertising-api.json\n\n## Other comparisons with Google Ads API or Microsoft Advertising 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 Microsoft Advertising API](https://www.anchorterminal.com/compare/amazon-ads-api-vs-microsoft-advertising-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 Meta Marketing API](https://www.anchorterminal.com/compare/google-ads-api-vs-meta-marketing-api.md)\n- [LinkedIn Marketing APIs vs Microsoft Advertising API](https://www.anchorterminal.com/compare/linkedin-marketing-api-vs-microsoft-advertising-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 Microsoft Advertising API",
        "url": ""
      }
    ],
    "description": "Google Ads API scores 76.4 (BB) on agent readiness against Microsoft Advertising API's 60.3 (C), 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",
      "Microsoft Advertising API C 60.3",
      "scores"
    ],
    "h1": "Google Ads API vs Microsoft Advertising API",
    "image": "https://www.anchorterminal.com/assets/og/compare-google-ads-api-vs-microsoft-advertising-api.png",
    "path": "/compare/google-ads-api-vs-microsoft-advertising-api",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Google Ads API vs Microsoft Advertising API for AI agents",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/google-ads-api-vs-microsoft-advertising-api"
  },
  "tokens": {
    "markdown": 2150,
    "slim": 730
  },
  "version": 1
}
