Every ad an advertiser runs on Google: Search, YouTube, Shopping, Maps and Play. Search by advertiser, domain or brand; filter by country, platform, format and date. Each ad: first and last shown, days shown, preview image; details add countries, EU impressions and audience targeting.
Ads that advertisers run on Google, by advertiser ID, domain, advertiser name or page URL, filtered by country, platform, format and date. One row per ad: advertiser, format, first and last shown, days shown, preview image. Charged as ad.
includeDetails: countries an ad ran in; for EU ads, impression ranges in total, by country and by platform, and audience selection. Included in the price of an ad.
includeAdContent: text-ad headline and description, Shopping products, YouTube video, and landing page where the preview links to one. Charged as ad-content, only when something is found.
recordType on every row: ad, or with Advertiser check advertiserCheck.
A run that Apify restarts, or that you resurrect, picks up where it left off: ads already stored are not stored or charged again, and finished searches are not run again.
adAccountId and adGroupId on ads Google renders live; with details or content on, also on ads listed as a picture that have a rendered variation.
content.textStatus, content.displayUrl and content.keywordInsertions.
onlyAdsWithText: leaves out ads with no text to give; they are not stored or charged.
maxAdvertisersPerName: a name can search several of the advertisers holding it, most ads first.
A SUMMARY record in the run's key-value store, linked from the output: each search's Google count, ads stored, and how it ended.
A run close to its time limit stops itself a little before it, keeps what it has and still writes its SUMMARY, with stoppedForTime.
storeName, onlyNewAds, seenRetentionDays, startFromNow: a scheduled task delivers only ads no earlier run with its memory delivered. With onlyNewAds, each page of up to 100 ads read is charged as watched-page once its ads are handled.
With onlyNewAds, a search read to its end before is read from two days before that read, and in full about once a week; a span under 14 days is read whole.
startFromNow: a search's first day reads nothing; later runs deliver only ads first shown after it.
A memory holds about 250,000 ads; once it is full, a run delivers no new ad it cannot keep, and the log and SUMMARY say so.
SUMMARY: pagesCharged, memory, and per search alreadyDelivered, pagesRead, scan, startedBefore, complete, incompleteBecause.
scrapeMode Advertiser check: one row per search, saying whether it advertises under the filters, Google's count of its ads, its latest ad and who pays; a name no advertiser holds, or an unknown ID, gets a noMatch row, and a failed check stores none. Charged as advertiser-check.
SUMMARY: mode and checksStored.
The README opens with a banner, generated with Codex from .actor/readme-hero-v1-brief.md and served from the key-value store google-ads-scraper-readme; CLAUDE.md says how to replace it.
Changed
The form's sections are What to look up, Filters, How much, Scheduled monitoring, Extra data per ad and Proxy.
maxItems is titled Maximum results; with Advertiser check it caps the searches checked.
With content on, every row has a content object; before, it was null when nothing was found.
A name now finds the advertiser holding it that runs the most ads, under the filters when any are set: "Nike" finds Nike Retail BV worldwide and Nike, Inc. in the US.
Fixed
An ad's preview script that comes back as a block page, an empty body or a JSON error is fetched again instead of being read as an ad with nothing in it.