# Amazon Ads Scraper (`molded_mountainpass/amazon-ads-scraper`) Actor

Scrape sponsored ads from Amazon search results on 20 marketplaces: brand banners with featured ASINs, sponsored video ads and sponsored products, with keyword, page, price, rating and placement. HTTP-only, fast and low-cost.

- **URL**: https://apify.com/molded_mountainpass/amazon-ads-scraper.md
- **Developed by:** [Divya Raj](https://apify.com/molded_mountainpass) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 8 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / actor start

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Amazon Ads Scraper do?

**Amazon Ads Scraper** is an **Amazon scraper for sponsored ads**. It collects the **sponsored ads** on [Amazon](https://www.amazon.com) search result pages: **brand banners** (headline, brand and featured ASINs), **sponsored video ads** and **sponsored products**, with the keyword, page, ASIN, price, rating and placement of each. It works on 20 Amazon marketplaces, over plain HTTP with no browser and no login.

Looking for **every** search result (organic and sponsored, with ranks, prices, badges and sales estimates)? Use [Amazon Search Scraper](https://apify.com/molded_mountainpass/amazon-search-scraper) instead.

### Why use Amazon Ads Scraper?

- **See who advertises on your keywords.** Brand banners show which brands buy the top-of-page slot and which products they push.
- **Track ad placements over time.** Schedule daily runs to see when competitors start or stop advertising on a keyword.
- **Compare marketplaces.** The same keyword can be ad-heavy on amazon.com and nearly empty on a smaller marketplace.

### How to scrape Amazon ads

1. Enter keywords in **Search keywords** and pick a **Marketplace**, or paste Amazon search links (`/s?k=...`) into **Search URLs**.
2. Under **What to extract**, choose **Sponsored ads only**.
3. Set **Max pages per keyword** (default 5).
4. Under **Proxy Configuration**, select the **Residential** group.
5. Click **Start**, then download the results from the **Output** tab as JSON, CSV, Excel or HTML.

API callers can send `searchTerms` and `domain` (for example `{"searchTerms": ["protein powder"], "domain": "amazon.in"}`) and get the ads output without setting anything else.

### Output

One row per ad:

```json
[
  {
    "keyword": "wireless earbuds",
    "domain": "amazon.com",
    "page": 1,
    "asin": "Featured ASINs: B09DT48V16, B09LD44NW6, B09LD2D1TV",
    "title": "Brand Banner: Listen, in every moment",
    "price": "N/A",
    "rating": "N/A",
    "reviewsCount": "N/A",
    "adPlacement": "Headline Brand Banner",
    "scrapedAt": "2026-10-21T10:04:42.809148+00:00"
  },
  {
    "keyword": "wireless earbuds",
    "domain": "amazon.com",
    "page": 1,
    "asin": "B09DT48V16",
    "title": "Video Ad: TAGRY Bluetooth Headphones True Wireless Earbuds",
    "price": "$25.98",
    "rating": "N/A",
    "reviewsCount": "N/A",
    "adPlacement": "Sponsored Video Row Ad",
    "scrapedAt": "2026-10-21T10:04:42.809148+00:00"
  }
]
```

You can download the dataset in various formats such as JSON, HTML, CSV or Excel.

#### Data fields

| Field | Description |
| :--- | :--- |
| `keyword` | The search term. |
| `domain` | The Amazon marketplace. |
| `page` | Search result page number. |
| `asin` | Product ASIN; for a brand banner, its featured ASINs (`Featured ASINs: ...`) or brand (`Brand Storefront: ...`). |
| `title` | Product title, banner headline or video ad label. |
| `price` | Price as displayed, or `N/A`. |
| `rating`, `reviewsCount` | Rating and review count as displayed, or `N/A`. |
| `adPlacement` | `Headline Brand Banner`, `Sponsored Video Row Ad` or `Search Grid Inline`. |
| `scrapedAt` | UTC timestamp. |

### What to expect

On a typical amazon.com search page in October 2026, Amazon shows about 4–5 brand banners and 1–2 sponsored video ads to this scraper. Sponsored products inside the results grid (`Search Grid Inline`) appear rarely, because Amazon serves a lighter page to HTTP clients than to browsers. Results depend heavily on the proxy: use **Residential**.

### How much does it cost?

See the **Pricing** tab for the current price.

### FAQ

**Is scraping Amazon legal?** This Actor collects only publicly visible, non-personal data from search result pages. Legality depends on your location, purpose and the applicable terms; review Amazon's Terms of Service and consult your own legal counsel before running at scale.

**Why did I get no ads?** Usually the proxy (use Residential), or a keyword few brands advertise on. The run log names the page title when a page has no ads.

**Can it scrape product detail pages?** No, only search result pages.

### Support

Found a bug? Open a ticket on the **Issues** tab.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search for. Each keyword is a separate search on the marketplace below, and every row says which keyword found it (`searchQuery`). You can combine keywords with Search URLs.

## `startUrls` (type: `array`):

Amazon search result URLs (the address after you search on Amazon, containing `/s?k=`). Use them for filters Amazon's own URL supports, such as a category. The marketplace is taken from each URL's domain. Product pages (/dp/) are skipped.

## `country` (type: `string`):

Amazon marketplace for the Search keywords. Search URLs keep their own marketplace. Empty: amazon.com.

## `language` (type: `string`):

Language the Actor asks Amazon for (Accept-Language). Auto uses the marketplace's own language, for example German on amazon.de. Pick English to get English text everywhere Amazon offers it.

## `maxResultsPerQuery` (type: `integer`):

Most result rows per keyword or URL. 0 = no limit (Max pages then limits the run). A page has about 16 results.

## `maxResults` (type: `integer`):

Most result rows in the whole run, across all keywords. 0 = no limit. The run also stops cleanly at the maximum cost per run set in Run options.

## `maxPages` (type: `integer`):

How many result pages to read per keyword (Amazon shows up to about 20). A search stops earlier at its last page, or when a page has fewer than 4 organic results.

## `sortBy` (type: `string`):

Amazon's sort order, as in the Sort by menu on the search page. Every row says which one was used (`sortBy`).

## `minPrice` (type: `integer`):

Only products from this price, in the marketplace's currency (dollars on amazon.com, euros on amazon.de, ...). 0 = no minimum.

## `maxPrice` (type: `integer`):

Only products up to this price, in the marketplace's currency. 0 = no maximum.

## `minStars` (type: `integer`):

Only products rated at least this many stars: 1 to 4, or 0 for all. 4 uses Amazon's own '4 Stars & Up' filter; every value is also checked on each row, and unrated products are left out.

## `primeOnly` (type: `boolean`):

Only Prime-eligible products, using Amazon's Prime filter. Amazon offers this filter on amazon.com only; other marketplaces ignore it.

## `includeSponsored` (type: `boolean`):

Off: sponsored listings, video ads and brand banners are left out. They still count in positionOnPage, so positions match what shoppers see.

## `scrapeMode` (type: `string`):

'Every search result' outputs each organic and sponsored product (see the README for all fields). 'Sponsored ads only' is this Actor's original output: sponsored grid ads, video ads and brand banners in the original format. Without this field, API calls get every search result when they use the fields above (searchQueries, country, ...) and the original output when they use the original ones (searchTerms, domain).

## `monitoringMode` (type: `string`):

'Only new or changed' remembers every search's last results and outputs (and charges) only products that are new or whose price, list price, coupon, badges, rating, 'bought in past month' or rank changed. Rows get changeType, changedFields, priceDelta and rankDelta. Schedule the Actor to track a keyword daily. Works with 'Every search result'.

## `rankChangeThreshold` (type: `integer`):

In monitoring, a product counts as changed when its organic rank (or an ad's position) moves by at least this many places.

## `monitorStoreName` (type: `string`):

Named key-value store that keeps the last results of each search. Use a different name to keep separate histories, for example one per client.

## `deliveryZipCodes` (type: `object`):

Prices, delivery dates and availability depend on where Amazon delivers. Give a postcode per marketplace, by country code or domain, for example {"US": "10001", "DE": "10115", "amazon.co.uk": "SW1A 1AA"}. No extra charge. Rows show deliveryLocation and zipApplied (whether Amazon accepted it).

## `concurrency` (type: `integer`):

How many pages are fetched at the same time. The pages of one keyword are always read in order, so this speeds up runs with several keywords. 3-5 is reliable; more is faster but meets more temporary blocks.

## `proxyConfiguration` (type: `object`):

Amazon blocks datacenter IPs aggressively. Select RESIDENTIAL groups for reliable results; the default works but may return few or zero ads.

## `saveHtml` (type: `boolean`):

Store each search page's HTML in the run's key-value store. Useful when reporting a parsing problem.

## `searchTerms` (type: `array`):

Older name of Search keywords, still accepted.

## `domain` (type: `string`):

Older way to pick the marketplace, e.g. amazon.de, still accepted. Marketplace (country) wins when both are set.

## `maxItems` (type: `integer`):

Older name of Max total results, still accepted.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "country": "US",
  "language": "AUTO",
  "maxResultsPerQuery": 50,
  "maxResults": 0,
  "maxPages": 5,
  "sortBy": "relevance",
  "minPrice": 0,
  "maxPrice": 0,
  "minStars": 0,
  "primeOnly": false,
  "includeSponsored": true,
  "scrapeMode": "search",
  "monitoringMode": "off",
  "rankChangeThreshold": 3,
  "monitorStoreName": "amazon-search-monitor",
  "concurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "saveHtml": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "wireless earbuds"
    ],
    "country": "US",
    "scrapeMode": "search"
};

// Run the Actor and wait for it to finish
const run = await client.actor("molded_mountainpass/amazon-ads-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["wireless earbuds"],
    "country": "US",
    "scrapeMode": "search",
}

# Run the Actor and wait for it to finish
run = client.actor("molded_mountainpass/amazon-ads-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "wireless earbuds"
  ],
  "country": "US",
  "scrapeMode": "search"
}' |
apify call molded_mountainpass/amazon-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,molded_mountainpass/amazon-ads-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/HTgjRFf83w6jhLI5f/builds/6K55Gj7UxuHxMABeV/openapi.json
