Skip to main content
Glama
mambalabsdev

Google Ads Transparency Monitor MCP Server

Google Ads Transparency Monitor MCP Server

Smithery Glama score MCP Registry npm version npm downloads license mcpservers.org

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

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

company_domain

string

no

A company website domain, for example stripe.com.

advertiser_name

string

no

An advertiser name as Google verifies it, for example Stripe, Inc.

domains

array

no

Several company domains. Up to 500 inputs per run.

advertiser_names

array

no

Several advertiser names.

region

string

no

anywhere, or a two letter country code such as US, GB, DE, or FR. Default anywhere.

formats

array

no

text, image, video. Omit for all formats.

max_ads

string

no

Ad rows per input, 1 to 1000. Default 50.

since_days

string

no

Only ads last shown in this many days; 0 for all. Default 90.

include_summary

string

no

true or false. Default true.

max_charge_usd

string

no

Optional cost cap for the run.

skipCache

string

no

true reads fresh results instead of the free 24 hour cache. Default false.

proxy_mode

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

ad-found, per ad row returned

$0.002

$0.0019

$0.0018

$0.0017

company-summary, per input with ads

$0.003

$0.00285

$0.0027

$0.00255

apify-actor-start, per run start

$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 tool
get_google_adsGet Google adsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
regionNoWhere the ads were shown: anywhere, or a two letter country code such as US, GB, DE, or FR. Default anywhere.
domainsNoSeveral company domains. Each gets its own ad rows and summary row. Up to 500 inputs per run.
formatsNoLimit to text, image, or video ads. Omit for all formats.
max_adsNoAd rows per input, 1 to 1000. Each ad row is billed. Default 50.
skipCacheNotrue reads fresh results instead of the free 24 hour cache in your account. Default false.
proxy_modeNoauto 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_daysNoOnly ads last shown in this many days. 0 returns every ad Google lists. Default 90.
company_domainNoA 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_usdNoOptional. The run stops before any row that would take its charges over this amount.
advertiser_nameNoAn 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_summaryNoOne extra summary row per input, billed only when ads were found. Default true.
advertiser_namesNoSeveral advertiser names.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. 1 tool updatev1.0.0
    • First observedget_google_ads

TDQS

A4.5/5.0

Scored across 1 tool

Disambiguation5/5

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.

Naming Consistency5/5

The single tool follows a clear verb_noun pattern (get_google_ads). With only one name there is nothing to be inconsistent with.

Tool Count3/5

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.

Completeness4/5

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

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    An 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.
    8
    188 PyPI
    11
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    7
    6 npm
    3
    MIT