Search & SEO · Live on Apify

Google Ads Transparency Center Scraper

See which ads a brand runs on Google. Add a domain or advertiser name and get one row per ad. You get the ad text, dates and countries.

About $1.40 for 1,000 ads$0.0012 per ad + $0.004 per run. One run gives up to 20 ads. Apify bills you, not us.One ad in a run of its own: about $0.0052.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

inputTypedomain
advertiserIdAR04545223091738902529
advertiserNameApify Technologies s.r.o.

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: apify.com in Domains. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Google Ads Transparency Scraper gets the ads that a brand or website runs on Google. Add a domain, an advertiser name or an advertiser ID (AR…), and the Actor returns one row per ad from the public Google Ads Transparency Center: ad text, image or YouTube link, first and last shown dates, countries and impression ranges.

  • Who: advertiser name, advertiser ID (AR…), domain.
  • What: format (text, image, video), headline, description, display URL, call-to-action, image URL, YouTube link.
  • When: first shown, last shown, days shown, as reported by Google.
  • Where and how much: countries where the ad ran, with dates and impression ranges per country, plus a total impression range.
  • Links: the public Transparency Center page of the ad and the Google preview URL.

Good for

  • See which ads a competitor runs on Google right now, and when Google first showed them.
  • Collect ad copy (headlines and descriptions) of a brand for PPC research.
  • Check in which countries a brand advertises and how big the reach is.
  • Save image ads and YouTube ads of a brand for creative research.

Not a good fit

  • The Actor shows what Google publishes in the Transparency Center. It does not show clicks, spend, keywords or targeting.
  • Impressions are ranges from Google (for example 1,000–2,000), not exact numbers. Google does not show them for every ad.
  • Some text ads exist only as a picture. For them headline and description are null, and imageUrl has the picture.
  • Up to 500 ads per advertiser or domain, and about 600–800 ads per run in total. For more, split the job across several runs.
  • The Actor does not solve CAPTCHAs. If Google blocks all requests, the run stops with a clear error.

Who uses it

PPC managers

Collect competitor headlines and descriptions for new ad ideas.

Creative teams

Save image and YouTube ads of a brand in one list.

Market researchers

Check in which countries a brand advertises and how much.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.004Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Ad$0.0012 (from $0.001 on paid Apify plans)Charged for each ad row saved to the dataset (complete or partial), with ad text, image/YouTube link, dates and per-country reach included. Not-found and error rows are free.

Examples

  • One ad: about $0.0052.
  • 1,000 ads: about $1.40 (50 runs of up to 20).
  • Every day 100 ads, for 30 days: about $4.20 a month (5 runs a day).
  • 20 ads once a week (4 runs a month): about $0.11 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 3,500 ads.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Can I see how much a competitor spends?

No. Google does not publish spend, clicks, keywords or targeting. You get impression ranges where Google shows them.

Why is the text empty for some ads?

Google stores some text ads only as a picture. Then you get the image link instead.

How many brands can I check at once?

Up to 20 domains and advertisers per run, with up to 500 ads each.

Do I need a Google Ads account?

No. The tool reads the public Transparency Center without login or an API key.

Do I need a Google account or an API key?

No. The Actor reads the public Ads Transparency Center pages. No login, cookies or API key.

Are impressions exact?

No. Google shows ranges, for example 1,000–2,000. The Actor returns the lower and upper end. Google does not show impressions for every ad or country; then the values are null.

How fresh is the data?

Every run reads the Transparency Center live. lastShown tells you when Google last showed the ad.

Which name match does the Actor use?

For a name, it looks for an advertiser whose name has the same whole words (exact name first). It never guesses a different company. For an exact account, use the AR… ID from the advertiser page URL.

Details

Step by step on Apify
  1. Open the Input tab.
  2. Keep the prefilled domain apify.com in Domains, or add your own domain, for example shopify.com.
  3. Keep Max ads per advertiser or domain at 20 and Region at anywhere.
  4. Click Start.
  5. Open the Output tab. The Ads view shows advertiser, format, dates, impressions and ad text.
Use cases
TaskInputYou getKey fieldsNext step
Competitor ad monitoringdomainsone row per adheadline, firstShown, lastShown, daysShownschedule + Google Sheets
PPC copy researchdomains or advertisers, format = texttext adheadline, description, displayUrlexport CSV
Market and country checkadvertisers + regionad with regionsregions, impressionsMin, impressionsMaxBI tool via API
Creative libraryformat = image or videoimage or video adimageUrl, videoUrl, callToActiondownload images
Tips for better results
  • Use a domain when you do not know the exact advertiser name.
  • Filter by format to get only text, image or video ads.
  • Split big jobs into several runs; one run collects about 600 to 800 ads.
Limits and good to know
  • Up to 20 domains and advertisers per run, up to 500 ads for each
  • One run works for about 4.5 minutes and collects about 600–800 ads in total in our tests. If it has more to do, it stops with the ads it has and the summary shows CAPPED with DEADLINE. Split big jobs into several runs
  • A larger run timeout does not make one run collect more
  • A row with status partial is still charged: the ad is there, but some details (for example text or countries) could not be read. statusReason says what is missing
  • Inputs that were not done when the run stopped get free error rows

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "status": "complete",
  "statusReason": null,
  "errorCode": null,
  "input": "apify.com",
  "inputType": "domain",
  "advertiserId": "AR04545223091738902529",
  "advertiserName": "Apify Technologies s.r.o.",
  "advertiserCountry": null,
  "domain": "apify.com",
  "creativeId": "CR12249652250414153729",
  "format": "text",
  "firstShown": "2026-07-02T13:54:49.000Z",
  "lastShown": "2026-10-14T10:26:38.000Z",
  "daysShown": 105,
  "regions": [
    { "code": "IE", "name": "Ireland", "criteriaId": 2372, "firstShown": "2026-07-03", "lastShown": "2026-10-13", "impressionsMin": 0, "impressionsMax": 1000 },
    { "code": "IL", "name": "Israel", "criteriaId": 2376, "firstShown": null, "lastShown": "2026-10-14", "impressionsMin": null, "impressionsMax": null }
  ],
  "impressionsMin": 1000,
  "impressionsMax": 2000,
  "variations": 1,
  "headline": "Apify for your AI - Largest marketplace for AI",
  "description": "Connect Claude, ChatGPT, or Cursor to Apify Store via MCP and put tools to work today.",
  "displayUrl": "www.apify.com/",
  "callToAction": null,
  "text": "Apify for your AI - Largest marketplace for AI — Connect Claude, ChatGPT, or Cursor to Apify Store via MCP and put tools to work today.",
  "imageUrl": null,
  "videoUrl": null,
  "adUrl": "https://adstransparency.google.com/advertiser/AR04545223091738902529/creative/CR12249652250414153729?region=anywhere",
  "regionFilter": "anywhere",
  "sourceUrl": "https://adstransparency.google.com/?region=anywhere&domain=apify.com",
  "fetchedAt": "2026-10-14T11:15:51.596Z"
}

Use it from code

Actor ID: cliqtomedia/google-ads-transparency-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/google-ads-transparency-scraper").call(run_input={
    "domains": [
        "apify.com"
    ],
    "region": "anywhere"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-ads-transparency-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"domains": ["apify.com"], "region": "anywhere"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/google-ads-transparency-scraper")
result = tool.invoke({"run_input": {"domains": ["apify.com"], "region": "anywhere"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (30)
FieldTypeMeaning
statusstringRow result: complete, partial (some details missing), not_found (no ads for this input) or error. Only complete and partial rows are charged.
statusReasonstringPlain-English reason for partial, not_found or error rows; null when complete.
errorCodestringMachine code for error rows, e.g. SOURCE_BLOCKED, RATE_LIMITED, DEADLINE_REACHED; null otherwise.
inputstringYour input value as given (advertiser name, AR… ID or domain).
inputTypestringHow the input was read: advertiserId, advertiserName or domain.
advertiserIdstringGoogle advertiser ID (AR…).
advertiserNamestringVerified advertiser name as shown in the Ads Transparency Center.
advertiserCountrystringAdvertiser country (two-letter code) when Google shows it.
domainstringDomain the ad points to, when Google shows it.
creativeIdstringGoogle creative (ad) ID (CR…).
formatstringAd format: text, image or video.
firstShownstringWhen the ad was first shown (ISO timestamp, from Google).
lastShownstringWhen the ad was last shown (ISO timestamp, from Google).
daysShownintegerDays shown, as reported by Google.
regionsarrayCountries where the ad ran: code, name, criteriaId, firstShown, lastShown, impressionsMin, impressionsMax. null when details are off or unavailable.
impressionsMinintegerLower bound of total impressions Google reports (range, not an exact count).
impressionsMaxintegerUpper bound of total impressions Google reports.
variationsintegerNumber of ad variations Google shows for this creative.
headlinestringText ad headline from the Google ad preview.
descriptionstringText ad description from the Google ad preview.
displayUrlstringDisplay URL shown in the text ad.
callToActionstringCall-to-action button text of display ads (e.g. Sign Up), when Google shows it.
textstringHeadline and description joined into one string; null when Google has no text for the ad (for example text ads shown only as an image).
imageUrlstringImage URL of the ad: image ads, display ads (main image) and text ads Google renders as an image.
videoUrlstringYouTube link of a video ad.
creativeUrlstringGoogle preview URL of the creative.
adUrlstringPublic Ads Transparency Center page of this ad.
regionFilterstringRegion filter used for this row: anywhere or a country code.
sourceUrlstringAds Transparency Center page for your input.
fetchedAtstringWhen the Actor read this row (ISO timestamp).
Input settings (10)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
Domainsdomainsarray["apify.com"]
Advertisers (name or ID)advertisersarray
Regionregionstring"anywhere"
Ad formatformatstring"all"
Shown fromdateFromstring
Shown untildateTostring
Max ads per advertiser or domainmaxAdsinteger20
Per-country reach and impressionsincludeDetailsbooleantrue
Ad text and YouTube linkincludeAdTextbooleantrue
ProxyproxyConfigurationobject{"useApifyProxy": true}

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure