TikTok Shop Scraper - Products, Prices, Sales & Reviews avatar

TikTok Shop Scraper - Products, Prices, Sales & Reviews

Pricing

from $2.30 / 1,000 listing results

Go to Apify Store
TikTok Shop Scraper - Products, Prices, Sales & Reviews

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

Abot API

Maintained by Community

Actor 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.

FieldExample
productId"1730000000000000001"
title"Example Phone Stand, Adjustable"
url"https://shop.tiktok.com/us/pdp/example-phone-stand/1730000000000000001"
price13.99
currency"USD"
originalPrice19.99 (when discounted)
discountPercent30 (when discounted)
soldCount3500
rating4.6 (empty when the product has no ratings yet)
reviewCount1208
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)
descriptionfull 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)
sellerRating4.7 (with details)
sellerProductCount120 (with details)
sellerFollowers15400 (with details)
reviewsrecent 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

  1. Pick a mode: category (a category and all its subcategories, the default), all (every category in the store), search (keywords) or product (pasted product links).
  2. Fill in Category links, Search keywords or Product links for that mode. Whole-store mode needs no input.
  3. Set Max listings and turn Fetch product details on or off.
  4. 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 ApifyClient
client = 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

ModeBest forHow many products
categoryEverything in a nicheEvery subcategory is walked to its end; one subcategory typically holds about 100 products
allStore-wide catalog, trend researchEvery category in the store; set Max listings to bound the run
searchQuick lookups by keyword25-40 per keyword, TikTok Shop's own limit for visitors: the keyword's own results first, then its recommendations, marked by resultSource
productKnown productsExactly 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 as NEW; later runs return only NEW, UPDATED (with changedFields) and REAPPEARED products, while unchanged ones are suppressed and not billed unless emitUnchanged is on. EXPIRED products (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 with emitExpired on. stateKey names or shares the stored state; leave it empty and the actor derives one from your setup.

Input Parameters

ParameterTypeDefaultDescription
modestringcategorycategory for a category and its subcategories, all for every category in the store, search for keywords, product for direct product links.
categoryUrlsarrayprefill one exampleCategory pages to scrape (category mode). Links end in a number.
includeSubcategoriesbooleantrueCategory mode: walk every subcategory under a parent category. Off = only the linked page (about 80 products for a parent).
queriesarrayprefill ["phone case"]Keywords to search (search mode).
productUrlsarrayno defaultProduct links to scrape (product mode).
maxItemsinteger20Maximum products returned across the run. 0 = unlimited.
maxPagesinteger0Optional page limit per category; does not cap on its own.
fetchDetailsbooleantrueRead each product's page for description, variations, rating breakdown, seller stats and reviews.
includeReviewsbooleantrueNest recent reviews under each product. Requires fetchDetails.
resumeFromRunIdstringno defaultContinue one specific previous run, skipping products it already collected.
incrementalModebooleanfalseScheduled monitoring: return only new and changed products.
stateKeystringno defaultName or share a monitoring campaign's saved state.
emitUnchangedbooleanfalseIncremental mode only: also return, and bill, unchanged products.
emitExpiredbooleanfalseIncremental mode only: also return products no longer found after a complete scan.
ignoreFieldsForChangesarrayno defaultIncremental mode only: output fields that should not mark a product as UPDATED. images is always ignored.
proxyobjectresidential, USConnection 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.

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.