TikTok Shop Seller Scraper
Pricing
from $4.50 / 1,000 seller results
TikTok Shop Seller Scraper
Scrape TikTok Shop sellers from store URLs, product URLs, or keyword searches. Get seller names, IDs, store links, ratings, followers, product counts, sample products, price ranges, and a transparent benchmark score. Clean CSV/JSON for ecommerce competitor research.
Pricing
from $4.50 / 1,000 seller results
Rating
0.0
(0)
Developer
Delowar Munna
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Features
Share

Scrape TikTok Shop sellers from keyword searches, store URLs, or product URLs. Each seller becomes one clean, flat, deduplicated, CSV-ready row with a transparent, non-AI benchmark score. You don't need a TikTok login, cookies, or a proxy.
Most TikTok Shop actors are product-first. This one is seller-first: it groups products under the stores that sell them, merges duplicates, and adds a benchmark score. It's built for competitor mapping and seller discovery rather than raw product dumps.
⚡ Need a real-time API?
This Actor also powers the TikTok Shop API on RapidAPI. GET /seller returns a TikTok Shop seller's profile and stats as JSON in a single HTTP request, with a free Basic plan and no Apify account needed.
Use the API for on-demand lookups inside your app. Use this Actor for bulk runs, schedules, datasets and integrations.
✨ What it does
- Three input modes, combinable in one run:
- Keywords: searches TikTok Shop products and collects the sellers behind them. Several products from one seller become one seller row.
- Seller / store URLs or IDs: looks up a specific store and samples its catalogue.
- Product URLs or IDs: returns the seller behind each product.
- Seller profile (on by default): the store's rating, review count, total sold, follower count, listed-product count, logo, official store link and category.
- Deduplicates sellers across all three modes (by seller ID, then URL, then name).
- Benchmark score (0–100) from the metrics TikTok shows: rating, sold count, reviews, product count, verification, sample products and price range.
- Sample products: up to 5 product names and URLs, plus a sample price range, per seller. These come from products already fetched, so they cost no extra lookups.
- Filters: minimum rating, sold count and product count. Filtered sellers aren't saved and aren't charged.
- Flat, stable CSV/JSON output. If some lookups are refused, the actor still returns the sellers it found.
Run it with the defaults
Click Start without changing anything and the actor searches portable blender in the US marketplace. It returns up to 10 sellers with their profiles and sample products. Leaving every input empty runs that same sample search.
📥 Input
| Field | Type | Default | Description |
|---|---|---|---|
keywords | array | [] | Product search keywords used to discover sellers (max 50). The form is prefilled with portable blender. |
sellerUrls | array | [] | Store URLs (https://shop.tiktok.com/us/store/<name>/<seller-id>) or bare numeric seller IDs. |
productUrls | array | [] | Product URLs (/view/product/<id> or /<region>/pdp/<slug>/<id>) or bare numeric product IDs. |
region | string | "US" | Marketplace: US, MY, TH, VN, PH, SG. |
maxResults | integer | 10 | Cap on saved unique seller rows across the whole run (1–5000). |
maxProductsPerKeyword | integer | 30 | Search results scanned per keyword (1–500). One search page is about 30 products. |
includeSellerProfile | boolean | true | Add rating, followers, product count, official store link and category (one lookup per seller). |
includeSampleProducts | boolean | true | Add up to 5 sample products and a sample price range per seller. |
minSellerRating | number | 0 | Drop sellers rated below this (0–5). |
minSellerSoldCount | integer | 0 | Drop sellers with a total sold count below this. |
minProductCount | integer | 0 | Drop sellers with fewer listed products than this. |
strictFilters | boolean | false | If on, a seller missing a filtered field fails that filter. |
deduplicate | boolean | true | Merge the same seller found by different inputs into one row. |
Seller URLs must contain the numeric seller ID. Handle-only links such as shop.tiktok.com/@store-name don't include one, so the actor skips them and logs why. You can paste the seller_id from any output row back in as an input.
Example: map the sellers behind two product searches
This is the input behind the sample output and screenshot below. It returned 20 unique sellers: 14 for portable blender and 6 for wireless earbuds.
{"keywords": ["portable blender", "wireless earbuds"],"region": "US","maxResults": 20,"maxProductsPerKeyword": 15,"includeSellerProfile": true,"includeSampleProducts": true}
Example: top-rated sellers only
{"keywords": ["portable blender", "wireless earbuds"],"region": "US","maxResults": 50,"maxProductsPerKeyword": 90,"minSellerRating": 4.5}
Example: benchmark specific stores and the sellers of specific products
{"sellerUrls": ["https://shop.tiktok.com/us/store/jbl/7494161853719414088"],"productUrls": ["https://shop.tiktok.com/us/pdp/ultimate-portable-juicer-blender-usb-rechargeable-smart-display-leak-proof-design-compact-500ml-size/1732167577605869836"],"region": "US"}
Example: fastest seller list without profiles
{"keywords": ["led strip lights"],"region": "MY","maxResults": 100,"maxProductsPerKeyword": 300,"includeSellerProfile": false}
📤 Output
One flat row per unique seller (26 fields):
| Field | Type | Description |
|---|---|---|
seller_id | string | TikTok Shop seller/store ID. |
seller_name | string | Store display name. |
seller_url | string | Store URL (TikTok's own link when the profile is fetched; tracking removed). |
seller_region | string | Marketplace region. |
seller_logo_url | string | Store logo URL (not downloaded). |
seller_rating | number | Store rating (profile). |
seller_review_count | integer | Store review count (profile). |
seller_sold_count | integer | Store-level total sold (profile). |
seller_product_count | integer | Number of listed products (profile). |
seller_follower_count | integer | Store follower count (profile; null for stores that don't show it). |
seller_badges | string | Store badges, comma-separated. Currently always empty (see Limitations). |
seller_verified | boolean | An official/verified flag or badge was found. Currently always false. |
top_category | string | Most common category across the seller's sampled products. |
sample_product_names | string | Up to 5 product names joined with |. |
sample_product_urls | string | Up to 5 product URLs joined with |. |
sample_product_count | integer | Number of sampled products. |
lowest_sample_price | number | Lowest sample price. |
highest_sample_price | number | Highest sample price. |
currency | string | Currency of the sample prices. |
benchmark_score | integer | 0–100 transparent score. |
benchmark_label | string | Score label (see below). |
reason_tags | string | Comma-separated score reasons. |
source_input_type | string | seller_url, product_url, or keyword. |
source_input_value | string | The input that found the seller. |
source_product_url | string | The product that exposed the seller (product and keyword modes). |
scraped_at | string | ISO UTC timestamp. |
Metrics TikTok doesn't expose for a store come back as null, never as an invented 0. Joined list fields come back as "". The profile fields (rating, reviews, sold count, product count, followers, logo, category) need Include seller profile.
Overview

Example output
A real row from the example run above (logo URL shortened):
{"seller_id": "7494161853719414088","seller_name": "JBL","seller_url": "https://shop.tiktok.com/us/store/jbl/7494161853719414088","seller_region": "US","seller_logo_url": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/2eae32bc80744404a8809b3fdc7e5a50~tplv-fhlh96nyum-resize-webp:300:300.webp?…","seller_rating": 4.7,"seller_review_count": 31953,"seller_sold_count": 245162,"seller_product_count": 78,"seller_follower_count": 493349,"seller_badges": "","seller_verified": false,"top_category": "Headphones, Earphones & Accessories","sample_product_names": "JBL Vibe Buds 2, True Wireless Noise Cancelling Earbuds","sample_product_urls": "https://shop.tiktok.com/us/pdp/jbl-vibe-buds-2-true-wireless-noise-cancelling-earbuds-8mm-driver/1732027908924150088","sample_product_count": 1,"lowest_sample_price": 77.94,"highest_sample_price": 77.94,"currency": "USD","benchmark_score": 75,"benchmark_label": "established_seller","reason_tags": "high_rating, high_sales, many_reviews, price_range_available","source_input_type": "keyword","source_input_value": "wireless earbuds","source_product_url": "https://shop.tiktok.com/us/pdp/jbl-vibe-buds-2-true-wireless-noise-cancelling-earbuds-8mm-driver/1732027908924150088","scraped_at": "2026-11-02T11:58:16.865Z"}
Keyword searches usually surface one or two products per seller, so sample_product_count is often 1 in keyword mode. Store URLs sample up to 5 products from the store's catalogue.
🏅 Benchmark score
Transparent and rule-based (no AI), scored 0–100:
- Rating up to 25 · Sold count up to 25 · Reviews up to 15 · Product count up to 15
- Verified +10 · 3 or more sample products +5 · sample price range +5
Labels: strong_seller (80–100) · established_seller (60–79) · emerging_seller (40–59) · small_or_limited_signal (1–39) · unknown (0).
reason_tags explains each score, e.g. high_rating, high_sales, many_reviews, large_catalog, verified_seller, price_range_available, limited_visible_data. A metric TikTok doesn't show adds no points; it is never guessed.
🔍 Filtering & deduplication
- Filters run after the profile lookup. Filtered sellers are not saved and not charged.
- Missing values pass filters by default, so sellers aren't lost when TikTok hides a metric. Set
strictFilters: trueto make missing values fail. - Dedup priority:
seller_id, then normalizedseller_url, thenseller_name+ region, thenseller_name+ input. Duplicates are merged: non-null values win, store-URL data is preferred, and samples are combined up to 5. - The run stops looking up and saving sellers as soon as
maxResultsis reached. - Lookup limit with filters: each run looks up at most 2 ×
maxResults+ 20 seller profiles. With strict filters most sellers fail, and once that limit is reached the actor stops, so it can return fewer thanmaxResultssellers. The log says so, andRUN_SUMMARY.skipped_by_lookup_capcounts the sellers left unchecked. To get more matches, raisemaxResultsor loosen the filters. Without filters the limit never applies.
💰 Pricing
Pay-per-event, one event, seller-result: charged once per valid, unique seller row saved to the dataset. Duplicates, filtered-out sellers, invalid rows, refused lookups, sellers skipped by the lookup limit and failed inputs are never charged. A run that finds nothing costs nothing in events. See the Pricing tab for the live rate (this README deliberately doesn't quote figures). Your per-run spending limit is respected: the actor stops saving sellers before it would exceed it.
📊 Run summary
A RUN_SUMMARY record is written to the default key-value store with: inputs_total, seller_urls_total, product_urls_total, keywords_total, successful_inputs, failed_inputs, raw_results_found, seller_candidates_found, results_saved, duplicates_removed, filtered_out, charged_events, charge_failures, blocked_requests, retry_count, profile_lookups, skipped_by_lookup_cap, runtime_seconds, region, scraped_at.
⚠️ Limitations
- Markets: US, MY, TH, VN, PH, SG. Other TikTok Shop markets (UK, ID and others) currently return no data from the source.
- V1 doesn't crawl full seller catalogues, product reviews or media.
- TikTok Shop's store data currently carries no badges and no official/verified flag, so
seller_badgesis empty andseller_verifiedisfalseeven for brand stores. The benchmark's verified bonus therefore doesn't apply at the moment. - A few stores don't show a follower count, so
seller_follower_countisnullfor them. With Include seller profile off, all profile fields arenulland the rating, sold-count and product-count filters only drop sellers whenstrictFiltersis on. - Keyword search returns the products TikTok ranks for that term, and that set varies between runs. A narrow keyword can surface fewer sellers than
maxResults. - TikTok occasionally refuses individual lookups. The actor retries, then saves the seller with the data it already has (identity and sample products) and records the refusal in
blocked_requests.
❓ FAQ
Do I need a TikTok login or a proxy? No. There are no cookies, sessions or proxy settings.
Can I combine keywords, store URLs and product URLs? Yes, in a single run. Store URLs are processed first (cleanest data), then product URLs, then keywords.
Why is a seller missing some metrics? TikTok Shop doesn't publish every store metric. Missing numbers are stored as null. Turn on Include seller profile to get rating, reviews, sold count, followers and product count.
Why was my store URL skipped? It had no numeric seller ID (for example a /@handle link). Open the store on TikTok Shop and copy a URL containing /store/<name>/<id>, or paste the seller ID itself.