Temu Scraper - Products, Prices and Variants avatar

Temu Scraper - Products, Prices and Variants

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Temu Scraper - Products, Prices and Variants

Temu Scraper - Products, Prices and Variants

Collect Temu product IDs, prices, images and sales signals from regional storefronts, including the US, UK, Germany and the Philippines. Search by keyword, category or product link. Pay per delivered row plus a start fee.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

0

Bookmarked

39

Total users

16

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

Temu Scraper

Extract Temu product IDs, prices, images and available sales signals from regional storefronts into rows you can export.

  • Collect product pages, keyword results, categories, channels and home recommendations.
  • Choose markets such as the United States, United Kingdom, Germany, France, Australia and the Philippines.
  • Add product details or separately billed SKU variant rows when available.
  • Export rows or read them through the Apify API and MCP server.
  • Pay $3.00 per 1,000 delivered rows on the Free plan, plus a start fee.

What does Temu Scraper do?

Temu Scraper collects public product information from temu.com for price comparisons, assortment research and product monitoring. Each row represents one product, variant or catalog entry. Field availability depends on the page and mode; a discovered product link may have no price or title.

  • Products: seoPdp accepts product URLs or IDs; productDetail is another explicit product-page mode.
  • Listings: keywordSearch, categorySearch, channelSearch and homeDiscover collect products from their respective pages.
  • Discovery: serpDiscover finds product links; seoSearch collects search listings when available.
  • Catalog: regions returns region, channel and category entries, not product offers.
  • Optional details: enrichDetails adds available product-page fields to listing rows. It is off by default.
  • Optional variants: expandVariants is off by default. Each additional SKU row is billed at the same row price and shares the input's row limit.

What data can you extract from Temu?

Product rows

These fields cover product pages and listings. rowType is product; type can distinguish a product page from a discovered listing. Examples illustrate the format, not current offers.

FieldDescriptionExample
goodsIdTemu product identifier601102486859949
titleProduct name, when availableUSB charging cable
urlProduct linkhttps://www.temu.com/goods.html?goods_id=601102486859949
salePriceSale price; number or string3.99
retailPriceOriginal price, when shown9.99
pricePrice on search listings or variants3.99
currencyCurrency reported with the priceUSD
imageMain image URLhttps://example.com/product.jpg
imagesAvailable gallery image URLs[]
ratingProduct-page rating4.8
ratingValueListing rating text4.8
soldLabelDisplayed sales label, not an exact total10k+ sold
soldQuantityNumeric sales signal, when supplied120
availabilityReported availabilityInStock
mallAvailable seller name, ID and rating{}
degradedFromRequested mode when fallback rows were returnedkeywordSearch
scrapedAtCollection timestamp in UTC2026-10-24T00:00:00+00:00

Variant rows

With expandVariants: true, rowType and type are variant. Rows also carry the parent product link, currency and available image.

FieldDescriptionExample
skuIdVariant identifier123456789
productIdParent product's goodsId601102486859949
productTitleParent product nameUSB charging cable
attributesAvailable variant specifications{"Color": "Black"}
stockStock count, when supplied5

Region rows

rowType is region.

FieldDescriptionExample
codeRegion selection codeus
nameRegion nameUnited States
localeCatalog localeen_US

Channel rows

rowType is channel.

FieldDescriptionExample
slugChannel selection valuebest-sellers
pathChannel page path/channel/best-sellers.html

Category rows

rowType is category.

FieldDescriptionExample
optIdCategory identifier2643
categorySlugCategory URL namecables-adapters
levelCategory depth2

How to scrape Temu

  1. Open Temu Scraper in Apify Console.
  2. Fill one target, such as productUrl or query. Clear the sample product URL when entering a different target.
  3. Set maxResults to a small number, such as 3.
  4. Click Start and wait for the run to finish.
  5. Download the dataset or read it through the API.

Empty input {} selects the sample product URL, seoPdp, region us and a maximum of 1 row. This is a charged example run, not a free preview. With mode: auto, a filled target selects the matching mode. Avoid mixing targets: product URLs take priority over category URLs, then product IDs, category identifiers and keywords. INPUT_REPORT records ignored fields.

Product pages: seoPdp

Enter productUrl, goodsId or a goodsIds array. Auto mode selects this mode for product targets.

Product details: productDetail

Select this mode explicitly and provide one product URL or goods ID.

Keyword listings: keywordSearch

Enter query or keywords. Use English search terms; automatic translation is not configured.

Categories: categorySearch

Provide a Temu categoryUrl, or use optId with categorySlug. Category identifiers select this mode automatically.

Channels: channelSearch

Select the mode explicitly and choose channel. Omitting it selects best-sellers.

Home recommendations: homeDiscover

Select the mode explicitly and choose a region. Recommendations are a snapshot, not the complete catalog.

Catalog entries: regions

Select this mode for region, channel and category metadata. Regions appear first, so a small row limit can exclude channels and categories.

Product discovery: serpDiscover

Select this mode with keywords or seed product IDs. Results can contain only an ID, URL and rank; optional enrichment may add details.

Alternative search: seoSearch

Select this mode with a query. It can return no rows when search listings are unavailable.

No-target limit: channelSearch, homeDiscover and regions can run without a target, but the current input handling then applies the example cap of 1 row, even if you request more. Setting only channel or region does not remove that cap.

What to fill in

FieldWhat to enterDefault
modeAuto selection or one mode described aboveauto
productUrlTemu link containing goods_id= or -g-<ID>.htmlSample in form
goodsId / goodsIdsOne numeric product ID or an arrayEmpty
query / keywordsOne search phrase or an arrayEmpty
keywordAlternative name for queryEmpty
categoryUrlFull Temu category linkEmpty
optId / catIdCategory ID; catId is an alternative nameEmpty
categorySlug / bucketCategory name in its URL, or catalog groupEmpty
regionRegion code, such as us, uk, de, fr, au, phus
browseCountryCountry alternative; GB selects ukEmpty
maxResultsRow limit per input, from 1 to 50070; example 1
channelbest-sellers, full-star, new-in, lightning-deals, clearancebest-sellers in channel mode
sortdefault, sales, new, price_asc, price_desc, ratingUnset
minPrice / maxPriceRequested price boundsUnset
refineKnown Temu filter stringEmpty
currencyCurrency hint, such as USD; not a conversionUnset
enrichDetails / enrichLimitAdd details to up to this many listingsfalse / 3
expandVariantsReturn available SKU variants as extra rowsfalse
page / maxPagesStarting page and page limit1 / 1
cursorUnchanged nextCursor from RUN_SUMMARY, when presentEmpty
pageRetryRetry limit for unavailable or empty pages2
seoFallbackAllow alternative product snapshots if the requested page failstrue
offlineCorpusInclude archived product links in serpDiscoverfalse

Examples for each mode:

Product pages

{"mode": "seoPdp", "goodsIds": ["601102486859949"], "maxResults": 3}

Product details

{"mode": "productDetail", "goodsId": "601102486859949", "maxResults": 3}

Keyword listings

{"mode": "keywordSearch", "query": "usb cable", "region": "us", "maxResults": 3}

Categories

{"mode": "categorySearch", "categorySlug": "cables-adapters", "optId": "2643", "maxResults": 3}

Channels

{"mode": "channelSearch", "channel": "best-sellers", "region": "us", "maxResults": 1}

Home recommendations

{"mode": "homeDiscover", "region": "us", "maxResults": 1}

Catalog entries

{"mode": "regions", "maxResults": 1}

Product discovery

{"mode": "serpDiscover", "query": "usb cable", "maxResults": 3}

Alternative search

{"mode": "seoSearch", "query": "usb cable", "maxResults": 3}

maxItems and limit are accepted as maxResults. Close field-name misspellings can be corrected; other unknown fields are ignored with a warning. Invalid channel values are dropped, leaving the default channel. Check INPUT_REPORT in the run's key-value store for filled, corrected and ignored fields.

Unusable targets stop the run before row delivery with an INVALID_INPUT: message naming the field and expected format. No result rows are charged in that case, but the start fee still applies.

Output example

Illustrative product row; actual prices and fields depend on the source:

{
"type": "product",
"rowType": "product",
"goodsId": "601102486859949",
"title": "USB charging cable",
"url": "https://www.temu.com/goods.html?goods_id=601102486859949",
"salePrice": 3.99,
"currency": "USD",
"region": "us",
"scrapedAt": "2026-10-24T00:00:00+00:00"
}

Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. RUN_SUMMARY records the delivered count, warnings and any nextCursor; ERROR_SUMMARY contains saved failure information when available.

Why use this Temu scraper?

  • Row-based pricing: result charges apply to delivered rows, not pages tried.
  • Partial delivery: returned partial rows can be saved when collection reaches its deadline. Rows already in the dataset remain available; a manual stop cannot guarantee delivery of rows not yet received.
  • Several inputs: submit keyword or product-ID arrays rather than starting a run for each input.
  • Visible gaps: unavailable fields can be empty or omitted instead of presented as confirmed values.
  • No proxy setup: you do not need to set up proxies.

How much does it cost to scrape Temu?

The Actor uses pay-per-event pricing: $0.005 per start event, plus the price of each delivered row. Platform usage is included in these prices.

Apify planPrice per rowPrice per 1,000 rows
Free$0.003$3.00
Starter$0.003$3.00
Scale$0.0026$2.60
Business$0.0022$2.20

Platinum and Diamond have the same row price as Business. Start billing is one event per GB of allocated memory, with a minimum of one event. At the default 128 MB, a start costs $0.005.

maxResults defaults to 70 per input; larger values are collected in parts of 70. Product and variant rows share that allowance. The no-target example cap described above takes precedence. Free-plan runs are limited to 200 rows per run and 10 runs of this Actor. Availability and page limits can reduce the number delivered.

The whole run is limited by Maximum cost per run (maxTotalChargeUsd in the API). Choose this alongside your row limit.

Example: three keywords delivering 50 rows each produce 150 rows. On the Free plan, with one start at 128 MB, the event cost is 150 × $0.003 + $0.005 = $0.455. Undelivered rows are not billed.

What happens when the run timeout is too short

If collection is expected to outlast the remaining run time, the Actor can pause automatically. It shows ABORTED with a message such as "Queued on the collection backend; this run will resume automatically when results are ready (about N s)." This pause is not itself a collection failure.

When results are ready, the same run resumes and writes to the same dataset. It skips rows already delivered; successful delivery finishes as SUCCEEDED. When continuing after previously delivered rows, the status can say "Resumed: delivering N rows." A collection error can still fail the run.

Keep the default timeout of 3600 seconds to reduce interruptions. The synchronous API endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return no rows while the run is paused. For longer requests, start asynchronously and read the dataset after SUCCEEDED, or use a succeeded-event webhook.

Use with AI agents and the API

Apify MCP server (Claude, ChatGPT, Cursor, VS Code)

Add this Actor to a client that supports remote MCP servers:

https://mcp.apify.com?tools=lentic_clockss/temu-scraper

Sign in with Apify using OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool returns run and dataset IDs; use get-dataset-items to read rows. Clients without remote support can run npx @apify/actors-mcp-server --tools lentic_clockss/temu-scraper with APIFY_TOKEN set.

Example prompt: "Find up to three Temu products for usb cable in the US. Return their product IDs, links and any available prices."

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/temu-scraper").call(
run_input={"query": "usb cable", "region": "us", "maxResults": 3}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/temu-scraper').call({
query: 'usb cable', region: 'us', maxResults: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

For asynchronous HTTP calls, send input JSON to POST https://api.apify.com/v2/acts/lentic_clockss~temu-scraper/runs with the same authorization header. Track that run's status, then read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.

Integrations

Use Apify Schedules for recurring runs. Connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable or your webhook through the Integrations tab.

FAQ

Use public data responsibly. You are responsible for checking Temu's terms and applicable data-protection law; processing personal data needs a lawful basis. This independent tool is not affiliated with Temu.

Why did my run end as ABORTED?

Check the status message. An automatic queue pause can resume without action, as described above. A manual abort or unrelated failure is not a promise of automatic recovery.

How many results can I get?

maxResults allows up to 500 per input, subject to available rows, page limits and the run's spending limit. Free-plan runs stop at 200 rows. No-target example runs currently use a one-row cap.

Why are some fields empty?

Pages expose different information. Discovery may return a link without a title or price; sold-out products may lack prices. Missing information is not proof that the value is zero.

Can I collect every variant?

Set expandVariants: true. Only variants present in the collected product details can be returned, and the shared row limit may stop before all variants are delivered.

Does selecting a region guarantee local prices?

No. Regional availability varies, and alternative snapshots may not represent a current local offer. Check the returned currency and source information before comparing prices.

Why do rows contain degradedFrom?

The requested page failed and seoFallback returned alternative snapshots. They are not guaranteed current catalog data. Set seoFallback: false if you do not want that fallback.

Can it collect reviews or place orders?

There is no public review-collection input. Review counts may appear, but full review text, checkout, payment and private account data are outside this Actor's documented scope.

Limitations

  • A listed market or mode does not guarantee successful collection on every run.
  • Sort and price filters are requests to the source, not guaranteed post-filtering.
  • seoSearch is availability-dependent; discovery and archived links may be stale.
  • Catalog metadata is a reference list, not proof that every category is currently accessible.
  • No-target modes use the example row cap. Do not treat regions with a small limit as a complete catalog export.
  • The Actor reports blocked or unavailable pages; a configured mode does not guarantee access.

More e-commerce and marketplace scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Found a problem or need another field? Open an issue in the Issues tab of this Actor's page and include the run ID and the input you used.