Google Ads Archive avatar

Google Ads Archive

Pricing

from $0.26 / 1,000 results

Go to Apify Store
Google Ads Archive

Google Ads Archive

Export every ad an advertiser runs on Google, from the official Ads Transparency Center: creative image, first and last shown dates, format, and a link to the ad on Google. Any country, no API key.

Pricing

from $0.26 / 1,000 results

Rating

0.0

(0)

Developer

Eli J

Eli J

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Export an advertiser's ads from Google's own Ads Transparency Center — text, image and video creatives — as clean JSON, CSV or Excel. No API key, no browser, no scraping code.

Google publishes this archive but gives it no API and no export button. This Actor turns it into a table.

What you get

One row per ad creative: Google's own format for it, the image and its pixel size where the creative has one, the dates it first and last ran, and a link back to the ad on Google so anything can be checked at source.

By default a run collects up to 100 ads per advertiser — large brands run thousands, so raise maxAdsPerAdvertiser (or set it to 0) when you want the full history, and watch the cost.

How to scrape Google ads by advertiser

Put one or more advertiser names in Advertisers and run it. A name is resolved against Google's own advertiser directory and the closest match is used; when a brand has several registered entities the alternatives are listed in the log so you can switch to an exact id.

{
"advertisers": ["Nike, Inc."],
"region": "US",
"maxAdsPerAdvertiser": 100
}

To pin an exact advertiser, pass its Google id instead:

{
"advertisers": ["AR16735076323512287233"],
"region": "GB"
}

Competitor ad research and creative tracking

Because every row carries firstShown and lastShown, a single run tells you which creatives a competitor is still running, which they retired, and how long each has been live. Re-run it on a schedule and the diff is a creative-rotation timeline.

Ads differ by country: an advertiser with thousands of ads in the US may have none in Germany. Set Region per market.

Input

FieldTypeDefaultDescription
advertisersarrayAdvertiser names (Nike, Inc.) or Google advertiser ids (AR16735076323512287233). Required — with none set the run stops and charges nothing.
regionstringUSUS, GB, DE, IN, CA, AU or JP. For any other country pass Google's numeric region code (2000 + the ISO-3166-1 numeric country code).
maxAdsPerAdvertiserinteger100Stop after this many ads per advertiser. A large advertiser can run thousands — Google reports 9,000-10,000 for Nike in the US alone — so this is the main cost control. 0 means no limit.
maxItemsinteger0Stop the whole run after this many rows. 0 means no limit.
maxRunSecondsinteger900Stop starting new pages after this many seconds. 0 disables the budget.
maxRetriesPerRequestinteger8Retries when Google rate-limits a request; each one backs off and rotates the proxy IP.
rotateAfterRequestsinteger24Retire a proxy identity after this many requests, before Google throttles it. 0 disables proactive rotation.
proxyConfigurationobjectApify ProxyGoogle rate-limits a single address with 429 during sustained reading, so leaving the proxy on is strongly recommended.

Output

{
"advertiserId": "AR16735076323512287233",
"advertiserName": "Nike, Inc.",
"creativeId": "CR05576182909712203777",
"format": "text",
"formatCode": 1,
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/10891172661046192318",
"imageWidth": 348,
"imageHeight": 174,
"previewUrl": null,
"firstShown": "2022-11-30",
"lastShown": "2026-07-27",
"firstShownTimestamp": 1669820166,
"lastShownTimestamp": 1785116984,
"region": "US",
"regionCode": 2840,
"creativeUrl": "https://adstransparency.google.com/advertiser/AR16735076323512287233/creative/CR05576182909712203777?region=US",
"scrapedAt": "2026-07-27T01:10:00+00:00"
}

That row is a real one, taken verbatim from a live run. Note it: a text ad that carries an image. That is normal, and it is why you should filter on format rather than on whether imageUrl is set.

format is Google's own classification, read from the format code it returns, not inferred from what the creative happens to contain:

formatCodeformat
1text
2image
3video

Anything else is reported as other with the raw formatCode kept, so a new Google format arrives visible rather than silently mislabelled. Do not infer the format from whether a row has an image: text ads carry images too, so filtering on imageUrl returns search ads alongside display ones.

Dates. firstShown and lastShown are the UTC date of the instants Google returns. Those instants are not midnight boundaries, so a reader in another timezone may want a different calendar date — firstShownTimestamp and lastShownTimestamp carry the raw epoch seconds for exactly that.

previewUrl is Google's own preview endpoint for the creative. It is a script payload meant to be embedded by Google's viewer rather than a standalone page, so treat it as an identifier for the creative rather than a link to hand to a browser. imageUrl and creativeUrl are ordinary URLs.

Cost

Billing is pay per result: one event per ad row, and nothing else. A failed request is never written to the dataset, so you are not charged for this Actor's errors. Passing the same advertiser twice — by name and by id, say — collects it once, so a duplicated list does not become a duplicated invoice.

A run whose advertisers exist but have no ads in that region finishes successfully with an empty dataset and an explanation in the log. So does a run where a name matches nothing: that is an answer, not a failure. A run fails only when every advertiser was actually unreadable, with the reason in the status message.

Set maxAdsPerAdvertiser to bound a run before you start it — that is the field that decides what a large advertiser costs.

Notes and limits

  • Only advertisers Google has verified appear in the Transparency Center, and only ads Google still retains are listed. This Actor reports what that archive contains; it cannot show ads Google has removed.
  • An advertiser must be specified. Google's archive has no "all advertisers" view, so there is no way to sweep a whole category in one call.
  • Ad counts, spend and impression ranges shown for political ads in some regions are not included — this Actor returns creatives.