# Shopee Scraper: Product Search, Prices and Discounts (`themineworks/shopee-scraper`) Actor

Scrape Shopee search results by keyword in 9 markets (SG, MY, TH, PH, VN, TW, ID, BR, MX): one row per product with item and shop id, title, price, price before discount, discount, rating, seller location, promo labels, image and link. Sort by relevance, sales, newest or price. No login.

- **URL**: https://apify.com/themineworks/shopee-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** E-commerce, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.59 / 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

## Shopee Scraper: Product Search, Prices and Discounts

[![300 Shopee products in 139 seconds: price, discount, rating and seller location for one keyword](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/shopee-scraper-hero.png)](https://console.apify.com/actors/W46XSLNoTMJFmrCB8/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [Taobao Products Scraper](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 140,000 runs across 170+ public actors.

Updated 20 Oct 2026: first release. Keyword search on 9 Shopee markets, five sort orders, a price range, and one flat row per product with price, price before discount, discount, rating, seller location and promotion labels. Bookmark this Actor on its Store page so it is one click away next time.

### Why choose this actor?

- **Nine Shopee markets from one input.** Singapore, Malaysia, Thailand, Philippines, Vietnam, Taiwan, Indonesia, Brazil and Mexico. Pick the market, type the keyword the way shoppers there type it, and get prices in that market's own currency.
- **Past the first page.** Shopee shows 40 products per search page. The actor keeps reading pages, skips products it already gave you, and when your sort runs out it reads the same keyword in the other sorts, so one keyword returned 300 different products in 139 seconds in our test run.
- **Pay per product, nothing for a run that finds nothing.** The $0.003 run fee is charged only after the first page has come back with products. A keyword Shopee refuses, a bad input, duplicates, rows outside your price range and the summary rows are never charged. No Shopee account, cookies or API key.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/W46XSLNoTMJFmrCB8/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works E-commerce and marketplaces family:** [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [AliExpress Scraper](https://apify.com/themineworks/aliexpress-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Kleinanzeigen.de Scraper](https://apify.com/themineworks/kleinanzeigen-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

### Try it in one minute

Paste this into the input (JSON view) and press Start. It returns 30 phone cases from Shopee Singapore, one row each. It took 8 seconds in our test run:

```json
{
  "keywords": ["phone case"],
  "country": "SG",
  "maxItems": 30
}
```

Change `country` to `MY`, `TH`, `PH`, `VN`, `TW`, `ID`, `BR` or `MX` for another market. Keywords work in any language the market uses, for example `ốp lưng iphone` on Shopee Vietnam or `capinha iphone` on Shopee Brazil.

Apify's free plan includes $5 of credit every month, which covers about 1,100 products at this actor's price.

#### Copy to your AI assistant

```text
themineworks/shopee-scraper on Apify. Searches Shopee by keyword in one market and returns one flat row per product, with no Shopee login. Call ApifyClient("TOKEN").actor("themineworks/shopee-scraper").call(run_input={"keywords": ["phone case"], "country": "SG", "maxItems": 50}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: keywords (list of search keywords, up to 100). Optional: country ("SG" default, "MY", "TH", "PH", "VN", "TW", "ID", "BR", "MX"), maxItems (products per keyword, default 50, 1 to 1000), sort ("relevance" default, "sales", "newest", "price_asc", "price_desc"), otherSorts (default true; when a sort runs out before maxItems, the keyword is also read in the other sorts), minPrice and maxPrice (in the market's currency), proxyConfiguration (default Apify residential proxy in the market's country). Product rows have no _type field and carry item_id, shop_id, title, price, price_original, currency, discount_percent, discount_label, rating, shop_rating, location, promo_labels, image_url, product_url, product_url_short, country, marketplace, keyword, sort, position, search_page, scraped_at. Each run also writes one row with _type "summary", one with _type "info" when products were delivered, and a row with _type "error" for each keyword that could not be read; none of these is charged. Full spec: GET https://api.apify.com/v2/acts/themineworks~shopee-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **9 markets, local currency.** SGD, MYR, THB, PHP, VND, TWD, IDR, BRL and MXN, read as numbers: `31.900 ₫` becomes `31900`, `R$ 7,89` becomes `7.89`.
- **Five sort orders.** Relevance, top sales, latest and price low to high or high to low, the same choices as the sort bar on the Shopee site. Shopee does the sorting.
- **Price range.** `minPrice` and `maxPrice` are sent to Shopee and checked again on every row, so a product outside your range is never delivered or charged.
- **Deep keyword reads.** Up to 1,000 products per keyword: the actor reads page after page, drops products it already has, and fills up from the other sorts when yours runs dry.
- **No duplicates in a run.** A product found under two keywords, or on two pages, is delivered and charged once.
- **Deadline safe.** The actor watches the run's time limit, stops starting requests 15 seconds before it, keeps every product it read and says why in the summary row.

### How to use it

#### Basic: one keyword, one market

```json
{
  "keywords": ["wireless earbuds"],
  "country": "MY",
  "maxItems": 100
}
```

Each product is one row. `position` is the order it was found in for its keyword, `search_page` the page request that found it.

#### Price monitoring: track what a product sells for

```json
{
  "keywords": ["airpods pro 2", "galaxy buds 3"],
  "country": "SG",
  "sort": "sales",
  "maxItems": 50
}
```

Save it as a task and add a daily schedule. Join the rows of each day on `item_id` and `shop_id` to see price and discount changes on the same listing. `price_original` and `discount_percent` show how deep the markdown is.

#### Sourcing: the cheapest listings in a price band

```json
{
  "keywords": ["phone case"],
  "country": "SG",
  "sort": "price_asc",
  "minPrice": 5,
  "maxPrice": 10,
  "maxItems": 60,
  "otherSorts": false
}
```

Each page comes back sorted by price. `location` shows where each seller ships from (a local city, or Mainland China and Overseas for cross border sellers), which matters for delivery time and import duties.

#### Cross market research: the same product in three countries

Run the same keyword once per market (one market per run) and compare `price` after converting `currency`. Example inputs: `{"keywords": ["mechanical keyboard"], "country": "TH"}`, then `"country": "PH"` and `"country": "ID"`.

#### New listings watch

```json
{
  "keywords": ["labubu"],
  "country": "PH",
  "sort": "newest",
  "maxItems": 100,
  "otherSorts": false
}
```

Sorted by latest, the first pages carry the newest listings. A schedule plus a join on `item_id` shows what appeared since the last run.

#### Deal hunting: promotions and discounts

`promo_labels` holds the labels on each card, such as `Selling Fast`, `Any 2 enjoy 10% off`, `Free Gift`, `Flash Sale 18:00 20 Oct` or `Shocking Sale`, in the market's language. Filter rows on `discount_percent` and on these labels to find the strongest offers for a keyword.

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `keywords` | array of strings | required | Search keywords, one per line, up to 100 per run. The same keyword given twice is read once. |
| `country` | string | `SG` | Shopee market: `SG`, `MY`, `TH`, `PH`, `VN`, `TW`, `ID`, `BR` or `MX`. |
| `maxItems` | integer | `50` | Most products per keyword, 1 to 1,000. |
| `sort` | string | `relevance` | `relevance`, `sales`, `newest`, `price_asc` or `price_desc`. |
| `otherSorts` | boolean | `true` | When your sort runs out of new products before `maxItems`, read the keyword in the other sorts too. |
| `minPrice`, `maxPrice` | number | empty | Price range in the market's currency, for example `9.5` for S$9.50 or `50000` for 50.000 VND. |
| `proxyConfiguration` | object | residential | Apify residential proxy in the market's country. You can pick another group or your own proxy URLs. |

### What data do you get?

One row per product. Product rows have no `_type` field; the summary, info and error rows do, so a filter on `_type` separates them.

| Field | What it is |
|---|---|
| `item_id`, `shop_id` | Shopee's ids for the listing and the shop, as strings |
| `title` | Product title as shown in the search results |
| `price` | Current price, after the item discount, in the market's currency |
| `price_original` | Price before discount, when the card shows it crossed out |
| `currency` | `SGD`, `MYR`, `THB`, `PHP`, `VND`, `TWD`, `IDR`, `BRL` or `MXN` |
| `discount_percent`, `discount_label` | The discount in percent, and the badge as Shopee writes it (`-36%`, or `3.4折` on Shopee Taiwan) |
| `rating` | Product rating, 0 to 5 stars |
| `shop_rating` | The shop's rating, which Shopee shows instead when the product has no rating yet |
| `location` | Where the seller ships from |
| `promo_labels` | Promotion labels on the card |
| `image_url` | Main product image, full size |
| `product_url`, `product_url_short` | Link to the product page, and the short form `https://<market>/product/<shop_id>/<item_id>` |
| `country`, `marketplace` | Market code and Shopee site, e.g. `SG` and `shopee.sg` |
| `keyword`, `sort` | The keyword and the sort the product was found under |
| `position`, `search_page` | Order found for its keyword (1 = first), and which page request found it |
| `scraped_at` | When the row was written |

**Summary row** (`_type: "summary"`, never charged): `keywords_requested`, `keywords_read`, `keywords_failed`, `keywords_not_started`, `products_found`, `products_delivered`, `charged_for`, `duplicates_skipped`, `filtered_out_by_price`, `pages_fetched`, `page_attempts`, `failed_attempts`, `run_start_charged`, `stopped_by_max_cost`, `ended_on_deadline`, `shortfall_reason` when fewer products came back than asked, and `per_keyword`, one entry per keyword with `pages`, `products_found`, `products_delivered`, `sorts_read` and why it `stopped`. The same summary is saved as the `OUTPUT` record of the run.

**Error rows** (`_type: "error"`, never charged): one per keyword whose first page could not be read, with `error_type` (`http_error`, `no_cards`, `fetch_error`), `keyword`, `reason` and `http_status`.

#### Stable fields for automations

These were present in every product row of our test runs (9 markets, 809 rows), and their names will not change:

| Field | What it is |
|---|---|
| `item_id` | The listing id, the key to store and join on together with `shop_id` |
| `shop_id` | The shop id |
| `title` | Product title |
| `price` | Current price |
| `currency` | Currency code |
| `image_url` | Main image |
| `product_url` | Product link |
| `product_url_short` | Short product link |
| `country` | Market code |
| `marketplace` | Shopee site |
| `keyword` | The keyword searched |
| `sort` | The sort that found it |
| `position` | Order found |
| `search_page` | Page request that found it |
| `scraped_at` | When the row was written |

Optional, present only when the card shows a value: `price_original` (shown by MY, TH, VN, TW, ID and BR; SG, PH and MX show only the discount badge), `discount_percent` and `discount_label` (absent on products with no discount), `rating` (611 of our 809 test rows had it; new products have none), `shop_rating` (126 rows, shown when the product has no rating yet), `location` (694 rows), `promo_labels` (527 rows).

#### Output examples

Three rows from our test runs on 20 Oct 2026, from Singapore, Taiwan and Malaysia:

```json
[
  {
    "item_id": "57164737343",
    "shop_id": "1860938829",
    "title": "Zenso Cute Pink Cartoon Cat Case with Stand for iPhone 11-17 Pro Max, Anti-drop, Anti-fingerprint, Anti-yellowing",
    "price": 7.15,
    "currency": "SGD",
    "discount_percent": 24,
    "discount_label": "-24%",
    "rating": 5,
    "location": "Mainland China",
    "promo_labels": ["Any 2 enjoy 10% off"],
    "image_url": "https://down-sg.img.susercontent.com/file/sg-11134201-82586-mr18d8qfsbgn21",
    "product_url": "https://shopee.sg/Zenso-Cute-Pink-Cartoon-Cat-Case-with-Stand-for-iPhone-11-17-Pro-Max-Anti-drop-Anti-fingerprint-Anti-yellowing-i.1860938829.57164737343",
    "product_url_short": "https://shopee.sg/product/1860938829/57164737343",
    "country": "SG",
    "marketplace": "shopee.sg",
    "keyword": "phone case",
    "sort": "relevance",
    "position": 1,
    "search_page": 1
  },
  {
    "item_id": "25376717446",
    "shop_id": "16740752",
    "title": "360度旋轉磁吸支架防摔手機殼適用iPhone 18 17 16 15 14 13 12 Pro Max i18 i17",
    "price": 239,
    "price_original": 700,
    "currency": "TWD",
    "discount_percent": 66,
    "discount_label": "3.4折",
    "rating": 4.9,
    "location": "臺中市西區",
    "promo_labels": ["蝦皮金選", "5 件折 NT$15"],
    "image_url": "https://down-tw.img.susercontent.com/file/tw-11134207-7r98u-luk66t5gohdic2",
    "product_url_short": "https://shopee.tw/product/16740752/25376717446",
    "country": "TW",
    "marketplace": "shopee.tw",
    "keyword": "phone case",
    "sort": "relevance",
    "position": 1,
    "search_page": 1
  },
  {
    "item_id": "27602065203",
    "shop_id": "64923440",
    "title": "UGREEN HiTune S3 True Wireless Earbuds IPX5 Ear-clip Design Hook Earphone Open Audio TWS Sport Headset HD Call Noise Reduction",
    "price": 52.72,
    "price_original": 207.86,
    "currency": "MYR",
    "discount_percent": 75,
    "discount_label": "-75%",
    "rating": 4.9,
    "location": "Sabah",
    "promo_labels": ["Shopee Lagi Murah", "Shocking Sale 14:00 20 Oct"],
    "image_url": "https://down-my.img.susercontent.com/file/cn-11134207-7ras8-mdoec2xt3io9bd",
    "product_url_short": "https://shopee.com.my/product/64923440/27602065203",
    "country": "MY",
    "marketplace": "shopee.com.my",
    "keyword": "wireless earbuds",
    "sort": "sales",
    "position": 2,
    "search_page": 1
  }
]
```

The summary row of the Malaysia run (300 products for one keyword, read in three sorts), trimmed:

```json
{
  "_type": "summary",
  "keywords_requested": 1,
  "keywords_read": 1,
  "products_found": 300,
  "products_delivered": 300,
  "charged_for": 300,
  "duplicates_skipped": 820,
  "pages_fetched": 28,
  "page_attempts": 31,
  "failed_attempts": 1,
  "country": "MY",
  "sort": "sales",
  "run_start_charged": true,
  "ended_on_deadline": false,
  "per_keyword": [
    { "keyword": "wireless earbuds", "pages": 28, "products_delivered": 300, "sorts_read": ["sales", "relevance", "newest"], "stopped": "max_items_reached" }
  ],
  "run_seconds": 139
}
```

### Pricing

Pay per event: you pay for the products you receive, plus a flat $0.003 per run, whatever memory you choose.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `product-scraped` | Once per product row stored in your dataset | $4.49 per 1,000 | $4.49 per 1,000 | $4.31 per 1,000 | $3.59 per 1,000 |
| `run-start` | Once per run, after the first page has come back with products | $0.003 | $0.003 | $0.003 | $0.003 |

The price of one product is the price per 1,000 divided by 1,000. The residential proxy is included: you do not pay for proxy traffic on top.

Never charged:

- a keyword whose first page Shopee refuses or that comes back empty (it gets an error row);
- a run where no page returns products: it stops before the start fee;
- a run with no keyword, an unsupported market or a wrong price range: it stops before the first request;
- products already delivered in the same run (found again on another page, in another sort or under another keyword);
- products outside your `minPrice` and `maxPrice`, and products past your `maxItems`;
- the summary, info and error rows;
- anything past your "Max cost per run". The actor checks the budget before each product and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.

### Run it on a schedule

1. Open the actor in Apify Console, set your input and click **Save as a new task**.
2. In the task, open **Schedules**, click **Add schedule** and pick how often (every day at 08:00, every Monday and so on).
3. Optional: add an integration (Google Sheets, Slack, a webhook) so each day's prices land where your team works.

Each run is independent: join runs on `item_id` and `shop_id` to follow a listing's price over time.

### FAQ

#### What does this actor read?

Shopee's public search results page for your keyword, as a visitor who is not logged in. It reads the version of that page Shopee renders on its own servers for link previews, which carries 40 product cards per page. It does not log in, does not open product pages, and does not read shop pages.

#### Which markets work?

Singapore (shopee.sg), Malaysia (shopee.com.my), Thailand (shopee.co.th), Philippines (shopee.ph), Vietnam (shopee.vn), Taiwan (shopee.tw), Indonesia (shopee.co.id), Brazil (shopee.com.br) and Mexico (shopee.com.mx). All nine returned 40 products on the first page in our tests on 20 Oct 2026. Colombia and Chile are not supported: Shopee closed those sites and their search pages carry no products.

#### How many products can I get per keyword?

Up to 1,000 per keyword and 100 keywords per run, but Shopee decides how deep a keyword goes. Each page Shopee serves is a sample of 40 from its matches, so later pages repeat more and more products the actor already has. In our tests one sort gave 51 to 212 different products for a keyword; with `otherSorts` on, "wireless earbuds" on Shopee Malaysia gave 300 from three sorts in 139 seconds. When a keyword stops early, the summary row says why in `per_keyword`.

#### Why do two runs with the same input not return exactly the same products?

Shopee serves a different sample of its matches on each request, then sorts it. The best matches come back on most runs, but the tail changes. For price tracking, follow the listings you care about by `item_id` and `shop_id` rather than by `position`.

#### Why are units sold, the number of ratings, stock and the shop name not in the output?

The search page this actor reads does not show them for a visitor who is not logged in, so the actor does not invent them. What the card shows is in the row: price, price before discount, discount, star rating, seller location, promotion labels, image and links.

#### Why is `price_original` missing for Singapore, the Philippines and Mexico?

On those three sites Shopee's search cards show only the discount badge, not the crossed out price. `discount_percent` and `discount_label` are still there.

#### What do sort and otherSorts change?

`sort` is the order Shopee ranks the results in, the same menu as on the Shopee site; the price sorts come back strictly ordered on each page. `otherSorts` decides what happens when your sort has no new products left before `maxItems`: on (the default) the actor reads the same keyword in the other sorts and adds the products not yet delivered, each row naming the sort that found it; off, the keyword stops there.

#### How do minPrice and maxPrice work?

They are in the market's own currency (S$, RM, ฿, ₱, ₫, NT$, Rp, R$ or MX$). The actor passes them to Shopee and also checks every row itself before it is delivered, so a row outside the range is never in your dataset and never charged. The summary counts the products it dropped in `filtered_out_by_price`.

#### How long does a run take?

In our tests: 8 seconds for the 30 product "Try it" input, 6 to 11 seconds for a 5 product run in each market, 56 seconds for two keywords with a price range, and 139 seconds for 300 products of one keyword. A page takes 5 to 10 seconds through the residential proxy; after the first, the actor reads three pages at a time.

#### Do I need a Shopee account, cookies or a proxy?

No account and no cookies. The proxy is set for you: by default the actor uses Apify's residential proxy in the market's country, included in the price. You can switch to another Apify proxy group or your own proxy URLs under Advanced.

#### What happens when Shopee refuses a page?

Each page is tried up to four times on a fresh proxy address. If the first page of a keyword fails all four, that keyword gets an error row and nothing is charged for it; the run moves on to the next keyword. Six failed pages in a row stop the run, so a blocked run costs you nothing and ends quickly.

#### What happens when a run reaches its time limit?

The actor stops starting requests about 15 seconds before the run's timeout (900 seconds unless you change it), delivers every product it read, and ends SUCCEEDED with `ended_on_deadline: true`, a `shortfall_reason`, and the keywords it did not start in `keywords_not_started`.

#### Which formats can I download?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. Rows are flat apart from `promo_labels`, so CSV and Excel keep every field. The dataset has two ready views: Products, and Ids and deals.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/shopee-scraper

- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http shopee-scraper "https://mcp.apify.com/?tools=themineworks/shopee-scraper"`

#### Is it legal to scrape Shopee?

The actor reads only public search results that anyone can see without logging in, and no personal data beyond what sellers publish on their listings. You are responsible for how you use the data, including Shopee's terms and local law. This is general information, not legal advice.

### Integrations

- **Google Sheets**: send each run's products to a sheet with Apify's Google Sheets integration; one row per product fits a sheet as is.
- **Make, Zapier and n8n**: start a run and read its dataset with the Apify apps and nodes, for example "today's prices for our keywords to Slack".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [AliExpress Scraper](https://apify.com/themineworks/aliexpress-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Kleinanzeigen.de Scraper](https://apify.com/themineworks/kleinanzeigen-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Carsales.com.au Scraper](https://apify.com/themineworks/carsales-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [eBay Product Listings Scraper](https://apify.com/themineworks/ebay-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Shopify Store Scraper](https://apify.com/themineworks/shopify-store-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [🛒 TikTok Shop Scraper](https://apify.com/themineworks/tiktok-shop-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Walmart Product & Price Scraper](https://apify.com/themineworks/walmart-product-price-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Vinted Scraper](https://apify.com/themineworks/vinted-listings-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a keyword that returns fewer products than it should, or a market that stopped working? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need or a new market, email dmineworks@gmail.com.

*Search Shopee by keyword in 9 markets and get one row per product, with price, discount, rating, seller location, image and link, no login.*

# Actor input Schema

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

What you would type in Shopee's search box, one per line, in any language the market uses. Example: phone case, or ốp lưng iphone on Shopee Vietnam. Up to 100 keywords per run; the same keyword given twice is read once.

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

Which Shopee site to search. Prices come back in that market's currency.

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

The most products to return for each keyword, 1 to 1,000. Shopee shows 40 products per page; the actor reads more pages until it has this many or Shopee has no new products left for the keyword (often 100 to 300 for a broad keyword).

## `sort` (type: `string`):

The order Shopee ranks the results in, the same choices as the sort bar on the Shopee site.

## `otherSorts` (type: `boolean`):

When a keyword runs out of new products in your sort before reaching max products, read it in the other sorts too (relevance, top sales, latest, both price orders) and add the products not yet delivered. Each row says which sort found it. Turn off to get only your sort.

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

Keep only products at or above this price, in the market's currency (for example 9.5 for S$9.50, or 50000 for 50.000 VND). Leave empty for no lower limit.

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

Keep only products at or below this price, in the market's currency. Leave empty for no upper limit.

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

Leave as is. By default the actor uses Apify residential proxies in the market's country, which Shopee answers most reliably. You can pick another proxy group or your own proxy URLs.

## Actor input object example

```json
{
  "keywords": [
    "phone case"
  ],
  "country": "SG",
  "maxItems": 30,
  "sort": "relevance",
  "otherSorts": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

## `summary` (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": [
        "phone case"
    ],
    "maxItems": 30,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/shopee-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": ["phone case"],
    "maxItems": 30,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/shopee-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": [
    "phone case"
  ],
  "maxItems": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call themineworks/shopee-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/shopee-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/W46XSLNoTMJFmrCB8/builds/yR7rmnNiqJucL8MNv/openapi.json
