Google Ads Transparency Monitor MCP Server
Allows monitoring Google Ads Transparency Center data for companies or advertisers. Given a company domain or advertiser name, it retrieves one row per ad with advertiser details, ad ID, format, first and last shown dates, creative link, and Transparency Center page, plus summary rows with Google's total ad count band and ad formats.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Ads Transparency Monitor MCP ServerDoes notion.so run Google ads? How many, and in which formats?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Ads Transparency Monitor MCP Server
An MCP server for the Mamba Labs Google Ads Transparency Monitor actor on Apify. Give it a company domain or an advertiser name. Each run reads Google's public Ads Transparency Center and returns one row per ad, with the format, first and last shown dates, a creative link, and the ad's page, plus a company summary row with Google's total ad count band.
What's Inside
Related MCP server: google-ads-transparency-mcp
What it does
List the Google ads a company runs. Give a company domain (for example stripe.com) or an advertiser name, or lists of either. You get one row per ad with the advertiser, ad ID, format (text, image, or video), first and last shown dates, a creative link, and the ad's Transparency Center page, plus one summary row per input that says whether the company runs Google ads, how many (Google's own count band, for example 8,000 to 9,000), and in which formats. Rows with no ads, blocked requests, or a changed Google page come back free with a row_status saying so.
All of the work runs on Apify. This package is a thin client that starts the actor run, waits for it, and hands back the dataset rows.
Quick start
You need Node.js 18 or newer and an Apify account with an API token.
Add this to your Claude Desktop config (claude_desktop_config.json), Cursor, or any MCP client:
{
"mcpServers": {
"mamba-google-ads-transparency-monitor": {
"command": "npx",
"args": [
"-y",
"@mambalabsdev/mcp-google-ads-transparency-monitor"
],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}Restart the client. The get_google_ads tool appears.
Prerequisites
Node.js 18 or newer.
An Apify API token from console.apify.com/account/integrations, set as
APIFY_TOKEN. The server lists its tool without a token; a call needs one.
Example prompts
"Does notion.so run Google ads? How many, and in which formats?"
"Show me the 10 most recent video ads HubSpot ran in the US."
"For stripe.com, ramp.com, and brex.com, which ones advertised on Google in the last 30 days?"
Tool
get_google_ads. One tool. Example arguments:
{
"company_domain": "stripe.com",
"max_ads": "20",
"since_days": "90"
}Inputs
Every buyer facing input of the live actor, unchanged. Omitted inputs take the actor's own defaults. Give one of company_domain, advertiser_name, domains, or advertiser_names.
Input | Type | Required | Description |
| string | no | A company website domain, for example stripe.com. |
| string | no | An advertiser name as Google verifies it, for example Stripe, Inc. |
| array | no | Several company domains. Up to 500 inputs per run. |
| array | no | Several advertiser names. |
| string | no | anywhere, or a two letter country code such as US, GB, DE, or FR. Default anywhere. |
| array | no | text, image, video. Omit for all formats. |
| string | no | Ad rows per input, 1 to 1000. Default 50. |
| string | no | Only ads last shown in this many days; 0 for all. Default 90. |
| string | no | true or false. Default true. |
| string | no | Optional cost cap for the run. |
| string | no | true reads fresh results instead of the free 24 hour cache. Default false. |
| string | no | auto, direct, or residential. Default auto. |
Pricing
Pay per event on Apify, billed to your Apify account. Prices in USD.
Event | Free plan | Bronze | Silver | Gold |
| $0.002 | $0.0019 | $0.0018 | $0.0017 |
| $0.003 | $0.00285 | $0.0027 | $0.00255 |
| $0.0005 | $0.0005 | $0.0005 | $0.0005 |
Rows with no ads, blocked rows, changed source rows, error rows, and cached rows are free.
Your keys
The actor needs no provider key. It reads Google's public Ads Transparency Center and holds no key of its own. Proxy traffic, if a run uses the Apify proxy, is billed to your Apify account by Apify.
Full actor documentation
apify.com/mambalabs/google-ads-transparency-monitor
License
MIT. See LICENSE.
Available Tools
1 toolget_google_adsGet Google adsARead-onlyIdempotent
List the Google ads a company runs, read from Google's public Ads Transparency Center. Give a company domain (for example stripe.com) or an advertiser name, or lists of either. Returns one row per ad with the advertiser, ad ID, format (text, image, or video), first and last shown dates, a creative link, and the ad's Transparency Center page, plus one company summary row per input with Google's total ad count band, formats seen, and whether the company runs Google ads at all. Rows with no ads, blocked requests, or a changed Google page come back free with a row_status saying so. A run that does not succeed is returned as an error with its run ID. Read-only; requires an APIFY_TOKEN and consumes Apify credits per ad row returned.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | Where the ads were shown: anywhere, or a two letter country code such as US, GB, DE, or FR. Default anywhere. | |
| domains | No | Several company domains. Each gets its own ad rows and summary row. Up to 500 inputs per run. | |
| formats | No | Limit to text, image, or video ads. Omit for all formats. | |
| max_ads | No | Ad rows per input, 1 to 1000. Each ad row is billed. Default 50. | |
| skipCache | No | true reads fresh results instead of the free 24 hour cache in your account. Default false. | |
| proxy_mode | No | auto connects directly and moves to the Apify proxy default pool if Google refuses a request; direct never uses a proxy; residential uses Apify residential proxy. Apify bills proxy traffic to your account. Default auto. | |
| since_days | No | Only ads last shown in this many days. 0 returns every ad Google lists. Default 90. | |
| company_domain | No | A company website domain, for example stripe.com. Returns the ads Google lists for that domain. Give this, advertiser_name, or one of the lists. | |
| max_charge_usd | No | Optional. The run stops before any row that would take its charges over this amount. | |
| advertiser_name | No | An advertiser name as Google verifies it, for example Stripe, Inc. Exact name matches are used, up to 5 advertisers; otherwise the closest suggestion, labeled closest. | |
| include_summary | No | One extra summary row per input, billed only when ads were found. Default true. | |
| advertiser_names | No | Several advertiser names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, but the description adds substantially more: it requires an APIFY_TOKEN, consumes Apify credits per ad row returned, returns free rows with a row_status for no-ads/blocked/changed-page cases, and surfaces failed runs as errors with a run ID. That is exactly the partial-success and billing behavior an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and input modes are front-loaded, followed by return shape, then error and billing semantics in a tight sequence. It is a dense paragraph rather than a list, and a couple of clauses are long, but each sentence carries distinct information rather than repeating the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters, zero required, and no output schema, the description compensates by enumerating the returned row fields (advertiser, ad ID, format, first/last shown, creative link, Transparency Center page) and the per-input summary row plus total ad count band. Combined with the documented failure and cache behavior, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter routing logic the schema does not: company_domain, advertiser_name, and the list variants are stated as alternatives, and max_ads/credit tradeoffs are linked to billing. It does not add format or syntax detail for the remaining parameters, which the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (Google ads a company runs) and names the exact data source (Google's public Ads Transparency Center). Even without siblings, the scope is unambiguous, and the description further specifies the query modes (domain, advertiser name, or lists of either) so an agent knows precisely what the tool retrieves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent how to invoke the tool usefully: 'Give a company domain ... or an advertiser name, or lists of either,' and the schema reinforces the OR relationship between company_domain, advertiser_name, and the list variants. There are no sibling tools or explicit when-not conditions to route against, so this is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.0- First observed
get_google_ads
TDQS
Scored across 1 tool
There is only one tool, so there is no possibility of selecting the wrong one. Its purpose (fetching Google Ads Transparency Center data) is unambiguous.
The single tool follows a clear verb_noun pattern (get_google_ads). With only one name there is nothing to be inconsistent with.
One tool is thin for a named 'server', though the domain (read-only ad lookup) is narrow enough that a single flexible tool handling domains, names, and lists is defensible. It sits at the borderline where more granular operations (e.g. per-format or per-advertiser queries) might be expected.
For a read-only transparency lookup, the surface covers the key needs: ad rows, per-company summaries, status rows for no-ads/blocked/changed pages, and error reporting with run IDs. Only minor gaps remain, such as no explicit filtering or historical-comparison operation.
Maintenance
Related MCP Connectors
Every ad a brand runs on Google Search, YouTube and Display, from Google's Ads Transparency Center: format, first and last shown, days running, ad text, images and links. Find advertisers by name or domain. Runs on Apify.
Every ad an advertiser runs on Google, from the public Ads Transparency Center. Unofficial tool.
Every Google ad a company runs, by domain: advertiser, format, dates. Runs on Apify.
Google Ads by domain or brand: creatives, formats, dates; or bulk-check which domains advertise.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceSearches and analyzes competitor ads and content across Meta, Google, Instagram, TikTok, and YouTube with AI-powered creative analysis and cross-platform brand discovery.1MIT
- AlicenseAqualityAmaintenanceAn MCP server that lets AI assistants look up any advertiser's Google ads. Search by domain or company name, retrieve ad creatives, and decode text ad content from Google's Ads Transparency Center.8188 PyPI11MIT
- FlicenseAqualityDmaintenanceSearches the Meta (Facebook) Ad Library by keyword and returns ad details including advertiser, ad copy, and EU reach, without requiring an API key.31-
- AlicenseAqualityCmaintenanceEnables searching and analyzing LinkedIn's public ad library for any company, including ad creatives, targeting, and competitive insights. Supports image and video analysis, company comparisons, and detailed ad lookups via natural language.76 npm3MIT