How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
https://www.temu.com/in Temu links. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Paste Temu product links or the Temu home page link, and get Temu products as clean rows with price, currency, sales, images and a product link. Product links also add rating, review count, variants, specifications and public reviews.
Good for
- Read variants, ratings and public review text for a list of product links.
- Check the prices of products you already know, on a schedule.
- See what Temu shows on its US home feed right now, with price and sales.
Not a good fit
- Finding products by keyword. This version has no search.
- Exporting a Temu category. This version does not read category pages.
Who uses it
Dropshipping researchers
Check the products and prices you already know.
Price watchers
Track the price of chosen products on a schedule.
Analysts
Read variants and public review text for a list of products.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.00005 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Catalog check | $0.03 | Up to three home feed pages. Includes three saved basic products. Blocked pages are not charged. |
| Product saved | $0.0027 (from $0.00189 on paid Apify plans) | Each basic product saved from the home feed after the three included in a catalog check. Full product pages use their own fee. |
| Full product page read | $0.0162 (from $0.01134 on paid Apify plans) | A valid full product page saved as a PRODUCT_ID file. Charged even when filters or history exclude it from the Dataset. Blocked pages are not charged. |
Examples
- One result: about $0.0028.
- 1,000 results: about $2.70.
- Every day 100 results, for 30 days: about $8.10 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 1,800 results.
Prices checked on 8 November 2026. See the current price on Apify.
Questions
Can I search Temu by keyword?
No. This version has no keyword search and no category pages.
Do I need a Temu account?
No. The tool reads public pages for the US market. Prices are in USD.
Why are rating and review count empty?
Temu does not send them in the home feed. Use product links to get them.
Is this the Temu API?
No. Temu did not make this Actor. You get your own API through Apify: start a run, then read the Dataset as JSON.
Do I need a browser extension or a tool to install?
No. It runs in Apify Console. You can also start it through the API.
Why does a run with no matches cost money?
The fee pays for reading the feed. A filter with no matches pays only the catalog fee and the start fee, with no product fee.
How fresh is the data?
Each row shows the read time in fetchedAt. Temu changes prices and product lists often, so two runs can differ.
Can I get all reviews of a product?
No. The Actor saves the public reviews shown on the product page, in reviews. reviewCount shows the total that Temu reports.
Details
Step by step on Apify
- Open the Input tab. Keep the home page link in Temu links, or replace it with your product links (box 1 in the picture).
- Keep Maximum products at 10 for the first run (box 2).
- Click Start (box 3). The picture shows the owner view, where this button reads Save & start.
- Open the Output tab and check the Products table: title and price first (box 4).
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Variant and review check | productUrls | Full product row | skus, reviews, specifications, minPrice, maxPrice | JSON or API |
| Price tracking for known products | productUrls, mode: monitor, stateName | Changed product row | changeType, changedFields, price | Schedule and webhook |
| Home feed price and sales export | startUrls with the home page, maxItems | Product row | title, price, discountPercent, sales, url | CSV or Google Sheets |
| Home feed with ratings | startUrls with the home page, dataLevel: full | Full product row | rating, reviewCount, skus, sales | Excel or API |
Tips for better results
- Use product links when the exact page price matters. Feed prices can differ.
- Set data level to full to get rating and review count.
- Run again for links that fail. A blocked page costs no fee.
Limits and good to know
- No keyword search and no category pages. Temu refuses these pages to anonymous visitors for hours at a time, and we did not find a stable way to read them without an account. A keyword, a search link or a category link stops the run with a clear error and no catalog or product fee
- US market and USD only. Other Temu markets are not supported
- The length of the home feed changes from run to run. It ended at 238 products when we asked for 300, and at 40 products when we asked for 60. Both runs finished as
complete.maxItemsof 100000 is an input limit, not a promise that Temu returns that many - The feed is not the whole catalog. It changes between runs: in one pair of runs a few minutes apart half of the 60 products were different, and in another pair only 1 product was the same. Temu picks what it shows, and you cannot choose a topic
- Feed rows have no rating and no review count. Open product pages with
dataLevel: fullor use product links to get them originalPriceanddiscountPercentcan change or disappear between two runs a few minutes apart. Monitor mode does not count them as a change. It compares title, price, currency, sales, rating, review count and stock- Temu can also block single product pages. Each page gets up to four attempts. In our last three test batches 56 of 60, 38 of 43 and 41 of 43 product pages were saved, and the others were reported in
errors. A blocked page costs no fee. Run those links again. After eight failed reads in a row, which is two product pages in a row with all attempts refused, the run stops to avoid wasting traffic and ends as FAILED withSOURCE_ERROR. Saved rows stay in the Dataset
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"goodsId": "606102494273968",
"title": "1pc Vacuum Insulated Coffee Travel Mug, Leak-Proof Double Wall Stainless Steel Reusable Vacuum Cup",
"price": 6.61,
"currency": "USD",
"originalPrice": null,
"minPrice": 6.61,
"maxPrice": 12.36,
"sales": 28000,
"salesText": "28K+ sold",
"salesIsLowerBound": true,
"rating": 4.8,
"reviewCount": 645,
"url": "https://www.temu.com/-g-606102494273968.html",
"detailLevel": "full",
"status": "complete"
}Use it from code
Actor ID: cliqtomedia/temu-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/temu-scraper").call(run_input={
"startUrls": [
"https://www.temu.com/"
],
"country": "US"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~temu-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls": ["https://www.temu.com/"], "country": "US"}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/temu-scraper")
result = tool.invoke({"run_input": {"startUrls": ["https://www.temu.com/"], "country": "US"}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (40)
| Field | Type | Meaning |
|---|---|---|
goodsId | string | Temu goods ID. |
title | string | Public product title. |
price | number | Current headline price in currency units. Missing prices are null. |
currency | string | Currency reported by Temu, such as USD. |
originalPrice | number | Original price reported by Temu. |
sales | number | Reported sales count; rounded text is a lower bound. |
rating | number | Average product rating out of five. |
reviewCount | number | Reported number of reviews. |
url | string | Canonical public Temu product link. |
images | array | Public product image URLs. Full pages may have more images. |
fetchedAt | string | Time the page was read, in UTC. |
detailLevel | string | Listing data or full product page data. |
country | string | Selected market. |
rank | integer | Position in the collected source results before local filters. |
description | string | Public product description from the full page. |
sellerName | string | Public shop name, when available. |
skus | array | Real variant IDs, prices, specifications and stock indicators. |
reviews | array | Review text, rating, date and media shown on the product page. |
specifications | array | Product specifications shown by Temu. |
sourceUrl | string | Page read for this result. |
status | string | Complete or partial when an optional detail request failed. |
rowType | string | Always product. |
priceText | string | Price text shown by Temu. |
discountPercent | number | Discount percentage reported by Temu. Missing discounts are null. |
minPrice | number | Lowest available price reported by the page. |
maxPrice | number | Highest available price reported by the page. |
salesText | string | Sales badge shown by Temu. Missing badges and hidden zero placeholders are null. |
salesIsLowerBound | boolean | True when the sales badge is rounded or includes a plus sign. |
videoUrl | string | Public product video URL, when available. |
skuId | string | Variant ID selected in the listing, when shown. |
sellerId | string | Public shop ID. |
sellerUrl | string | Link to the public shop. |
categoryId | string | Category ID reported by Temu. |
categoryPath | string | Category names shown on the full product page. |
inStock | boolean | Stock status reported by Temu. Null means the page did not report it. |
shippingText | string | Shipping text on the product page, when available. |
returnPolicy | string | Return policy text on the product page, when available. |
isAdultProduct | boolean | Adult content flag reported by Temu. |
isAd | boolean | Whether Temu marks the product as an ad. |
tags | array | Public labels and badges shown in the listing. |
Input settings (21)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Temu links | startUrls | array | ["https://www.temu.com/"] |
| Product URLs or IDs | productUrls | array | |
| Country | country | string | "US" |
| Maximum products | maxItems | integer | 10 |
| Mode | mode | string | "auto" |
| Data level | dataLevel | string | "auto" |
| Minimum price | minPrice | number | |
| Maximum price | maxPrice | number | |
| Minimum rating | minRating | number | |
| Minimum review count | minReviews | number | |
| Minimum sold count | minSold | number | |
| Minimum discount (%) | minDiscount | number | |
| Title must contain | includeKeywords | array | |
| Title must not contain | excludeKeywords | array | |
| Exclude ads | excludeAds | boolean | false |
| Exclude adult products | excludeAdultProducts | boolean | false |
| Only new products | onlyNew | boolean | false |
| Reset history | resetState | boolean | false |
| History name | stateName | string | "default" |
| Send results to (optional) | deliveryConnector | string | |
| Notion page or channel (optional) | deliveryTarget | string |
