TikTok Shop Scraper - Products, Prices, Sales & Reviews
Pricing
from $2.30 / 1,000 listing results
TikTok Shop Scraper - Products, Prices, Sales & Reviews
Scrape TikTok Shop listings by keyword search, category, or direct product links. Returns title, price, discount, sold count, rating, review count, images, shop name and variations, plus with details enabled: description, rating breakdown and item-level reviews. Supports incremental monitoring.
Pricing
from $2.30 / 1,000 listing results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
TikTok Shop Scraper: Products, Prices, Sales & Reviews
TikTok Shop Scraper turns the TikTok Shop US storefront into structured product data. Scrape a category with all its subcategories, walk the whole store, search by keyword, or paste product links. Every product comes back as one flat record with price, original price and discount, sold count, rating and review count, images, shop and category, plus, with details on, the full description, variations, rating breakdown, seller stats and recent reviews. Export to JSON, CSV or Excel, or read the results through the API.
Why This Scraper?
- Whole categories, not a first page. Point it at any category and it walks every subcategory to its end, or pick the whole-store mode to cover every category.
- Four ways in. Category with subcategories, whole store, keyword search, or pasted product links.
- Full product detail on request. Description, variations, rating breakdown, seller rating and followers, and recent reviews with photos.
- Category path on every record. Each product carries the category trail it was found under.
- Incremental monitoring built in. Schedule it and get only new and changed products, unchanged ones are not billed.
- Streams as it goes. Results are saved category by category, so a long run keeps everything it collected.
Use Cases
- Ecommerce analysts: track prices, discounts and sold counts across TikTok Shop categories on a schedule.
- Sellers and brands: monitor competitor catalogs, ratings and review volume in your niche.
- Market researchers: map a whole category tree or the full store with structured, comparable records.
- Deal and arbitrage teams: watch categories for new discounted products.
- Product sourcing teams: find fast sellers by sold count and rating before they trend elsewhere.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
productId | "1730000000000000001" |
title | "Example Phone Stand, Adjustable" |
url | "https://shop.tiktok.com/us/pdp/example-phone-stand/1730000000000000001" |
price | 13.99 |
currency | "USD" |
originalPrice | 19.99 (when discounted) |
discountPercent | 30 (when discounted) |
soldCount | 3500 |
rating | 4.6 (empty when the product has no ratings yet) |
reviewCount | 1208 |
images | ["https://.../image.webp"] |
shopName | "Example Store" |
shopId | "7490000000000000001" |
brand | "ExampleBrand" (when listed) |
categoryPath | ["Phones & Electronics", "Mobile Phone Accessories", "Phone Holders & Mounts"] |
resultSource | "search" or "recommended" (search mode) |
description | full product description text (with details) |
variations | [{"name": "Color", "options": ["Black", "White"]}] (with details) |
ratingHistogram | {"5": 412, "4": 88, "3": 20, "2": 6, "1": 9} (with details) |
sellerRating | 4.7 (with details) |
sellerProductCount | 120 (with details) |
sellerFollowers | 15400 (with details) |
reviews | recent reviews: rating, date, text, photos, verified purchase (with details) |
searchMode | "browse", "search" or "product" |
scrapedAt | "2026-10-02T04:30:00Z" |
When Incremental mode is on, records also carry changeType, changedFields, firstSeenAt and lastSeenAt.
How to Use
- Pick a mode:
category(a category and all its subcategories, the default),all(every category in the store),search(keywords) orproduct(pasted product links). - Fill in Category links, Search keywords or Product links for that mode. Whole-store mode needs no input.
- Set Max listings and turn Fetch product details on or off.
- Click Start, then download the dataset as JSON, CSV or Excel.
Scrape a category with all its subcategories:
{"mode": "category","categoryUrls": ["https://shop.tiktok.com/us/c/mobile-phone-accessories/909064"],"maxItems": 500}
Walk the whole store:
{"mode": "all","maxItems": 5000,"fetchDetails": false}
Search by keyword:
{"mode": "search","queries": ["phone case", "magsafe case", "iphone 17 case"],"maxItems": 75}
Paste product links:
{"mode": "product","productUrls": ["https://shop.tiktok.com/us/pdp/cosrx/1731369897578565803"]}
Run it from your code
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("abotapi/tiktok-shop-scraper").call(run_input={"mode": "category","categoryUrls": ["https://shop.tiktok.com/us/c/cases-screen-protectors-stickers/601925"],"maxItems": 20,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('abotapi/tiktok-shop-scraper').call({mode: 'category',categoryUrls: ['https://shop.tiktok.com/us/c/cases-screen-protectors-stickers/601925'],maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Which mode returns how much
| Mode | Best for | How many products |
|---|---|---|
category | Everything in a niche | Every subcategory is walked to its end; one subcategory typically holds about 100 products |
all | Store-wide catalog, trend research | Every category in the store; set Max listings to bound the run |
search | Quick lookups by keyword | 25-40 per keyword, TikTok Shop's own limit for visitors: the keyword's own results first, then its recommendations, marked by resultSource |
product | Known products | Exactly the links you paste |
Max listings is the run's cap across all categories, keywords and links (0 = unlimited; in whole-store mode that walks the entire store and can take many hours). Max pages is an optional extra limit on how many result pages are loaded per category (about 10-20 products each); on its own it does not cap results.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one specific interrupted run: paste its run or dataset id and this run skips every product already in that dataset, so it returns only the remaining products and you don't pay twice. - Incremental mode (
incrementalMode) is for a schedule against the same category, store walk or search. The first run returns everything asNEW; later runs return onlyNEW,UPDATED(withchangedFields) andREAPPEAREDproducts, while unchanged ones are suppressed and not billed unlessemitUnchangedis on.EXPIREDproducts (no longer found) are only produced once a run has walked every tracked category to its end, never after a cap or Resume cut it short or after a keyword search (a ranked top slice is not a full scan), and only withemitExpiredon.stateKeynames or shares the stored state; leave it empty and the actor derives one from your setup.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | category | category for a category and its subcategories, all for every category in the store, search for keywords, product for direct product links. |
categoryUrls | array | prefill one example | Category pages to scrape (category mode). Links end in a number. |
includeSubcategories | boolean | true | Category mode: walk every subcategory under a parent category. Off = only the linked page (about 80 products for a parent). |
queries | array | prefill ["phone case"] | Keywords to search (search mode). |
productUrls | array | no default | Product links to scrape (product mode). |
maxItems | integer | 20 | Maximum products returned across the run. 0 = unlimited. |
maxPages | integer | 0 | Optional page limit per category; does not cap on its own. |
fetchDetails | boolean | true | Read each product's page for description, variations, rating breakdown, seller stats and reviews. |
includeReviews | boolean | true | Nest recent reviews under each product. Requires fetchDetails. |
resumeFromRunId | string | no default | Continue one specific previous run, skipping products it already collected. |
incrementalMode | boolean | false | Scheduled monitoring: return only new and changed products. |
stateKey | string | no default | Name or share a monitoring campaign's saved state. |
emitUnchanged | boolean | false | Incremental mode only: also return, and bill, unchanged products. |
emitExpired | boolean | false | Incremental mode only: also return products no longer found after a complete scan. |
ignoreFieldsForChanges | array | no default | Incremental mode only: output fields that should not mark a product as UPDATED. images is always ignored. |
proxy | object | residential, US | Connection settings. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"productId": "1730000000000000001","title": "Example Phone Stand, Adjustable","url": "https://shop.tiktok.com/us/pdp/example-phone-stand/1730000000000000001","price": 13.99,"currency": "USD","originalPrice": 19.99,"discountPercent": 30,"soldCount": 3500,"rating": 4.6,"reviewCount": 1208,"ratingHistogram": {"5": 412, "4": 88, "3": 20, "2": 6, "1": 9},"images": ["https://example.com/image-1.webp"],"shopName": "Example Store","shopId": "7490000000000000001","categoryPath": ["Phones & Electronics", "Mobile Phone Accessories", "Phone Holders & Mounts"],"description": "Adjustable aluminium stand for phones and small tablets.","variations": [{"name": "Color", "options": ["Black", "Silver"]}],"sellerRating": 4.7,"sellerProductCount": 120,"sellerFollowers": 15400,"reviews": [{"reviewId": "7600000000000000001","reviewAuthor": "A**e","reviewRating": 5,"reviewDate": "2026-09-20","reviewBody": "Sturdy and easy to adjust.","reviewPhotos": [],"verifiedPurchase": true}],"searchMode": "browse","scrapedAt": "2026-10-02T04:30:00Z"}
Plan Requirement
TikTok Shop serves its US storefront to US visitors. The default connection setting is already configured for that, so the actor works out of the box; keep it unless you have a reason to change it.
FAQ
How much does it cost?
You pay per product returned, plus a detail charge per product when product details are on, plus a small per-run start fee. The Pricing tab shows the current rates. Use Max listings to cap the cost of any run, and turn off Fetch product details for the lightest runs.
Is it legal to scrape TikTok Shop?
This actor collects only publicly available marketplace data. You are responsible for how you use it: follow TikTok's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Reviewer names arrive masked by TikTok Shop itself.
Why did keyword search return fewer products than I asked for?
TikTok Shop shows visitors only its top 25-40 results per keyword, so that is the most any keyword can return. For more, add more specific keywords, or use category mode, which walks every subcategory to its end, or all mode for the whole store. The run log says so when a search ends early for this reason.
How many reviews do I get per product?
TikTok Shop product pages show their most recent reviews, typically the latest few rather than the full history, and that is what the actor returns under reviews, together with the aggregate rating, review count and rating breakdown. The dataset's Reviews view unwinds them to one row per review.
What is the difference between Resume and Incremental mode?
Resume continues one interrupted run from its run or dataset id and skips what it already collected. Incremental mode remembers products across scheduled runs by itself and returns only new and changed ones each time.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared products, and unchanged ones are not billed unless you turn that on too.
Why did my run fail instead of returning an empty dataset?
A run is marked failed only when TikTok Shop could not be loaded at all on any connection, when the Resume id you supplied is not a readable run or dataset from your account, or when a required input for the chosen mode is empty. Run it again shortly in the first case. A run that loads fine but finds nothing for your input completes normally with an empty dataset and a status message explaining why.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration, the Apify API or an MCP client that can run Apify actors.
๐ Want more TikTok data?
Pair this actor with these related scrapers from the same team:
| ๐งฉ TikTok Comments Scraper Scrape comments from TikTok videos using one or more video URLs or IDs. Extract comment... | ๐ฑ Tiktok Live Recorder Record TikTok live streams to MP4 with full metadata, all stream quality URLs, and... |
| ๐ฑ TikTok Profile, Hashtag, Search, Video & Trending Scraper Scrape TikTok without login. Extract profiles, bios, follower stats and videos; search by... | ๐ 24S Scraper Scrape 24S luxury fashion by category, filters, or URL. Extract brand, name, price... |
| ๐ท๏ธ 2dehands & 2ememain Scrape classifieds from 2dehands.be and 2ememain.be by keyword, filters, or URLs. Returns... | ๐ A101 Turkey Scraper Scrape A101.com.tr products across A101 Ekstra and A101 Kapฤฑda. Extract 80+ fields... |
๐ Browse all abotapi scrapers
๐ฌ Support & custom scrapers
- ๐ Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- ๐ ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- โญ Enjoying it? A quick review on the actor page helps other users find it.