Scrape TikTok Shop products, reviews, stores, categories, and creator storefronts in Python. Bulk-extract best-sellers, prices, ratings, sales, and verified-buyer reviews from TikTok Shop US.
Working Python project that turns the TikTok Shop Scraper Apify actor into a programmable data feed for product research, dropshipping, affiliate marketing, and competitive intelligence on the fastest-growing live commerce platform in the US. Six scrape modes, JSON output, $2 per 1,000 records.
TikTok Shop's official Partner API is invite-only and gated to authorized retailers, sellers, and creators — not researchers. Most third-party scrapers get blocked within hours because TikTok aggressively fingerprints datacenter IPs. This project uses an Apify actor that runs server-side on residential US proxies, handles TikTok's bot detection, paginates the search / category / store / creator surfaces, fetches reviews via TikTok's internal review API, and returns clean JSON records to your Python script.
- Dropshipping product discovery — pull the top 100 best-selling products in a niche to surface trending items before they saturate.
- Affiliate marketer research — see exactly which products an influencer is currently promoting on their TikTok Shop storefront.
- Brand monitoring — track price changes, sales velocity, and new SKUs from your competitors' TikTok Shops.
- Verified-buyer review mining — scrape only verified-purchase reviews of a product for honest sentiment data, filtered by star rating and media presence.
- Category benchmarking — extract average price, rating distribution, and units-sold leaders for an entire TikTok Shop category.
- Sales velocity tracking — schedule daily snapshots of the same product list and chart
soldCountdeltas over time.
- Python 3.10+
- A free Apify account
- No TikTok Shop seller account or Partner API key required
git clone https://github.com/pro100chok/tiktok-shop-product-scraper-python.git
cd tiktok-shop-product-scraper-python
pip install -r requirements.txt
cp .env.example .env
# paste your APIFY_API_TOKEN
python main.pymain.py pulls the top 50 best-selling skincare products on TikTok Shop US and saves them to output.json + a clean output.csv sorted by sales velocity. Edit KEYWORD to scrape any niche — fitness gear, phone accessories, pet supplies, home decor, whatever your wedge is.
scrapeType switches between these surfaces of TikTok Shop:
scrapeType |
What goes in | What comes out |
|---|---|---|
search |
searchKeywords |
Product listings matching the keyword, with sort + filter. |
product |
productUrls |
Full product details — variants, images, seller, description, embedded reviews. |
reviews |
reviewProductUrls |
One dataset item per review with rating, text, media, verified flag, date. |
category |
categoryUrls |
Products inside a /c/category-slug/ID page. |
store |
storeUrls |
All products in a specific seller's storefront. |
creator |
creatorUsernames |
Products currently promoted on a creator's TikTok Shop affiliate page. |
The actor uses residential US IPs to access TikTok Shop's public-facing pages and JSON endpoints. For each scrapeType, it builds the right request payload, paginates through the result set, parses each record into a flat schema, and pushes it to the run's dataset. Your Python script reads the dataset via the official apify-client SDK.
Each scrape mode produces a different record shape — products have prices/ratings/sold counts, reviews have rating/text/buyer info, creators have a list of promoted products with affiliate metadata. See examples/ for working samples of each mode.
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_API_TOKEN"])
run = client.actor("pro100chok/tiktok-shop-scraper-usage").call(run_input={
"scrapeType": "search",
"searchKeywords": ["smart watch"],
"sortBy": "best_sellers",
"maxItems": 50,
"region": "us",
})
for it in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"${it['price']:>6} {it.get('soldCount', 0):>6,} sold {it['title'][:60]}"){
"title": "Honlink 5X Vitamin C Skincare Set with Hyaluronic Acid & Niacinamide",
"price": 14.99,
"originalPrice": 39.99,
"rating": 4.7,
"reviewCount": 12834,
"soldCount": 84200,
"seller": {
"name": "Honlink Beauty",
"rating": 4.8,
"shopId": "1731753318135730868"
},
"url": "https://www.tiktok.com/shop/pdp/honlink-5x-vitamin-c-skincare-set/1731753318135730868",
"images": ["https://p16-oec-...jpg", "..."],
"variants": [
{ "name": "Set of 5", "price": 14.99, "stock": 1240 }
]
}| Parameter | Type | Used by | Description |
|---|---|---|---|
scrapeType |
string | all | One of search, product, reviews, category, store, creator. |
searchKeywords |
string[] | search |
One keyword per line (e.g. wireless earbuds). |
sortBy |
string | search |
relevance, best_sellers, price_asc, price_desc. |
productUrls |
string[] | product |
TikTok Shop product URLs. |
reviewProductUrls |
string[] | reviews |
Product URLs to fetch reviews for. |
maxReviews |
integer | reviews / product (if includeReviews) |
Cap on reviews per product. |
reviewsSortBy |
string | reviews |
recommended or recent. |
reviewsFilterType |
string | reviews |
all, verified, or with_media. |
reviewsStarRating |
integer | reviews |
0 for all, or 1–5 to filter by exact rating. |
categoryUrls |
string[] | category |
TikTok Shop category URLs. |
storeUrls |
string[] | store |
Specific seller storefront URLs. |
creatorUsernames |
string[] | creator |
TikTok usernames (without @) for affiliate storefronts. |
maxItems |
integer | most modes | Cap on products per query (0 = unlimited). |
region |
string | all | TikTok Shop region. Currently us. |
proxyConfiguration |
object | all | Residential US proxy required — TikTok blocks datacenter IPs. |
| File | Demonstrates |
|---|---|
examples/01_basic_usage.py |
Minimal search in 12 lines. |
examples/02_product_reviews.py |
Sentiment summary from 100 verified-buyer reviews. |
examples/03_creator_storefront.py |
Enumerate an influencer's promoted products. |
examples/04_export_to_csv.py |
Category scrape with price-tier bucketing. |
examples/05_export_to_google_sheets.py |
Daily best-seller snapshot to a shared Sheet. |
How much does this cost? The actor is charged per dataset item — products and reviews each count as one item. Apify's free $5/month covers a few thousand products / reviews per month.
Is the data the same as what I'd see on the TikTok Shop website? Yes. The actor uses the same public endpoints that power tiktok.com/shop — prices, ratings, sold counts, reviews match the live UI.
Why not the official TikTok Shop Partner API? That API is invite-only and limited to authorized sellers / creators / agencies. Independent researchers, dropshippers, and affiliate marketers can't use it. This scraper is the practical alternative.
Do you have a flat-rate monthly plan? Yes — the TikTok Shop Scraper rental plan at $20/month gives unlimited usage with the same code. If you only need a few thousand records per month, the pay-per-event variant linked at the top of this README is cheaper.
Can I scrape reviews from a specific star rating only?
Yes. Set reviewsStarRating: 1 (or 2/3/4/5) to filter to a single rating. Useful for mining negative reviews to find unmet customer needs.
Does it work outside the US? Currently TikTok Shop US is the most reliable region — TikTok rolled out the US storefront broadly in 2025 and most product/review surfaces are stable. UK and SEA regions are partially supported; check the actor's notes.
How often does TikTok Shop block scrapers? Frequently — that's why residential US proxies are required by default. The Apify-hosted residential pool rotates IPs per request, which keeps the block rate well under 1% in practice.
Can I include reviews inline with each product?
Yes. Use scrapeType: "product" and set includeReviews: true + maxReviews: N — each product record will have an embedded reviews array.
- TikTok Profile Scraper + Analytics & Contacts — for the influencer side: profile analytics + bio contacts.
- Amazon Scraper API — Products, Reviews, Sellers — cross-reference TikTok Shop bestsellers with Amazon prices.
- Website Contact Scraper — pull emails / phones / socials for the sellers behind TikTok Shop products.
See all my actors at apify.com/pro100chok.
MIT — see LICENSE.
Built on top of the TikTok Shop Scraper Apify actor.