Google Ads Creative Text & OCR (Transparency Center)
Pricing
from $4.00 / 1,000 ad creative contents
Google Ads Creative Text & OCR (Transparency Center)
Charged only when ad content is extracted — video and unreadable creatives are free rows. What competitor Google ads actually SAY: headline, body, CTA and all visible text from Ads Transparency Center creatives, image ads read by OCR. By advertiser or domain. No start fee.
Pricing
from $4.00 / 1,000 ad creative contents
Rating
0.0
(0)
Developer
Steadyfetch Team
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Google Ads Creative Text & OCR — what competitor ads actually say
Every Google Ads Transparency scraper returns the same thing: metadata rows — IDs, dates, formats — and stops. The Transparency Center renders every ad as a screenshot image, so the actual creative content (headline, body, CTA) never appears in their output. This actor reads it.
Advertiser or domain in → structured ad copy out:
{"advertiserName": "HelloFresh","format": "TEXT","headline": "Dinner just levelled up - Weeknights, upgraded","body": "Not sure what's for dinner? Get farm-fresh ingredients and easy recipes delivered.","cta": "Get Offer","displayUrl": "www.hellofresh.ca/","rawText": "HelloFresh www.hellofresh.ca/ Dinner just levelled up …","status": "extracted","firstShown": 20260214,"lastShown": 20260818}
Output
One JSON row per creative. status: "extracted" rows carry the ad copy and are the only rows charged; everything else ships free with a statusReason saying why. Real rows from the live example run below (long text trimmed with … for the page):
| status | statusReason | advertiserName | format | headline | body | cta | displayUrl | firstShown | lastShown |
|---|---|---|---|---|---|---|---|---|---|
extracted | null | HelloFresh SE | TEXT | Schmeckt Deiner ganzen Familie | Weniger Einkaufsstress: Plane flexibel, wähle Rezepte und koche frisch zu Hause. | null | www.hellofresh.de/ | 20260820 | 20260826 |
not_extracted | no_screenshot | HelloFresh SE | IMAGE | null | null | null | 20260819 | 20260826 | |
not_extracted | video_metadata_only | HelloFresh SE | VIDEO | null | null | null | 20260604 | 20260826 | |
extracted | null | HelloFresh SE | IMAGE | HelloFresh is Hiring in Poland | Bring your flavour to HelloFresh — fresh roles now open in Poland! | Apply Now | careers.hellofresh.com | 20260402 | 20260826 |
The last row is an image ad: headline, body and CTA read straight off the rendered creative by OCR — the rows other Transparency Center scrapers leave blank. The two middle rows are free.

Browse the full live example dataset → — real output from a verified run, including the free uncharged rows.
Every row also carries charged — true only on rows that were actually billed, so you can reconcile the dataset against your invoice — plus advertiser, advertiserId, creativeId, rawText (all visible text, verbatim) and screenshotUrl. Non-extracted rows use statusReason — video_metadata_only, all_video, no_screenshot, screenshot_unavailable, ocr_no_text_found, ocr_service_unavailable (our text-reading service refused this actor's access — that is on us; the run stops cleanly, try again later), no_creatives_found, advertiser_not_found, domain_not_listed, unsupported_region — and none of them are charged.
For AI agents & LLMs — copy this block
Actor: steadyfetch/google-ads-creative-text-scraper (Apify Store)Does: Google Ads Transparency Center creatives -> what the ad actually SAYS:headline, body, CTA, display URL and all visible text. Image/display adsare read by a vision model (OCR). One JSON row per creative. No Google login.Run: POST https://api.apify.com/v2/acts/steadyfetch~google-ads-creative-text-scraper/run-sync-get-dataset-items?token=APIFY_TOKENInput (advertisers and/or domains — at least one):{"advertisers": ["HelloFresh", "AR17410177287600472065"], // names or AR… advertiser IDs"domains": ["factormeals.com"], // every advertiser verified for it"formats": ["TEXT", "IMAGE", "VIDEO"], // optional, this is the default"region": "US", // optional, default US"maxCreativesPerAdvertiser": 50 // optional, default 30}Output one row per creative: status, charged, statusReason, advertiser, advertiserName,advertiserId, creativeId, format, headline, body, cta, displayUrl, rawText,screenshotUrl, firstShown, lastShownPricing pay per event, platform usage INCLUDED, no start fee:ad-creative-content $0.015 -> $0.004 per extracted creative (falls with your Apify plan tier)Charged only on extraction — video creatives, missing screenshots and unreadablecreatives ship as free rows.Cap any run with maxTotalChargeUsd (minimum $0.05). Empty input runs a free 2-row demo.MCP: reachable through Apify's MCP server; ask for "what Nike's Google ads say".
What you get
- TEXT and IMAGE creatives read by a vision model — headline, body text, CTA, display URL, and all visible text verbatim. Image/display ads included: the format most tools skip entirely.
- Video creatives listed free — advertiser, dates, format, creative ID as metadata rows. No video is downloaded and nothing is charged for them.
- Search by advertiser name, AR… advertiser ID, or domain (a domain spans every advertiser verified for it). Region-aware — the same brand runs different ads per country.
- Charged only when content is extracted. A creative whose screenshot is missing, expired, or unreadable is delivered free with an honest per-row reason (
screenshot_unavailable,ocr_no_text_found, …) — never a charged empty row.
Who uses this
- Competitive ad research: pull a competitor's live headlines and offers as text you can diff, count, and track over time.
- Ad copywriting / creative teams: mine what the market's ads say before writing yours — real inputs for ad-generation workflows.
- Agencies: monitor client categories across regions without screenshotting by hand.
How much does it cost?
1 result = one creative's extracted content (all fields above from one ad). No start fee, no subscription. Pricing is all-inclusive — platform usage is included in the event price, no separate usage line.
| What you run | Results | Cost |
|---|---|---|
| One competitor, 30 newest creatives | ~24 extracted | ~$0.36 |
| 10 competitors, 50 creatives each | ~400 extracted | ~$6.00 |
| Track one brand's ads weekly | ~100/mo | ~$1.50/mo |
Video creatives, misses, and unreadable screenshots are always $0. You stay in control with Maximum cost per run — the run stops cleanly at your cap and tells you what's left. Apify's free plan ($5 monthly credit) is enough to evaluate seriously.
Tip — search by domains for full coverage. A brand name matches exactly one verified advertiser entity, and big brands often run ads under several (plus their agencies). A domain search finds every advertiser verified for that domain, so domains: ["brand.com"] regularly surfaces creatives — and whole advertiser accounts — that a name search misses. The counts in the table above assume the advertiser you hit actually runs text/image ads; if a name search comes back thin, try the domain.
Honest scope (read before big runs)
- v1 extracts TEXT and IMAGE creatives. Video creatives ship metadata only (free rows) — no video content is fetched. An advertiser whose ads are all video gets those free rows plus one free row pointing you to the video-transcript companion — never an empty dataset.
- Region matters. An advertiser can show thousands of ads in one country and zero in another. Default is US; set
regionfor others. - Some rich/HTML creatives have no public screenshot; those rows arrive free with
no_screenshot. - The Transparency Center shows what Google publishes — typically ads served in roughly the last 30 days.
Input
{"advertisers": ["HelloFresh", "AR17410177287600472065"],"domains": ["factormeals.com"],"formats": ["TEXT", "IMAGE", "VIDEO"],"region": "US","maxCreativesPerAdvertiser": 50}
Run with no input at all and you get a tiny free demo (2 real creatives, nothing charged).
Use it via API and MCP
curl "https://api.apify.com/v2/acts/steadyfetch~google-ads-creative-text-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-X POST -H 'Content-Type: application/json' \-d '{"advertisers":["Nike"],"region":"US","maxCreativesPerAdvertiser":25}'
Works out of the box from any MCP client (Claude, Cursor, …) via Apify's MCP server — ask for "what do Nike's Google ads say right now" and point it at this actor.
FAQ
Why doesn't my usual Transparency scraper return the ad text? Because the Transparency Center serves ads as rendered screenshots — the text isn't in the page data. Reading it requires per-ad OCR, which row-priced scrapers don't do. That's the exact job this actor exists for.
What if an advertiser has no ads in my region? You get a free row saying no_creatives_found with guidance to try another region — not a charged empty result.
Can it read every ad? No — and it won't pretend to. Creatives without a public screenshot or whose text can't be read reliably are delivered free with the reason on the row. You pay only for extracted content.
Is this an official Google product? No. This is an independent actor from steadyfetch — unofficial, and not affiliated with, endorsed by, or sponsored by Google LLC. "Google" and "Google Ads" are trademarks of their respective owners, used here only to name the public Ads Transparency Center surface this actor reads.
Steadyfetch ad-intelligence suite
One actor per ad surface, one job each, the same contract everywhere: all-inclusive pay-per-event, no start fee, charged only on delivery — and the same row shape, so a workflow built for one platform ports to the next.
Ad creatives → transcripts (video)
| Ad surface | Actor | Free n8n template |
|---|---|---|
| Facebook & Instagram Ad Library | Facebook Ad Library Transcript Scraper — Video Hooks & CTAs | Facebook ad transcripts → · Competitor ad teardown → |
| Google Ads Transparency Center | Google Ads Video Transcripts & Hooks (Ads Transparency Center) | Google Ads video transcripts → |
| TikTok Creative Center Top Ads | TikTok Ad Transcripts & Hooks (Creative Center Top Ads) | TikTok Top Ads transcripts → |
| LinkedIn Ad Library | LinkedIn Ads Transcript Scraper — Video Hooks & CTAs | LinkedIn Ad Library transcripts → |
| Instagram Reels (organic posts) | Instagram Reels to Text · @handle | Instagram Reel transcripts → |
Ad creatives → text (image & text ads, read by OCR)
| Ad surface | Actor |
|---|---|
| Google Ads Transparency Center | this actor |
All templates in one place: github.com/steadyfetch/n8n-templates — free, no community nodes needed.
The rest of the steadyfetch shelf — same contract everywhere: all-inclusive pay per event, no start fee, charged only on delivery.
| Family | Actors |
|---|---|
| Ad creative intelligence | Facebook · Google Ads video · TikTok · LinkedIn · Google Ads text & OCR |
| Trends & keywords | Google Trends · Trends Now · Breakout keywords · Autocomplete keywords · Keyword volume & CPC · Social trends |
| YouTube transcripts | YouTube videos · YouTube channels |
| Reel transcripts · Profile posts | |
| Jobs | Indeed · Career sites by domain · Glassdoor · Multi-board |
| Amazon | Products · Search · Bestsellers · Sellers |
| Any media file | Speech to Text · any link or file |
Unlinked names are publishing shortly on the same account — search steadyfetch on Apify Store.
Feedback & support
Found an issue? Open it on the Issues tab — we respond within one business day. Feature requests welcome.