TikTok Shop Product & Trend Tracker — Authorized Feed (MVP)
Pricing
from $4.00 / 1,000 product results
TikTok Shop Product & Trend Tracker — Authorized Feed (MVP)
Compare authorized TikTok Shop product datasets over time. Live public marketplace search is not included.
Pricing
from $4.00 / 1,000 product results
Rating
0.0
(0)
Developer
OptiRefine
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
OptiRefine TikTok Shop Product & Trend Tracker (v0.3.1 private pilot)
New: SandBase keyword discovery adapter with strict one-request-per-keyword behavior, offline tests and a clear unknown-response error. This build has not been tested with an authenticated SandBase V2 response or deployed to Apify from this environment. The provider may change its response schema.
SandBase quick start
- Revoke any previously shared key; set a fresh
SANDBASE_API_KEYin Apify Source > Environment variables, marked secret. - Deploy this whole project to the existing Actor, not only the input schema.
- Configure the example
examples/sandbase-private-pilot.json; confirm rights only if they apply. - Select Build (for Web IDE) or
apify push(CLI), then run privately. - View output Dataset and
RUN_SUMMARYin key-value store.
SandBase has no dollar-spend cap in this Actor: sandbaseMaxRequests limits calls per run, not total account usage. Verify the free-call eligibility, plan and terms before repeated requests, and get redistribution approval for commercial publishing. Only keyword search (US) is supported in SandBase mode, first page only; ID lookup is not implemented for SandBase.
Run npm install --include=dev && npm run build && npm test after installing dependencies. Offline-only tests without Apify dependencies: npm run test:offline when TypeScript is installed.
See docs/DEPLOY_CURRENT_FIX.md for the v0.2.0-to-v0.3.x deployment mismatch and precise deployment instructions, plus docs/SANDBASE_SETUP.md.
OptiRefine — TikTok Shop Product & Price Trend Tracker
Historical v0.2.0 notes (retained for compatibility):
Enter product keywords or exact product IDs and analyze product snapshots, prices, sellers, and disclosed sold indicators. This release adds a permission-gated connection to an upstream Apify Actor, while preserving authorized dataset imports and historical comparisons.
Important: This is not an independently authorized TikTok Shop scraper. The live mode calls a third-party Apify Actor. That Actor's Store listing does not automatically grant OptiRefine the rights to redistribute or sell its data, nor does it supersede TikTok's terms. Only enable live mode if your use is permitted. Get written authorization before publishing commercial redistribution. No authorized real-world run, licensing review, or cloud smoke test has been completed for this release.
What's new
sourceMode: "externalActor"delegates discovery to the fixed sourceopenclawai/tiktok-shop-scraperusing documentedshop_search/shop_productinputs.mode: "discover"accepts searchkeywords;mode: "products"accepts exact numericproductIdswhen external mode is selected.upstreamMaxCostUsd(default$0.25, max$5) passed toActor.callas a per-upstream-run spending cap. The upstream run may incur costs even if the downstream tracker fails.- Safely maps documented
item_type: "product"records, skipping hints, errors, reviews, duplicate or invalid rows; excludes the originalrawobject. - Existing normalized dataset mode and snapshot trend engine remain intact. No credible daily sales, revenue, or trend score can be derived from a single unverified sales indicator.
sourceDatasetIdandpreviousDatasetIdare Apify storage pickers declaringREADscope to support limited-permission runs.
Configure a private pilot on Apify
- Confirm your rights to run the upstream Actor and to use its output for the intended purpose; commercial resale requires appropriate authorization from relevant rights holders. Leave the rights checkboxes unchecked until you actually have this permission. No checkbox creates rights by itself.
- Extract this project, then in its root folder run
npm install --include=dev,npm run test:core,npm run build, andapify push. You are updating the existingoptirefine/tiktok-shop-trend-trackerif authenticated into the same OptiRefine account. - Open the Actor's Input tab and select Live search via third-party Actor. Select Discover products by keyword and enter a search term such as
skincare. - Set
maxProductsto 5 for the first permitted run,upstreamMaxCostUsdto0.25, and select the two data-rights confirmation boxes only when accurate. The example files intentionally leave these false. - Run privately, open the
RUN_SUMMARYrecord and product Dataset. The summary should containupstreamRunId,upstreamDatasetId, returned/filtered counts, and any normalization errors. - Review the upstream run's actual spend in Apify. It is separate from any charge to customers for this tracker. The cap limits upstream charges, not the full cost of the surrounding workflow.
- To compare historical snapshots, run the same query with the same
watchKeyat least 24 hours later, selectmonitor, and choose the prior OptiRefine tracker run dataset inpreviousDatasetId. A single run hasinsufficient_history;momentumrequires 3 comparable dated observations and trustworthy consistent counters.
Basic live input format
examples/live-search.json is ready to edit, but dataRightsConfirmed and upstreamReuseConfirmed are intentionally false. Do not set them to true unless the statements are true.
{"sourceMode": "externalActor","mode": "discover","market": "US","keywords": ["skincare"],"maxProducts": 5,"upstreamMaxCostUsd": 0.25,"watchKey": "my-us-products","dataRightsConfirmed": false,"upstreamReuseConfirmed": false}
Use your own existing authorized dataset (no upstream call)
{"sourceMode": "authorizedDataset","mode": "products","market": "US","sourceDatasetId": "YOUR_EXISTING_PRODUCT_DATASET_ID","dataRightsConfirmed": true,"maxProducts": 20,"watchKey": "daily-watch"}
Use the dataset picker in Apify, rather than typing an Actor or run ID. The source feed should follow examples/feed-records.json: productId must be a string, priceDecimal must be a decimal string, and sourceProvider must consistently identify a provider for comparisons.
Source limitations and billing
- The upstream source's README describes
mode: "shop_search",queries,region, andmaxItems, with advertised per-result pricing. Its implementation may change without notice. Input/output contracts were checked against public documentation, not against a real authenticated run. - We only process
item_type: "product"anditem_idstored as a string. Known output fields includetitle,price,currency,sold_count,rating, andcover_url. Missing details remainnull; therawblob and other record types are not propagated. - Sold count is labeled a displayed, unverified counter with unknown period and possible rounding. We do not infer daily sales, sales velocity, or GMV from it. Historical price comparisons can still be informative when price/currency/variants match.
- All displayed times are UTC. Data sources may fail due to upstream changes or account limitations; check the upstream run ID in the error or summary.
Actor.pushData(product, "product-result")is inherited from v0.1. Before monetizing, configure and verify theproduct-resultpay-per-event event in Apify Console and perform a charging-limit test. Upstream costs are additional to the pricing event.- Supported market in this release is US only. The upstream Actor may claim others, but that does not mean our normalized schema supports them.
- Product keys are market + product ID. Comparisons use your chosen
watchKey, tenant scope, provider identity, currency, and compatible timestamps. Select previous run results only from your own authorized history. - The upstream provider is a fixed allowlist value, not an arbitrary user-supplied Actor ID; this reduces accidental delegation to unrelated Actors.
Commands
npm install --include=devnpm run test:corenpm run buildapify validate-schemaapify push
Docker installs development dependencies before compiling TypeScript, then prunes them. This corrects the prior tsc: not found cloud build error.
Validation and deployment limitations
The project has local offline contract tests for input gating, mocked upstream product mapping, normalization, history, and comparisons. We have not performed a live upstream call, an Apify cloud run, verified API spend, or confirmed written resale rights. Don't advertise it as commercially ready yet.
Technical layout
src/core/input.ts: mode/source/permission/cost/input validationsrc/sources/openClawMapper.ts: pure upstream input/output translationsrc/sources/externalActor.ts: downstream invocation and dataset reads, with testable injection seamsrc/sources/dataset.ts: authorized feed and historical dataset readssrc/core/normalize.ts,src/core/history.ts: normalized snapshots and conservative trend mathsrc/main.ts: orchestration, output, billing summary.actor/: Apify actor metadata, input/dataset/output schemastests/: deterministic offline contract tests
Release blockers for public monetized listing
- Permission to commercially redistribute or use upstream output in a publicly accessible paid Actor.
- Live run verifying source schema, returned fields, actual US coverage, and output quality.
- Test limited-permission Actor-to-Actor calls and resulting dataset access on the deployed runtime.
- Verify upstream price, platform expenses, PPE price configuration, contribution margin and charge-limit behavior.
- Verify no synthetic or vendor raw/private record leaks and that previous-run histories remain tenant-isolated.
References: Apify Actor.call, Apify Actor permissions, upstream Actor.