{
  "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 LinkedIn Marketing APIs's 62.4 (B), and leads in 6 of 7 scored categories.",
    "b": {
      "slug": "linkedin-marketing-api",
      "name": "LinkedIn Marketing APIs",
      "vendor": "LinkedIn Corporation",
      "vendorUrl": "https://www.linkedin.com",
      "kind": "http-api",
      "category": "advertising",
      "summary": "LinkedIn's advertising APIs for campaign management, performance reporting, matched audiences, conversions and lead sync. Agents call versioned REST endpoints at api.linkedin.com/rest with a member's OAuth token, after LinkedIn approves the developer application.",
      "url": "https://www.anchorterminal.com/tools/linkedin-marketing-api",
      "markdownUrl": "https://www.anchorterminal.com/tools/linkedin-marketing-api.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/linkedin-marketing-api.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/linkedin-marketing-api.json",
      "license": "Proprietary service under the LinkedIn API terms of use and the Marketing API terms. The beta Python and JavaScript clients carry LinkedIn's API development software licence",
      "transports": [
        "http"
      ],
      "packages": [
        {
          "registry": "pypi",
          "name": "linkedin-api-client"
        },
        {
          "registry": "npm",
          "name": "linkedin-api-client"
        }
      ],
      "auth": "oauth",
      "authNotes": "Access is by application review. A person creates a LinkedIn Page and a developer application, applies for the Advertising API and completes LinkedIn's vetting. Calls then use a member's three-legged OAuth 2.0 token with scopes such as r_ads, r_ads_reporting and rw_ads. Two-legged OAuth is not available for Marketing APIs. Access tokens last 60 days. The member also needs a role on the ad account, and Development tier limits edits to five ad accounts until LinkedIn approves Standard tier.",
      "pricing": "free",
      "pricingNotes": "No fee for API access was found in the docs or terms, and no price page exists. Ad spend is set by campaign budgets and billed to the ad account. An agent can start without a contract on Development tier, where one test ad account needs no payment details and its campaigns are never served or billed (checked 2026-10-08).",
      "priceSummary": "Free",
      "where": "local",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the Marketing API documentation or the API terms (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": 25354,
        "pypiWeekly": 385632,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://learn.microsoft.com/en-us/linkedin/marketing/",
      "capabilities": [
        "ads.reporting",
        "ads.campaigns",
        "ads.budgets",
        "ads.audiences",
        "ads.creatives"
      ],
      "tags": [
        "hosted",
        "free",
        "oauth",
        "app-review",
        "versioned",
        "test-account",
        "status-page",
        "bug-bounty",
        "closed-source",
        "python",
        "javascript"
      ],
      "lastRelease": "2026-09-16",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 62.4,
        "grade": "B",
        "agentReady": false,
        "rank": 339,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 3,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 63,
          "maintenance": 64,
          "payments": 30,
          "reliability": 66,
          "schema": 66,
          "security": 66,
          "transparency": 84
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "Monthly API versions are each supported for at least a year, with dated sunsets and a changelog, and a test ad account lets an agent create campaigns that are never served or billed. Access needs LinkedIn's approval and a member's OAuth consent, standard rate limits are not published, and no OpenAPI specification was found.",
        "bestFor": "An agent that reports on and manages LinkedIn campaigns for accounts its operator administers, especially read-only reporting, which has no account limit on Development tier.",
        "strengths": [
          "Monthly versions (latest 202609) each supported for at least one year, with a sunset date per version on the migrations page",
          "A test ad account, created through the API with no payment details, holds campaigns and creatives that are never served or billed",
          "Separate read and write scopes (r_ads, r_ads_reporting, rw_ads), and the VIEWER account role stays read-only even with rw_ads",
          "Structured validation errors with a code, field path and allowed value on adAccounts, adCampaignGroups and adCampaigns",
          "Field projections and cursor pagination (pageSize up to 1,000) on campaign search, and a `fields` parameter on adAnalytics"
        ],
        "weaknesses": [
          "Standard rate limits are not published. An app sees its limit in the Developer Portal only after calling the endpoint",
          "No OpenAPI specification, llms.txt or MCP server was found. The contract is reference pages and a Postman workspace",
          "Access needs a LinkedIn Page, an approved developer application and member consent. Standard tier review can take up to 30 business days",
          "No idempotency keys or Retry-After header were found in the reviewed documentation",
          "The official Python and JavaScript clients are marked beta and were last released in 2023"
        ],
        "agentNotes": [
          "Send `Linkedin-Version: YYYYMM` and `X-Restli-Protocol-Version: 2.0.0` on every call. A missing or sunset version returns an error (426 for a deprecated one)",
          "Create one test ad account with `\"test\": true` and build there first. Its creatives are auto-rejected and never billed, and it returns no reporting data",
          "Create campaigns as DRAFT or PAUSED and check `servingStatuses` before activating. Some validation is postponed until activation",
          "Pass `fields=` on adAnalytics. Responses stop at 15,000 elements and the endpoint throttles at 45 million metric values per 5 minutes",
          "On Development tier, map each ad account to the app in the Developer Portal. Edits are limited to five accounts"
        ],
        "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": 62.4
          }
        ],
        "editorialScores": {
          "ergonomics": 63,
          "maintenance": 64,
          "payments": 30,
          "reliability": 66,
          "schema": 66,
          "security": 66,
          "transparency": 74
        },
        "provenanceScore": 94
      },
      "connect": {
        "http": "curl -X GET 'https://api.linkedin.com/rest/adAnalytics?accounts=List(urn%3Ali%3AsponsoredAccount%3A511183580)\u0026dateRange=(start:(day:28,month:7,year:2019))\u0026pivot=(MEMBER_COUNTRY_V2)\u0026q=analytics\u0026timeGranularity=ALL\u0026fields=impressions,pivotValues' \\\n  -H 'Authorization: Bearer {INSERT_TOKEN}' \\\n  -H 'Linkedin-Version: 202609' \\\n  -H 'X-Restli-Protocol-Version: 2.0.0'"
      },
      "letme": {
        "capability": "https://letme.dev/ads.reporting",
        "tool": "https://letme.dev/linkedin-marketing-api"
      },
      "area": "communication",
      "provenance": {
        "legalEntity": "LinkedIn Corporation",
        "domain": "linkedin.com",
        "domainRegistered": "2002-11-02",
        "endpointOnVendorDomain": true,
        "terms": "https://www.linkedin.com/legal/l/api-terms-of-use",
        "privacy": "https://www.linkedin.com/legal/privacy-policy",
        "statusPage": "https://www.linkedin-apistatus.com",
        "changelog": "https://learn.microsoft.com/en-us/linkedin/marketing/integrations/recent-changes",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "The API terms of use (last revised 13 December 2022) contract with LinkedIn Corporation, 1000 West Maude Avenue, Sunnyvale, California, or with LinkedIn Ireland Unlimited Company for developers in the Designated Countries.",
          "The Marketing API terms at https://www.linkedin.com/legal/l/marketing-api-terms were last revised on 25 July 2025.",
          "API calls go to https://api.linkedin.com/rest. The documentation is hosted by Microsoft at learn.microsoft.com/en-us/linkedin.",
          "www.linkedin.com/.well-known/security.txt has two Contact lines, a Canonical line and a Policy line pointing to hackerone.com/linkedin, and no Expires field.",
          "RDAP for linkedin.com gives a registration date of 2002-11-02."
        ],
        "score": 94
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/linkedin-marketing-api.json",
      "live": {
        "slug": "linkedin-marketing-api",
        "vendorStatus": {
          "page": "https://www.linkedin-apistatus.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-08T19:50:48.173050476Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "linkedin-api-client",
            "version": "0.3.0",
            "seenAt": "2026-10-08T16:18:57.594437926Z"
          },
          {
            "registry": "pypi",
            "name": "linkedin-api-client",
            "version": "0.3.0",
            "released": "2023-06-29",
            "seenAt": "2026-10-08T16:18:55.599903721Z"
          }
        ],
        "npmWeekly": 25354,
        "pypiWeekly": 385632,
        "securityTxt": {
          "url": "https://linkedin.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-08T15:38:54.169049162Z"
        },
        "pages": [
          {
            "url": "https://learn.microsoft.com/en-us/linkedin/marketing/integrations/recent-changes",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:21:42.006346735Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "69c4f2489866"
          },
          {
            "url": "https://www.linkedin.com/legal/privacy-policy",
            "kind": "privacy",
            "status": 0,
            "checkedAt": "2026-10-08T18:28:44.479551534Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "blockedByRobots": true
          },
          {
            "url": "https://www.linkedin.com/legal/l/api-terms-of-use",
            "kind": "terms",
            "status": 0,
            "checkedAt": "2026-10-08T18:28:44.342938486Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "blockedByRobots": true
          }
        ],
        "updatedAt": "2026-10-08T19:50:48.173050476Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Google",
        "b": "LinkedIn Corporation",
        "name": "Vendor"
      },
      {
        "a": "https://googleads.googleapis.com",
        "b": "no (local only)",
        "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 LinkedIn API terms of use and the Marketing API terms. The beta Python and JavaScript clients carry LinkedIn's API development software licence",
        "name": "Licence"
      },
      {
        "a": "3",
        "b": "none",
        "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-16",
        "name": "Last release"
      },
      {
        "a": "2019-02-21",
        "b": "couldn't be read",
        "name": "Terms last updated"
      },
      {
        "a": "2026-10-01",
        "b": "couldn't be read",
        "name": "Privacy policy last updated"
      },
      {
        "a": "yes",
        "b": "couldn't be read",
        "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": "25k npm/wk, 386k PyPI/wk",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Google Ads API scores 76.4 (BB) on agent readiness against LinkedIn Marketing APIs's 62.4 (B), and leads in 6 of 7 scored categories.",
        "question": "Which is better for AI agents, Google Ads API or LinkedIn Marketing APIs?"
      },
      {
        "answer": "Both use an OAuth sign-in.",
        "question": "Do Google Ads API and LinkedIn Marketing APIs need an API key?"
      },
      {
        "answer": "Google Ads API has a hosted endpoint at https://googleads.googleapis.com. No hosted endpoint is listed for LinkedIn Marketing APIs.",
        "question": "Can an agent call Google Ads API and LinkedIn Marketing APIs without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 82 against 66",
          "Schema \u0026 documentation, 84 against 66",
          "Agent ergonomics, 87 against 63",
          "Security \u0026 auth, 71 against 66",
          "Payments \u0026 pricing, 40 against 30",
          "Maintenance \u0026 community, 87 against 64"
        ],
        "also": [
          "Agent-ready, a grade of BB or better",
          "A hosted endpoint, with nothing to install",
          "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": "An agent that reports on and manages LinkedIn campaigns for accounts its operator administers, especially read-only reporting, which has no account limit on Development tier.",
        "slug": "linkedin-marketing-api",
        "watchFor": "Standard rate limits are not published. An app sees its limit in the Developer Portal only after calling the endpoint"
      }
    ],
    "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-linkedin-marketing-api.json",
        "title": "Amazon Ads API vs LinkedIn Marketing APIs",
        "url": "https://www.anchorterminal.com/compare/amazon-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/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/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"
      }
    ],
    "scores": [
      {
        "by": 16,
        "edge": "google-ads-api",
        "google-ads-api": 82,
        "key": "reliability",
        "linkedin-marketing-api": 66,
        "name": "Reliability",
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 18,
        "edge": "google-ads-api",
        "google-ads-api": 84,
        "key": "schema",
        "linkedin-marketing-api": 66,
        "name": "Schema \u0026 documentation",
        "weight": 13
      },
      {
        "by": 24,
        "edge": "google-ads-api",
        "google-ads-api": 87,
        "key": "ergonomics",
        "linkedin-marketing-api": 63,
        "name": "Agent ergonomics",
        "weight": 13
      },
      {
        "by": 5,
        "edge": "google-ads-api",
        "google-ads-api": 71,
        "key": "security",
        "linkedin-marketing-api": 66,
        "name": "Security \u0026 auth",
        "weight": 14
      },
      {
        "by": 10,
        "edge": "google-ads-api",
        "google-ads-api": 40,
        "key": "payments",
        "linkedin-marketing-api": 30,
        "name": "Payments \u0026 pricing",
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 23,
        "edge": "google-ads-api",
        "google-ads-api": 87,
        "key": "maintenance",
        "linkedin-marketing-api": 64,
        "name": "Maintenance \u0026 community",
        "weight": 7
      },
      {
        "by": 2,
        "edge": "linkedin-marketing-api",
        "google-ads-api": 82,
        "key": "transparency",
        "linkedin-marketing-api": 84,
        "name": "Transparency \u0026 trust",
        "weight": 7
      }
    ],
    "summary": "Google Ads API scores 76.4 (BB) on agent readiness against LinkedIn Marketing APIs's 62.4 (B), and leads in 6 of 7 scored categories. 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.",
      "linkedin-marketing-api": "Monthly API versions are each supported for at least a year, with dated sunsets and a changelog, and a test ad account lets an agent create campaigns that are never served or billed. Access needs LinkedIn's approval and a member's OAuth consent, standard rate limits are not published, and no OpenAPI specification was found."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api",
    "json": "https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api.md",
    "slim": "https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api.min.md"
  },
  "markdown": "Google Ads API scores 76.4 (BB) on agent readiness against LinkedIn Marketing APIs's 62.4 (B), and leads in 6 of 7 scored categories. 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- LinkedIn Marketing APIs: grade B, 62.4/100, rank #339 of 722. Markdown https://www.anchorterminal.com/tools/linkedin-marketing-api.md · JSON https://www.anchorterminal.com/api/v1/tools/linkedin-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- Reliability, 82 against 66\n- Schema \u0026 documentation, 84 against 66\n- Agent ergonomics, 87 against 63\n- Security \u0026 auth, 71 against 66\n- Payments \u0026 pricing, 40 against 30\n- Maintenance \u0026 community, 87 against 64\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n- A hosted endpoint, with nothing to install\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### LinkedIn Marketing APIs (B)\n\nGood for: An agent that reports on and manages LinkedIn campaigns for accounts its operator administers, especially read-only reporting, which has no account limit on Development tier.\n\nWatch for: Standard rate limits are not published. An app sees its limit in the Developer Portal only after calling the endpoint\n\n\n## Score by category\n\n| Category | Weight | Google Ads API | LinkedIn Marketing APIs | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 82 | 66 | Google Ads API +16 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 84 | 66 | Google Ads API +18 |\n| Agent ergonomics | 13% (16.2 this run) | 87 | 63 | Google Ads API +24 |\n| Security \u0026 auth | 14% (17.5 this run) | 71 | 66 | Google Ads API +5 |\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 | 64 | Google Ads API +23 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 82 | 84 | LinkedIn Marketing APIs +2 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **76.4 · BB** | **62.4 · B** | |\n\n## Facts side by side\n\n| Fact | Google Ads API | LinkedIn Marketing APIs |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Google | LinkedIn Corporation |\n| Hosted endpoint | `https://googleads.googleapis.com` | no (local only) |\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 LinkedIn API terms of use and the Marketing API terms. The beta Python and JavaScript clients carry LinkedIn's API development software licence |\n| Tools exposed | 3 | none |\n| Read-only variant documented | no | yes |\n| llms.txt | no | no |\n| Last release | 2026-09-23 | 2026-09-16 |\n| Terms last updated | 2019-02-21 | couldn't be read |\n| Privacy policy last updated | 2026-10-01 | couldn't be read |\n| Customer content may train models | yes | couldn't be read |\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 | 25k npm/wk, 386k 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**LinkedIn Marketing APIs.** Monthly API versions are each supported for at least a year, with dated sunsets and a changelog, and a test ad account lets an agent create campaigns that are never served or billed. Access needs LinkedIn's approval and a member's OAuth consent, standard rate limits are not published, and no OpenAPI specification was found.\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### LinkedIn Marketing APIs\n\n1. Send `Linkedin-Version: YYYYMM` and `X-Restli-Protocol-Version: 2.0.0` on every call. A missing or sunset version returns an error (426 for a deprecated one)\n2. Create one test ad account with `\"test\": true` and build there first. Its creatives are auto-rejected and never billed, and it returns no reporting data\n3. Create campaigns as DRAFT or PAUSED and check `servingStatuses` before activating. Some validation is postponed until activation\n4. Pass `fields=` on adAnalytics. Responses stop at 15,000 elements and the endpoint throttles at 45 million metric values per 5 minutes\n5. On Development tier, map each ad account to the app in the Developer Portal. Edits are limited to five accounts\n\n## Questions\n\n### Which is better for AI agents, Google Ads API or LinkedIn Marketing APIs?\n\nGoogle Ads API scores 76.4 (BB) on agent readiness against LinkedIn Marketing APIs's 62.4 (B), and leads in 6 of 7 scored categories.\n\n### Do Google Ads API and LinkedIn Marketing APIs need an API key?\n\nBoth use an OAuth sign-in.\n\n### Can an agent call Google Ads API and LinkedIn Marketing APIs without installing anything?\n\nGoogle Ads API has a hosted endpoint at https://googleads.googleapis.com. No hosted endpoint is listed for LinkedIn Marketing APIs.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api.json, and with the fewest tokens: https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"google-ads-api\", \"b\": \"linkedin-marketing-api\"}`. From a terminal: `anchor compare google-ads-api linkedin-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/linkedin-marketing-api.json\n\n## Other comparisons with Google Ads API or LinkedIn Marketing APIs\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 LinkedIn Marketing APIs](https://www.anchorterminal.com/compare/amazon-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- [LinkedIn Marketing APIs vs Meta Marketing API](https://www.anchorterminal.com/compare/linkedin-marketing-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": {
    "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 LinkedIn Marketing APIs",
        "url": ""
      }
    ],
    "description": "Google Ads API scores 76.4 (BB) on agent readiness against LinkedIn Marketing APIs's 62.4 (B), and leads in 6 of 7 scored categories. Both do ads reporting. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Google Ads API BB 76.4",
      "LinkedIn Marketing APIs B 62.4",
      "scores"
    ],
    "h1": "Google Ads API vs LinkedIn Marketing APIs",
    "image": "https://www.anchorterminal.com/assets/og/compare-google-ads-api-vs-linkedin-marketing-api.png",
    "path": "/compare/google-ads-api-vs-linkedin-marketing-api",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Google Ads API vs LinkedIn Marketing APIs for AI agents",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/google-ads-api-vs-linkedin-marketing-api"
  },
  "tokens": {
    "markdown": 2200,
    "slim": 780
  },
  "version": 1
}
