~/business/google-ads-scraper

Google Ads Scraper — Search, YouTube & Shopping Ads

Every ad a competitor runs on Google — Search, YouTube, Shopping, Maps, and Play — found by domain, advertiser, or brand, with the days each ad ran, the countries it reached, and, for the EU, its impressions and audience targeting.

ad intelligence TypeScript Global
proooxy/google-ads-scraper — spec
categorybusiness / ad intelligence
languageTypeScript
stackTypeScript
marketsGlobal
outputclean, RAG-ready JSON

key features

Every ad an advertiser runs on Google Search, YouTube, Shopping, Maps, and Play

Look ads up by website domain, advertiser ID, brand name, or a copied page URL — mixed in one run

First and last day shown, and how many days each ad has run

The legal name Google verified for the advertiser, and where it is based

EU impression ranges by country and platform, and the audience criteria used — with details on

A text ad's headline, a Shopping ad's products, a video ad's YouTube video, and the landing page — with content on, charged only when found

Filters by country, platform, format, and date; a span such as 30 days moves with each scheduled run

use cases

  • Monitoring competitors' Google ads on a schedule, so new campaigns show up in the next run
  • Creative research across a market: the headlines, products, and videos advertisers keep running
  • Media planning with EU impression ranges by country and platform
  • Agency and brand-safety checks: which legal entities pay for ads that lead to a website
  • Lead generation: which companies advertise on Google, and since when
  • Giving AI agents competitor ad data through Apify's MCP server

input parameters

ParameterTypeRequiredDescription
domainsarrayoptionalEvery ad that leads to these websites, from every advertiser running one
advertiserIdsarrayoptionalEvery ad of these advertisers, by ID or advertiser page URL
advertiserNamesarrayoptionalA company or brand name; the advertiser holding that name with the most ads is searched
startUrlsarrayoptionalAdvertiser, single-ad, or domain-search page URLs; filters in a URL apply to that URL
regionstringoptionalOnly ads shown in this country, or anywhere
platformstringoptionalGoogle Search, YouTube, Google Shopping, Google Maps, or Google Play
adFormatstringoptionalText, image, or video
dateFromstringoptionalShown on or after a date, or a span back from today such as 30 days
dateTostringoptionalShown on or before a date; empty means today
maxItemsnumberoptionalMaximum ads stored — the hard cap on run spend
maxAdsPerSearchnumberoptionalStops each domain, advertiser, name, or URL after this many ads
includeDetailsbooleanoptionalCountries, EU impression ranges, and audience criteria, charged per ad
includeAdContentbooleanoptionalHeadlines, products, YouTube videos, and landing pages, charged only when found

Output Example

 1{
 2  "creativeId": "CR04380650295827365889",
 3  "adUrl": "https://adstransparency.google.com/advertiser/AR18378488041124659201/creative/CR04380650295827365889?region=NL",
 4  "advertiserId": "AR18378488041124659201",
 5  "advertiserName": "Nike Retail BV",
 6  "advertiserLegalName": "Nike Retail BV",
 7  "advertiserCountry": "NL",
 8  "advertiserVerified": true,
 9  "format": "TEXT",
10  "firstShown": "2025-10-22T15:05:47.575Z",
11  "lastShown": "2026-09-28T13:07:21.342Z",
12  "daysShown": 342,
13  "region": "NL",
14  "queryType": "advertiserId",
15  "details": {
16    "euImpressions": { "min": 250000, "max": 300000 },
17    "audience": {
18      "demographicInfo": { "included": true, "excluded": false },
19      "geographicLocations": { "included": true, "excluded": false },
20      "contextualSignals": { "included": true, "excluded": false }
21    }
22  },
23  "content": {
24    "headline": "{KeyWord:Nike Vomero}",
25    "description": "Découvre {Keyword:chaussures Nike} sur Nike.com. Commande sur le site officiel Nike.",
26    "landingUrl": null
27  }
28}

Trimmed for length: with details on, details also lists every country the ad ran in, with its first and last day and, in the EU, impressions by platform; content also carries products, youtubeVideoId, and youtubeUrl.

Tips

  • Search the domain, not the brand name, for full coverage. A domain search returns every advertiser whose ads lead to the site — including the regional entities and resellers a brand name misses.
  • maxItems caps your spend. It is the hard ceiling on the ads a run stores and charges for; maxAdsPerSearch stops one large advertiser from using it all up.
  • Use a relative date for monitoring. Set dateFrom to 30 days on a scheduled run and every run covers the latest month.
  • Keyword-insertion placeholders are kept as Google stores them. A headline such as {KeyWord:Nike Vomero} shows the fallback text used when the search term doesn’t replace it.

faq

Do I need a Google account or an API key?
No. The ads come from Google's public ad library, which anyone can open without signing in. You run the Actor on Apify, and each ad is one row in the dataset.
Why does a brand name find only one advertiser?
Brands often advertise through several legal entities — Nike through Nike, Inc., Nike Retail BV, and others. A name finds the main one; search the brand's domain instead to get every advertiser whose ads lead there.
Why do some text ads have no headline?
Google archives many text ads as a picture of the ad. Those come with a preview image instead of a headline; headlines and descriptions come from the text ads Google shows live.
Where do the impression and audience figures come from?
Google publishes them for ads shown in the European Union, under the Digital Services Act, and counts impressions with a delay of about three months. Outside the EU, details give the countries an ad ran in and the days it ran there.

related in ~/business

Run Google Ads Scraper — Search, YouTube & Shopping Ads, or get a custom build

Start extracting on Apify in minutes, or hire me to build a bespoke scraper and RAG pipeline for your exact source and schema.

run on Apify get custom data