TikTok Shop Scraper No Cookies avatar

TikTok Shop Scraper No Cookies

Pricing

$2.70 / 1,000 product data

Go to Apify Store
TikTok Shop Scraper No Cookies

TikTok Shop Scraper No Cookies

Collect public TikTok Shop product pages without login or cookies. Use product URLs or IDs, or discover products from the US best-seller or trending ranking, with price, seller, demand, media, variant, and shipping fields when exposed.

Pricing

$2.70 / 1,000 product data

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

5 days ago

Last modified

Share

🛍️ TikTok Shop product checks without cookies

For ecommerce sellers, product researchers, and developers, this Actor turns public TikTok Shop product pages into product records. Review product IDs, titles, links, seller details, prices, demand signals, images, variants, shipping data, and collection times in one dataset. It supports the United States (US) marketplace. Values that the public storefront does not expose stay marked as unavailable or are left out.

Use cases

📦 Product records with shop and demand signals

Each saved row is one product record from a submitted product URL or ID, or from the public best-seller or trending ranking. A row can include product identity, seller details, public prices, demand signals, images, description, variants, shipping, the observation time, and directional estimates when the source provides enough data. accessStatus tells you whether the page was public or only partly available. Missing fields are not invented.

When the same product appears again from another submitted value or ranking match, the Actor keeps the first eligible occurrence and ignores later matches. It does not merge later matches into the saved row.

▶️ Run one US product collection

  1. Choose Product URLs or IDs for direct lookup, or Best-seller or trending ranking for discovery.
  2. Choose United States (US) as the marketplace.
  3. Add one or more product URLs or IDs, or choose Best sellers or Trending products.
  4. Set Maximum products for a ranking run when you want fewer rows. Leave it empty to return all available results until the public ranking is exhausted.
  5. Start the run and open the default dataset.

Each run uses one collection method. Fields for the other method are ignored. A direct lookup run uses one list of product URLs or IDs.

⚙️ Input

Choose one collection method. The marketplace sets the regional storefront. Only fields for your chosen method are used.

Input fields

FieldTypeWhat it does
findProductsBystringSelects direct lookup with Product URLs or IDs, or discovery with the Best-seller or trending ranking.
productUrlsOrIdsarray of stringsSends one or more TikTok Shop product URLs or IDs for direct lookup. Each value can produce one product record. It is ignored for ranking discovery.
rankingTypestringSelects Best sellers or Trending products. It is ignored for direct lookup.
maxItemsintegerSets an optional limit for ranking discovery. Leave it empty to return all available results until the public ranking is exhausted. It is ignored for direct lookup.
marketplacestringSelects the supported TikTok Shop marketplace. The current choice is US, and regional availability depends on what that public storefront exposes.

Default input

This is the public input from the successful Hosted QA default-input run:

{
"findProductsBy": "productUrlsOrIds",
"productUrlsOrIds": [
"https://shop.tiktok.com/us/pdp/based-deluxe-straight-wavy-hair-kit-sulfate-free-non-toxic/1732307769700553014"
],
"marketplace": "US"
}

🧾 Output

The run output contains a link to the default Apify dataset.

Run output

FieldTypeWhat it does
datasetstringOpens the product results from this run.

Each dataset row uses one product-record shape. Required fields are present on every row. Optional fields may be omitted when the public source does not expose them. An empty array means that no value was exposed for that list. Price availability keeps exact, masked, and unavailable states separate. The dotted paths below show nested fields and cover every dataset field.

Product row fields

FieldTypeWhat it does
productIdstringStable TikTok Shop product ID.
titlestringProduct title shown by the public storefront.
productUrlstringPublic URL for the product page.
marketplacestringMarketplace used for the product page. The current value is US.
accessStatusstringSays whether the public page was public or partiallyAvailable.
observedAtstringTime when this public storefront record was observed.
descriptionstringProduct description shown by the public storefront, when exposed.
imagesarray of stringsPublic product image URLs. The list can be empty.
sellerobjectPublic shop and seller details.
seller.namestringPublic shop or seller name.
seller.idstringPublic seller or shop ID, when exposed.
seller.urlstringPublic URL for the seller or shop, when exposed.
seller.businessNamestringPublic legal or business name, when exposed.
seller.businessAddressstringPublic seller business address, when exposed.
pricingobjectPublic product prices and discount information.
pricing.currentobjectCurrent price shown by the public storefront.
pricing.current.amountnumber or nullNumeric current price when the source exposes an exact value.
pricing.current.currencystring or nullCurrency code for the current price, when exposed.
pricing.current.displaystring or nullPrice text shown by the source, including a mask when the value is hidden.
pricing.current.availabilitystringSays whether the current price is available, masked, or unavailable.
pricing.originalobjectOriginal price shown by the public storefront, when exposed.
pricing.original.amountnumber or nullNumeric original price when the source exposes an exact value.
pricing.original.currencystring or nullCurrency code for the original price, when exposed.
pricing.original.displaystring or nullOriginal price text shown by the source, including a mask when the value is hidden.
pricing.original.availabilitystringSays whether the original price is available, masked, or unavailable.
pricing.discountobjectDiscount text shown by the public storefront, when exposed.
pricing.discount.displaystringDiscount text shown by the source.
demandSignalsobjectPublic rating, review-count, and sold-count signals.
demandSignals.ratingnumber or nullPublic product rating on the source scale.
demandSignals.reviewCountinteger or nullPublic number of product reviews.
demandSignals.soldCountinteger or nullUsable numeric sold count, when the source provides one.
demandSignals.soldCountDisplaystring or nullSold-count text shown by the source, including rounding or a plus sign.
demandobjectDirectional demand tier based on the public signals in the row.
demand.tierstringDirectional tier such as high, medium, low, or notEnoughData. It is not an official market rating.
demand.reasonsarray of stringsObserved public signals used for the directional demand tier.
variantsarray of objectsPublic product variants and SKU details. The list can be empty.
variants[].variantIdstring or nullPublic identifier for a variant, when exposed.
variants[].skustring or nullPublic stock keeping unit, when exposed.
variants[].namestring or nullPublic name for a variant, when exposed.
variants[].optionsarray of objectsOption names and values that define a variant.
variants[].options[].namestringName of a variant option.
variants[].options[].valuestringValue of a variant option.
variants[].pricenumber or nullNumeric price for a variant, when exposed.
variants[].currencystring or nullCurrency code for a variant price, when exposed.
variants[].stockinteger or nullAvailable stock for a variant, when exposed.
variants[].stockAvailabilitystringSays whether stock is available, outOfStock, or unavailable.
shippingobjectPublic shipping and fulfillment details for the product.
shipping.fulfillmentMethodstringFulfillment method shown by the source, when exposed.
shipping.deliveryWindowstringDelivery time window shown by the source, when exposed.
shipping.feenumberShipping fee shown by the source, when exposed.
shipping.currencystringCurrency code for the shipping fee, when exposed.
shipping.freeShippingbooleanSays whether the source says shipping is free.
shipping.cashOnDeliverybooleanSays whether cash on delivery is available according to the source.
shipping.packageobjectPublic package measurements and weight, when exposed.
shipping.package.lengthnumberPackage length in the stated unit.
shipping.package.widthnumberPackage width in the stated unit.
shipping.package.heightnumberPackage height in the stated unit.
shipping.package.dimensionUnitstringUnit used for package length, width, and height.
shipping.package.weightnumberPackage weight in the stated unit.
shipping.package.weightUnitstringUnit used for package weight.
gmvEstimateobjectDirectional lifetime sales value estimate from public price and sold-count signals, when both are usable.
gmvEstimate.amountnumberEstimated lifetime sales value. It is not an official GMV value.
gmvEstimate.currencystringCurrency code for the estimated lifetime sales value.
salesVelocityobjectDirectional sales and revenue change from repeated public observations.
salesVelocity.periodStartstringStart time of the comparison period.
salesVelocity.periodEndstringEnd time of the comparison period.
salesVelocity.observationCountintegerNumber of public observations used for the comparison.
salesVelocity.salesPerDaynumberDirectional average change in sold count per day.
salesVelocity.revenuePerDaynumber or nullDirectional average sales value change per day when price is usable.
salesVelocity.currencystring or nullCurrency code for revenue per day, when available.
salesVelocity.momentumstringDirection of the observed sales change, such as increasing, steady, decreasing, or notEnoughData.
dropshipEconomicsobjectDirectional landed-cost, resale, profit, margin, and viability estimates.
dropshipEconomics.landedCostnumberEstimated landed cost for the product.
dropshipEconomics.resalePricenumberEstimated resale price for the product.
dropshipEconomics.profitnumberEstimated profit per sale.
dropshipEconomics.marginPercentnumberEstimated profit margin as a percent of resale price.
dropshipEconomics.currencystringCurrency code for the economics estimates.
dropshipEconomics.viabilitystringDirectional view such as viable, uncertain, notViable, or notEnoughData.

Example product row

This is one complete row from the successful current-beta run for the default input above:

{
"productId": "1732307769700553014",
"title": "BASED Deluxe Straight/Wavy Hair Kit | Shampoo, Conditioner, Texture Powder, Hair Clay, Pomade, Sea Salt Spray + Wooden Comb | Science-Backed, High Performance",
"productUrl": "https://shop.tiktok.com/us/pdp/based-deluxe-straight-wavy-hair-kit-sulfate-free-non-toxic/1732307769700553014",
"marketplace": "US",
"accessStatus": "partiallyAvailable",
"observedAt": "2026-08-28T03:18:29.802Z",
"description": "The BASED Deluxe Straight/Wavy Hair Kit — everything you need to wash, style, and maintain straight or wavy hair.\nKey Benefits:\n· Shampoo: Gentle, sulfate-free cleanse with Peppermint Oil that refreshes the scalp without stripping natural oils.\n· Conditioner: Lightweight hydration powered by Argan Oil and Hydrolyzed Keratin for smooth, manageable hair.\n· Texture Powder: Instant volume and natural texture with a lightweight, matte finish.\n· Sea Salt Spray: Beachy texture and natural waves with Kelp Extract and Vitamin B5.\n· Pomade: Medium hold with medium shine, powered by Shea Butter and Castor Seed Oil.\n· Hair Clay: Strong hold with a matte finish, powered by Bentonite and Kaolin Clay.\n· BASED Wooden Comb: Built for precision styling and even product distribution.\nPremium, Science-Backed Ingredients – Zero Compromise: Built with performance-driven ingredients and no cheap fillers.\nResults may vary based on individual hair type.",
"images": [
"https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/4f6f3aada7bb44568f48e065189b73b5~tplv-fhlh96nyum-crop-webp:1500:1500.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=607f11de&idc=useast5&from=2378011839",
"https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/4f6f3aada7bb44568f48e065189b73b5~tplv-fhlh96nyum-crop-webp:1500:1500.webp?dr=12190&t=555f072d&ps=933b5bde&shp=8dbd94bf&shcp=607f11de&idc=useast5&from=2378011839"
],
"seller": {
"name": "BASED",
"id": "7495079418085345590",
"url": "https://shop.tiktok.com/us/store/based/7495079418085345590",
"businessName": "Based Bodyworks LLC",
"businessAddress": "1327 Middleton Court, Los Altos, CA, USA, Los Altos, California, 94024, United States"
},
"pricing": {
"current": {
"amount": 160,
"currency": "USD",
"display": "$160.00",
"availability": "available"
},
"original": {
"amount": null,
"currency": null,
"display": null,
"availability": "unavailable"
}
},
"demandSignals": {
"rating": 4.8,
"reviewCount": 10866,
"soldCount": 74069,
"soldCountDisplay": "74069"
},
"demand": {
"tier": "medium",
"reasons": [
"public rating 4.8",
"public review count 10866",
"public sold count 74069"
]
},
"variants": [
{
"variantId": "1732307767844639030",
"sku": "1732307767844639030",
"name": "BB-DLXSW-BNDL",
"options": [
{
"name": "Specifications",
"value": "Default"
}
],
"price": 160,
"currency": "USD",
"stock": 43614,
"stockAvailability": "available"
}
],
"shipping": {
"fulfillmentMethod": "LSV-TTS-US-NEW-4PL-Std",
"deliveryWindow": "11-14 days",
"fee": 0,
"currency": "USD",
"cashOnDelivery": false,
"package": {
"length": 6,
"width": 3,
"height": 3,
"dimensionUnit": "source-unit-2",
"weight": 1.49,
"weightUnit": "source-unit-2"
}
},
"gmvEstimate": {
"amount": 11851040,
"currency": "USD"
},
"dropshipEconomics": {
"landedCost": 160,
"resalePrice": 160,
"profit": 0,
"marginPercent": 0,
"currency": "USD",
"viability": "notEnoughData"
},
"salesVelocity": {
"periodStart": "2026-08-28T02:49:41.931Z",
"periodEnd": "2026-08-28T03:18:29.802Z",
"observationCount": 3,
"salesPerDay": 1050.0783912687925,
"revenuePerDay": 168012.54260300682,
"currency": "USD",
"momentum": "increasing"
}
}

💳 Pricing

This Actor uses pay-per-event pricing. Each saved product row costs $0.0027. The price is tied to the product data saved in the default dataset. What appears in the row depends on the public TikTok Shop page.

🔌 Integrations

Open the default Apify dataset after a run, or use the dataset API link in the run output to read the rows in another workflow.

❓ FAQ

What happens when TikTok Shop does not show a field?

Optional fields may be left out. Price objects use masked or unavailable when the source does not expose an exact price. The Actor does not fill in missing values.

Can I submit product IDs instead of URLs?

Yes. Put one or more IDs in productUrlsOrIds; each submitted value is used for direct lookup.

Can I collect several products in one run?

Yes. Direct lookup accepts one or more URLs or IDs. A ranking run uses its selected public ranking. One run uses one collection method.

What does an empty Maximum products value do?

With ranking selected, leave it empty to return all available results until the public ranking is exhausted. With direct lookup, maxItems is ignored.

Why is a row marked partiallyAvailable?

It means the public page exposed some, but not all, product fields. Returned fields are kept, and unavailable details are not guessed.

Is the demand tier an official TikTok Shop score?

No. It is a directional tier based on public rating, review-count, and sold-count signals. It is not an official market rating.

Does the Actor include estimates?

Some rows can include directional GMV, sales-velocity, or resale-economics estimates when the needed public signals exist. Treat them as estimates, not official TikTok Shop values.

Can I choose another marketplace?

Currently only United States (US) is supported. Regional availability still depends on what that public storefront exposes.

Does it collect reviews or change seller listings?

No. It does not collect full customer-review records, orders, checkout data, account data, or listing changes. It collects product-page data that the public storefront exposes.

What happens if the same product appears more than once?

The Actor saves the first eligible occurrence and ignores later matches for that product. It does not merge later matches into the saved row.

📝 Changelog

0.0: Initial release

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré