TikTok Shop Competitor & Product Monitor avatar

TikTok Shop Competitor & Product Monitor

Pricing

from $3.49 / 1,000 product results

Go to Apify Store
TikTok Shop Competitor & Product Monitor

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

Inus Grobler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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 count GMV 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 viewTypical fields
ProductsProduct 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
ShopsSeller ID, shop name and URL, rating, followers, public sold count, product count, review count, logo, identity label
ReviewsReview ID, public reviewer name, rating, text, date, country, variant, verified-purchase signal, images
Creator signalsPublic creator identity, handle, shoppable video, followers, attributed sales signal when embedded by TikTok
Changesbaseline, new, updated, or removed status, changed fields, old and new values, percentage change, first/previous seen timestamps
ErrorsFailed 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

InputDescriptionDefault
targetsKeywords, brand names, niches, or public TikTok Shop URLs; one per linewireless earbuds
maxProductsMaximum unique products returned; 1–1,0005

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 resultFreeBronzeSilverGold, 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.

  1. Create an Apify Task from this Actor and keep its input stable.
  2. Run the Task once to create the baseline.
  3. Run the same Task again whenever you want a comparison.
  4. 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 os
from apify_client import ApifyClient
client = 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().items
print(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, and warnings.
  • If fields are null, inspect fieldCoverage and the product-level warnings; 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.