# Temu Product Scraper \[Only $3] Prices, Ratings, Sales, Sort (`memo23/temu-scraper`) Actor

\[Only $3 per 1000 products] Scrape Temu product search by keyword: price, original price and discount, rating and review count, units sold, seller and store link, images and URL. Sort by top sales, newest or price. Up to 100 products per keyword in one request. No login.

- **URL**: https://apify.com/memo23/temu-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** E-commerce, Automation
- **Features:** Limited permissions
- **Stats:** 84 total users, 52 monthly users, 95.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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.

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

## Temu Product Scraper

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/CaUN8XWCzisJZIatu/records/temu-card" alt="Temu Product Scraper — keywords in, product rows out" width="820">
</p>

Turn Temu search keywords into a product dataset for **$3 per 1,000 products**. Paste one or more keywords and get one row per product: title, price in USD, original price and discount, rating, review count, units sold, seller and store link, images and product URL. Sort by top sales, newest or price. No login, no cookies, no tokens.

| Input | Rows |
|---|---|
| Search keyword (`iphone case`) | Up to 100 products per keyword, from the US Temu store |
| Several keywords in one run | Up to 100 products for each keyword, deduplicated |
| Product link or goods id | That product with its product-page details |

### Why Use This Scraper?

- **$3 per 1,000 products.** The most-used Temu actor on the Store charges $10.
- **Several keywords per run.** Paste a list; each keyword returns its own up-to-100 products.
- **Ratings and sales in every row.** `rating`, `reviewCount`, `soldQuantity` (numeric, expanded from `29K+`) and the seller's store link.
- **Sort the way you research.** Relevance, top sales, newest, price low-to-high or high-to-low.
- **Filter before you pay.** Price range, minimum rating, reviews, units sold and discount. Removed products are not charged.
- **Product details on request.** Category, full image gallery, video, specifications and variants (color, size, model), for search results or for product links you paste.
- **Export-ready.** JSON, CSV, Excel, or the Apify API.

### Overview

Built for dropshipping research, price monitoring and competitor work on Temu. Each run takes keywords and a row cap and returns one dataset row per product from the US store (`www.temu.com`, prices in USD).

Search only: no product-detail pages, no category crawl, no seller catalogs.

### Supported Inputs

| Kind | Example | Notes |
|---|---|---|
| Keyword | `iphone case` | Required. One or more in `searchQueries`. English works; Temu's US store is English. |
| Run cap | `maxItems: 20` | Optional. Default 100. Free-plan runs are capped at 100. |
| Per-keyword cap | `maxItemsPerSearch: 50` | Optional. Up to 100, default 100. |
| Sort | `sort: "top_sales"` | Optional. Default `relevance`. |
| Product link or id | `https://www.temu.com/goods.html?goods_id=601101644004370`, `…-g-601101644004370.html`, `601101644004370` | Optional, in `productUrls`. Returned with product details. |
| Filters | `minPrice: 5`, `minRating: 4.5` | Optional. Applied to search results. |

**Not supported:** category URLs, seller pages, login cookies, stores other than the US.

### Use Cases

| Who | What they get |
|---|---|
| Dropshippers | Best-selling products for a niche, with sold counts and ratings |
| Price monitoring | Current price, original price and discount per product |
| Market research | Units sold, ratings and sellers across a keyword |
| Agencies | Repeatable keyword runs, CSV/Excel export, scheduling |

### How It Works

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/CaUN8XWCzisJZIatu/records/temu-how-it-works" alt="How Temu Product Scraper works — keywords, search, product dataset" width="820">
</p>

1. You paste keywords, a row cap and optionally a sort order.
2. Each keyword is searched on Temu's US store; up to 100 products come back in one request.
3. Up to three keywords are searched at a time. Each product is written as one dataset row; a product found by two keywords is returned once.

### Input Configuration

| Field | Type | Required | Notes |
|---|---|---|---|
| `searchQueries` | string\[] | yes | Keywords. Prefill: `iphone case`. |
| `maxItems` | integer | no | Cap across all keywords. Default 100. |
| `sort` | `relevance` | `top_sales` | `newest` | `price_asc` | `price_desc` | no | Result order per keyword. Default `relevance`. |
| `maxItemsPerSearch` | integer | no | Cap per keyword, up to 100. Default 100. |
| `productUrls` | string\[] | no | Temu product links or goods ids. Each returns one row with product details. |
| `includeDetails` | boolean | no | Add product-page details to search rows. Default off. |
| `minPrice` / `maxPrice` | number | no | Price range in USD. |
| `minRating` | number | no | Minimum stars (0-5). |
| `minReviews` | integer | no | Minimum review count. |
| `minSold` | integer | no | Minimum units sold. |
| `minDiscount` | integer | no | Minimum discount in percent. |

`searchQueries` or `productUrls` is required (or both). Filters run on the up-to-100 products Temu returns for a keyword, so narrow filters return fewer rows; removed products are not charged. A product missing the filtered field (no rating, no discount) is removed by that filter.

#### Example input

```json
{
  "searchQueries": ["iphone case", "kitchen gadgets"],
  "maxItems": 200,
  "maxItemsPerSearch": 100,
  "sort": "top_sales"
}
```

### Output Overview

One row = one Temu product from search. Numeric `price` plus Temu's formatted `priceStr`. `soldQuantity` expands strings like `29K+` into a number. `url` is the product page and `sellerUrl` the seller's store.

### Output Samples

A real row for keyword `iphone case` (2026-10-19):

```json
{
  "rowType": "product",
  "goodsId": "601101644004370",
  "title": "1pc of Glossy Crocodile Pattern Phone Case with Animal Design, Mirror Finish, Made of Synthetic Faux Leather, Shockproof And Sound-Transparent Design, Suitable for Iphone 17, Apple 16 Pro Max, for Iphone 11/12 Pro/13/14 Plus/15 Pro Max",
  "url": "https://www.temu.com/goods.html?goods_id=601101644004370",
  "price": 1.66,
  "priceStr": "1.66 USD",
  "currency": "USD",
  "marketPrice": null,
  "discountText": null,
  "soldQuantity": 29000,
  "soldText": "29K+ sold",
  "soldPercent": null,
  "mallId": "634418219170094",
  "sellerUrl": "https://www.temu.com/mall.html?mall_id=634418219170094",
  "tags": [],
  "primaryImage": "https://img.kwcdn.com/product/fancy/7900380a-7485-413c-b770-611e1d862d39.jpg",
  "images": ["https://img.kwcdn.com/product/fancy/7900380a-7485-413c-b770-611e1d862d39.jpg"],
  "hasVideo": false,
  "rating": 4.9,
  "reviewCount": 134,
  "searchKeyword": "iphone case",
  "scrapedAt": "2026-10-19T08:37:34.886Z"
}
```

### Key Output Fields

**Identity:** `goodsId`, `title`, `url`, `searchKeyword`

**Price:** `price`, `priceStr`, `currency`, `marketPrice` (original price), `discountText`. Products without a discount have `marketPrice` and `discountText` set to `null`.

**Demand:** `soldQuantity`, `soldText`, `rating`, `reviewCount`

**Seller:** `mallId`, `sellerUrl`

**Media:** `primaryImage`, `images`, `hasVideo`

**Meta:** `rowType`, `detailLevel` (`search` or `full`), `sourceInput` (the link you pasted), `scrapedAt`

**Product details** (`detailLevel: "full"`): `category`, `description`, `images` (full gallery), `videoUrl`, `specifications` (name → value), `variants` (name, properties, image). `shopName`, `freeShipping`, `inStock` and `shipping` are filled when Temu's page carries them, which was rare in testing.

### Pricing

| Event | When | Price |
|---|---|---|
| Actor start | Once per run, per GB of memory (default 512 MB = 1 event) | $0.005 |
| Product | Each product row in the dataset | $0.003 |
| Product details | Each row with product-page details (`includeDetails`, or a product link) | add-on, see the Pricing tab |

100 products for one keyword cost about $0.31.

### How This Compares

Taken from each actor's own Store listing and input form on 2026-10-19.

| | This actor | crw/temu-products-scraper |
|---|---|---|
| Price per 1,000 products | **$3** | $10 |
| Keywords per run | **Many** | One |
| Products per keyword | 100 | 100 |
| Store | US | US |
| Sort: top sales, newest, price | Yes | Yes |
| Rating, reviews, units sold, seller link | Yes | Yes |
| Filters (price, rating, reviews, sold, discount) | **Yes** | No |
| Product links in, with variants, specifications, gallery, video | **Yes** | No |

The next most-used one, amit123/temu-products-scraper, charges $6 per 1,000.

### FAQ

#### Do I need a Temu account or token?

No. Paste keywords and a cap.

#### Which store and currency?

The US store (`www.temu.com`), prices in USD. Every row carries `currency` and the formatted `priceStr`.

#### Can I get more than 100 products for one keyword?

No. Temu search returns up to 100 products per keyword, and a higher `maxItemsPerSearch` is treated as 100. For more products, add more specific keywords (`iphone 16 case`, `iphone case magsafe`); a product found by several keywords is returned once.

#### Can I scrape a product URL?

Yes. Paste product links or goods ids into `productUrls`; each comes back with its product-page details. Filters do not apply to them.

#### Why did my filters return fewer rows than my cap?

Temu search returns up to 100 products per keyword and the filters pick from those. Loosen the filters or add more keywords. Only the rows you get are charged.

#### Why did a run stop early or fail?

A keyword that returns no products gets no rows, and the log says so. Usually Temu has nothing for it; now and then Temu's search does not load and a later run finds products, so run it again before concluding. If the search fails for a keyword after several attempts, the log names it and the other keywords still deliver. The run fails only when every keyword failed, or when no keyword returned products and a control search for a common product came back empty too (Temu's search is not answering); then wait and run it again. Products are charged only when delivered. Failures are reported to us automatically.

#### Is there a free-plan cap?

Yes. Runs on the Apify free plan stop at 100 rows.

#### Does this crawl categories or sellers?

No.

### Support

- **Bug or feature request?** Open a ticket on the **Issues** tab.
- **Email:** <muhamed.didovic@gmail.com>
- **Website:** [muhamed-didovic.github.io](https://muhamed-didovic.github.io/)

### Additional Services

Need a custom export, scheduled monitoring, or another marketplace? Email <muhamed.didovic@gmail.com>.

### Explore More Scrapers

- [AliExpress Scraper](https://apify.com/memo23/aliexpress-scraper)
- [Taobao & Tmall Scraper](https://apify.com/memo23/taobao-scraper)
- [1688 Wholesale Scraper](https://apify.com/memo23/1688-wholesale-scraper)
- [JD.com Price Scraper](https://apify.com/memo23/jd-com-price-scraper)
- [TikTok Shop Sales Scraper](https://apify.com/memo23/tiktok-shop-scraper)

Full list at [apify.com/memo23](https://apify.com/memo23).

### 🤖 For AI Agents & LLM Apps

Compact reference for agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/temu-scraper`).

**Purpose:** Temu keyword search on the US store → one product row each (title, USD price, discount, rating, reviews, units sold, seller, images, URL).

**Minimal input:**

```json
{
  "searchQueries": ["iphone case"],
  "maxItems": 20
}
```

`searchQueries` or `productUrls` is required. Optional: `maxItems` (default 100), `maxItemsPerSearch` (default 100), `sort` (`relevance`, `top_sales`, `newest`, `price_asc`, `price_desc`), `includeDetails` (product-page details), filters `minPrice`, `maxPrice`, `minRating`, `minReviews`, `minSold`, `minDiscount`.

**Output fields:** `rowType, detailLevel, goodsId, title, url, price, priceStr, currency, marketPrice, discountText, soldQuantity, soldText, soldPercent, mallId, sellerUrl, tags, primaryImage, images, hasVideo, rating, reviewCount, searchKeyword, sourceInput, scrapedAt`; with details also `category, description, videoUrl, specifications, variants`.

**Behaviors:**

- Always set `maxItems`. Up to 100 products per keyword in one request.
- At most 100 products per keyword; a higher `maxItemsPerSearch` is treated as 100.
- Free-plan users are capped at 100 rows.
- Billing: $0.005 actor start (per GB) + $0.003 per product row.

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Whaleco Inc. or Temu. All trademarks mentioned are the property of their respective owners.

The scraper collects publicly listed Temu search results for research, price monitoring, and catalog work. Users are responsible for complying with Temu's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization. Do not use the output to harass sellers or to republish copyrighted images without a licence.

### SEO Keywords

Temu scraper, scrape Temu, Temu product scraper, Temu search scraper, Temu API, Apify Temu, Temu price scraper, Temu best sellers, Temu sold count, Temu ratings, Temu dropshipping research, Temu product research, ecommerce price monitoring, Temu keyword search, Temu dataset, cheap Temu scraper, Temu USD prices, marketplace product scraper

# Actor input Schema

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

Keywords to search Temu for, one per line. Each keyword returns up to 100 products from the US store (www.temu.com) in one request. Example: `iphone case`. Leave empty when you only scrape product links below.

## `productUrls` (type: `array`):

Specific Temu products, one per line: a product link (`https://www.temu.com/goods.html?goods_id=601101644004370`, or a page link ending in `-g-601101644004370.html`) or the numeric goods id. Each is returned with its product-page details (category, gallery, video, specifications, variants) and billed as a product plus product details. Filters do not apply to these.

## `includeDetails` (type: `boolean`):

ON: every search row also gets its product-page details: category, full image gallery, video link, specifications and variants (color, size, model) with images. Billed per product as the product-details add-on, and adds about 12 s per 5 products. OFF (default): search fields only.

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

Hard cap on product rows for the whole run, across all keywords. Example: `20`. Default: `100`. Runs on the Apify free plan are capped at 100.

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

Order of results for each keyword: `relevance` (Temu default), `top_sales`, `newest`, `price_asc` or `price_desc`. Default: `relevance`. Sorted keywords return up to 100 products.

## `maxItemsPerSearch` (type: `integer`):

Cap per keyword, up to 100 (Temu search returns at most 100 products per keyword; a higher value is treated as 100). All products come from the US store in USD. Example: `50`. Default: `100`.

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

Keep products priced at or above this, in USD. Example: `5`. Empty or 0: no filter. Filters apply to the up-to-100 products found per keyword, so narrow filters return fewer rows; removed products are not charged.

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

Keep products priced at or below this, in USD. Example: `20`. Empty or 0: no filter. Filters apply to the up-to-100 products found per keyword, so narrow filters return fewer rows; removed products are not charged.

## `minRating` (type: `number`):

Keep products rated at least this many stars (0-5). Example: `4.5`. Empty or 0: no filter. Products without a rating are removed. Filters apply to the up-to-100 products found per keyword, so narrow filters return fewer rows; removed products are not charged.

## `minReviews` (type: `integer`):

Keep products with at least this many reviews. Example: `100`. Empty or 0: no filter. Filters apply to the up-to-100 products found per keyword, so narrow filters return fewer rows; removed products are not charged.

## `minSold` (type: `integer`):

Keep products with at least this many units sold (Temu shows rounded numbers like 10K+). Example: `1000`. Empty or 0: no filter. Filters apply to the up-to-100 products found per keyword, so narrow filters return fewer rows; removed products are not charged.

## `minDiscount` (type: `integer`):

Keep products discounted at least this percent off their original price. Example: `30`. Empty or 0: no filter. Products without a discount are removed. Filters apply to the up-to-100 products found per keyword, so narrow filters return fewer rows; removed products are not charged.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone case",
    "kitchen gadgets"
  ],
  "includeDetails": false,
  "maxItems": 100,
  "sort": "relevance",
  "maxItemsPerSearch": 100
}
```

# Actor output Schema

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

One row per Temu product: title, USD price, original price and discount, rating, reviews, units sold, seller link, images and URL.

## `run` (type: `string`):

The actor run in the Apify Console.

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

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

# Run the Actor and wait for it to finish
run = client.actor("memo23/temu-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": [
    "iphone case"
  ]
}' |
apify call memo23/temu-scraper --silent --output-dataset

```

## MCP server setup

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