# Ecommerce Scraper API - Amazon, Walmart, Google Shopping (`nabeelbaghoor/ecommerce-product-scraper-api`) Actor

Scrape structured ecommerce data with your own scraping API key: Amazon search results, product pages by ASIN, offer listings and best sellers, Walmart and Target search and product pages, Best Buy and Etsy product pages, and Google Shopping search and product prices. Parsed JSON, pay per result.

- **URL**: https://apify.com/nabeelbaghoor/ecommerce-product-scraper-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** E-commerce, Developer tools, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 search, best seller or offer row returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Ecommerce Scraper API - Amazon, Walmart, Google Shopping

Turn keywords, ASINs and product IDs into clean ecommerce rows: prices, sellers, ratings and rankings from Amazon, Walmart, Target, Best Buy, Etsy and Google Shopping, parsed and ready for a spreadsheet.

### What it collects

- **Amazon search results**: organic, sponsored, suggested and Amazon's Choice items for any keyword on 23 Amazon marketplaces, with ASIN, title, brand, price, rating, review count, Prime and best seller flags, position and shipping text. Filter by category node, seller, price range and Amazon's own refinements, and sort by price, reviews, newest or best sellers.
- **Amazon product pages**: one product by ASIN with its buy box, price, seller, stock, delivery options, bullet points, category ladder, ratings and the rest of the provider's parsed page.
- **Amazon offer listings**: every seller offer for an ASIN, one row per offer, with price, shipping price, condition, seller name and ID, seller rating and delivery options. The row you want for buy box and repricing work.
- **Amazon best sellers**: the ranked best seller list for any browse node, with position, ASIN, title, price and ratings.
- **Walmart**: search results with price, strikethrough price, rating, seller, sponsored flag and fulfillment options, filtered by price, sort, fulfillment type and speed, store or delivery ZIP; and product pages by product ID with GTIN, SKU, specifications, variations and seller.
- **Target**: search results with brand, price, rating and shipping message; and product pages by product ID, localised by store, fulfillment type or delivery ZIP.
- **Best Buy and Etsy**: product pages by product or listing ID with price, rating, seller and availability.
- **Google Shopping**: search results across merchants (organic listings and product listing ads) with price, merchant, rating, delivery and a product token; and product pages by token with every online store's price, reviews, variants and specifications.

### How to use it

1. Pick a source under **What to read**.
2. Add one keyword or identifier per line: a keyword for search, an ASIN for Amazon product and offer pages, a browse node ID for best sellers, a product ID for Walmart, Target, Best Buy or Etsy, or a Google Shopping product token.
3. Optionally set the marketplace domain, a delivery location, filters, sort order and how many pages to read.
4. Paste your own API username and password, and run.

Filters that the chosen source does not document are left off with a warning in the log rather than sent, so a run never looks filtered when it was not.

### Example output

```json
{
  "service": "amazonSearch",
  "serviceLabel": "Amazon search results",
  "source": "amazon_search",
  "requested": "wireless earbuds",
  "page": 1,
  "section": "organic",
  "found": true,
  "recordType": "listing",
  "productId": "B0DHVH5KCB",
  "title": "Open Ear Earbuds 40H Bluetooth 5.4 Lightweight Comfort",
  "price": 26.98,
  "currency": "USD",
  "rating": 4.3,
  "reviewsCount": 45795,
  "seller": null,
  "position": 1,
  "url": "/dp/B0DHVH5KCB",
  "parseStatus": 12000,
  "retrievedAt": "2026-09-25T10:14:52.118Z",
  "record": { "...": "every field the provider parsed, unchanged" },
  "note": null
}
```

### FAQ

#### What is an ecommerce scraper API used for?

Price monitoring, competitor tracking, marketplace research and catalogue enrichment. A brand watches its own and rival listings on Amazon, Walmart and Target every day. A reseller reads every seller offer on an ASIN to see who holds the buy box and at what price. A category manager pulls the Amazon best seller list for a browse node each week. A comparison site reads Google Shopping to see every merchant's price for one product. The shape is always the same: a list of keywords or IDs in, a table of products and prices out.

#### Do I need an API key?

Yes. This actor is bring-your-own-key: it calls a realtime web scraping API with your own account's API username and password and never ships credentials of its own. Paste both into the input, paste `username:password` into the password field, or set them once as the DATA\_API\_USERNAME and DATA\_API\_KEY environment secrets. They travel as an HTTP Basic authorization header, never in a URL. A missing or refused credential ends the run cleanly with a message saying what to fix, rather than failing it.

#### What does it cost?

Two things are billed separately. This actor charges per result row: a search, best seller or offer row costs less than a full product page, because one search page returns dozens of rows. Your scraping API provider bills your own account per job under your plan; each results page is one job. Rows for keywords that returned nothing, products that were not found and pages the provider could not parse are never charged here.

#### Which Amazon marketplaces are supported?

The ones the provider documents: com, ca, co.uk, de, fr, it, es, nl, pl, se, ie, com.be, com.tr, ae, sa, eg, in, co.jp, cn, sg, com.au, com.br and com.mx. Set the delivery location with a ZIP or postal code inside the marketplace country, or a 2-letter country code for delivery abroad, because Amazon changes prices and availability by delivery address.

#### How do I get Google Shopping product prices from every store?

Run the Google Shopping search source first. Each row carries a `token` in its record. Paste those tokens into a second run on the Google Shopping product source to read each product's page with every online store's price, and turn on JavaScript rendering to include the More stores section.

#### Why is the full record kept as well as the columns?

Because every retailer's page parses into a different shape, and a fixed set of columns would drop most of it. The lifted columns (identifier, title, price, currency, rating, review count, seller, position, URL) are the ones the provider names across sources. Everything else it parsed sits under `record`, unchanged.

#### Can this actor buy anything or send data elsewhere?

No. The only route it calls submits a job that reads a public page and returns it parsed. It never sends a callback URL or a cloud storage target, so results come back to this run only. The Amazon seller profile source is deliberately not wired, because its answer carries seller email addresses, phone numbers and reviewer names.

#### What does a parser status mean on a row?

The provider grades each parsed page. 12000 is a full parse. 12004 and 12005 are partial parses, which are kept and marked with a note. Failures such as 12002 (layout changed), 12003 (page not supported) and 12009 (product not found) become a `found: false` row with the reason, and are not charged.

### Keyword map

ecommerce scraper API, Amazon scraper API, Amazon product data API, Amazon search results scraper, Amazon ASIN lookup, Amazon offer listing scraper, Amazon buy box data, Amazon best sellers scraper, Amazon price tracker, Walmart scraper API, Walmart product data, Target scraper API, Best Buy product scraper, Etsy product scraper, Google Shopping scraper API, Google Shopping prices, price monitoring API, competitor price tracking, product data extraction, ecommerce data API, marketplace data scraper, web scraper API bring your own key.

# Actor input Schema

## `source` (type: `string`):

One source per run. Search, best seller and offer sources return one row per item on the page. Product sources return one row per product. Every source asks the provider for its dedicated parser, so rows are structured data rather than HTML.

## `queries` (type: `array`):

One per line. A search keyword for the search sources, a 10-character ASIN for the Amazon product and offer sources, a browse node (category) ID for Amazon best sellers, a retailer product ID for Walmart, Target, Best Buy and Etsy, or a product token (the `token` field of a Google Shopping search row) for the Google Shopping product source.

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

Stop after this many rows across the whole run. Each search page is one billed job at the provider, so this also caps what the run spends there.

## `startPage` (type: `integer`):

First results page to read. Used by Amazon search, offer listing and best sellers, Walmart search and Google Shopping search.

## `pages` (type: `integer`):

How many results pages to read for each line, starting at the start page. Each page is a separate billed job at the provider.

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

Top-level domain of the marketplace, without the dot. Amazon: com, ca, co.uk, de, fr, it, es, nl, pl, se, ie, com.be, com.tr, ae, sa, eg, in, co.jp, cn, sg, com.au, com.br or com.mx. Walmart: com, com.mx, ca or co.cr. Best Buy: com or ca. Leave blank for the provider default (com).

## `geoLocation` (type: `string`):

Where results should be localised for. Amazon: a ZIP or postal code inside the marketplace country (for example 90210 on com, W105LT on co.uk) or a 2-letter country code for delivery abroad. Etsy: a ZIP code or 2-letter country code. Google Shopping: a location such as "New York,New York,United States". Used by Amazon, Etsy and Google Shopping sources.

## `locale` (type: `string`):

Accept-Language value for the page. Amazon uses forms like en\_US, de\_DE or fr\_CA and only on marketplaces that support that language. Google Shopping uses forms like en-us. Leave blank for the marketplace default.

## `currency` (type: `string`):

Currency code for Amazon prices, such as USD, EUR or AUD. Leave blank for the marketplace default.

## `amazonSortBy` (type: `string`):

Sort order for Amazon search results.

## `walmartSortBy` (type: `string`):

Sort order for Walmart search results. The provider default is best match.

## `googleShoppingSortBy` (type: `string`):

Sort order for Google Shopping search results.

## `minPrice` (type: `number`):

Lowest price to include, in whole currency units (for example 25 or 49.99). Used by Amazon, Walmart and Google Shopping search. Amazon takes prices in cents, and the conversion is done for you.

## `maxPrice` (type: `number`):

Highest price to include, in whole currency units. Used by Amazon, Walmart and Google Shopping search.

## `amazonCategoryId` (type: `string`):

Limit Amazon search to one browse node (product category), for example 9056987011.

## `amazonMerchantId` (type: `string`):

Limit Amazon search to items sold by one seller, by the seller's merchant ID.

## `amazonRefinements` (type: `array`):

Amazon's own filter parameters, one per line, in the form Amazon uses such as p\_123:256097. Run a search first and copy values from the refinements section of its parsed record.

## `autoselectVariant` (type: `boolean`):

For accurate price and buy box data on a parent ASIN, ask Amazon for the page of an automatically selected variation. Leave off to read the parent product page as it is.

## `fulfillmentType` (type: `string`):

Walmart, Target and Best Buy only. Walmart takes pickup, delivery or shipping. Target search takes pickup, shipping, shop\_in\_store or same\_day\_delivery; Target product takes pickup, delivery or shipping. Best Buy takes pickup (with a store ID) or shipping (with a delivery ZIP). A value the chosen source does not take is left off.

## `walmartFulfillmentSpeed` (type: `string`):

Only show Walmart items available within this time.

## `deliveryZip` (type: `string`):

Shipping-to postal code for Walmart, Target and Best Buy.

## `storeId` (type: `string`):

A store location for Walmart, Target, Best Buy or Etsy. Target, Best Buy and Etsy take a numeric ID.

## `disableAutocorrect` (type: `boolean`):

Search for the keyword exactly as written instead of Google's corrected spelling.

## `renderJavaScript` (type: `boolean`):

Ask the provider to render the page in a browser before parsing. Target and Google Shopping search are always rendered, as the provider requires. For Google Shopping product pages this adds prices from the More stores section. Rendered jobs may cost more at the provider.

## `apiUsername` (type: `string`):

Your own Web Scraper API username from your provider dashboard. This actor is bring-your-own-key and never ships credentials of its own. Leave blank to use the DATA\_API\_USERNAME environment secret.

## `apiKey` (type: `string`):

Your own Web Scraper API password. You may also paste username:password here and leave the username blank. Leave blank to use the DATA\_API\_KEY environment secret.

## `requestsPerMinute` (type: `integer`):

Pacing ceiling for jobs sent to the provider. Realtime jobs are slow, so this rarely binds; lower it if your plan's rate limit is being hit.

## `baseUrl` (type: `string`):

Override the host the actor calls. Only useful for testing against a different environment.

## Actor input object example

```json
{
  "source": "amazonSearch",
  "queries": [
    "wireless earbuds"
  ],
  "maxResults": 50,
  "startPage": 1,
  "pages": 1,
  "autoselectVariant": false,
  "disableAutocorrect": false,
  "renderJavaScript": false,
  "requestsPerMinute": 30
}
```

# Actor output Schema

## `records` (type: `string`):

One row per product, listing or offer, alongside the keyword or identifier that produced it.

# 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 = {
    "queries": [
        "wireless earbuds"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/ecommerce-product-scraper-api").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 = { "queries": ["wireless earbuds"] }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/ecommerce-product-scraper-api").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 '{
  "queries": [
    "wireless earbuds"
  ]
}' |
apify call nabeelbaghoor/ecommerce-product-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/ecommerce-product-scraper-api"
        }
    }
}
```

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/CtdxTZLyfBWeYfxxp/builds/TFf4ORtahT9ymdiuE/openapi.json
