
Website Content Crawler
scrape.ly/store/querystone/website-content-crawlerAIDeveloper tools
1 monthly user

Export text, image, and video ads from the Google Ads Transparency Center, including regions, dates, impression ranges, and creative variations.
Export public ads from the Google Ads Transparency Center: text, image, and video creatives with the advertiser, the countries where they ran, impression ranges, first and last shown dates, and the creative variations. Paste an advertiser or domain URL and get one clean row per ad. No login, no API key, and ads cost a fraction of a cent.
startDate and endDate can override the dates.adstransparency.google.com, pick a region and date range, and copy the address bar.startDate and endDate, or turn on skip mode.| Field | Type | What it does |
|---|---|---|
startUrls | array | Advertiser or domain URLs from adstransparency.google.com. Required. |
resultsLimit | integer | Ads to return for each URL. Default 10. |
startDate | string | Only ads shown on or after this date (YYYY-MM-DD, UTC). Overrides the URL. |
endDate | string | Only ads shown on or before this date. Overrides the URL. |
skipDetails | boolean | Skip creative variations. Faster for long lists. |
shouldDownloadPreviews | boolean | Store creative HTML when an ad has no image and use it as previewUrl. |
ocr | boolean | Read the copy of text ads that the library keeps only as an image. On by default. |
proxyConfiguration | object | Datacenter proxy by default. |
{
"startUrls": [
{
"url": "https://adstransparency.google.com/advertiser/AR08888592736429539329?region=CH&preset-date=Last+30+days"
}
],
"resultsLimit": 10
}
Domain links work too, for example https://adstransparency.google.com/?region=US&domain=nike.com. Region codes in the URL use the usual two-letter country code, and region=anywhere returns ads from every country. Presets in the URL include Last 7 days, Last 30 days, Yesterday, and Today.
One dataset row per ad.
| Field | Description |
|---|---|
adLibraryUrl, creativeId | Link to the ad in the Transparency Center and its id. |
advertiserId, advertiserName | The advertiser. |
format | TEXT, IMAGE, or VIDEO. |
firstShown, lastShown, numServedDays | When the ad ran and for how many days. |
creativeRegions | Countries where it ran. |
regionStats | Per country: first and last shown, impression ranges, and surface breakdown when published. |
targeting | Which targeting categories were used. |
headline, description | Ad copy of the first variation that has it. |
imageUrl, videoUrl, clickUrl | Creative image, video, and landing or shown URL of the first variation that has it. |
variations | Every variation: headline, description, body (all visible text), cta, imageUrl, videoUrl, clickUrl. |
previewUrl | Preview image or saved HTML, when available. |
startUrl | The input URL the row came from. |
{
"adLibraryUrl": "https://adstransparency.google.com/advertiser/AR04850986993271701505/creative/CR07029598382389723137",
"advertiserId": "AR04850986993271701505",
"advertiserName": "TeraShift GmbH",
"clickUrl": "https://www.evomi.com/",
"creativeId": "CR07029598382389723137",
"creativeRegions": [
"Argentina",
"Austria",
"Belgium"
],
"description": "Advanced scraping browser + proxies from $0.49/GB. Swiss quality. Try free.",
"firstShown": "2025-11-20T09:39:30.131Z",
"format": "TEXT",
"headline": "Anti-Detect from $0.49",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/13964734335788828375",
"lastShown": "2026-10-21T10:39:58.716Z",
"numServedDays": 317,
"previewUrl": "https://tpc.googlesyndication.com/archive/simgad/13964734335788828375",
"regionStats": [
{
"regionCode": "AT",
"regionName": "Austria",
"firstShown": "2025-11-20",
"lastShown": "2026-06-25",
"impressions": {
"lowerBound": 0,
"upperBound": 1000
},
"surfaceServingStats": [
{
"surfaceCode": "SEARCH",
"surfaceName": "Google Search",
"impressions": {
"lowerBound": 0,
"upperBound": 1000
}
}
]
}
],
"startUrl": "https://adstransparency.google.com/?domain=evomi.com®ion=anywhere",
"variations": [
{
"clickUrl": "https://www.evomi.com/",
"description": "Advanced scraping browser + proxies from $0.49/GB. Swiss quality. Try free.",
"headline": "Anti-Detect from $0.49",
"imageUrl": "https://tpc.googlesyndication.com/archive/simgad/13964734335788828375"
}
]
}
Impression numbers are the ranges the Transparency Center publishes, not exact counts. Signed media URLs expire. For text ads kept as an image, headline, description and clickUrl (the URL shown on the ad) are read from the picture by an AI model, so a character can occasionally be misread; imageUrl always links the original picture.
$0.0008 per ad returned, which is $0.80 per 1,000 ads, plus platform usage for compute and proxy traffic. Ads that are not returned are not charged. Reading text ads stored as images adds a small model usage charge per picture (well under $0.001); turn off ocr to skip it.
Worked example: 1,000 ads cost $0.80 in ad fees, plus the platform usage of the run.
Is it legal to scrape the Ads Transparency Center? It is a public library. The actor reads it without logging in. You are responsible for how you use the data and for following local law and Google's terms.
Do I need a login, API key, or my own proxy? No. A datacenter proxy is configured by default.
Can I scrape every ad for an advertiser?
Raise resultsLimit. The run stops at that cap or when the library has no further page. A later page that fails does not delete ads already saved.
Why does a region have no impression numbers? The library sometimes publishes a country with only a last-shown date. The row is kept and the missing range is left out.
Can I schedule it or use the API? Yes, through schedules in the console or the API.
Moving from another Google Ads Transparency actor? Use the same advertiser URL and maximum. The ad fields line up, including regions, variations, and dates.
adstransparency.google.com.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
startUrlsarrayRequiredTransparency Center URLs
Advertiser or domain URLs from https://adstransparency.google.com/. Open an advertiser, then copy the page URL. Region and date filters in the URL are applied.
resultsLimitintegerOptionaldefault 10Maximum ads per URL
How many ads to return for each URL.
Optional dates apply to every URL. Leave both empty to use the dates in each URL.
startDatestringOptionalStart date
Only ads shown on or after this date. Overrides the date in the URL. YYYY-MM-DD, UTC.
endDatestringOptionalEnd date
Only ads shown on or before this date. Overrides the date in the URL. YYYY-MM-DD, UTC.
Variation copy and media are loaded unless you skip them. Text ads kept only as images are read with an AI model unless you turn that off. HTML previews are saved only when you ask for them.
skipDetailsbooleanOptionaldefault falseSkip creative variations
Return advertiser, region, and date fields without opening each creative variation. Faster for long lists.
shouldDownloadPreviewsbooleanOptionaldefault falseSave HTML preview when no image is available
Store the creative HTML in the run key-value store and use that link as previewUrl when the ad has no image.
ocrbooleanOptionaldefault trueRead text ads stored as images
The library keeps many search text ads only as a picture of the ad. When on, an AI model reads the headline, description and shown URL from that picture. This adds a small model usage charge to the run (well under $0.001 per text ad). Ignored when creative variations are skipped.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are used unless you choose another pool.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| advertiserName | string | null | |
| advertiserId | string | |
| creativeId | string | |
| format | string | null | |
| firstShown | string | null | |
| lastShown | string | null | |
| numServedDays | integer | null | |
| previewUrl | string | null | |
| adLibraryUrl | string | |
| clickUrl | string | |
| cta | string | |
| headline | string | |
| description | string | |
| imageUrl | string | |
| videoUrl | string | |
| body | string | |
| variations | array |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Ad | One ad from the Google Ads Transparency Center. | $0.0008 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/google-ads-scraper').call({
"startUrls": [
{
"url": "https://adstransparency.google.com/advertiser/AR08888592736429539329?authuser=0®ion=CH&preset-date=Last+30+days"
}
],
"resultsLimit": 10,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/google-ads-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/google-ads-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Ads from the Google Ads Transparency Center with details.
Recent ads of an advertiser from a Transparency Center link.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.