TikTok Shop Search Scraper | Products, Sales & Sellers
Pricing
from $1.22 / 1,000 product results
TikTok Shop Search Scraper | Products, Sales & Sellers
Scrape TikTok Shop search results by keyword β no browser needed. Get product titles, prices, sellers, ratings, sold counts, images and URLs. Bulk keywords, real pagination past page 1, filters, sorting, dedupe, retries and proxy support.
Pricing
from $1.22 / 1,000 product results
Rating
0.0
(0)
Developer
Blynx
Maintained by CommunityActor stats
0
Bookmarked
70
Total users
46
Monthly active users
6 days ago
Last modified
Categories
Share
ποΈ TikTok Shop Search Scraper
Turn any TikTok Shop keyword into a clean, spreadsheet-ready table of products β price, seller, rating, sold count, images, freeβshipping signals and direct links. No browser, no login, just fast HTTP.
π’ HTTP-only β‘ Β· π Multi-keyword Β· π Real pagination Β· π 15 regions Β· π§Ύ Flat CSV/Excel output
β¨ Why this scraper
Most "search" scrapers stop at the first page β about 30 products β because TikTok Shop's HTML only ships the first batch. This actor talks to TikTok's own loadβmore API to keep pulling page after page, so maxPages and maxItems actually mean something.
| π’ Firstβpageβonly scrapers | π This actor | |
|---|---|---|
| Products per keyword | ~30 (hard cap) | Hundreds (real pagination) |
| Sold count / rating | Often blank | β Parsed |
| Freeβshipping flag | Rarely detected | β From TikTok labels |
| Output shape | Nested JSON blobs | β Flat rows for CSV/Sheets |
| Browser needed | Often | β Never (pure HTTP) |
π₯ What it does
- π Search one keyword or many in a single run
- π Paginate for real β walks TikTok's loadβmore feed, not just page 1
- π Pick a region β US, GB, ES, MX, DE, FR, JP and more
- π§Ύ Extract clean product cards β title, ID, URL, image, seller, price, sold count, rating, reviews, badges
- π Sort locally by relevance, best sellers, price or rating
- ποΈ Filter by price, rating, sold count and free shipping
- π§Ή Deduplicate globally so the same product never floods your dataset
- π§ͺ Log issues separately β failed pages go to an Errors dataset, never billed as products
πΊοΈ How it works
ββββββββββββββ βββββββββββββββββββββββ βββββββββββββββββββββββββ keyword β βββΆ β Page 1 (SSR HTML) β βββΆ β Parse product cards ββ + region β β ~30 products β β price Β· rating Β· βββββββββββββββ ββββββββββββ¬βββββββββββ β seller Β· shipping ββ ββββββββββββ¬ββββββββββββhas_more? β load_more_params ββΌ βΌβββββββββββββββββββββββ ββββββββββββββββββββ load-more API β βloopβΆ β filter Β· sort ββ next 30 products β β dedupe Β· save ββββββββββββββββββββββββ βββββββββββββββββββ(same session, no signing)
- Fetch page 1 via serverβside HTML with a Chromeβlike TLS fingerprint.
- Follow
load_more_paramsinto TikTok'sproduct_listAPI inside the same session β page after page β untilmaxPagesormaxItemsis reached. - Shape β filter β sort β dedupe β save each product as a flat row.
π Quick start
The actor accepts the simple competitorβstyle input:
{"country_code": "US","keyword": "water bottle","maxItems": 50,"maxPages": 3}
β¦and a richer productβresearch workflow:
{"country_code": "US","keywords": ["neck fan", "phone case", "makeup organizer"],"maxItems": 100,"maxPages": 5,"sortBy": "best_sellers","dedupe": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
π‘ Pro tip: run broad keywords first (
water bottle,phone case,hair dryer brush), sort bybest_sellers, then reβrun the winners with price/rating filters.
π Supported regions
US Β· VN Β· TH Β· PH Β· MY Β· ID Β· GB Β· SG Β· ES Β· MX Β· DE Β· IT Β· FR Β· BR Β· JP
For best results, match the proxy country to
country_code.
π₯ Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
keywords | array | ["water bottle"] | One or many search keywords. |
keyword | string | β | Single keyword (simpleβinput compatibility). Merged with keywords. |
country_code | enum | US | TikTok Shop region. |
maxItems | int | 10 | Max products per keyword. 0 = no perβkeyword cap. |
maxPages | int | 1 | Max search pages to walk per keyword. Raise this to go past ~30 products. |
sortBy | enum | relevance | relevance, best_sellers, price_asc, price_desc, rating_desc. |
minPrice / maxPrice | number | β | Filter on normalized currentPrice. |
minRating | number | 0 | Keep products at or above this rating. |
minSoldCount | int | 0 | Keep products at or above this sold count. |
freeShippingOnly | bool | false | Keep only products TikTok tags with free shipping. |
dedupe | bool | true | Drop duplicate products across keywords and pages. |
compactOutput | bool | true | Remove empty values while keeping stable columns. |
includeRawProduct | bool | false | Attach the original TikTok card as rawProductJson (debugging). |
maxConcurrency | int | 1 | Keywords processed in parallel. |
requestDelayMs | int | 0 | Optional pause between pages of one keyword. |
requestTimeoutSec | int | 20 | HTTP request timeout. |
maxRetries | int | 2 | Retries on 429/5xx, captcha and parse failures. |
maxProxyRetries | int | 2 | Dedicated retry budget for proxy/transport errors. |
proxyConfiguration | object | Residential US | Apify proxy settings. Residential strongly recommended. |
π€ Output
Every product is a flat row with type: "product_card" and status: "ok":
{"type": "product_card","status": "ok","countryCode": "US","query": "water bottle","page": 1,"searchRank": 1,"sortedRank": 1,"productId": "1731726912824578262","title": "HydroPal 32oz Motivational Sports Water Bottle","productUrl": "https://shop.tiktok.com/us/pdp/hydropal-32oz-water-bottle/1731726912824578262","currentPrice": 8.99,"originalPrice": 19.98,"currency": "USD","currencySymbol": "$","soldCount": 1397,"soldText": "1.4K sold","rating": 4.7,"reviewCount": 224,"sellerId": "7494113938193482966","sellerName": "HydroPal","sellerUrl": "https://www.tiktok.com/shop/s/7494113938193482966?region=US","imageUrl": "https://p16-oec-general-useast5.ttcdn-us.com/...webp","tags": "Free shipping","freeShipping": true,"scrapedAt": "2026-07-11T10:36:31Z"}
π§Ύ Field guide
| Column | Meaning |
|---|---|
productId Β· title Β· productUrl | Product identity and direct link |
currentPrice Β· originalPrice Β· currency | Normalized pricing |
soldCount Β· soldText | Units sold (number + human label) |
rating Β· reviewCount | Star rating and review volume |
sellerId Β· sellerName Β· sellerUrl | Seller identity and storefront |
imageUrl Β· imageUrls | Primary image + full list |
tags Β· freeShipping | TikTok badges and shipping signal |
searchRank Β· sortedRank | Position in TikTok's feed vs. after your sort |
π Readyβmade table views
The main dataset ships three table views in the Output tab:
- ποΈ Products β identity, image, rating, seller, direct URL
- π΅ Prices & sales β current/original price, sold count, rating, reviews, shipping
- πͺ Sellers β seller identity and the products returned for each seller
Two more outputs live outside the main dataset:
- π§ͺ Errors β a separate dataset of warning/error rows (never billed as products)
- π Run summary β a
run_summaryrecord in the keyβvalue storeOUTPUT(input scope, saved count, issues, runtime)
π§ͺ Example recipes
π Find bestβselling product ideas
{"country_code": "US","keywords": ["makeup organizer", "hair dryer brush", "press on nails"],"maxItems": 100,"maxPages": 5,"sortBy": "best_sellers"}
π― Filter by price and rating
{"country_code": "US","keyword": "portable blender","minPrice": 10,"maxPrice": 50,"minRating": 4.5,"maxItems": 100,"maxPages": 5}
π Compare regions
{"country_code": "GB","keywords": ["neck fan", "mini printer"],"maxItems": 100,"maxPages": 5,"sortBy": "rating_desc"}
π‘οΈ Reliability notes
- π§ HTTPβonly. No headless browser β fast and cheap.
- π Use a residential proxy. TikTok Shop can return empty data or a Security Check on datacenter traffic. Match the proxy country to
country_code. - π’ Start small, then scale. Begin with
maxConcurrency: 1and a few pages; increase once results look stable. - π Raw output is for debugging only.
includeRawProduct: truemakes rows much larger. - π§Ύ Flat output is intentional. It keeps Apify "All fields", CSV and Google Sheets exports predictable.
πΌ Use cases
π¬ Product research Β· π Trend discovery Β· π΅οΈ Competitor monitoring Β· π² Price & rating checks Β· π₯ Highβvolume bestβsellers Β· π Dashboard feeds Β· π Marketplace analysis by country Β· π Dropshipping & brand scouting
β FAQ
Does it use a browser? No. HTTP requests only.
How do I get more than ~30 products?
Raise maxPages (and maxItems). The actor follows TikTok's real loadβmore feed, so more pages = more unique products.
Why did I get warning rows? TikTok returned an empty or limited public response for that keyword/page. Try a residential proxy, lower concurrency, or reβrun the keyword.
Why are some rating or seller fields empty? TikTok doesn't expose every value for every card. Empty fields are normal for some products and regions.
Can I scrape multiple keywords?
Yes β use keywords. If keyword is also set, both are merged and deduplicated.
How do I keep exports clean?
Leave compactOutput: true and includeRawProduct: false unless debugging.
π Feature requests & issues
Need a new field, a different format, or a workflow this actor doesn't cover yet? Found a TikTok Shop response that doesn't parse? Open an issue on the actor page and include the run ID, your input, what you expected, and a short example of the data you need. Clear reports get fixed faster.
π·οΈ Tags: tiktok shop scraper Β· tiktok shop search Β· product research Β· marketplace scraper Β· dropshipping research Β· best sellers Β· price monitoring
π Built for Apify Β· HTTPβonly Β· Multiβkeyword Β· Real pagination Β· Flat productβcard output