# Price Comparison: AliExpress, eBay, Walmart, Etsy (`myth84/marketplace-price-compare-scraper`) Actor

Product price comparison across AliExpress, eBay, Walmart and Etsy in one run: one keyword, one table with the same columns everywhere (price, currency, shipping, rating, sales, marketplace, rank) and a summary of the lowest, median and highest price per marketplace. No personal data.

- **URL**: https://apify.com/myth84/marketplace-price-compare-scraper.md
- **Developed by:** [Flatrow Data Studio](https://apify.com/myth84) (community)
- **Categories:** E-commerce, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.29 / 1,000 products

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

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

### Marketplace Price Comparison: AliExpress, eBay, Walmart, Etsy – one keyword, one table, no personal data

- **What you get:** a price comparison of the best-matching products of AliExpress, eBay, Walmart and Etsy for each keyword, in one dataset with the same columns everywhere (price, currency, shipping, rating, units sold, seller kind, image, link, marketplace, rank), plus the lowest, median and highest price per marketplace. No login, no cookies, no personal data.
- **For whom:** online sellers and dropshippers sourcing or pricing a product, price-comparison sites, market analysts, shoppers' tools and AI agents through MCP.
- **How much:** a fixed price per product row and nothing else (compute and proxy traffic included, see the Pricing tab); `maxResultsPerMarketplace` caps every run.

This price comparison scraper searches **AliExpress, eBay, Walmart and Etsy for the same keywords in one run** to compare prices across marketplaces, and returns **one flat row per product**, with the same columns whatever the marketplace: price and currency, strike-through price and discount, free shipping or shipping cost, delivery estimate, rating and number of reviews, units sold, seller kind, image and link, plus the marketplace it comes from and its rank there. A **summary per keyword and marketplace** gives the number of products, the lowest, median and highest price and the cheapest offer, and the cheapest offer across marketplaces. Choose the country (10 countries: each marketplace's local site, prices in the local currency), new or used items and a price range.

**No personal data, by design.** Product cards carry no information about buyers; review texts and their authors are never collected, only the average rating and the number of reviews. Sellers are named only when they are the platform itself or a registered business; private sellers and Etsy shops are never identified. Every row goes through a privacy filter before it is saved. The dataset is safe to store, share and feed to AI agents.

### What can you do with a cross-marketplace price comparison?

- **Source and price a product**: see at a glance what wireless earbuds, air fryers or phone cases cost on AliExpress, eBay and Walmart, how much shipping adds and which listings actually sell (units sold, ratings).
- **Watch competitors across channels**: schedule the same keywords daily and follow the lowest and median price of each marketplace in the SUMMARY record.
- **Feed a price-comparison page or an AI assistant** with one stable table instead of four different scrapers and schemas.
- **Study a market**: price spread between a sourcing marketplace (AliExpress) and retail marketplaces (Walmart, eBay), handmade alternatives on Etsy, share of sponsored results.

### What data does Marketplace Price Comparison return?

Every row has every column: a value a marketplace does not show in its results is `null` (or `[]` / `{}` for lists and objects), so CSV and Excel exports keep the same columns from run to run. The columns are those of the studio's shared e-commerce schema (`ecommerce-product/1.1`, also returned by our AliExpress, eBay and Etsy scrapers) plus `marketplace` and `rankInMarketplace`.

| Group | Columns |
|---|---|
| Comparison | `marketplace`, `searchQuery`, `rankInMarketplace` |
| Identity | `schemaVersion`, `platform`, `platformProductId`, `variantId`, `url`, `title`, `brand`, `category`, `categoryPath` |
| Prices | `currency`, `price`, `originalPrice`, `discountPercent`, `inStock`, `stockQuantity` |
| Popularity | `rating`, `ratingMax`, `reviewCount`, `soldCount`, `isBestSeller`, `isChoice`, `listedAt` |
| Seller | `storeType`, `storeName`, `storeId`, `storeUrl`, `storeRating` |
| Shipping | `shippingFree`, `shippingCost`, `deliveryEstimate`, `shipsFrom` |
| Media and attributes | `imageUrl`, `imageCount`, `attributes` |
| Search context | `isSponsored`, `searchRank`, `searchPage`, `viewCountryCode`, `scrapedAt` |
| Price monitoring | `changeType`, `previousPrice`, `priceDelta`, `priceDeltaPercent` (columns of the shared schema, always `null` for this Actor) |

What each marketplace shows in its results differs, and the row says so with `null` rather than a guess:

| Marketplace | Usually filled | Sometimes | Empty |
|---|---|---|---|
| AliExpress | `price`, `originalPrice`, `discountPercent`, `rating`, `soldCount`, `shipsFrom`, `isChoice`, `listedAt` | `shippingFree`, `deliveryEstimate`, `isBestSeller` | `brand`, `category`, `inStock`, `reviewCount`, `shippingCost` |
| eBay | `price`, `inStock`, `shippingFree`, `shipsFrom`, `soldCount`, `attributes.condition` | `originalPrice`, `shippingCost`, `deliveryEstimate`, `rating`, `reviewCount`, `brand` | `category`, `listedAt` |
| Walmart | `price`, `inStock`, `rating`, `reviewCount`, `category`, `categoryPath`, `isBestSeller`, `deliveryEstimate`, `attributes.condition` | `originalPrice`, `brand` (walmart.ca) | `soldCount`, `shipsFrom`, `listedAt`, `shippingFree` |
| Etsy | `price`, `rating`, `reviewCount` | `inStock`, `shippingFree`, `originalPrice` | `soldCount`, `brand`, `category`, `deliveryEstimate`, `storeName` |

`rankInMarketplace` is the position of the product among the rows this run returns for its keyword on its marketplace (1 to `maxResultsPerMarketplace`, in the marketplace's best-match order, after your filters); `searchRank` is its position in the marketplace's own result list, sponsored products included. `marketplace` is the value of the `marketplaces` input that found the product (equal to `platform`).

### Marketplaces, countries and currencies

`country` picks each marketplace's site for that country; prices are in the currency of that site. AliExpress ships to every country of the list and shows the currency you ask for.

| `country` | AliExpress | eBay | Walmart | Etsy | Currency |
|---|---|---|---|---|---|
| `US` | ships to US | ebay.com | walmart.com | etsy.com | USD |
| `GB` | ships to GB (not verified) | ebay.co.uk | — | etsy.com/uk | GBP |
| `CA` | ships to CA (not verified) | ebay.ca (not verified) | walmart.ca | etsy.com/ca (not verified) | CAD |
| `AU` | ships to AU (not verified) | ebay.com.au (not verified) | — | etsy.com/au (not verified) | AUD |
| `DE` | ships to DE (not verified) | ebay.de | — | etsy.com/de (not verified) | EUR |
| `FR` | ships to FR | ebay.fr | — | etsy.com/fr | EUR |
| `IT` | ships to IT (not verified) | ebay.it (not verified) | — | etsy.com/it (not verified) | EUR |
| `ES` | ships to ES (not verified) | ebay.es (not verified) | — | etsy.com/es (not verified) | EUR |
| `NL` | ships to NL (not verified) | ebay.nl (not verified) | — | etsy.com/nl (not verified) | EUR |
| `IE` | ships to IE (not verified) | — | — | etsy.com/ie (not verified) | EUR |

"Not verified" sites follow each marketplace's public conventions and were not read when this Actor was built: the run says so in its log and in the summary. A marketplace without a site for the country (—) is not searched and is reported as `not-served`. eBay is searched for **fixed-price ("Buy It Now") listings** only: the current bid of an auction is not a price to compare.

### How to compare prices across marketplaces

1. **Enter search keywords**, one per line ("wireless earbuds", "air fryer"). Each keyword is compared separately.
2. **Choose the marketplaces** (AliExpress, eBay and Walmart by default; add Etsy for handmade, vintage and gift products) and the **country**.
3. **Set the number of products per marketplace** (20 by default) and, if needed, the condition (new or used) and a price range.
4. **Run** and open the **Output** tab: the *Comparison* view puts title, marketplace, price, shipping, rating, sales and link side by side, the *Summary* view lists keyword, marketplace and rank; the SUMMARY record gives the price figures per marketplace. Export everything as JSON, CSV, Excel or through the API.

### Input

Give at least one keyword in `searchQueries` (with nothing at all, "wireless earbuds" is compared on AliExpress, eBay and Walmart). Field names and defaults are those of the input form.

The input of our validation run: two keywords on the four marketplaces, 20 products each, US prices in USD (every other field keeps its default):

```json
{
  "searchQueries": [
    "wireless earbuds",
    "ceramic mug"
  ],
  "marketplaces": [
    "aliexpress",
    "ebay",
    "walmart",
    "etsy"
  ],
  "maxResultsPerMarketplace": 20,
  "country": "US",
  "currency": "USD"
}
```

Every field, with its type and default:

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | string\[] | `["wireless earbuds"]` | Product words to search on every marketplace, one search per entry. Etsy only has results for common product words ("ceramic mug"). |
| `marketplaces` | string\[] | `["aliexpress","ebay","walmart"]` | Any of `aliexpress`, `ebay`, `walmart`, `etsy`, all searched in the same run. |
| `maxResultsPerMarketplace` | integer | `20` | Products per keyword and per marketplace (1 to 500). You are never charged for more than keywords × marketplaces × this number. Prefilled with 10 in the form. |
| `country` | string | `"US"` | One of `US`, `GB`, `CA`, `AU`, `DE`, `FR`, `IT`, `ES`, `NL`, `IE`: the site of each marketplace for that country (see the table above). `UK` is accepted for `GB`. |
| `currency` | string | — | ISO currency code to compare prices in. Empty: the currency of the country. AliExpress shows any currency; eBay, Walmart and Etsy show the currency of their site. |
| `condition` | string | `"any"` | `any`, `new` or `used`. Sent to eBay's search filter and checked on the condition labels of eBay and Walmart products. AliExpress and Etsy show no condition: kept for `new`, not searched for `used`. |
| `priceMin` | number | — | Minimum price in the currency of the results. Sent to each marketplace's own price filter where it has one (AliExpress, eBay, Walmart), then checked on every product returned. |
| `priceMax` | number | — | Maximum price, at least `priceMin`, same rules as `priceMin`. |
| `proxyConfiguration` | object | `{"useApifyProxy":true}` | Keep the default: each marketplace then uses the proxy configuration validated for it, included in the price. A proxy group or your own proxy URLs set here apply to every marketplace. |

### Output example

One real row, produced by the Actor from a "wireless earbuds" search on AliExpress for the United States (the first product of the results). All columns are present, in this order, for every product of every marketplace:

```json
{
  "schemaVersion": "ecommerce-product/1.1",
  "marketplace": "aliexpress",
  "platform": "aliexpress",
  "platformProductId": "3256812817428248",
  "variantId": "12000060018766532",
  "url": "https://www.aliexpress.com/item/3256812817428248.html",
  "title": "2026 New Air 3【 Pro3 】 Bluetooth Wireless Earbuds With Heart Rate Monitoring, Active Noise Cancellation Headphones, Waterproof for Daily Use, For IPhone IOS Smartphone, Gaming /Sports /Fitness Earphones.",
  "brand": null,
  "category": null,
  "categoryPath": [],
  "currency": "USD",
  "price": 27.29,
  "originalPrice": 64.02,
  "discountPercent": 57,
  "inStock": null,
  "stockQuantity": null,
  "rating": 4,
  "ratingMax": 5,
  "reviewCount": null,
  "soldCount": 32,
  "storeType": "unknown",
  "storeName": null,
  "storeId": null,
  "storeUrl": null,
  "storeRating": null,
  "shippingFree": true,
  "shippingCost": null,
  "deliveryEstimate": null,
  "shipsFrom": "US",
  "imageUrl": "https://ae-pic-a1.aliexpress-media.com/kf/Sb5cfbb9b1c1b480a9f51b0cf05d8cc40e.jpg",
  "imageCount": 1,
  "attributes": {
    "soldCountText": "32 sold",
    "shipsTo": "US"
  },
  "isSponsored": false,
  "isBestSeller": null,
  "isChoice": false,
  "listedAt": "2026-08-20",
  "searchQuery": "wireless earbuds",
  "rankInMarketplace": 1,
  "searchRank": 1,
  "searchPage": 1,
  "viewCountryCode": "US",
  "scrapedAt": "2026-10-20T00:00:00.000Z",
  "changeType": null,
  "previousPrice": null,
  "priceDelta": null,
  "priceDeltaPercent": null
}
```

`price` is the price displayed in the results, shipping not included (`shippingFree`, `shippingCost`); `originalPrice` is the strike-through price when the marketplace shows one and `discountPercent` the percentage off. The last four columns belong to the shared schema and stay `null` for this Actor.

The **Output** tab offers two views of the same rows: **Comparison** (title, marketplace, price, currency, free shipping, shipping cost, delivery, rating, reviews, units sold, link) and **Summary** (keyword, marketplace, rank, price, currency, rating, units sold, sponsored, title, link).

### Summary per keyword and marketplace

The run also writes a `SUMMARY` record to its default key-value store (Output tab → *Summary per keyword and marketplace*, or `GET /v2/key-value-stores/<store>/records/SUMMARY`). Its `searches` list holds one entry per keyword; here is the entry of the same "wireless earbuds" run on AliExpress, eBay and Walmart (20 products each):

```json
{
  "searchQuery": "wireless earbuds",
  "count": 60,
  "cheapest": {
    "marketplace": "aliexpress",
    "title": "Wireless Earbuds Bluetooth 5.3 With Microphone, Air Pro In-ear Sports Waterproof TWS Earphones, Bluetooth Hands-Free Headset",
    "price": 0.79,
    "currency": "USD",
    "url": "https://www.aliexpress.com/item/3256812513931177.html",
    "platformProductId": "3256812513931177"
  },
  "marketplaces": [
    {
      "marketplace": "aliexpress",
      "status": "ok",
      "count": 20,
      "currency": "USD",
      "pricedCount": 9,
      "newShopperDeals": 11,
      "priceMin": 0.79,
      "priceMedian": 7.19,
      "priceMax": 356.09,
      "cheapest": {
        "marketplace": "aliexpress",
        "title": "Wireless Earbuds Bluetooth 5.3 With Microphone, Air Pro In-ear Sports Waterproof TWS Earphones, Bluetooth Hands-Free Headset",
        "price": 0.79,
        "currency": "USD",
        "url": "https://www.aliexpress.com/item/3256812513931177.html",
        "platformProductId": "3256812513931177"
      },
      "message": null
    },
    {
      "marketplace": "ebay",
      "status": "ok",
      "count": 20,
      "currency": "USD",
      "pricedCount": 20,
      "newShopperDeals": 0,
      "priceMin": 7.19,
      "priceMedian": 31.14,
      "priceMax": 136.99,
      "cheapest": {
        "marketplace": "ebay",
        "title": "TWS Bluetooth Earbuds Waterproof Bluetooth 5.1 Headset Noise Cancelling Wireless",
        "price": 7.19,
        "currency": "USD",
        "url": "https://www.ebay.com/itm/800260906057",
        "platformProductId": "800260906057"
      },
      "message": null
    },
    {
      "marketplace": "walmart",
      "status": "ok",
      "count": 20,
      "currency": "USD",
      "pricedCount": 20,
      "newShopperDeals": 0,
      "priceMin": 14.88,
      "priceMedian": 22.49,
      "priceMax": 199.95,
      "cheapest": {
        "marketplace": "walmart",
        "title": "Skullcandy Smokin' Buds XT True Wireless in-Ear Earbuds, Black",
        "price": 14.88,
        "currency": "USD",
        "url": "https://www.walmart.com/ip/Skullcandy-Smokin-Buds-XT-True-Wireless-in-Ear-Earbuds-Black/1546280223",
        "platformProductId": "1546280223"
      },
      "message": null
    }
  ]
}
```

- Per keyword: `searchQuery`, `count` (products of all marketplaces) and `cheapest`, the lowest price across the marketplaces whose prices are in the compared currency.
- Per keyword and marketplace (`marketplaces`): `status`, `count`, `currency`, `pricedCount` (the products the figures are computed on), `newShopperDeals`, `priceMin`, `priceMedian`, `priceMax`, `cheapest` (`marketplace`, `title`, `price`, `currency`, `url`, `platformProductId`) and `message` (why a marketplace returned nothing for this keyword).
- Prices are compared as displayed, shipping not included, and only within one currency: no exchange rate is ever applied. AliExpress shows part of its cards at a **welcome-deal price for first-time buyers only** (`attributes.newShopperDeal`, more than half of a US search): those rows stay in the dataset but are left out of the figures (`newShopperDeals` counts them), so that `priceMin` and `cheapest` are prices anybody can pay.
- The record also gives the run's `country`, `currency`, `condition`, `priceMin`, `priceMax`, `maxResultsPerMarketplace` and `products`, and per marketplace (top-level `marketplaces`): `status`, `site`, `currency`, `verified`, `proxyTier`, `products`, `filteredOut` (products left out by the price range or the condition), `requests`, `blocked`, `errors`, `durationMs` and `message`.
- `status` is `ok` (products returned), `empty` (searched, nothing matched), `blocked` (the marketplace refused the requests), `failed` (the crawl stopped on an error), `not-served` (no site for the country) or `skipped` (used items on AliExpress or Etsy, which show no condition, or a marketplace whose turn came after your spending limit was reached).

### How much does it cost?

This Actor uses **pay-per-event pricing: you pay a fixed price per product row** saved to your dataset, whatever the marketplace, and nothing else. The price of every plan tier is on the **Pricing tab** of this page.

| What you pay for | How it is counted | Price |
|---|---|---|
| `result` event: one product row saved to your dataset | once per product, capped by keywords × marketplaces × `maxResultsPerMarketplace` | Pricing tab, per plan tier |
| Compute, proxies, storage and data transfer | included: no platform usage is passed on to you | — |

The cost of a run is known before you start: the default input (one keyword, three marketplaces, 20 products each) returns at most 60 rows. A marketplace that returns nothing costs nothing.

### Limits and behaviour worth knowing

- **Marketplaces run two at a time**, each with its own browsing session per keyword. The default input reads one result page per marketplace and usually finishes in under a minute; a few hundred products per marketplace take a few minutes (Walmart pauses between pages to stay polite).
- **One marketplace failing does not stop the others.** If it is blocked, fails or finds nothing, its status and the reason are in the log and in the SUMMARY record. The run fails only when no marketplace returned any product, so that a broken run is never reported as a success.
- **A product found by two of your keywords on the same marketplace appears once**, under the first keyword. Products are deduplicated within each marketplace by their id.
- **A search stopped halfway is retried once.** When a marketplace refuses a keyword's pages even after a new session, the keyword is searched once more from its first page on new sessions: the products already saved are neither saved nor charged again, and the retry stops as soon as the keyword has its products.
- **Etsy** has results only for common product words (it reads Etsy's market pages, e.g. "ceramic mug"); for other words it returns nothing and says so for that keyword.
- **The price range** is applied twice: by the marketplace's own filter (AliExpress rounds to whole amounts, Walmart rounds its bounds, eBay's filter is not verified yet) and on every product returned, so rows outside your range never reach the dataset; a narrow range may give fewer products than asked.
- **The condition** is filtered by eBay (new: verified; used: not verified yet) and read on Walmart's pre-owned labels. AliExpress and Etsy show no condition: their products are kept for `new` (they are mostly new items) and not searched for `used`.
- **Sort order**: each marketplace's own best-match order; sponsored products are kept and flagged in `isSponsored`.

### Integrations and API

Get the results from the Output tab (JSON, CSV, Excel, XML, RSS) or automatically: Apify API, webhooks, scheduled runs and integrations with Google Sheets, Make, Zapier, n8n, Slack and others. For bugs or questions, open an issue in the **Issues** tab with your run id and input.

### Use it from your AI assistant

Add this Actor as a tool to Claude, ChatGPT, Cursor, VS Code or any MCP client with the Apify MCP server URL below (sign in with your Apify account when asked):

`https://mcp.apify.com?tools=myth84/marketplace-price-compare-scraper`

Then ask in plain words. Copy this prompt and change the details:

```text
Use myth84/marketplace-price-compare-scraper to compare the price of an air fryer on AliExpress, eBay and Walmart in the US, new items only. Input: {"searchQueries": ["air fryer"], "marketplaces": ["aliexpress", "ebay", "walmart"], "maxResultsPerMarketplace": 10, "condition": "new"}. Show the lowest and median price per marketplace from the SUMMARY record, then the five cheapest products with marketplace, price, shipping and link.
```

### For AI agents (MCP)

Through the [Apify MCP server](https://mcp.apify.com?tools=myth84/marketplace-price-compare-scraper) this Actor is a tool that answers questions such as *"compare the price of wireless earbuds on AliExpress, eBay and Walmart"* or *"where is an air fryer cheapest in the US, new, under 100 dollars?"*.

**Minimal input** (every other field keeps its default; raise `maxResultsPerMarketplace` only when the question needs more rows):

```json
{
  "searchQueries": [
    "air fryer"
  ],
  "marketplaces": [
    "aliexpress",
    "ebay",
    "walmart"
  ],
  "maxResultsPerMarketplace": 10
}
```

- **Key output fields**: `marketplace`, `searchQuery`, `rankInMarketplace`, `title`, `url`, `price`, `currency`, `originalPrice`, `shippingFree`, `shippingCost`, `deliveryEstimate`, `rating`, `reviewCount`, `soldCount`, `attributes.condition`; the SUMMARY record gives `priceMin`, `priceMedian`, `priceMax` and `cheapest` per keyword and marketplace, and `cheapest` across marketplaces. Every column is always present; `null` means the marketplace did not show the value.
- **Use it when** you need current prices of the same product on several marketplaces in one call: pass `searchQueries`, `marketplaces`, optionally `country`, `condition`, `priceMin` / `priceMax`, and a small `maxResultsPerMarketplace` (10 to 20 is enough for an answer).
- **Do not use it for** product pages, reviews, seller information, Amazon, or anything behind a login: it reads public search results only and collects no personal data. For one marketplace with more options (sort orders, category filters, price monitoring), use that marketplace's own scraper (below).
- **Cost per 1,000 results**: 1,000 `result` events at the price of your plan tier (Pricing tab); nothing else is charged.
- **Typical time**: usually under a minute for the minimal input (one result page per marketplace, two marketplaces at once).

### Alternatives and switching

- **Official APIs.** Each marketplace has its own developer programme, with application keys, approval, quotas and a different data model each. This Actor reads what any visitor sees in the search results of the four marketplaces, with no account, no keys and one schema.
- **Four scrapers and a spreadsheet.** One run replaces four: the same keyword, the same columns, the marketplace and rank added to every row, and the price figures per marketplace computed for you. Each marketplace keeps the configuration validated for it, and a marketplace that fails does not stop the others.
- **Another scraper from the Store.** The input names differ from one Actor to the next; the usual ones map to this Actor as follows:

| Usual input | Here | Note |
|---|---|---|
| `search`, `query`, `keyword` | `searchQueries` | Several keywords per run, each compared separately |
| `sites`, `platforms`, `stores` | `marketplaces` | `aliexpress`, `ebay`, `walmart`, `etsy` |
| `maxItems`, `limit` | `maxResultsPerMarketplace` | Per keyword and per marketplace, never charged beyond |
| `country`, `locale` | `country` | `US`, `GB`, `CA`, `AU`, `DE`, `FR`, `IT`, `ES`, `NL`, `IE` |
| `currency` | `currency` | Empty: the currency of the country; never converted |
| `condition` | `condition` | `any`, `new` or `used` |
| `minPrice`, `maxPrice` | `priceMin`, `priceMax` | In the currency of the results, checked on every product |
| `proxy` | `proxyConfiguration` | Keep the default: proxies are included in the price |

### FAQ

#### Does it collect personal data?

No. It reads public search results without logging in and keeps product facts only: no buyer, reviewer or private-seller information, no Etsy shop names. Sellers are named only when they are the platform itself or a registered business. Every row goes through a privacy filter before it is saved.

#### Which marketplaces and countries are supported?

AliExpress, eBay, Walmart and Etsy, for `US`, `GB`, `CA`, `AU`, `DE`, `FR`, `IT`, `ES`, `NL` and `IE` (see *Marketplaces, countries and currencies*). Walmart is searched in the United States and Canada only, eBay everywhere but Ireland; a marketplace without a site for the country is reported as `not-served`. Amazon is not part of this Actor.

#### In which currency are the prices, and are they converted?

In the currency of each marketplace's site for the country (USD for the United States, GBP for the United Kingdom…). AliExpress shows the currency you ask for in `currency`. Prices are never converted: the summary compares prices only within one currency, and a site that shows another currency than the one you asked for is flagged in the log and the summary. eBay's proxy exits in the country of its site, so that eBay prices come in the site's currency; a product still shown in another currency (eBay converts prices for a visitor of another country) keeps the price it shows, is left out of the figures and of the cheapest offer, and is named in the `message` of the summary.

#### How much does a comparison cost, and do I pay for proxies?

You pay a fixed price per product row (Pricing tab) and nothing else: compute, proxy traffic and storage are included. The default input returns at most 60 rows; a marketplace that returns nothing costs nothing. Keep the default proxy configuration: each marketplace then uses the configuration validated for it.

#### Why did a marketplace return fewer products than I asked for, or none?

Your price range or condition may leave out products (`filteredOut` in the summary), Etsy has results only for common product words, a product found by two of your keywords appears once, and a marketplace may block a run now and then even after the automatic retry of the keyword (`blocked`, retry later). The SUMMARY record says why for every keyword and marketplace.

#### Is the lowest price really the cheapest offer?

It is the lowest displayed price, shipping not included, among the products returned: check `shippingFree` and `shippingCost`. AliExpress welcome-deal prices, reserved to first-time buyers, are left out of the summary figures but kept in the dataset with `attributes.newShopperDeal`.

#### Can I compare used items?

Yes on eBay (its "used" filter, not verified yet at build time) and on Walmart (products labelled pre-owned). AliExpress and Etsy show no condition, so they are not searched for `used` and are reported as `skipped`.

#### How often should I run it?

Prices and rankings change every day: schedule the same input daily or weekly and compare the SUMMARY records, or join rows on `marketplace` + `platformProductId`.

#### Is it legal to compare prices this way?

The Actor reads only publicly available search pages, without logging in, and collects no personal data. You are responsible for your use of the data and for complying with each marketplace's terms and the laws that apply to you.

### More scrapers by Flatrow Data Studio

The e-commerce scrapers of the studio return the same columns, with more options for one marketplace (sort orders, filters, price monitoring):

- [AliExpress Products Scraper & Price Tracker](https://apify.com/myth84/aliexpress-search-scraper): AliExpress prices, discounts, units sold and shipping for any keywords and delivery country, with price-drop alerts.
- [eBay Listings Scraper & Price Tracker](https://apify.com/myth84/ebay-search-scraper): eBay prices, condition, shipping and units sold on nine eBay sites, with price monitoring.
- [Etsy Listings Scraper & Price Tracker](https://apify.com/myth84/etsy-search-scraper): Etsy prices, sale prices, ratings and review counts for any common search term, with price monitoring.

Did this Actor give you the comparison you needed? A rating on its Store page helps other people find it. For a bug or a missing field, open an issue in the **Issues** tab.

### Legal note

This Actor reads publicly available search pages of AliExpress, eBay, Walmart and Etsy without logging in and collects no personal data. You are responsible for your use of the data and for complying with the terms of each marketplace and the laws that apply to you.

Not affiliated with, endorsed or sponsored by AliExpress, eBay, Walmart or Etsy. All trademarks belong to their owners.

# Changelog

This Actor's version history is a separate document: https://apify.com/myth84/marketplace-price-compare-scraper/changelog.md

# Actor input Schema

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

Product words to search on every marketplace, one search per line, e.g. <code>wireless earbuds</code> or <code>air fryer</code>. Each keyword is compared separately; duplicates are searched once. Etsy only has results for common product words (e.g. <code>ceramic mug</code>). Default <code>wireless earbuds</code>: a product found on AliExpress, eBay and Walmart, so a run without keywords still gives a full comparison.

## `marketplaces` (type: `array`):

Marketplaces to search, all in the same run. Default: AliExpress, eBay and Walmart, which have results for any product keyword. Add Etsy for handmade, vintage and gift products.

## `maxResultsPerMarketplace` (type: `integer`):

Products returned per keyword and per marketplace, in each marketplace's own best-match order, from 1 to 500; you are never charged for more than keywords × marketplaces × this number. Default 20: enough products per marketplace for a meaningful lowest, median and highest price. The form is prefilled with 10 for a quick first run.

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

Country to compare prices for: the eBay, Walmart and Etsy site of that country, and AliExpress shipping to it. A marketplace without a site for the country (Walmart outside the US and Canada) is skipped and says so in the log and the summary. Default US: the only country whose four sites (AliExpress shipping, ebay.com, walmart.com, etsy.com) were all verified when this Actor was built.

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

ISO currency code to compare prices in, e.g. <code>USD</code>. Leave empty for the currency of the country (USD for the United States). AliExpress shows any currency; eBay, Walmart and Etsy show the currency of their site, and rows in another currency are left out of the cross-marketplace cheapest offer.

## `condition` (type: `string`):

New or used items. Applied by eBay's search filter and to Walmart's labelled pre-owned items. AliExpress and Etsy do not show a condition: kept for <code>new</code>, skipped for <code>used</code>. Default any: every product, and no marketplace left out.

## `priceMin` (type: `number`):

Keep only products priced at least this amount, in the currency of the results, e.g. <code>15</code> or <code>9.99</code>. Sent to the marketplace's own filter where it has one, then checked on every product returned. Leave empty for no minimum.

## `priceMax` (type: `number`):

Keep only products priced at most this amount, in the currency of the results, e.g. <code>50</code>; it must be at least priceMin. Sent to the marketplace's own filter where it has one, then checked on every product returned. Leave empty for no maximum.

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

Keep the default (Apify Proxy, no group): each marketplace then uses the proxy validated for it, included in the price. A proxy group or your own proxy URLs set here apply to every marketplace.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "marketplaces": [
    "aliexpress",
    "ebay",
    "walmart"
  ],
  "maxResultsPerMarketplace": 10,
  "country": "US",
  "condition": "any",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `products` (type: `string`):

All compared products as dataset items, one flat row per product and marketplace. Append ?format=csv or ?format=xlsx for spreadsheets. The Comparison view is selected by default; the Summary view is also available.

## `summary` (type: `string`):

JSON record: for every search keyword and marketplace, the number of products, the lowest, median and highest price with their currency and the cheapest offer; the cheapest offer across marketplaces per keyword; the status of every marketplace (ok, empty, blocked, failed, not-served, skipped) and why.

## `runStats` (type: `string`):

Requests made, bytes transferred, blocked pages and products returned per marketplace, rows left out by the filters, and the estimated platform cost of the run.

# 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"
    ],
    "maxResultsPerMarketplace": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("myth84/marketplace-price-compare-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"],
    "maxResultsPerMarketplace": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("myth84/marketplace-price-compare-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"
  ],
  "maxResultsPerMarketplace": 10
}' |
apify call myth84/marketplace-price-compare-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,myth84/marketplace-price-compare-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/gchtS58jVpuTKQTc3/builds/VOfbMr1x3Ts1ora3u/openapi.json
