TikTok Shop Competitor & Product Monitor
Pricing
from $3.49 / 1,000 product results
TikTok Shop Competitor & Product Monitor
Scrape and monitor US TikTok Shop products, prices, sales, stock, sellers, reviews, variants, and public creator signals with field-level change detection.
Pricing
from $3.49 / 1,000 product results
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Turn public US TikTok Shop listings into structured product research and repeatable competitor intelligence. Give it keywords or public product and store URLs as input; get typed product, seller, review, creator-signal, change, and error datasets as output. Clear limitations and troubleshooting cover blocked pages, CAPTCHA behavior, missing fields, and cost controls.
Use it as a TikTok Shop scraper, competitor price tracker, product research API, seller monitor, or TikTok Shop analytics data source—without building a browser workflow or cleaning nested page data yourself.
What you can do
- Find US TikTok Shop products for a keyword.
- Prioritize keyword-relevant products when TikTok mixes merchandising modules into a result page.
- Research competing stores, assortments, pricing, discounts, stock signals, and variants.
- Track price, availability, public sold count, rating, review count, seller, and SKU changes.
- Export clean product, shop, review, creator-signal, change, and error tables.
- Feed TikTok Shop data into Google Sheets, Airtable, Make, Zapier, webhooks, databases, or your own app through Apify integrations and API.
- Estimate product opportunity with a transparent
current price × public sold countGMV proxy.
Input examples
The easiest first run needs only one field:
{"targets": ["wireless earbuds"]}
Keywords and public TikTok Shop URLs can be mixed in the same list:
{"targets": ["portable blender","https://shop.tiktok.com/us/pdp/example-product/1234567890123456789","https://shop.tiktok.com/us/store/example-store/7495000000000000000"],"maxProducts": 10}
The Actor detects each line automatically. Leave maxProducts at 5 for a quick first run, then increase it when you need a larger dataset.
Output datasets
| Dataset view | Typical fields |
|---|---|
| Products | Product ID and URL, discovery query/source, title, description, category, brand, visible listing price, price source, original price, currency, discount, availability, public sold count, rating, review count, estimated GMV, seller, variants, images, properties, shipping, coverage flags, change status |
| Shops | Seller ID, shop name and URL, rating, followers, public sold count, product count, review count, logo, identity label |
| Reviews | Review ID, public reviewer name, rating, text, date, country, variant, verified-purchase signal, images |
| Creator signals | Public creator identity, handle, shoppable video, followers, attributed sales signal when embedded by TikTok |
| Changes | baseline, new, updated, or removed status, changed fields, old and new values, percentage change, first/previous seen timestamps |
| Errors | Failed URL, safe error type and message, retryability, and actionable warnings |
Every product contains fieldCoverage and warnings, so downstream workflows can distinguish a genuine zero from data TikTok did not expose. fieldCoverage.productDetails explicitly identifies whether product-page enrichment succeeded.
Output example
{"recordType": "product","region": "US","productId": "1234567890123456789","title": "Example wireless earbuds","price": 19.99,"originalPrice": 39.99,"currency": "USD","priceSource": "discovery-listing","discountPercent": 50,"availability": "InStock","soldCount": 18420,"rating": 4.7,"reviewCount": 2310,"estimatedGmv": 368215.8,"estimateMethod": "currentPriceTimesPublicSoldCount","shopName": "Example Audio","variants": [],"changeStatus": "updated","fieldCoverage": {"price": true,"availability": true,"soldCount": true,"reviews": true,"variants": false,"seller": true,"creatorSignals": false}}
Input options
| Input | Description | Default |
|---|---|---|
targets | Keywords, brand names, niches, or public TikTok Shop URLs; one per line | wireless earbuds |
maxProducts | Maximum unique products returned; 1–1,000 | 5 |
That is the complete Console input. US keyword routing, relevance ranking, monitoring detection, request pacing, retries, proxy fallback, and browser fallback are automatic.
The Actor also chooses the safest data path from the target. A keyword, store, or category performs a fast market scan from the public listing data. A pasted product URL opens that product directly for its richer public detail fields. This avoids turning a simple keyword run into a chain of blocked detail requests.
Existing API integrations remain compatible with the earlier advanced keys, including startUrls, searchQueries, categoryUrls, includeProductDetails, includeReviews, monitorMode, monitorKey, and outputMode. New integrations should use targets unless they specifically need an override. API clients can set includeProductDetails: true to enrich every product discovered by a keyword or store scan.
Simple, result-based pricing
Introductory launch pricing is deliberately low: you pay only for successful data—not failed requests or scraper retries. Apify automatically applies the price for your subscription plan, so there is nothing extra to configure.
| Successful result | Free | Bronze | Silver | Gold, Platinum & Diamond |
|---|---|---|---|---|
| Listing-level product | $4.99 / 1,000 | $4.49 / 1,000 | $3.99 / 1,000 | $3.49 / 1,000 |
| Detail-enriched product | $7.99 / 1,000 | $7.19 / 1,000 | $6.39 / 1,000 | $5.59 / 1,000 |
| Public review | $0.50 / 1,000 | $0.45 / 1,000 | $0.40 / 1,000 | $0.35 / 1,000 |
A detail-enriched product is charged as a detailed product, not again as a listing-level product. Shop profiles, creator signals, monitoring change rows, and error diagnostics are included without a result event charge. Apify also applies its standard $0.00005 Actor-start charge for runs using up to 1 GB of memory. These prices include platform usage; there is no separate compute or proxy line item for customers. The run budget is enforced before paid rows are written, and the minimum selectable budget is only $0.01.
Limitations and market coverage
Validated keyword, product, and store coverage: United States (US).
Public TikTok Shop URLs from other markets can be supplied in targets and are attempted as best effort. They are labeled tier2 in the output. At the time of validation, many non-US public-web routes returned an empty response or a security check even through a matching-country residential proxy, so they are not offered for keyword discovery or presented as reliable coverage.
TikTok can change regional availability and public fields without notice. A market embedded in a supplied URL is detected automatically. The Actor does not silently substitute US results for a failed regional request.
Competitor and product monitoring
Monitoring compares stable business fields—not timestamps or page noise.
- Create an Apify Task from this Actor and keep its input stable.
- Run the Task once to create the baseline.
- Run the same Task again whenever you want a comparison.
- Read the Changes dataset view or use
outputMode: "changesOnly".
With monitorMode: "auto", Task runs automatically share private history. One-off Actor runs remain snapshots unless you provide the same random monitorKey each time. compare mode fails early if neither a Task nor a monitor key is available.
The Actor stores only a hash of a custom monitor key in its monitoring namespace, but the value is still part of your run input. Use a random identifier—not a password or API secret.
removed is emitted only when a complete source assortment can be established. The Actor avoids claiming removals after partial or blocked crawls.
Run through the Apify API
Use the deployed Actor name below and replace only the token placeholder.
cURL
curl -X POST \'https://api.apify.com/v2/acts/thescrapelab~tiktok-shop-competitor-product-monitor/runs' \-H 'Authorization: Bearer <YOUR_APIFY_TOKEN>' \-H 'Content-Type: application/json' \-d '{"targets": ["skincare organizer"],"maxProducts": 10}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('thescrapelab/tiktok-shop-competitor-product-monitor').call({targets: ['skincare organizer'],maxProducts: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])actor_client = client.actor("thescrapelab/tiktok-shop-competitor-product-monitor")run = actor_client.call(run_input={"targets": ["skincare organizer"],"maxProducts": 10,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
The run's OUTPUT key-value-store record contains a compact summary with counts, request methods, coverage, monitoring state, data-quality counts, billing event totals, budget-limit status, and notices.
Reliability and cost controls
The Actor first requests TikTok Shop's public server-rendered product data. It uses its configured proxy and a Playwright browser only when needed. This keeps common runs fast while retaining a fallback for temporary blocking.
- Customers pay the published result-event prices above, not a variable compute or proxy surcharge.
- Product detail enrichment adds approximately one page per discovered product and uses the detail-enriched product event only when it succeeds.
- Reviews and creator signals do not invent or backfill unavailable data.
- Failed detail pages retain useful discovery-level product data and add an error row instead of discarding the whole run.
- Security-check pages are reported; the Actor does not solve CAPTCHAs.
Common use cases
- TikTok Shop competitor price monitoring
- Trending-product and product-opportunity research
- Seller and assortment benchmarking
- Discount, stock, rating, and review tracking
- Product catalog enrichment
- Public sales-count and estimated-GMV analysis
- TikTok Shop data exports for spreadsheets, dashboards, alerts, and lead scoring
FAQ
Is estimatedGmv actual seller revenue?
No. It is a transparent directional estimate: current public price multiplied by the public sold count. It does not account for historical prices, refunds, coupons, taxes, shipping, fees, or whether the sold count is rounded or scoped differently by TikTok.
Why are some values null?
TikTok does not expose every field on every page, product, or region. Check fieldCoverage and warnings. A missing value is returned as null instead of being guessed.
Can it scrape private Seller Center or affiliate-account data?
No. This Actor is designed for public TikTok Shop pages. It does not log in to accounts or access private dashboards.
Will the Actor automatically run every day?
No schedule is created for you. Save the configuration as an Apify Task and add a schedule only if and when you want recurring monitoring.
Does it work forever without maintenance?
No scraper can promise that. TikTok can change page structures, blocking, regional availability, and field visibility. Errors are isolated per URL and surfaced in a dedicated view so you can diagnose partial runs.
Responsible use
Use this Actor only where you have a lawful purpose and in accordance with applicable laws, TikTok's terms, and Apify's platform rules. Collect only the data you need, avoid sensitive-person profiling, and set appropriate retention and access controls.
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by TikTok or ByteDance. “TikTok” is used only to identify the supported public website.
Troubleshooting and support
- If a URL fails, open the Errors dataset view and check
errorType,retryable, andwarnings. - If fields are
null, inspectfieldCoverageand the product-levelwarnings; the Actor never guesses hidden values. - If blocking increases, keep the residential proxy fallback enabled, lower concurrency, and retry later. CAPTCHA pages are reported, not solved.
For a reproducible support request, include the run ID, affected public URL or query, region, expected field, and the relevant Errors-view row. Never include your Apify token or account credentials.