# Wish Product Scraper (`axlymxp/wish-product-scraper`) Actor

Scrape Wish.com products by keyword, category, collection (Deals Hub) or product ID. Fast direct-API client, no browser. Get USD prices, ratings, sales counts, merchant info, variations, images and reviews as clean JSON. Pay only for results.

- **URL**: https://apify.com/axlymxp/wish-product-scraper.md
- **Developed by:** [axly](https://apify.com/axlymxp) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 dataset items

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/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

## Wish Product Scraper

Extract product data from **Wish.com** at scale — by keyword search, category,
collection (Deals Hub / flash sale), or direct product ID. Built on a fast,
direct mobile-API client (no headless browser), so runs are quick, cheap, and
reliable, and every row carries a **stable USD price** plus ratings, sales
counts, merchant info, variations, images, and optional reviews.

### Who it's for

- **Dropshippers & e-commerce sellers** — find winning products, track prices and
  demand signals (`num_bought`, ratings) across categories.
- **Price & catalog researchers** — bulk product data with consistent USD pricing.
- **Market analysts** — category and Deals Hub monitoring.
- **Developers & data teams** — clean, stable JSON for pipelines and dashboards.

### What you get (output fields)

| Field | Description |
|---|---|
| `product_id` | Wish 24-hex product id |
| `name` | Product title |
| `url` | Product page URL |
| `image_url` | Primary image |
| `price_usd` | Price in USD (stable across geos) |
| `price_local` / `currency` | Localized price + currency code |
| `crossed_price_usd` | Original / crossed-out price if discounted |
| `rating` / `review_count` | Average rating and number of reviews |
| `num_bought` | Reported number of purchases |
| `merchant_id` / `merchant_name` | Store identity |
| `is_sold_out` / `variation_count` | From product detail |
| `images` | Product image gallery (from detail) |
| `reviews` | Customer reviews (rating, comment, author, date) when enabled |
| `source` / `scraped_at` | Provenance + ISO-8601 timestamp |

### Use cases

- **Product research / winning-product discovery** — search a niche, sort by
  `num_bought` and `rating`, enrich the best with detail + reviews.
- **Price monitoring** — schedule daily runs over your product IDs and diff
  `price_usd`.
- **Category & Deals Hub tracking** — pull `dealshub_flashsale` or a category
  handle to watch what Wish is pushing.
- **Review mining** — enable reviews to feed sentiment analysis.

### Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array | `[]` | Keywords, one search each |
| `categoryHandles` | array | `[]` | Category handles (e.g. `bs_03`) |
| `collectionTags` | array | `[]` | Collection tags (e.g. `dealshub_flashsale`) |
| `productIds` | array | `[]` | Direct product IDs or URLs |
| `maxItems` | integer | `200` | Global cap on rows |
| `maxPagesPerQuery` | integer | `5` | Pages per keyword/category (30/page) |
| `fetchDetail` | boolean | `true` | Enrich each product with the detail page |
| `fetchReviews` | boolean | `false` | Include customer reviews |
| `maxReviewsPerProduct` | integer | `10` | Review cap when reviews are on |
| `proxyConfiguration` | object | off | Optional proxy for large runs |

### Example input

```json
{
  "searchQueries": ["phone case", "led strip lights"],
  "collectionTags": ["dealshub_flashsale"],
  "maxItems": 500,
  "maxPagesPerQuery": 5,
  "fetchDetail": true,
  "fetchReviews": false
}
```

### Example output row

```json
{
  "product_id": "6481b153fcf9e035caa4a633",
  "name": "PlusAcc Waterproof Case for Samsung Galaxy S23 Ultra",
  "url": "https://www.wish.com/product/6481b153fcf9e035caa4a633",
  "price_usd": 20.04,
  "price_local": 3254.0,
  "currency": "JPY",
  "rating": 4.0,
  "review_count": 1,
  "num_bought": 0,
  "merchant_name": "PlusAcc",
  "is_sold_out": false,
  "variation_count": 1,
  "source": "search:phone case",
  "scraped_at": "2026-07-15T04:00:00Z"
}
```

### Scheduling & webhooks

Run on a schedule (e.g. daily price checks) from the Apify Console, and attach a
**webhook** to push finished datasets straight into your own systems or a Google
Sheet / database via Apify integrations.

### AI assistants (MCP)

Prefer live, conversational access from Claude, Cursor, or ChatGPT? Use the
companion **Wish Scraper MCP** actor, which exposes search, product detail,
reviews, categories, and autocomplete as MCP tools.

### FAQ

**Where does the data come from?** Wish.com's own mobile app API — the same data
the app shows, returned as clean JSON.

**Do I need proxies or accounts?** No. The actor runs without login and works from
Apify's infrastructure out of the box; proxies are optional for very large runs.

**How fresh is the data?** Live — each run fetches current data at run time.

**Why are some prices in a non-USD currency?** Wish localizes the displayed price
by region; `price_usd` is always provided as a stable value regardless.

**Can it get full detail and reviews?** Yes — enable `fetchDetail` (on by default)
and `fetchReviews` to enrich each product.

**Is it reliable?** It calls the API directly (no fragile browser automation) and
skips/logs per-item failures so one bad product never aborts a run.

# Actor input Schema

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

Keywords to search on Wish.com (one search per keyword).

## `categoryHandles` (type: `array`):

Wish category handles to browse (e.g. bs\_03). Discover handles via the MCP actor's categories tool or the Deals/category pages.

## `collectionTags` (type: `array`):

Tagged collection feeds to scrape (e.g. dealshub\_flashsale for Deals Hub / flash sale).

## `productIds` (type: `array`):

Direct Wish product IDs (24-hex) or product/reviews URLs to fetch full detail for.

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

Global cap across all inputs. The run stops once this many products are pushed.

## `maxPagesPerQuery` (type: `integer`):

Search/browse pages per keyword or category (30 results per page).

## `fetchDetail` (type: `boolean`):

Enrich each product with the rich mobile product page (variations, sold-out state, images). Adds one request per product.

## `fetchReviews` (type: `boolean`):

Include customer reviews for each product (adds one request per product).

## `maxReviewsPerProduct` (type: `integer`):

Cap on reviews collected per product when 'Fetch reviews' is enabled.

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

Optional. Wish's read API works from most IPs, but a proxy improves reliability at scale. Leave off to run direct.

## Actor input object example

```json
{
  "searchQueries": [
    "phone case",
    "led strip lights"
  ],
  "categoryHandles": [
    "bs_03"
  ],
  "collectionTags": [
    "dealshub_flashsale"
  ],
  "productIds": [
    "6481b153fcf9e035caa4a633",
    "https://www.wish.com/product/6481b153fcf9e035caa4a633"
  ],
  "maxItems": 200,
  "maxPagesPerQuery": 5,
  "fetchDetail": true,
  "fetchReviews": false,
  "maxReviewsPerProduct": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "phone case"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/wish-product-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": ["phone case"] }

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/wish-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "phone case"
  ]
}' |
apify call axlymxp/wish-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=axlymxp/wish-product-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/isp2x7VIjhpeurLtm/builds/DiG1N0n5EzW2kDQof/openapi.json
