TikTok Shop Scraper No Cookies
Pricing
$2.70 / 1,000 product data
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é
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
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
- Find products in the public trending ranking with Tiktok Shop Trending Products Scraper.
- Collect products from the public best-seller ranking with Tiktok Shop Best Sellers Scraper.
- Fetch product details from a URL or ID with Tiktok Shop Product Data Scraper.
- Fetch one product from a submitted URL or ID with Tiktok Shop Product Scraper.
- Collect public TikTok Shop product data without cookies with Tiktok Shop Scraper.
📦 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
- Choose Product URLs or IDs for direct lookup, or Best-seller or trending ranking for discovery.
- Choose United States (US) as the marketplace.
- Add one or more product URLs or IDs, or choose Best sellers or Trending products.
- 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.
- 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
| Field | Type | What it does |
|---|---|---|
findProductsBy | string | Selects direct lookup with Product URLs or IDs, or discovery with the Best-seller or trending ranking. |
productUrlsOrIds | array of strings | Sends 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. |
rankingType | string | Selects Best sellers or Trending products. It is ignored for direct lookup. |
maxItems | integer | Sets 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. |
marketplace | string | Selects 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
| Field | Type | What it does |
|---|---|---|
dataset | string | Opens 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
| Field | Type | What it does |
|---|---|---|
productId | string | Stable TikTok Shop product ID. |
title | string | Product title shown by the public storefront. |
productUrl | string | Public URL for the product page. |
marketplace | string | Marketplace used for the product page. The current value is US. |
accessStatus | string | Says whether the public page was public or partiallyAvailable. |
observedAt | string | Time when this public storefront record was observed. |
description | string | Product description shown by the public storefront, when exposed. |
images | array of strings | Public product image URLs. The list can be empty. |
seller | object | Public shop and seller details. |
seller.name | string | Public shop or seller name. |
seller.id | string | Public seller or shop ID, when exposed. |
seller.url | string | Public URL for the seller or shop, when exposed. |
seller.businessName | string | Public legal or business name, when exposed. |
seller.businessAddress | string | Public seller business address, when exposed. |
pricing | object | Public product prices and discount information. |
pricing.current | object | Current price shown by the public storefront. |
pricing.current.amount | number or null | Numeric current price when the source exposes an exact value. |
pricing.current.currency | string or null | Currency code for the current price, when exposed. |
pricing.current.display | string or null | Price text shown by the source, including a mask when the value is hidden. |
pricing.current.availability | string | Says whether the current price is available, masked, or unavailable. |
pricing.original | object | Original price shown by the public storefront, when exposed. |
pricing.original.amount | number or null | Numeric original price when the source exposes an exact value. |
pricing.original.currency | string or null | Currency code for the original price, when exposed. |
pricing.original.display | string or null | Original price text shown by the source, including a mask when the value is hidden. |
pricing.original.availability | string | Says whether the original price is available, masked, or unavailable. |
pricing.discount | object | Discount text shown by the public storefront, when exposed. |
pricing.discount.display | string | Discount text shown by the source. |
demandSignals | object | Public rating, review-count, and sold-count signals. |
demandSignals.rating | number or null | Public product rating on the source scale. |
demandSignals.reviewCount | integer or null | Public number of product reviews. |
demandSignals.soldCount | integer or null | Usable numeric sold count, when the source provides one. |
demandSignals.soldCountDisplay | string or null | Sold-count text shown by the source, including rounding or a plus sign. |
demand | object | Directional demand tier based on the public signals in the row. |
demand.tier | string | Directional tier such as high, medium, low, or notEnoughData. It is not an official market rating. |
demand.reasons | array of strings | Observed public signals used for the directional demand tier. |
variants | array of objects | Public product variants and SKU details. The list can be empty. |
variants[].variantId | string or null | Public identifier for a variant, when exposed. |
variants[].sku | string or null | Public stock keeping unit, when exposed. |
variants[].name | string or null | Public name for a variant, when exposed. |
variants[].options | array of objects | Option names and values that define a variant. |
variants[].options[].name | string | Name of a variant option. |
variants[].options[].value | string | Value of a variant option. |
variants[].price | number or null | Numeric price for a variant, when exposed. |
variants[].currency | string or null | Currency code for a variant price, when exposed. |
variants[].stock | integer or null | Available stock for a variant, when exposed. |
variants[].stockAvailability | string | Says whether stock is available, outOfStock, or unavailable. |
shipping | object | Public shipping and fulfillment details for the product. |
shipping.fulfillmentMethod | string | Fulfillment method shown by the source, when exposed. |
shipping.deliveryWindow | string | Delivery time window shown by the source, when exposed. |
shipping.fee | number | Shipping fee shown by the source, when exposed. |
shipping.currency | string | Currency code for the shipping fee, when exposed. |
shipping.freeShipping | boolean | Says whether the source says shipping is free. |
shipping.cashOnDelivery | boolean | Says whether cash on delivery is available according to the source. |
shipping.package | object | Public package measurements and weight, when exposed. |
shipping.package.length | number | Package length in the stated unit. |
shipping.package.width | number | Package width in the stated unit. |
shipping.package.height | number | Package height in the stated unit. |
shipping.package.dimensionUnit | string | Unit used for package length, width, and height. |
shipping.package.weight | number | Package weight in the stated unit. |
shipping.package.weightUnit | string | Unit used for package weight. |
gmvEstimate | object | Directional lifetime sales value estimate from public price and sold-count signals, when both are usable. |
gmvEstimate.amount | number | Estimated lifetime sales value. It is not an official GMV value. |
gmvEstimate.currency | string | Currency code for the estimated lifetime sales value. |
salesVelocity | object | Directional sales and revenue change from repeated public observations. |
salesVelocity.periodStart | string | Start time of the comparison period. |
salesVelocity.periodEnd | string | End time of the comparison period. |
salesVelocity.observationCount | integer | Number of public observations used for the comparison. |
salesVelocity.salesPerDay | number | Directional average change in sold count per day. |
salesVelocity.revenuePerDay | number or null | Directional average sales value change per day when price is usable. |
salesVelocity.currency | string or null | Currency code for revenue per day, when available. |
salesVelocity.momentum | string | Direction of the observed sales change, such as increasing, steady, decreasing, or notEnoughData. |
dropshipEconomics | object | Directional landed-cost, resale, profit, margin, and viability estimates. |
dropshipEconomics.landedCost | number | Estimated landed cost for the product. |
dropshipEconomics.resalePrice | number | Estimated resale price for the product. |
dropshipEconomics.profit | number | Estimated profit per sale. |
dropshipEconomics.marginPercent | number | Estimated profit margin as a percent of resale price. |
dropshipEconomics.currency | string | Currency code for the economics estimates. |
dropshipEconomics.viability | string | Directional 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 🫡
🔗 Related Actors
- Trendyol Scraper: compare public marketplace products, prices, sellers, ratings, reviews, and Q&A.
- Amazon Price Tracker: collect current Amazon product snapshots to compare prices, discounts, ratings, and sellers.
- MercadoLibre Search Scraper: search another marketplace for product cards, prices, sellers, shipping, and rankings.
- TikTok Shop Scraper [NO COOKIES] ✅: use broader TikTok Shop research when you need reviews, creator affiliates, or country and price filters.
- TikTok Shop Scraper | Products, Prices & Best Sellers: compare public product prices with available best-seller rankings.
Made with ❤️ by Maxime Dupré