Amazon Ad Library Scraper - EU Ads & Impressions
Pricing
from $0.40 / 1,000 ads
Amazon Ad Library Scraper - EU Ads & Impressions
Scrape the Amazon Ad Library, the public EU ad repository of amazon.de and eight more stores, by keyword, advertiser or ad id. One row per distinct ad, charged once: advertiser, payer, product title and ASIN, days shown, impressions per country, targeting, removed ads. JSON, CSV, API.
Pricing
from $0.40 / 1,000 ads
Rating
0.0
(0)
Developer
Automation Craft
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Amazon Ad Library Scraper - EU Ads & Impressions
Scrape the Amazon Ad Library, the public ad repository of Amazon's nine EU stores (amazon.de, amazon.fr, amazon.it, amazon.es, amazon.nl, amazon.pl, amazon.se, amazon.com.be and amazon.ie, about 1.3 billion ads), by keyword, by advertiser name, by ad id, or through the removed ads search. One row per distinct ad: who advertised and who paid, the product title with its ASIN and store link, the first and last day the ad was shown, the impressions band in total and per country, the targeting methods, the ad type, and for removed ads the restriction category. No login, no cookies, no API key, no residential proxy. Each ad is charged once per run, a miss costs nothing, and a named memory lets a scheduled run pay only for ads it has not delivered before.
What the library holds
Amazon publishes this repository under the EU Digital Services Act for the ads shown on its EU stores; the oldest rows read in testing started in April 2023; there is no US or UK version. The impressions are given as a band in steps of 1,000 ("2,000 to 3,000"), always for one country per ad. The library's own search is a full text search over product titles and advertiser names (whole words, any word matches, best matches first); it has no advertiser filter, which this Actor adds on top, and it does not search payer names.
Quick start
- Open the Actor and leave the prefilled input (
searchTerms: ["Nivea"], 20 ads): the run returns the library's first page for the word in about five seconds. - Put your own words into Search terms (a product, a brand, a category), or your competitors' names into Advertisers for an exact match on the advertiser name, or ad ids and library URLs into Ad ids.
- Narrow with Countries (one search per store), Shown from and Shown until, Only these products (ASINs) and Row type; raise Maximum ads per run.
- For monitoring, schedule the same input with a Memory name: later runs skip and do not charge the ads already delivered under that name.
- Read the dataset as JSON, CSV or Excel, or call the Actor through the API (examples below).
What you get
One ad row per distinct ad. Fill rates measured over 20,000 rows read on 2026-10-07 (19,000 ads and 1,000 removed ads).
| Field | What it holds | Fill |
|---|---|---|
adId, adUrl | the library's id (40 hex characters; affiliate content rows carry an amzn1. resource id) and the ad's detail page in the library | 100 percent |
advertiserName | who advertised, as the library names it | 100 percent of ads (removed ads carry no name) |
payerName, payerDiffers | who paid for the ad; the flag is true when the payer is another name than the advertiser (capitals, spacing and punctuation aside) | 100 percent; the payer differs on about 13 percent of ads |
productTitle | the title of the advertised product | 100 percent of ads |
asin, productUrl, productStore, productStoreCountry | the advertised product's ASIN, link, store (amazon.fr) and country code | 93.8 percent |
brandStoreUrl | the brand store page the ad linked to, where it linked to one | 1.2 percent |
firstShown, lastShown, daysShown, daysSinceLastShown | the days the ad ran (UTC) | 100 percent |
impressionsMin, impressionsMax, impressionsText | the impressions band of the ad, in steps of 1,000 | 100 percent |
impressionsByCountry, countriesShown, topCountry, topCountryImpressionsMax | the band per country (country, code, store, min, max), largest first | 100 percent (one country per ad) |
targetingMethods | LOCATION, SEARCH_TERMS, PAST_ACTIVITY, ADS_PREFERENCES | 100 percent of ads |
adType, isAffiliateContent | AD, or AFFILIATE_MARKETING_CONTENT for creator and publisher content the library lists next to the ads | 100 percent; affiliate rows are about 0.5 percent of results and carry no impressions |
isRestricted, restrictionCategory, restrictionDetectionAutomated, illegalContentReport | whether Amazon removed or restricted the ad and why (Grocery, Creative and Copy Guidelines, Prohibited Content, Health and Personal Care, ...) | 100 percent; the category on removed ads |
mediaUrls, mediaTypes, hasMedia | links to the ad's creative where the library carries one | 0 percent in the 20,000 rows read (0.16 percent in an earlier read; the links expire after about 30 minutes) |
matchedBy, source, search, scrapedAt | which name matched your input (advertiser or payer), how the row was found, the search that found it | 100 percent |
Three more row types, all free: a coverage row per search (the library's total for the text, pages read and charged, rows read, ads delivered, repeats, rows filtered out, the reason the walk stopped, complete), a status row for anything that did not produce an ad (an id the library does not have, a name without ads, a search with no result, inputs skipped because the run stopped, a memory that could not be used), and one summary row with every counter and the billing figures.
Modes
- Search terms: the library's ranked results for the words, walked page by page (50 ads a page) until the end, your caps or your charge limit. A search with no result is a free row.
- Advertisers (exact name): the advertiser name is searched and only ads whose advertiser name equals it (capitals and spacing aside) are delivered; an ad whose payer name equals it counts too when the library's results for the text hold it, but the library does not search payer names (a company that only pays for ads under another advertiser's name is found by that advertiser's name). The library ranks an advertiser's own ads first, so the walk ends after two pages in a row without the name (
advertiserPagesWithoutMatchraises that for a name that is also a common product word).advertiserMatch: containskeeps every name holding your text (LEGO matches LEGO Poland and LEGO France). The pages read before the first ad of the name are free, and so is every page of a name that never matches; a scheduled run that finds nothing new pays for the pages of the name it re-reads (see the pricing section). - Ad ids or library detail URLs: one row per ad found (looked up at the pace and delivered in batches of ten), a free row per id the library does not have.
- Removed ads: the library's compliance search, ads Amazon removed or restricted, each with its restriction category. It takes countries and dates, no text.
- No target at all: the first ads of the whole library inside your countries and dates (the sample).
Caps and the charge limit
maxAds (100 when left out, up to 100,000), maxAdsPerSearch, maxPagesPerSearch (400 pages of 50 when left out). A run also stops at the charge limit you set on it (a page is asked for only when it and one more ad fit under it) and the rest of the inputs is listed in one free row. Every stop is named in the coverage row and the summary.
Unpaid work has a time allowance: a run may spend 60 seconds, plus 1.5 seconds for every ad and 6 for every results page it has charged, on calls that end without a charge (ad ids the library does not have, names without ads, searches with no result, filters nothing passes, calls that failed), their waits included; the paid calls do not count. At one call per 2.5 seconds that is about 20 misses in a row before anything was charged (fewer when robot pages widened the gap), and a list of ad ids keeps running as long as fewer than about one id in three is a miss; a list with more misses than that ends with the rest of its inputs in one free skipped row, so run it again with the rest. Misses are free; the allowance keeps a run from spending its time on a list the library does not hold.
How much does it cost to scrape the Amazon Ad Library?
Pay per event. The Store pricing card shows these same prices per 1,000 events: "$0.50 / 1,000" on the Ad row means one ad costs 0.05 cents.
| Event | Free | Bronze | Silver | Gold | What it is |
|---|---|---|---|---|---|
| Ad (per 1,000) | $0.50 | $0.50 | $0.45 | $0.40 | one distinct ad delivered as a row, charged once per run however often the library repeats it |
| Results page (per 1,000) | $0.50 | $0.50 | $0.50 | $0.50 | one page of up to 50 results the library answered for a search (0.05 cents a page) |
| Actor start | $0.008 | $0.008 | $0.008 | $0.008 | once per run (per GB of run memory; a 256 MB run pays one) |
Platinum and Diamond plans pay the Gold price. Free: repeated ads, ads an earlier search of the run delivered, ads a named memory already knows, rows dropped by the advertiser name, ASIN or ad type filter, a search with no result, an ad id the library does not have, a call the library refused, the pages a filtered search reads before it first meets an ad it keeps, every page of a name that never matches, coverage rows, status rows and the summary. A page is charged once the search is productive: it delivered an ad, or it met ads of the name that the memory or an earlier search of the run already holds (a monitor that finds nothing new pays for the pages of its competitor's ads it re-read, 0.05 cents each).
Worked examples at the Bronze price: 1,000 ads of a keyword cost $0.50 for the ads, $0.01 for the 20 pages and $0.008 for the start, $0.518 in all; a scheduled run on a memory that finds 3 new ads on 2 pages costs $0.0015 for the ads, $0.001 for the pages and $0.008 for the start, $0.0105; a scheduled run on an advertiser with 127 ads that finds nothing new re-reads 5 pages, $0.0025, plus the start fee. A run of 100 ad ids of which 10 are not in the library costs $0.045 for the 90 ads found plus the start fee, $0.053; the 10 misses are free rows.
Input
| Field | Type | What it does |
|---|---|---|
searchTerms | list of strings | search texts, one per line (keywords, queries and searchText are read as well) |
advertisers | list of strings | advertiser names, exact match (advertiserNames, brands as well) |
advertiserMatch | exact or contains | how a name is compared; exact when left out |
advertiserPagesWithoutMatch | 1 to 20 | pages in a row without the name before an advertiser walk ends; 2 when left out |
adIds | list of strings | ad ids or library detail URLs (adUrls, startUrls as well) |
removedAds | boolean | the removed ads search; send it alone with countries and dates |
countries | list | DE, FR, IT, ES, NL, PL, SE, BE, IE, or names (Germany) or stores (amazon.de); every store when left out |
startDate, endDate | string | YYYY-MM-DD, today, yesterday, 30 days, 2 weeks, 3 months; an ad matches when it was shown on at least one day of the window; the whole library when both are left out |
asins | list of strings | ASINs or product URLs; only ads of these products are delivered |
adType | all, ad, affiliate | every row, only ads, or only affiliate marketing content; all when left out |
maxAds, maxAdsPerSearch, maxPagesPerSearch | integers | the caps; 100, no cap, 400 when left out (maxItems, maxResults, limit are read for maxAds) |
memoryName, resetMemory | string, boolean | the cross run memory for monitors |
proxyConfiguration | object | Apify's datacenter proxy by default, one address for the whole run; switch it off to use the run's own address; the residential group is replaced by the datacenter pool |
Every value is used as sent or refused: a date that is not a date, a cap that is not a whole number in range, an unknown country or a target field that holds nothing usable ends the run with one free invalid row and no charge. An input with no target field at all runs the sample.
API examples
curl -X POST "https://api.apify.com/v2/acts/automation_craft~amazon-ad-library-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"advertisers": ["LEGO Poland"], "countries": ["PL"], "startDate": "90 days", "maxAds": 500}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('automation_craft/amazon-ad-library-scraper').call({ searchTerms: ['Trockenshampoo'], countries: ['DE'], maxAds: 1000, memoryName: 'dry shampoo watch' });const { items } = await client.dataset(run.defaultDatasetId).listItems();const ads = items.filter((x) => x.type === 'ad');
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("automation_craft/amazon-ad-library-scraper").call(run_input={"removedAds": True, "countries": ["FR"], "maxAds": 200})rows = [x for x in client.dataset(run["defaultDatasetId"]).iterate_items() if x["type"] == "ad"]
What this Actor does not do
- It does not return the ad creative (image, video, headline, call to action): Amazon's library carries a media link on well under one percent of ads and the links expire after about 30 minutes. The product title, ASIN and link are what the library gives.
- It does not return spend: the library publishes impressions bands, not money.
- It does not return an advertiser profile or page: the library has no advertiser page, only the advertiser name and the payer name on each ad.
- It does not read the live search page (price, rating, the sponsored flag of a search card); that is what a search page scraper such as the Amazon Product Scraper does.
- It cannot search by payer name or by ASIN: the library's search covers advertiser names and product titles. A payer is found through the advertiser it pays for; a product is found by its words, with the
asinsfilter keeping only its ads. - It covers the EU stores only; there is no US or UK ad library.
FAQ
Where can I see my competitors' ads on Amazon?
In Amazon's EU ad library, the public repository this Actor reads: put the competitor's advertiser name into advertisers for an exact match, or its brand or product words into searchTerms, and every ad comes back with the product advertised, the days it ran and the impressions band per country.
How do I find who pays for an ad?
Every row carries payerName next to advertiserName and payerDiffers says whether they are two names (capitals, spacing and punctuation aside); on about 13 percent of the ads read they are. The library does not search payer names, so search for the advertiser or the product and read the payer on the rows.
Is the Amazon ad library the same as the Amazon Ads console reports?
No. The console shows an advertiser its own campaigns and never names the others. The library is the public transparency repository the EU Digital Services Act requires: every ad shown on an EU store, with the advertiser, the payer, the dates and the impressions band, for anyone to read.
Can I monitor an advertiser and pay only for new ads?
Yes: schedule the same input with a memoryName. Ads delivered under that name are remembered in a key value store this Actor creates in your account and skipped, free, on later runs; a run that finds nothing new pays only for the pages it re-read (0.05 cents each) and the start fee. For an advertiser with thousands of ads, add a date window (startDate: "30 days") so each run reads only the ads shown recently. Two runs on one name at the same time, or a memory that cannot be opened or saved, make the run deliver free and remember nothing, and a status row says so.
Why does this Actor run with limited permissions?
Least privilege: it reads only its own input, dataset and key value stores, plus the named memory store it creates itself. It needs nothing else from your account.
Which countries and dates can I filter?
The nine EU stores (Germany, France, Italy, Spain, the Netherlands, Poland, Sweden, Belgium, Ireland), one search per country, and any date window (an ad matches when it was shown on at least one day of it; the oldest ads read started in 2023). Without filters the whole library is searched.
Changelog
- 0.1 (2026-10-07): first release. Keyword, advertiser, ad id and removed ads modes; countries, dates, ASIN and ad type filters; one row per distinct ad charged once; a free coverage row per search; the cross run memory.
More data tools by Automation Craft
- Meta Ad Library Scraper - All Placements, Filters
- Google Ads Transparency Scraper - Decoded Creatives
- TikTok Ads Library Scraper: EU Ads, No Login
- LinkedIn Ad Library Scraper: Ads by Company
- Microsoft Ads Library Scraper - Competitor Ads
- Bing Ads Library Scraper - Advertisers, Ad Copy
- Pinterest Ads Library Scraper - EU Ads Repository
- Amazon Product Scraper - Search, Best Sellers