Google Ads Library Scraper - Competitor Ads, No Login avatar

Google Ads Library Scraper - Competitor Ads, No Login

Pricing

from $0.32 / 1,000 creatives

Go to Apify Store
Google Ads Library Scraper - Competitor Ads, No Login

Google Ads Library Scraper - Competitor Ads, No Login

Search the Google Ads library (the Ads Transparency Center) for any competitor and export their ads: text, image, video and shopping creatives with headline, description, landing domain, image and video links, first and last shown dates, days running. A memory returns only new ads. JSON, CSV, API.

Pricing

from $0.32 / 1,000 creatives

Rating

0.0

(0)

Developer

Automation Craft

Automation Craft

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

Scrape the Google Ads Library for any advertiser and get every creative back with the copy decoded: headline, description, call to action, display and landing URLs, image, YouTube video id, first and last shown dates, days served, served regions, EU impression bands and political spend. No login, no cookies, no API key. Pay per creative; creatives your memory already knows are free.

Google publishes the ads of every verified advertiser at adstransparency.google.com, but the site is built for browsing one advertiser at a time and hides the ad copy inside a rendered preview. This Actor calls the same endpoints the site uses, pages through an advertiser's creatives at 100 per request, decodes the preview payloads and returns flat rows you can filter, schedule and export.

Quick start

  1. In Advertisers, enter a website domain (adidas.com), an advertiser name, an AR id, or paste a Transparency Center URL. One line per advertiser.
  2. Pick a Region (or leave Anywhere), and any Platforms, Formats or date window. Filter by platform (Google Search, YouTube, Shopping, Maps, Play) and format (text, image, video), or leave both empty for every creative.
  3. Set Max creatives per advertiser and Max creatives per run.
  4. Keep Decode creatives on to get the copy, media and EU data; turn it off for metadata and preview URLs only.
  5. Run. Rows land in the dataset (JSON, CSV, Excel, API). For a scheduled competitor watch, set a Memory name and every later run returns only new creatives.

What you get

One row per creative. The columns in the table view are the ones most people use; the JSON row carries everything.

Measured on 180 live creatives (2026-09-22); percentage of rows where the field is filled.

fieldtext adsimage adsvideo ads
headline73%0%43%
description73%0%38%
callToAction0%5%43%
displayUrl73%0%37%
landingUrl0%27%0%
businessName7%0%37%
storeLocations62%0%0%
productTitle0%27%0%
merchantName0%27%0%
imageUrl72%92%50%
youtubeVideoId0%0%52%
videoUrls0%0%18%
appName0%0%7%
firstShown100%100%100%
lastShown100%100%100%
daysServed100%100%100%
regionStats100%100%100%
payerName47%70%57%
category0%23%0%
fieldmeaning
advertiserName, advertiserId, advertiserRegion, advertiserVerified, payerNamethe advertiser as Google verified it, its AR id, home region, verification flag and the legal payer name from the creative detail
creativeId, format, transparencyUrl, previewUrlGoogle's CR id, TEXT / IMAGE / VIDEO, the link to the creative in the Transparency Center, the raw preview URL
headline, description, callToAction, displayUrl, businessName, businessCategory, storeLocations, phonedecoded search, local and companion copy; location extensions with store name, address and city
ocrStatus, ocrConfidence, ocrText, ocrLanguage, sitelinkswith OCR on: how the render was read, the recognition confidence, the full recognised text, the language pack used, the sitelinks visible in the render
productTitle, merchantName, offerId, landingUrl, cssPartnerShopping creatives: product, merchant, GTIN or offer id, product landing URL, comparison shopping partner
appName, appId, appIconUrl, developerNameApp install creatives (Google Play)
imageUrl, imageUrls, width, heightthe creative image (Google's archived render for text ads, the display image otherwise) and its size
youtubeVideoId, youtubeUrl, videoUrlsvideo creatives: YouTube id and watch URL where the rendering embeds YouTube; signed playback URLs (they expire within hours, fetch what you keep)
firstShown, lastShown, daysServed, servedCountries, matchedDomaindates as ISO timestamps, number of days served, ISO country codes the creative was shown in
regionStats, eeaImpressions, usImpressionsEU transparency: per region impression bands with per surface breakdown (Search, YouTube, Shopping, Maps, Play) and dates; aggregate EEA and US bands
impressionsLower, impressionsUpper, spendLower, spendUpper, spendCurrency, targeting, politicalRegionspolitical ads: impression and spend ranges, age, gender and location targeting, audience selection categories
category, vertical, containsSyntheticMediatopic provided by the advertiser, vertical, Google's synthetic media disclosure
isNew, memoryStatus, decodeStatus, decodeSources, query, scrapedAtprovenance: memory result, how the row was decoded (detail, overlay, bundle), which input line produced it

A run-summary row closes every dataset: per advertiser requested, found (Google's size band), delivered, known skipped, pages fetched and stop reason; decode statistics; request counts and proxy mode; charges attempted and confirmed; memory state.

Sample creative row:

{
"type": "creative",
"advertiserName": "株式会社ナイキジャパン",
"advertiserId": "AR01437837420136497153",
"advertiserRegion": null,
"advertiserVerified": true,
"payerName": "株式会社ナイキジャパン",
"creativeId": "CR15429817122099822593",
"format": "TEXT",
"headline": "【ナイキ公式】オンラインストア",
"description": "季節のオススメやベストセラー、クリアランスが勢揃い。ジブンだけのカスタマイズも。",
"displayUrl": "nike.com",
"businessName": "ナイキジャパン",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/13803053261096263349",
"imageUrls": [
"https://tpc.googlesyndication.com/archive/simgad/13803053261096263349",
"https://tpc.googlesyndication.com/archive/simgad/1021467459010002479",
"https://tpc.googlesyndication.com/archive/simgad/3595071776370173829"
],
"storeLocations": [
{
"name": "Nike Factory Store",
"address": "土岐ヶ丘1丁目2, 土岐プレミアムアウトレット 210",
"city": "土岐市",
"region": "岐阜県",
"postalCode": "509-5127",
"country": "JP"
}
],
"width": 380,
"height": 400,
"firstShown": "2025-08-04T07:03:47.000Z",
"lastShown": "2026-09-22T14:16:58.000Z",
"daysServed": 415,
"matchedDomain": "nike.com",
"categoryId": 10021,
"impressionsLower": null,
"impressionsUpper": null,
"spendLower": null,
"spendUpper": null,
"spendCurrency": null,
"regionStats": [
{
"region": "KR",
"impressionsLower": null,
"impressionsUpper": null,
"firstShown": null,
"lastShown": "2026-09-17",
"dataAvailableFrom": null,
"surfaces": []
},
{
"region": "JP",
"impressionsLower": null,
"impressionsUpper": null,
"firstShown": null,
"lastShown": "2026-09-22",
"dataAvailableFrom": null,
"surfaces": []
}
],
"targeting": {
"age": null,
"gender": null,
"geoCriteriaIds": null,
"audienceSelection": {
"demographics": {
"included": true,
"excluded": false
},
"geographicLocations": {
"included": true,
"excluded": false
},
"contextualSignals": {
"included": true,
"excluded": true
}
}
},
"politicalRegions": null,
"reportedByUser": false,
"previewUrl": "https://tpc.googlesyndication.com/archive/simgad/13803053261096263349",
"transparencyUrl": "https://adstransparency.google.com/advertiser/AR01437837420136497153/creative/CR15429817122099822593?region=anywhere",
"variantCount": 4,
"creativeType": 102,
"decodeStatus": "decoded",
"decodeSources": [
"detail",
"bundle"
],
"isNew": true,
"memoryStatus": "NO_MEMORY",
"query": {
"input": "nike.com",
"kind": "domain",
"value": "nike.com",
"region": "ANYWHERE",
"format": "all"
},
"scrapedAt": "2026-09-22T14:52:07.041Z"
}

How much does it cost to scrape the Google Ads Library?

Pay per event, nothing per month. The Store card shows the same prices per 1,000 events.

eventpricewhen it is charged
Creative$0.40 per 1,000one creative row delivered (Silver 10 percent off, Gold 20 percent off)
Creative decoded$0.30 per 1,000the detail and rendering decoded on top of a creative row, only when the decode returned data (same tiers)
OCR read$0.50 per 1,000with "Read image-only text ads (OCR)": the copy read out of a text ad Google publishes only as an image, only when a headline was recognised (same tiers)
Actor start$2.50 per 1,000 runs (0.25 cents per run)once per run, so a monitoring run that finds nothing new costs a fraction of a cent

Worked example: 1,000 decoded creatives of one advertiser cost $0.70 plus one start fee. A weekly watch of five competitors that finds 40 new creatives costs 40 x ($0.40 + $0.30) / 1,000 plus the start fee, about 4 cents. Known creatives, filtered rows, run summaries, status rows and failed runs are free.

Input

fieldnotes
advertisersdomains, names, AR ids or pasted adstransparency.google.com URLs (advertiser page, ?domain= search, or one creative). Names are resolved through Google's own suggestions; a domain is the most exact key.
regionone of 244 regions or ANYWHERE
platformssearch, youtube, shopping, maps, play (empty = all)
formatstext, image, video (empty = all)
lastShownAfter, lastShownBeforeYYYY-MM-DD, applied by Google
topicall or political
sortlastShown (default) or impressions
maxCreativesPerAdvertiser, maxTotalcaps; the run summary says why each advertiser stopped
decodeCreativeson in the Console by default, off for API callers who do not send it
ocrImageOnlyTextread image-only text ads with the built-in OCR engine (needs decodeCreatives and a run memory of 512 MB or more); off by default
memoryName, emitKnown, resetMemorycross-run memory
concurrencyadvertisers paged in parallel (1 to 8)
proxyConfigurationApify datacenter by default with automatic residential fallback for the small RPC calls

API example:

curl -X POST "https://api.apify.com/v2/acts/automation_craft~google-ads-library-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"advertisers": ["adidas.com"], "region": "US", "maxCreativesPerAdvertiser": 200, "decodeCreatives": true}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation_craft/google-ads-library-scraper').call({ advertisers: ['adidas.com'], platforms: ['youtube'], formats: ['video'], maxCreativesPerAdvertiser: 100, decodeCreatives: true, memoryName: 'weekly-watch' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("automation_craft/google-ads-library-scraper").call(run_input={"advertisers": ["adidas.com"], "lastShownAfter": "2026-09-01", "decodeCreatives": True})
items = client.dataset(run["defaultDatasetId"]).list_items().items

What this Actor does NOT do

  • Keyword search across commercial ads: the Transparency Center only searches ad text within political ads. Keywords are resolved to advertisers (what the website does).
  • Read the copy out of image-only text ads unless you turn on "Read image-only text ads (OCR)": without it those rows carry the image URL and decodeStatus: image_only. With it, about 8 percent of renders still come back without a headline (a product photo across the text, a truncated render, Google's placeholder templates) and are not billed.
  • Download media files: it returns image and video URLs; the signed video playback URLs expire within hours.
  • Exact match counts for commercial searches: Google gives a size band (foundLower, foundUpper in the run summary); political searches get exact counts.
  • Show impressions or spend for commercial ads outside the EU: Google publishes none. EU rows carry regionStats; political rows carry spend and impression ranges.
  • Reach ads older than what Google keeps for an advertiser.

FAQ

Is there a Google Ads library like the Meta Ad Library?

Yes. Google calls it the Ads Transparency Center (adstransparency.google.com). It lists every ad a verified advertiser has run on Search, YouTube, Shopping, Maps and Play, with dates and a preview. This Actor searches it by advertiser and exports the creatives with the copy decoded.

How do I export a competitor's Google ads to CSV?

Enter the competitor's domain in "Advertisers", set "Max creatives per advertiser", run, and download the dataset as CSV or Excel from the Dataset tab. Each row holds one creative with headline, description, display URL, image URL, YouTube id, dates and days served.

Can I search Google ads by keyword?

Not across commercial ads: the Transparency Center only searches ad text on political ads. Keywords you type are resolved to advertisers through Google's own suggestions (the same thing the website does), so "nike" finds Nike, Inc. and nike.com.

How far back does the Google ads library go?

Google keeps the ads an advertiser ran while verified, for the period Google publishes (a 2024 window on a large advertiser returned nothing in September 2026). Every creative carries its first and last shown dates so you can see the range yourself.

How do I get only the new ads since my last run?

Set a "Memory name". The Actor remembers what it delivered under that name and later runs return only new creatives; known creatives are free.

Why does this Actor run with limited permissions?

Least privilege: it only needs its own dataset, its own key-value store and the Apify proxy. The memory is a named key-value store the Actor creates itself.

More data tools by Automation Craft

Changelog

  • 0.2.0 (2026-09-23): OCR for image-only text ads (opt in, priced per read).
  • 0.1.0 (2026-09-22): first release. Advertiser resolution by name, domain, id or URL; region, platform, format, date and topic filters applied by Google; decode of search, local, shopping, app and video creatives; EU impression bands; political spend; cross-run memory; per run ledger.