Temu Scraper: Products, Prices, Variants & Reviews avatar

Temu Scraper: Products, Prices, Variants & Reviews

Pricing

from $1.89 / 1,000 product saveds

Go to Apify Store
Temu Scraper: Products, Prices, Variants & Reviews

Temu Scraper: Products, Prices, Variants & Reviews

Export Temu products from product links or the home feed to JSON or CSV. Get prices, sales, ratings, variants and public reviews. No keyword search. US market.

Pricing

from $1.89 / 1,000 product saveds

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

3 days ago

Last modified

Categories

Security

Limited permissions

Share

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.

Use it for Temu price checks, dropshipping research and tracking the products you already know, in the US market. This version has no keyword search and no category pages. The prefilled home feed with 10 products finished in about 3 to 7 seconds in our tests.

Temu Scraper: product links or the Temu home page link go in, Temu products come out as one row each with price, rating, reviews and sold count, plus variants and public reviews on product pages

Table of contents

What it does

This Actor reads public Temu pages for the US market and saves one row for each product. It reads two things: the Temu home feed and single product pages. Prices are in USD. You do not need a Temu account.

A home feed row has the title, price, image, link and usually sales and the original price. Temu does not send ratings or review counts in the feed, so those fields are null there. A product page adds the rating, review count, variants, specifications, the description and the public reviews shown on that page.

Good fit

  • 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 fit

  • Finding products by keyword. This version has no search.
  • Exporting a Temu category. This version does not read category pages.

👉 Try it now: open the input form

How it works

  1. You give product links, product IDs or the Temu home page link.
  2. The Actor reads those public pages, applies your filters and removes duplicate products.
  3. It saves one row per product in the Dataset. A short report of the run goes to the Key-value store.

👉 Try it now: open the input form

Quick start

Input form with the Temu links field in box 1, the Maximum products field in box 2 and the start button in box 3

  1. Open the Input tab. Keep the home page link in Temu links, or replace it with your product links (box 1 in the picture).

  2. Keep Maximum products at 10 for the first run (box 2).

  3. Click Start (box 3). The picture shows the owner view, where this button reads Save & start.

  4. Open the Output tab and check the Products table: title and price first (box 4).

    Products table with image, title, price and currency in box 4

Expected result: 10 rows, each with a title, a USD price, an image and a Temu link. On feed rows rating and reviewCount are null. Use a product link or dataLevel: full when you need them.

👉 Try it now: open the input form

Use cases

Buyer jobInput pathOutput entityKey fieldsNext integration
Variant and review checkproductUrlsFull product rowskus, reviews, specifications, minPrice, maxPriceJSON or API
Price tracking for known productsproductUrls, mode: monitor, stateNameChanged product rowchangeType, changedFields, priceSchedule and webhook
Home feed price and sales exportstartUrls with the home page, maxItemsProduct rowtitle, price, discountPercent, sales, urlCSV or Google Sheets
Home feed with ratingsstartUrls with the home page, dataLevel: fullFull product rowrating, reviewCount, skus, salesExcel or API

👉 Try it now: open the input form

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffectExampleRecommendation
startUrlsTemu linksarray of stringsone of the twoprefill ["https://www.temu.com/"]up to 1000 product or home linksThe home link reads the feed, product links read those products["https://www.temu.com/"]Keep the home link for a first try
productUrlsProduct URLs or IDsarray of stringsone of the twononeup to 1000 Temu links or numeric IDsReads full product pages["606102494273968"]Remove the home link if you want only these products
countryCountrystringnoUSUSSets the marketUSKeep it. Other markets are not supported
maxItemsMaximum productsintegerno101–100000Stops after this many saved rows across all inputs200Raise it after the first run
modeModestringnoautoauto, products, home, monitorChooses which inputs runmonitorKeep auto unless you want one input type
dataLevelData levelstringnoautoauto, listing, fullauto and listing save rows from the feed. full also opens each product pagefullUse full only when you need ratings, variants or reviews
minPriceMinimum pricenumbernonone0 or moreKeeps products at or above this price5Use for price research
maxPriceMaximum pricenumbernonone0 or moreKeeps products at or below this price20Use for price research
minRatingMinimum ratingnumbernonone0–5Skips lower ratings and products with no rating4.5Feed rows have no rating. Use it with product pages
minReviewsMinimum review countnumbernonone0 or moreSkips products with fewer reviews100Feed rows have no review count. Use it with product pages
minSoldMinimum sold countnumbernonone0 or moreSkips products with fewer sales. 1K+ counts as 10001000Works on the feed
minDiscountMinimum discount (%)numbernonone0–100Skips smaller or missing discounts30Works on the feed when Temu shows a discount
includeKeywordsTitle must containarray of stringsnononeup to 20Keeps titles with every entered word. It filters rows and does not search Temu["waterproof"]Use for a narrow list
excludeKeywordsTitle must not containarray of stringsnononeup to 20Skips titles with any entered word["connector"]Removes accessories
excludeAdsExclude adsbooleannofalsetrue or falseSkips products marked as adstrueTurn on for clean lists
excludeAdultProductsExclude adult productsbooleannofalsetrue or falseSkips products marked as adulttrueTurn on for shared reports
onlyNewOnly new productsbooleannofalsetrue or falseSaves products not yet in this historytrueUse for scheduled runs
resetStateReset historybooleannofalsetrue or falseStarts this history againtrueUse once, then turn off
stateNameHistory namestringnodefaultlowercase letters, numbers, hyphens, up to 40 charactersKeeps separate history per projectmy-mugs-usUse one name for each project
deliveryConnectorSend results tostringnononeyour MCP connectorPosts a short summary after the runSlack connectorOptional
deliveryTargetNotion page or channelstringnononeNotion page link or Slack channel IDChooses where the summary goesC0123456789Optional

An empty input stops the run with an error and no catalog or product fee, because the Actor does not guess what you want. The same applies to an invalid value, such as a link from another site, a keyword, or a Temu search or category link. Duplicate products within a run are saved once.

Interacting settings

WhenInput AInput BEffective behaviorExampleCost/result effect
Both input typesmode: autohome link and productUrlsBoth run until maxItemsThe prefilled home link stays next to your linksRemove the home link if you want only your products
One input typemode: productshome linkOnly product links runThe home link stays unusedNo fee for skipped inputs
Product linksproductUrlsdataLevel: listingProduct links always use full pagesOne product IDproduct-details fee applies
Full datadataLevel: fullfilters or onlyNewA checked full page is charged even when the row is skippedminPrice above all pricesThe page stays in a PRODUCT_ID file
Filters on the feedfiltersmaxItemsThe feed reads about maxItems products and at least 60, then stopsminSold: 1000, 10 productsYou can get fewer rows than maxItems
HistoryonlyNew or mode: monitorstateNameThe same name continues the historymy-mugs-usUnchanged feed rows cost no product fee. Product pages are still charged
Fresh startresetStatestateNameThis history starts emptyReset onceAll rows count as new

Input examples

First run: home feed

{
"startUrls": ["https://www.temu.com/"],
"maxItems": 10
}

Expected behavior: the Actor reads the first feed page and saves 10 products. Expected output: product rows with title, price, currency, url, images, usually sales. Limit or cost note: about $0.049 on the Free plan.

Variants and reviews

{
"productUrls": ["606102494273968"],
"maxItems": 1
}

Expected behavior: the Actor opens the product page. Expected output: one row with skus, specifications, reviews, minPrice, maxPrice. Limit or cost note: one product-details fee. If Temu blocks the page, you pay no fee for it.

Track prices of known products

{
"productUrls": ["606102494273968", "601102610144502"],
"mode": "monitor",
"maxItems": 2,
"stateName": "my-products-us"
}

Expected behavior: the first run saves the products. The next runs save only new or changed ones. Expected output: rows with changeType and changedFields. Limit or cost note: each checked product page pays product-details, even with no changes.

Home feed with ratings and variants

{
"startUrls": ["https://www.temu.com/"],
"dataLevel": "full",
"maxItems": 10
}

Expected behavior: the Actor reads the feed and opens the page of each product. Expected output: rows with rating, reviewCount, skus, reviews. A row stays partial if Temu blocks its page. Limit or cost note: one catalog fee plus one product-details fee per opened page, about $0.19 for 10 on the Free plan.

👉 Try it now: open the input form

Output

Output fields

FieldMeaningTypeCan be empty?Example / enumSource / notes
goodsIdTemu product IDstringno606102494273968From the page
titleProduct titlestringconditional1pc Vacuum Insulated Coffee Travel MugFrom the page
priceCurrent price as a numbernumberconditional6.61In currency units
priceTextPrice as Temu shows itstringconditional$6.61Raw text
currencyCurrencystringconditionalUSDFrom the page
originalPricePrice before discountnumberyes35.99Only when Temu shows it. It can differ between runs
discountPercentDiscount in percentnumberyes79Only when Temu shows it. It can differ between runs
minPrice / maxPriceLowest and highest pricenumberyes6.61 / 12.36Differ when variants differ
salesSold count as a numbernumberyes28000Rounded badges give a lower bound
salesTextSales badgestringyes28K+ soldRaw text
salesIsLowerBoundThe sales number is rounded downbooleanyestrueTrue for badges such as 28K+
ratingAverage rating out of 5numberyes4.8Product pages only. null on feed rows
reviewCountNumber of reviewsnumberyes645Product pages only. null on feed rows
urlProduct linkstringconditionalhttps://www.temu.com/-g-606102494273968.htmlPublic page
imagesImage linksarrayyes["https://img.kwcdn.com/..."]Full pages may have more
videoUrlProduct video linkstringyesnullWhen shown
skuIdVariant ID picked in the listingstringyes109023852495536When shown
skusVariants with ID, price, specifications and stockarrayyes10 items on the exampleFull pages
reviewsPublic reviews on the page: text, rating, date, mediaarrayyes4 items on the exampleFull pages, no profile data
specificationsProduct specificationsarrayyesmaterial, sizeFull pages
descriptionProduct descriptionstringyestextFull pages
sellerId / sellerName / sellerUrlPublic shop ID, name and linkstringyes634418231860874When shown
categoryId / categoryPathCategory ID and namesstringyes2407Full pages, when shown
inStockStock statusbooleanyestruenull means Temu did not report it
shippingText / returnPolicyShipping and return textstringyestextFull pages, when shown
isAd / isAdultProductTemu marks it as an ad or adult productbooleanyesfalseWhen shown
tagsPublic labelsarrayyes[]Listing badges
rankPosition in the feed before your filtersintegeryes1Feed rows
detailLevelRow sourcestringconditionallisting, fullTells you what to expect
statusRow statestringconditionalcomplete, partialpartial means the product page failed and the feed row stayed
changeType / changedFieldsWhat changed in monitor modestring / arrayyeschanged, ["price"]Monitor mode only
country, source, rowTypeMarket, source and row typestringnoUS, temu, productFixed values
sourceUrl, fetchedAtPage read and time in UTCstringconditional2026-11-05T11:45:35.401ZFor your records

Output entities and surfaces

SituationDataset/API/KVS/live viewResult shapeUser action
Normal itemDataset, views Products, Product variants, Price and first variant, All fieldsOne row per productOpen the table or export it
Domain-empty resultEmpty Dataset, RUN_SUMMARY with status not_found, no_matches or no_changesNo rows, run SUCCEEDEDCheck the link, the filters or the history
Partial resultDataset rows, status partial in RUN_SUMMARY, stopReason CHARGE_LIMIT, DEADLINE or ITEMS_FAILEDSaved rows stay, run SUCCEEDEDRead errors and unprocessedInputs, then run the rest again
Technical failure or retryRUN_SUMMARY with stopReason SOURCE_ERROR or INVALID_INPUT, run FAILEDRows saved before the stop stayTry again later or fix the input

Full product pages are also kept as PRODUCT_<ID> files in the Key-value store.

Output example

{
"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"
}

This example is trimmed and contains one product from the "Variants and reviews" input. null means Temu did not show the value on that page. It does not mean zero. We do not promise that every product has every field.

Send results to Slack or Notion

Pick your connector in the optional deliveryConnector field. After the run saves its data, the Actor posts a short summary (up to 25 rows and a link to the full dataset) there. Put a Notion page link or a Slack channel ID in deliveryTarget: in Notion every run is added on top of that one page, so your workspace does not fill up with new pages. A delivery error never fails the run and costs nothing extra. Connect a service once in Apify Console → MCP connectors.

Use case → fields

Buyer jobInput pathOutput entityKey fieldsNext integration
Variant checkproductUrlsFull product rowskus, minPrice, maxPriceJSON
Review checkproductUrlsFull product rowreviews, rating, reviewCountJSON
Change trackingproductUrls, mode: monitorChanged product rowchangeType, changedFieldsWebhook
Feed exporthome linkProduct rowprice, sales, discountPercentCSV

👉 Try it now: open the input form

Pricing

Pricing unit

You pay per event. Platform usage is included in these prices.

EventWhen it is chargedFreeBronzeSilverGold and above
Actor startOnce per run, per GB of memory$0.00005$0.00005$0.00005$0.00005
Catalog checkUp to three home feed pages. Includes three basic products$0.03$0.03$0.03$0.03
ProductOne saved feed row above the included three$0.0027$0.00243$0.00216$0.00189
Product detailsOne full product page$0.0162$0.01458$0.01296$0.01134
  • The start fee grows with run memory, per GB. The default is 256 MB.
  • A feed page holds about 20 products.
  • A filter with no matches pays the catalog fee, the same as a feed run where no row is new. They pay for reading the feed, not for rows.
  • A checked full product page is charged even if a filter or the history skips the row. You can still read it in its PRODUCT_<ID> file.
  • A page that Temu blocks costs no catalog, product or details fee.
  • If a run stops early, you pay only for the work done before the stop.
  • Set Maximum cost per run (maxTotalChargeUsd in the API) to control the cost. At the limit, the run stops and keeps the saved rows. A run with no limit can spend up to your account balance, so always set one for large API runs.

Cost examples

Prices are for the Free plan.

ScenarioInput scopeExpected item/event countBase chargeOptional chargeStop/cap behavior
First runHome feed, 10 products1 catalog fee, 7 products$0.04895noneUnder $1
Home feed60 products1 catalog fee, 57 products$0.18395noneUnder $1
Whole feedAsked for 300, got 2384 catalog fees, 226 products$0.73025noneUnder $1
Feed with full pages10 products, dataLevel: full1 catalog fee, 10 details$0.19205noneUnder $1
One product page1 product link1 details$0.01625noneUnder $1
20 product pages20 product links20 details$0.32405noneUnder $1
No matchesHome feed, a filter skips all1 catalog fee$0.03005noneNo product fee
Monitor, 5 products, no changes5 product links5 details$0.08105nonePages are charged, rows are not saved

Paid plans pay less for product rows, as the table above shows.

👉 Try it now: open the input form

Limits

  • 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. maxItems of 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: full or use product links to get them.
  • The price in a feed row can differ from the price on the product page. In one test a product was $12.24 in the feed and $15.97 on its page. Use product links when the exact page price matters.
  • originalPrice and discountPercent can 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 with SOURCE_ERROR. Saved rows stay in the Dataset.
  • If Temu refuses the feed in the middle of a large run, the run ends as partial. Saved rows stay in the Dataset, and unprocessedInputs shows what is missing.
  • After three failed reads of a feed page the run stops with SOURCE_ERROR. Saved rows stay in the Dataset.
  • The default run timeout is 300 seconds. Raise it for large runs: 20 product pages took 137 seconds, so plan for about 35 pages per run at the default.
  • The history keeps up to 10000 products for each stateName.
  • Monitor and onlyNew work best with product links. On the home feed a "new" row means new in your history, not new on Temu, because the feed changes on its own.
  • The Actor reads public data only. It does not log in, solve CAPTCHAs or collect reviewer profiles or contact details.

👉 Try it now: open the input form

API, export and integrations

  • API: start a run with the input JSON through the Apify API, then read rows from the run's Dataset. Use goodsId as a stable key.
  • Export: download the Dataset as JSON, CSV, Excel, XML or HTML from the Output tab or the API.
  • Scheduling: create a task with mode: monitor and product links and a fixed stateName, then add a schedule in Apify Console. Read changeType and changedFields in the new rows.
  • Webhooks / no-code: use a webhook on the run finish event. Make, Zapier and n8n can read the Dataset through the Apify integrations.
  • SDK / MCP / agent: call the Actor by cliqtomedia/temu-scraper from the Apify SDK or the MCP server below.

Use with AI agents (MCP)

MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/temu-scraper.

Smallest useful input:

{
"productUrls": ["606102494273968"],
"maxItems": 1
}

Key output fields:

  • title: product title.
  • price and currency: current price as a number and its currency.
  • rating, reviewCount, skus, reviews: filled on product pages.
  • url: public Temu product link.
  • goodsId: stable product ID.
  • detailLevel: listing or full, which tells if skus and reviews can be filled.

This input cost $0.01625 on the Free plan. An empty input is an error, and this Actor cannot search by keyword. Set maxTotalChargeUsd on each API run. The default timeout is 300 seconds. The US market is the only market.

👉 Try it now: open the input form

Troubleshooting

The run failed with INVALID_INPUT

Symptom: the run status is FAILED and stopReason in RUN_SUMMARY is INVALID_INPUT. Likely reason: the input is empty, or it has a keyword, a Temu search link, a category link or a link from another site. Check: read the error text in RUN_SUMMARY. Action: use product links, product IDs or the link https://www.temu.com/.

The run failed with SOURCE_ERROR

Symptom: the run status is FAILED and stopReason in RUN_SUMMARY is SOURCE_ERROR. Likely reason: Temu pages could not be read several times in a row: three feed reads of one page, or eight product page reads. Check: open errors and unprocessedInputs in RUN_SUMMARY. Rows saved before the stop stay in the Dataset. Action: try again later.

The run finished with fewer rows than I asked for

Symptom: status in RUN_SUMMARY is partial, or there are fewer rows than maxItems. Likely reason: the run reached the cost limit (CHARGE_LIMIT) or the time limit (DEADLINE), a product page failed (ITEMS_FAILED), a filter skipped rows, or the feed ended. Check: read stopReason, detailFailures and unprocessedInputs. Action: raise Maximum cost per run or the timeout, then run the rest again. The feed can end early: 238 products at most in our tests, and 40 in the shortest run.

Symptom: the Dataset has products you did not ask for. Likely reason: the prefilled home link is still in Temu links. Check: look at sourceUrl in those rows. Action: remove the home link or set mode to products.

Rating and review columns are empty

Symptom: rating or reviewCount are null. Likely reason: the row came from the home feed. Temu does not send these values there. Check: look at detailLevel in the row. Action: use productUrls, or set dataLevel to full.

The Dataset is empty and the run succeeded

Symptom: 0 rows, and status is not_found, no_matches or no_changes. Likely reason: filters skip everything, or the history has no changes. Check: read scanned, filtered and unchanged in RUN_SUMMARY. Action: relax the filters, or set resetState to true.

The history warning appears

Symptom: the status message says the history store is unavailable, and RUN_SUMMARY has HISTORY_UNAVAILABLE. Likely reason: another Actor owns a store with the same name, or access was refused. Check: read warnings in RUN_SUMMARY. The rows are still saved. Action: use a new stateName.

👉 Try it now: open the input form

FAQ

Can it search Temu by keyword?

No. Temu refuses search and category pages to anonymous visitors for hours at a time, so this version does not offer them. If you need keyword search, this Actor is not the right tool. With product links it works without search.

Do I need a Temu account or cookies?

No. The Actor reads public pages. You do not add any login, cookie or key.

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.

👉 Try it now: open the input form

👉 Try it now: open the input form

Support

For a bug, a question or a feature request, open the Issues tab of this Actor on Apify. Include the run ID, the input mode and the error text from RUN_SUMMARY. Never send tokens, cookies or billing data.

👉 Try it now: open the input form