# Amazon BizTrend Scraper (`ib4ngz/amazon-biztrend-scraper`) Actor

Scrape Amazon search results and product details using keywords or product URLs, with structured output for product and trend analysis.

- **URL**: https://apify.com/ib4ngz/amazon-biztrend-scraper.md
- **Developed by:** [Iqbal R](https://apify.com/ib4ngz) (community)
- **Categories:** Automation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does Amazon BizTrend Scraper do?

**Amazon BizTrend Scraper** extracts Amazon search positions, product details, prices, reviews, availability, and Best Sellers Ranks (BSR) from [Amazon](https://www.amazon.com/). Start with keywords, direct product URLs, or both. Each successfully validated product is written to the run's Apify Dataset.

Running it on Apify adds API access, schedules, integrations, run monitoring, scalable storage, and proxy rotation. Browser automation handles JavaScript-rendered Amazon pages while preserving structured observations for trend analysis.

**Data storage notice:** Submitted keywords, scraped public Amazon product data, ranking observations, and timestamps may also be sent to the Actor's private application database. This supports historical trend analysis, extraction-quality monitoring, and continued service development. Do not submit personal information or confidential terms as keywords. By starting a run, you acknowledge this data processing.

### Why use Amazon BizTrend Scraper?

- Track organic and sponsored product positions per keyword and search page.
- Build price, availability, rating, review-count, and BSR histories from immutable snapshots.
- Research competitors across multiple Amazon marketplaces with one consistent schema.
- Download a ready-to-use Apify Dataset for spreadsheets, BI tools, or further analysis.
- Combine known ASIN monitoring with keyword discovery in the same run.

The unique product identity is `region + ASIN`. A product detail page is requested once per run even when it appears for several keywords; every distinct keyword observation is retained.

Sponsored results are included when Amazon displays them. Their availability can vary by marketplace, location, session, and Amazon experiments.

### How to use Amazon BizTrend Scraper

1. Open the Actor's **Input** tab.
2. Add one or more keywords, Amazon product URLs, or both.
3. Choose the marketplace and number of search pages.
4. Configure an Apify or custom proxy if needed. Residential proxies usually reduce Amazon blocking.
5. Click **Start** and review validated products in the **Output** tab.
6. Schedule the Actor when you need historical snapshots or ranking trends.

### Input

At least one non-empty `keywords` value or one valid `startUrls` product URL is required.

| Field                       | Type      | Default        | Description                                                                           |
| --------------------------- | --------- | -------------- | ------------------------------------------------------------------------------------- |
| `keywords`                  | string\[]  | `[]`           | Search terms; trimmed and deduplicated case-insensitively.                            |
| `startUrls`                 | request\[] | `[]`           | Direct `/dp/ASIN` or `/gp/product/ASIN` URLs. Invalid URLs are skipped.               |
| `region`                    | string    | `amazon.com`   | Marketplace for keyword searches only. URL hostnames control direct URL marketplaces. |
| `maxPages`                  | integer   | `1`            | Search pages per keyword, from 1 to 100.                                              |
| `maxProducts`               | integer   | `50`           | Global unique-product limit; direct URLs are registered first.                        |
| `maxRequestRetries`         | integer   | `3`            | Retries for blocked, invalid, CAPTCHA, and error pages.                               |
| `requestHandlerTimeoutSecs` | integer   | `90`           | Per-page handler timeout in seconds.                                                  |
| `proxyConfiguration`        | object    | proxy disabled | Official Apify Proxy/custom proxy configuration.                                      |

Keyword example:

```json
{
    "keywords": ["wireless mouse", "laptop stand"],
    "region": "amazon.com",
    "maxPages": 3,
    "maxProducts": 100,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

Direct URL example:

```json
{
    "startUrls": [
        { "url": "https://www.amazon.com/dp/B0EXAMPLE" },
        { "url": "https://www.amazon.co.uk/gp/product/B0EXAMPLE2" }
    ]
}
```

### Output

Every product uses camelCase in the Dataset and one timestamp across its snapshot, keyword rankings, sales ranks, and `scrapedAt` value.

```json
{
    "asin": "B0EXAMPLE",
    "region": "amazon.com",
    "productUrl": "https://www.amazon.com/dp/B0EXAMPLE",
    "title": "Ergonomic Wireless Mouse",
    "brand": "Example Brand",
    "category": "Computer Accessories",
    "seller": "Example Seller",
    "mainImageUrl": "https://m.media-amazon.com/images/I/example.jpg",
    "price": 24.99,
    "currency": "USD",
    "currencySymbol": "$",
    "rating": 4.7,
    "reviewCount": 1200,
    "availability": "In Stock",
    "salesRanks": [{ "category": "Electronics", "rank": 1245 }],
    "keywordRankings": [
        {
            "keyword": "wireless mouse",
            "page": 1,
            "absolutePosition": 4,
            "organicPosition": null,
            "sponsored": true
        },
        {
            "keyword": "wireless mouse",
            "page": 1,
            "absolutePosition": 18,
            "organicPosition": 15,
            "sponsored": false
        }
    ],
    "scrapedAt": "2026-08-05T12:00:00.000Z"
}
```

Direct-URL products have an empty `keywordRankings` array unless they are also discovered through a keyword. Missing optional values are JSON `null`; missing BSR is `[]`. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

The Apify Dataset is the primary run output. A temporary failure in secondary application storage does not prevent successfully scraped products from being delivered to the Dataset.

Each keyword ranking distinguishes three related values:

- `absolutePosition` is the card's position among all displayed product cards, including sponsored and organic cards. It starts at 1 on each search page.
- `organicPosition` is the card's position among organic results only. It starts at 1 on each search page and is always `null` for sponsored cards.
- `sponsored` indicates whether that specific appearance is an advertisement.

The same ASIN can have multiple rankings for the same keyword and page when it appears in different positions, including one sponsored appearance and another organic appearance. Its product detail page is still scraped only once per run.

### Data table

| Field                                   | Description                                                                |
| --------------------------------------- | -------------------------------------------------------------------------- |
| `asin`, `region`, `productUrl`          | Marketplace identity and tracking-free canonical URL.                      |
| `title`, `brand`, `category`, `seller`  | Product and merchant metadata visible on Amazon.                           |
| `mainImageUrl`                          | Highest-resolution main image URL found; the image is not downloaded.      |
| `price`, `currency`, `currencySymbol`   | Parsed numeric price and marketplace currency information.                 |
| `rating`, `reviewCount`, `availability` | Current product feedback and stock text.                                   |
| `salesRanks`                            | All parsed category/rank BSR pairs.                                        |
| `keywordRankings`                       | Keyword/page observations with absolute, organic, and sponsored positions. |
| `scrapedAt`                             | ISO 8601 observation timestamp.                                            |

### Supported Amazon marketplaces

Keyword search supports `amazon.com`, `amazon.ca`, `amazon.com.mx`, `amazon.com.br`, `amazon.co.uk`, `amazon.de`, `amazon.fr`, `amazon.it`, `amazon.es`, `amazon.nl`, `amazon.pl`, `amazon.se`, `amazon.com.be`, `amazon.com.tr`, `amazon.ae`, `amazon.sa`, `amazon.in`, `amazon.sg`, `amazon.co.jp`, `amazon.com.au`, `amazon.co.za`, `amazon.eg`, and `amazon.ie`.

### How much does it cost to scrape Amazon?

Cost depends on pages, browser runtime, memory, retries, and proxy traffic. Start with one keyword, one page, and a low `maxProducts`, then inspect run usage before scaling. Apify's free plan can be used for small experiments within its current platform limits; proxy traffic and compute allowances depend on your plan. Direct URLs avoid search-page requests and are cheaper when you already know the ASINs.

### Tips and advanced options

- Use `maxProducts` to put a hard ceiling on a run.
- Prefer a proxy country matching the selected marketplace for more consistent displayed data.
- Schedule comparable inputs because Amazon content can vary by session, location, account state, and experiments.
- Both keyword position counters reset on each search page. `absolutePosition` counts every product card, while `organicPosition` counts only organic cards; both remain separate from BSR.

### FAQ, disclaimers, and support

**Why is a field null?** Amazon layouts, offers, sellers, and availability differ by product and marketplace. The Actor only returns values displayed on the loaded page and does not change language, currency, or delivery destination.

**Can CAPTCHA pages become output?** No. CAPTCHA, robot checks, error pages, and pages without a validated ASIN/title throw informative retryable errors. Invalid snapshots are not saved.

Scraping may be subject to Amazon's terms, robots directives, privacy rules, and local law. You are responsible for ensuring your use is lawful and appropriately rate-limited. Use the Actor's **Issues** tab for bugs or feature requests; custom extraction and integration work can be discussed there as well.

# Actor input Schema

## `keywords` (type: `array`):

Amazon search terms, such as `wireless mouse` or `men's hoodie`. Each keyword is searched separately in the selected marketplace.

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

Optional direct product pages containing `/dp/ASIN` or `/gp/product/ASIN`. Tracking parameters are removed automatically, and unsupported URLs are skipped.

## `region` (type: `string`):

Select where keyword searches run. Direct product URLs always use the marketplace contained in their URL.

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

Maximum number of Amazon search-result pages processed for each keyword.

## `maxProducts` (type: `integer`):

Maximum unique products scraped across all keywords and direct URLs. Direct URLs are counted first.

## `maxRequestRetries` (type: `integer`):

How many times to retry a blocked, CAPTCHA, error, invalid, or temporarily unreachable Amazon page.

## `requestHandlerTimeoutSecs` (type: `integer`):

Maximum processing time for one Amazon page, including loading, scrolling, and extraction.

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

Use Apify Proxy or provide your own proxy URLs. Leave disabled to connect directly.

## Actor input object example

```json
{
  "keywords": [
    "wireless mouse",
    "laptop stand"
  ],
  "startUrls": [
    {
      "url": "https://www.amazon.com/dp/B0ABC12345"
    }
  ],
  "region": "amazon.com",
  "maxPages": 1,
  "maxProducts": 50,
  "maxRequestRetries": 3,
  "requestHandlerTimeoutSecs": 90,
  "proxyConfiguration": {
    "useApifyProxy": 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 = {
    "keywords": [
        "wireless mouse"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ib4ngz/amazon-biztrend-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 = { "keywords": ["wireless mouse"] }

# Run the Actor and wait for it to finish
run = client.actor("ib4ngz/amazon-biztrend-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 '{
  "keywords": [
    "wireless mouse"
  ]
}' |
apify call ib4ngz/amazon-biztrend-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ib4ngz/amazon-biztrend-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/GI22p0aAF3cWjhlWS/builds/zPxccx4pz0i15shtL/openapi.json
