Google Ads Transparency Scraper - Ad Copy & Creatives
Pricing
from $1.10 / 1,000 ad scrapeds
Google Ads Transparency Scraper - Ad Copy & Creatives
[💵 $1.40 / 1K · no start fee] Scrape Google Ads Transparency Center: ad headlines and descriptions, destination URLs, images, YouTube video URLs, verified advertiser identity, dates and formats. Search, YouTube, Shopping, Maps and Play. Many competitors per run.
Pricing
from $1.10 / 1,000 ad scrapeds
Rating
0.0
(0)
Developer
WebData Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape the Google Ads Transparency Center by domain, keyword or advertiser ID and get the ads your competitors are running, including the ad copy.
Track which Google ads your competitors are running across Search, YouTube, Shopping, Maps and Play, without paying $200 a month for SpyFu or SEMrush.
Google publishes every ad it serves, who paid for it, where it ran and for how long. Most scrapers of this data hand you an image URL and an ID and stop there, which is useless if what you actually wanted was the headline your competitor is bidding on. This Actor returns the ad copy, the destination, the verified advertiser behind the ad, and the creative assets, as one clean row per ad.
✅ What you get / ❌ What this isn't
| ✅ You get | ❌ Not this |
|---|---|
| Headline and description text of text ads, extracted from Google's own ad render | Not an ID-and-image dump you still have to click through |
| Verified advertiser identity: legal name, disclosure country, verification status | Not just the display name printed on the ad |
| Bulk input: keywords, domains and advertiser IDs mixed in one run | Not one run per competitor |
Filters echoed on every row (region, platform, creativeFormat) | Not an unlabelled pile you cannot segment after merging runs |
videoUrl for video ads, resolved to the actual YouTube video | Not a preview shell link |
| A cost table that matches the configured price, to the cent | Not a README quoting a price the billing does not use |
| Drop-in field names for anyone migrating off another Transparency scraper | Not a rename that breaks your existing sheet |
| Source-side filtering, so you only pay for ads that match | Not client-side filtering after you have been billed |
🔎 Why use this Actor
- Ad copy, not just creative IDs. For text ads the Actor opens Google's own ad render and pulls out
headline,description,adTextanddestinationUrl. This is the single field marketers actually want and the one the popular alternative does not return at all. - Advertiser identity resolved once, cached, cheap.
advertiserLegalName,advertiserLocation,advertiserDomainandadvertiserVerifiedcome from Google's advertiser record, looked up once per advertiser no matter how many of their ads you pull. - Bulk from the first run.
queriestakes a list. Fifty competitors, a mix of domains, brand keywords and advertiser IDs, is one run and one dataset. - Auto-detected input types.
nike.comis treated as a domain,AR16735076323512287233as an advertiser ID,running shoesas a keyword resolved through Google's own advertiser suggestions, and a pasted Transparency Center URL as whatever it points at. - Filters applied by Google, not by us. Country, platform, format and date range are sent with the query, so filtered-out ads are never fetched and never billed.
- Runs on 256 MB. No browser, no Puppeteer. The Actor talks to the Transparency Center's own JSON endpoints, so compute cost stays near zero and results stream into the dataset as they are found.
- Per-advertiser caps.
maxResultsPerAdvertiserstops one heavy spender from eating a budget meant to cover twenty competitors.
👥 Who it's for
Performance marketers, SEO and PPC agencies, competitive-intelligence analysts and founders sizing up a market.
- Pull every headline a competitor is bidding on before writing your own ad copy.
- Watch a competitor's creative rotation week over week on a schedule.
- Find who is advertising against your brand terms, and which legal entity is paying.
- Build a swipe file of image and video creatives for a whole category.
- Qualify leads by "is this company actively spending on Google Ads right now".
🔍 Ready-made research tasks
Each of these is a saved configuration you can open, adapt and run:
- Scrape competitor Google ad copy by domain
- Find a competitor's YouTube video ads
- Research competitor Google Shopping ads
- Track competitor Google ads in the UK
- Google Anzeigen der Konkurrenz in Deutschland
- Monitor competitor Google ads every week
- Run a Google Ads competitor audit for a client
⚙️ How to track a competitor's Google ads
- Put the competitor's domain, brand name or Google advertiser ID into Keywords, domains or advertiser IDs. Add as many as you want to track.
- Set Country to the market you care about, for example
US,GBorDE. Leave it empty for worldwide. - Optionally narrow by Google platform (Search, YouTube, Shopping, Maps, Play) and Creative format (text, image, video).
- Optionally set Shown from / Shown until to study a season or a launch window.
- Set Max ads. Start at 20 to see what is there, then raise it or set
0for unlimited. - Click Start. Rows appear in the dataset while the run is still going. Export as JSON, CSV, Excel or XML from the Storage tab.
Watch a competitor every week
Save the run as a Task, schedule it weekly, and point a webhook or a Google Sheets integration at the dataset. Because every row carries firstShown, lastShown and approxDaysShown, comparing two weeks tells you exactly which creatives were retired and which are new.
📥 Input
{"queries": ["nike.com", "adidas.com", "running shoes", "AR16735076323512287233"],"region": "US","platform": "any","creativeFormat": "any","dateFrom": "2026-01-01","dateTo": "2026-07-27","maxResults": 200,"maxResultsPerAdvertiser": 50,"includeCreativeAssets": true,"includeAdvertiserDetails": true}
queries- list of domains, brand keywords, Google advertiser IDs or Transparency Center URLs. Type is detected per item. Aliases accepted so you can paste another scraper's input as-is:searchQuery,searchQueries,domains,domain,advertiserId,advertiserIds,keywords,startUrls.region- two-letter country code, for exampleUS,GB,DE,BR,IN. 190+ countries. Empty means worldwide. Country names are accepted for the major markets.platform-any,search,youtube,shopping,maps,play.creativeFormat-any,text,image,video. Text ads are the ones carrying headline and description copy.dateFrom,dateTo-YYYY-MM-DD. Returns ads that were running inside the window. Google's archive starts in 2018.maxResults- total rows across all queries.0means unlimited. Default 20.maxResultsPerAdvertiser- optional cap per advertiser.0means no cap.includeCreativeAssets- default on. Fetches each creative's render to extract ad copy, full-resolution images and video URLs. Turning it off makes runs faster and dropsheadline,description,destinationUrlandvideoUrl.includeAdvertiserDetails- default on. Adds the advertiser's legal name, country and verification status. Billed once per advertiser, not per ad.proxyConfiguration- advanced. Google throttles repeat callers by IP, so residential proxies are the default and the Actor rotates the session on every retry.
📤 Output
| advertiserName | adFormat | headline | description | destinationUrl | firstShown | lastShown | region |
|---|---|---|---|---|---|---|---|
| Hubspot, Inc. | text | Top CRM Solution - Next-Generation CRM | Close more deals with our top CRM. Track opportunities and nurture prospects. | https://www.hubspot.com/products/crm | 2026-06-16 | 2026-07-27 | US |
| Nike, Inc. | text | Shop Nike Back To School | Use promo code DAYONE to get an extra 25% off on select styles. | https://nike.com | 2026-05-11 | 2026-07-27 | US |
| nordvpn s.a. | video | 2026-07-23 | 2026-07-27 | US |
Every row also carries: advertiserId, creativeId, approxDaysShown, adUrl (the ad's public page on Google), imageUrl, previewUrl, videoUrl and videoId for video creatives, assetUrls with every image variation of the creative, adText (headline and description joined), advertiserDomain, advertiserLegalName, advertiserLocation, advertiserVerified, servedCountries (every country the creative actually ran in), the echoed region / platform / creativeFormat, the searchQuery and searchType that produced the row, and scrapedAt.
The first ten fields use the same names as the widely used alternative Transparency scraper, so switching over does not break an existing sheet, dashboard or downstream script.
💵 How much does it cost?
Pay per event, no start fee, no monthly rent. You are charged for what you receive:
| Event | What triggers it | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|---|---|---|---|---|---|---|---|
ad-scraped | one ad creative written to the dataset | $0.0014 | $0.0013 | $0.0012 | $0.0011 | $0.0010 | $0.0008 |
advertiser-resolved | one advertiser identity lookup, once per advertiser per run | $0.0014 | $0.0013 | $0.0012 | $0.0011 | $0.0010 | $0.0008 |
On the FREE tier that is $1.40 per 1,000 ads. Realistic runs:
| Job | Ads | Advertisers | Cost on FREE |
|---|---|---|---|
| Look at one competitor | 50 | 1 | $0.07 |
| Track 10 competitors, 100 ads each | 1,000 | 10 | $1.41 |
| Full pull of one big advertiser | 5,000 | 1 | $7.00 |
| Category sweep, 50 brands | 10,000 | 50 | $14.07 |
Platform compute is on top and is small: the Actor runs at 256 MB with no browser. Filters are applied by Google before results are returned, so an ad that does not match your country, platform, format or date range is never fetched and never billed.
SpyFu and SEMrush start around $39 and $139 a month for the plans that show competitor ad copy. A weekly 1,000-ad pull on ten competitors costs about $6 a month here.
🤖 Use with AI agents via MCP
The Actor is callable from any MCP client through Apify's MCP server, so an agent can research competitor ads on its own.
Claude Code
$claude mcp add apify --env APIFY_TOKEN=your_apify_token -- npx -y @apify/actors-mcp-server --actors webdata_labs/google-ads-transparency-scraper
Cursor (~/.cursor/mcp.json) or any client that reads the standard MCP config:
{"mcpServers": {"apify": {"command": "npx","args": ["-y", "@apify/actors-mcp-server", "--actors", "webdata_labs/google-ads-transparency-scraper"],"env": { "APIFY_TOKEN": "your_apify_token" }}}}
Prompts that work well:
- "Pull the last 100 Google Search ads for hubspot.com in the US and list every distinct headline."
- "Compare the ad copy nike.com and adidas.com are running in Germany this month."
- "Which advertisers are running YouTube video ads for the keyword 'project management software'?"
🔁 Use this Actor in n8n
- Add the Apify node to your workflow and connect your Apify API token.
- Choose Run an Actor, then pick
webdata_labs/google-ads-transparency-scraper. - Paste the input JSON above, or map
queriesfrom an earlier node such as a list of accounts from your CRM. - Add Get Dataset Items after it to pull the rows into the workflow.
- Route the rows wherever they belong: a Google Sheet, a Slack alert when a competitor launches new copy, or a database.
The same pattern works in Make, Zapier and plain webhooks, and the Actor can be called directly over the Apify API.
🔁 Run it on the Apify platform
Schedule the Actor daily or weekly, call it from the API, or trigger it from Make, Zapier or n8n. Datasets export to JSON, CSV, Excel, XML and RSS, and webhooks can fire the moment a run finishes. Results stream into the dataset while the run is still going, so a long pull is usable before it ends.
⚠️ Limits and caveats
- Not every creative has text. Google's archive stores many ads only as a rendered image, including ads it labels
text. When there is no text render,headline,descriptionanddestinationUrlcome back empty and you still get the image. Coverage depends on the advertiser: on a verification run against a large retail brand 33 of 50 ads carried readable copy, while some B2B advertisers publish almost everything as static images and return far less. Filter for rows whereheadlineis set if copy is all you need. - Dynamic search ads have no fixed headline. Google generates their headline from the landing page at serve time and publishes the placeholder text
<dynamically generated based on landing page content>instead. That literal string is what you get, because that is what Google shows. Thedescriptionon those ads is real. destinationUrlis the ad's display URL, which is what Google publishes. The full final landing URL with tracking parameters is not part of the public archive.- Keyword search is advertiser discovery, not full-text ad search. A keyword is resolved through Google's own advertiser and domain suggestions, then every matching advertiser's ads are pulled. Google does not expose a public search across ad body text.
- Google throttles by IP. The Actor paces requests and rotates proxy sessions on every retry. Very large unlimited runs are slower for this reason, not because of the parsing.
- Impression and spend ranges are political-ads-only in Google's data, so they are not part of the standard output.
- Coverage varies by country. Google's transparency obligations differ by market, so an advertiser can have thousands of ads in the EU and far fewer elsewhere.
🧩 Related Actors
Complete ad intelligence across Google, Meta, LinkedIn and TikTok:
- Meta Ads Library Scraper - the same competitor's Facebook and Instagram ads, with copy and creatives. Run both on one brand to see the whole paid mix.
- LinkedIn Ads Library Scraper - B2B ad creatives and CTAs from LinkedIn's public library.
- TikTok Creative Center Ad Intelligence - top-performing TikTok ads by industry and region.
- AI Ad Creative Intelligence API - feed the creatives from any of the above in and get structured analysis of hooks, offers and angles.
- Google Search Results Scraper - the organic side of the same keywords, so you can see who buys what they cannot rank for.
❓ FAQ
Is it legal to scrape Google Ads Transparency Center? The Transparency Center is a public archive Google built specifically for public accountability: it exists so anyone can see who is advertising, what they said and where it ran. This Actor reads that public data. There is no login, no paywall and no personal data involved. You remain responsible for how you use the output, and for complying with Google's terms and with the laws that apply to you. Do not use it for spam or harassment.
Do I get the actual ad text?
Yes, wherever Google stores a text render of the ad. Set creativeFormat to text and keep includeCreativeAssets on. Creatives that exist only as an image in Google's archive have no text to return, and the Actor says so with empty fields rather than guessing.
Am I charged for ads that get filtered out? No. Country, platform, format and date filters are sent to Google with the query. Non-matching ads are never returned and never billed.
Can I track many competitors in one run?
Yes. queries is a list and mixes domains, keywords and advertiser IDs. Use maxResultsPerAdvertiser to spread the budget evenly.
Where do I find a Google advertiser ID?
Open the advertiser's page on adstransparency.google.com and copy the AR... value from the URL, or just paste the whole URL into queries. Every output row also carries advertiserId.
Do I need a proxy? Apify Residential proxy is the default and is what makes larger runs reliable. Google rate-limits by IP.
Which countries are supported?
190+, by ISO code. region also accepts the names of major markets, for example Germany or United Kingdom.
📝 Changelog
0.1 - First release. Bulk queries with type auto-detection, ad copy extraction for text ads, advertiser identity resolution, video URL resolution, source-side country, platform, format and date filters, filters echoed on every row, three dataset views.
🛠️ Support
Something wrong or missing? Open an issue on the Actor's Issues tab with the run URL, the input you used and what you expected. Bugs get fixed fast.
⭐ Rate this Actor
If it saved you an afternoon, please leave a rating on the Reviews tab. Reviews are the only signal that tells other buyers this works, and they decide what gets built next. If something is broken, open an issue first so it can be fixed, rather than leaving a low rating on a problem that takes an hour to solve.