Google Ads

How to see competitors' Google search ads as text

Google's Ads Transparency Center lists every ad a verified advertiser runs, by country and date. It's the best free source for competitor ad research. But search ads are shown as pictures, there's no export button and no public API.

3 min readUpdated October 2026By Rimu Labs

Option 1: browse it by hand

  1. Open the Ads Transparency Center and search for a brand name or a domain, e.g. allbirds.com.
  2. Set Format to Text to see search ads, and pick a region and date range.
  3. Open an ad to see when it was first and last shown and in which countries.

That works for a quick look. It gets slow fast, though. Each ad is an image, so you retype the copy to compare it, and you can't sort or filter what you've collected.

Why search ads come back as images

For most search ads, Google only archives a rendered picture of the ad: display name and URL, a blue headline, a grey description and sometimes sitelinks. Display and YouTube ads sometimes come with structured data, but search ads usually don't. To get the copy as data you have to read it off the image, which is what OCR (optical character recognition) does.

Option 2: pull the ads as data automatically

Our Google Ads Transparency Scraper on Apify takes a brand, domain or advertiser ID and returns every matching ad as a row. For search ads it reads the archived image with OCR. It uses the layout Google always renders, with blue for the headline and grey for the description, and records how confident the OCR was.

From Python, with Apify's official client (pip install apify-client):

from apify_client import ApifyClient  # pip install apify-client (3.x)

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("rimulabs/google-ads-transparency-scraper").call(run_input={
    "searchTerms": ["allbirds.com"],   # a domain, brand name or advertiser ID
    "adFormat": "text",                # search ads only
    "maxAdsPerTarget": 50,
})
for ad in client.dataset(run.default_dataset_id).iterate_items():
    print(ad["daysShown"], "|", ad.get("headline"), "|", ad.get("visibleUrl"))

You can also run it from the Apify Console without code and export CSV, JSON or Excel. One real result, shortened:

{
  "advertiserName": "Allbirds Inc",
  "format": "text",
  "headline": "Shoes for Every Adventure - New Shoes Built to Explore - Allbirds",
  "description": "Lightweight. Heavy duty. The new Explore Collection is made for every adventure. Wander on in the extra durable, all-day wearable, wildly stylish Explore Collection. Lightweight & Breathable.",
  "visibleUrl": "www.allbirds.com/",
  "textSource": "ocr",
  "ocrConfidence": 95,
  "firstShown": "2025-10-02T21:00:05.884Z",
  "lastShown": "2026-10-17T06:32:39.875Z",
  "daysShown": 355,
  "regionsShown": [{ "country": "US", "lastShown": "2026-10-16" }]
}

That ad had been running for almost a year. Ads that keep running that long are usually ones the advertiser is happy with, which makes them the most useful to study.

What to do with the data

Limits worth knowing

Cost: $1.50 per 1,000 ads, plus $2.00 per 1,000 for ad copy and details (OCR included). 100 search ads with copy cost about $0.35.

Rimu Labs builds and maintains the Actor mentioned in this guide. The guide was written with help from our AI assistant and checked against real runs in October 2026. Questions or corrections: support@rimulabs.com.