TikTok Shop Search Rank Tracker
Pricing
Pay per event
TikTok Shop Search Rank Tracker
Track public US TikTok Shop product positions by keyword, separate organic and sponsored ranks, flag target products, and compare snapshots.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
14 days ago
Last modified
Categories
Share
Track where public products appear in US TikTok Shop search results.
This Actor captures an ordered keyword snapshot, separates organic and explicitly labeled sponsored positions, flags target products, and compares supplied previous ranks.
It is designed for scheduled monitoring, search visibility analysis, and reproducible exports—not private seller analytics or personalized buyer results.
What does the TikTok Shop rank tracker do?
For every keyword, the Actor opens the public US TikTok Shop search experience in a mobile browser session.
It collects useful product rows from browser network responses and rendered product cards.
Each row contains both its absolute result position and its organic position.
Sponsored rows keep an absolute position but have organicRank: null.
You can provide product IDs or URLs to mark the products you care about.
You can also supply ranks from an earlier snapshot to calculate movement.
A positive change means the product moved up in the results.
Who is it for?
- Ecommerce teams tracking TikTok Shop search visibility
- Brands checking whether a product appears for important keywords
- Agencies preparing recurring client rank reports
- Analysts comparing organic and sponsored result ordering
- Developers feeding search-position snapshots into dashboards
- Operations teams scheduling monitoring runs with Apify Tasks
Use this Actor when position and change are the buyer job.
For broader product research without rank-change fields, see the related TikTok Shop scraper below.
Why use this Actor?
TikTok Shop search pages are region-sensitive and frequently return generic shells or Security Check pages to ordinary HTTP clients.
This Actor uses bounded US residential browser sessions and rotates the full IP/cookie context when a challenge is recognized.
It does not report a successful empty snapshot from a generic shell.
A keyword must produce typed public product rows or the run fails with a diagnostic error.
The default dataset is directly usable from Apify integrations, webhooks, API clients, Google Sheets workflows, and scheduled Tasks.
Quick start
- Open the Actor input page.
- Enter one or more product phrases in Search keywords.
- Keep Market set to United States.
- Optionally paste target product IDs or public product URLs.
- Choose the number of results per keyword.
- Click Start.
- Open the Search ranks dataset view.
- Save the dataset or schedule the run for the next snapshot.
A small first input:
{"queries": ["wireless earbuds"],"market": "US","maxResultsPerQuery": 5}
Input parameters
queries
Required array of 1–20 non-empty product search phrases.
Duplicates are removed while preserving the supplied order.
market
TikTok Shop market for the snapshot.
The current release supports US only.
Other markets fail validation rather than silently returning US ranks.
targetProducts
Optional array of TikTok Shop product IDs or public product URLs.
Every value must contain a numeric product ID of at least 10 digits.
Matching rows receive targetMatch: true.
A target that does not appear in the captured depth simply has no matching row.
previousRanks
Optional array used to calculate movement.
Each object requires query and productId.
Add absoluteRank, organicRank, or both when those prior values are available.
The previous query match is case-insensitive.
maxResultsPerQuery
Maximum ordered products captured for each keyword.
Allowed range: 1–100.
Default: 20.
maxSessionRetries
Fresh browser/proxy sessions attempted after a challenge or empty shell.
Allowed range: 1–8.
Default: 4.
proxyConfiguration
Cloud runs default to the Apify US residential proxy group.
TikTok Shop commonly blocks direct and ordinary datacenter access.
Changing this setting can reduce reliability or produce the wrong geography.
What data is extracted?
| Field | Meaning |
|---|---|
query | Keyword used for this search |
market | TikTok Shop market (US) |
productId | Stable public product ID |
productTitle | Product title displayed in search |
productUrl | Public TikTok Shop product URL |
sellerName | Public seller/shop name when exposed |
price | Search-card price when exposed |
currency | Displayed price currency |
sponsored | Whether TikTok explicitly labeled the row as an ad |
absoluteRank | Position including sponsored results |
organicRank | Position among non-sponsored rows; null for an ad |
targetMatch | Whether the ID matched targetProducts |
previousAbsoluteRank | Supplied earlier absolute position |
absoluteRankChange | Previous minus current absolute position |
previousOrganicRank | Supplied earlier organic position |
organicRankChange | Previous minus current organic position |
observedAt | UTC timestamp for the snapshot |
searchUrl | Public search URL used by the browser |
Missing optional values are returned as null, not invented.
Output example
The following record shape comes from a current US search snapshot:
{"query": "wireless earbuds","market": "US","productId": "1732500121972674708","productTitle": "Wireless Bluetooth In-Ear Earphones - 3D Stereo Audio, ANC, Waterproof Headphones with Type-C Charging Cable & Charging Case, Wireless Travel Earbuds for Work, Sports, Voice Calls, Ideal Gift for Adults","productUrl": "https://shop.tiktok.com/us/pdp/1732500121972674708","sellerName": null,"price": 15.9,"currency": "USD","sponsored": false,"absoluteRank": 1,"organicRank": 1,"targetMatch": false,"previousAbsoluteRank": null,"absoluteRankChange": null,"previousOrganicRank": null,"organicRankChange": null,"observedAt": "2026-08-03T03:08:39.703Z","searchUrl": "https://www.tiktok.com/shop/s?q=wireless%20earbuds&source=ecommerce_mall&enter_method=search"}
Search rankings and products change frequently, so IDs, titles, prices, and positions in later runs will differ.
How rank changes are calculated
Pass the earlier snapshot's product IDs and ranks into previousRanks.
For example:
{"queries": ["wireless earbuds"],"previousRanks": [{"query": "wireless earbuds","productId": "1732500121972674708","absoluteRank": 8,"organicRank": 7}],"maxResultsPerQuery": 25}
If the product now has absolute rank 3, absoluteRankChange is 5.
Positive means moved up.
Negative means moved down.
Zero means unchanged.
Null means there was no comparable previous value in the input.
Scheduled monitoring workflow
Create an Apify Task with stable keywords and result depth.
Schedule it hourly, daily, or weekly according to your reporting needs.
After each run, store the relevant ranks in your database or key-value workflow.
Provide those values as previousRanks on the next run.
Use a webhook or integration to notify your pipeline when the run succeeds.
The Actor produces monitoring-ready snapshots but does not send alerts itself.
Organic and sponsored ranks
absoluteRank always follows the captured search ordering.
organicRank counts only rows not explicitly marked as sponsored.
TikTok can change ad labels and card shapes.
The Actor marks a row sponsored only when a recognizable explicit ad signal is present.
It does not infer sponsorship from price, seller, or position.
How much does it cost to track TikTok Shop search ranks?
The Actor uses pay per event pricing.
A run has a one-time $0.005 start event.
Each saved dataset row emits one rank-result event.
At the BRONZE tier, the current per-row price is $0.0099227.
BRONZE cost calculation examples:
| Snapshot | Ranked rows | Calculation |
|---|---|---|
| One keyword × 5 results | 5 | One start event plus 5 rank-result events |
| Two keywords × 10 results | 20 | One start event plus 20 rank-result events |
| Ten keywords × 25 results | 250 | One start event plus 250 rank-result events |
Multiply the active per-row tier price by the saved row count, then add the one-time start event. Actual billed tiers depend on your Apify plan.
Rows rejected as duplicates or invalid are not charged as rank results.
Proxy, compute, and platform usage are handled according to Apify's active pricing configuration.
Result depth and interpretation
A target outside maxResultsPerQuery cannot be distinguished from a target absent from the wider search results.
Increase depth when you need a stronger absence signal.
Keep the same depth across scheduled snapshots for comparable ranks.
Results are an observation of the public search surface at observedAt.
They are not a guarantee of what every TikTok user sees.
API usage with cURL
Replace YOUR_TOKEN with an Apify API token:
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~tiktok-shop-search-rank-tracker/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"queries":["wireless earbuds"],"market":"US","maxResultsPerQuery":5}'
To wait for completion and return dataset items, use the synchronous dataset-items endpoint documented by Apify.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/tiktok-shop-search-rank-tracker').call({queries: ['wireless earbuds'],market: 'US',maxResultsPerQuery: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
API usage with Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/tiktok-shop-search-rank-tracker').call(run_input={'queries': ['wireless earbuds'],'market': 'US','maxResultsPerQuery': 5,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with Apify MCP
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/tiktok-shop-search-rank-tracker"
Claude Desktop, Cursor, and VS Code setup
Use this equivalent MCP configuration in Claude Desktop, Cursor, or VS Code:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/tiktok-shop-search-rank-tracker"}}}
Example prompts:
- “Capture the top 10 TikTok Shop ranks for wireless earbuds in the US.”
- “Check these product IDs against the lip gloss search results.”
- “Compare this previous snapshot with today's ranks and summarize products that moved up.”
Integrations and exports
Export the default dataset as JSON, CSV, Excel, XML, or RSS from Apify.
Send finished runs to Google Sheets through an integration.
Trigger a Make or Zapier scenario from a run webhook.
Load snapshots into BigQuery, Snowflake, PostgreSQL, or a BI dashboard.
Join results by query, market, productId, and observedAt.
Reliability and retries
The Actor keeps each proxy identity, browser context, and cookies together for one attempt.
Recognized challenge, login, regional-block, and empty-shell responses retire that context.
The next attempt receives a fresh session identity.
Retries are bounded; the Actor does not loop indefinitely.
If every route returns no useful rows, the run fails rather than emitting a misleading success record.
Limitations
- Only the public US TikTok Shop market is currently supported.
- Results can vary by time, geography, experiments, and TikTok ranking changes.
- Account-personalized and logged-in buyer results are excluded.
- Affiliate, private seller, and seller-dashboard data are excluded.
- Sponsored detection depends on an explicit public label.
- A product below the selected result depth is not captured.
- Search-card seller and price fields can be absent and then return null.
- TikTok anti-bot changes may temporarily exhaust all session retries.
- The Actor does not retain previous snapshots automatically.
- The Actor does not send alerts; connect scheduled runs to your alerting workflow.
Troubleshooting
The run says no usable product rows
Confirm the query is a real product phrase and the market is US.
Use the default residential proxy configuration.
Increase maxSessionRetries within the allowed range if several IPs are challenged.
Do not treat a direct or datacenter Security Check as a valid empty result.
My target product did not match
Check that the ID is copied from a public TikTok Shop product URL.
Increase maxResultsPerQuery.
Remember that a missing match means only that the target was not found within the captured depth.
Organic rank is null
That row was explicitly identified as sponsored.
Use absoluteRank to see its position in the complete returned ordering.
Rank change is null
No matching prior query and productId was supplied, or the comparable organic rank is unavailable for a sponsored row.
Responsible use and legality
This Actor accesses public TikTok Shop search results without a buyer or seller account.
Use the data only for lawful purposes and in accordance with applicable terms, laws, and regulations.
Do not use it to collect private seller information, infer sensitive traits, circumvent account controls, or harass merchants.
Avoid excessive schedules and result depths.
You are responsible for deciding whether your use and retention of the data is permitted in your jurisdiction.
Related Automation Lab Actors
- TikTok Shop Scraper — broader public product and sales-intelligence fields when rank movement is not the primary job.
- TikTok Shop Products Scraper — product-list extraction with configurable starting routes.
- TikTok Scraper — public TikTok video and creator workflows outside Shop search ranking.
FAQ
Does it require TikTok login cookies?
No.
The supported workflow uses anonymous public US Shop search results.
Does it track every TikTok Shop market?
No.
The current release validates and supports US only.
Can I schedule it?
Yes.
Create an Apify Task and schedule repeated snapshots.
Does it store rank history?
No.
Store earlier rows in your workflow and pass selected values back through previousRanks.
Are sponsored rows charged separately?
No.
Every useful row, organic or sponsored, uses the same rank-result event.
Why did the ranking change between nearby runs?
TikTok can refresh inventory, promotions, ads, experiments, and ranking signals continuously.
Use a consistent schedule, market, proxy geography, keyword, and result depth for the most comparable snapshots.