COMMERCE DATA INFRASTRUCTURE/PREVIEW · TIKTOK SHOP LIVE
Ask once. Every source runs until one answers.
Unif cascades every request across its commerce data sources in cost order and stops at the
first verified hit — normalized into one schema, whichever source answered. You pay only when
something comes back.
Misses are free · 47 endpoints · 6 entities · first row in five minutes
The waterfall
One request. Every source, in cost order. One charge.
The cascade is already built and tuned. You do not pick sources, order them, or write the
fallback logic — and the sources you never reach cost you nothing.
REQUEST · revenue for shp_01k3…d7fa · last 30 days · USDCREDITS
01no record for this shopno match0
02{ “sales_amount”: “1,284,300.25” }unverified0
03{ “gmv”: 1284300.25, “cur”: “USD” }verified ✓1
04not reached——
05not reached——
RETURNED { “metrics”: { “revenue”: 1284300.25 }, “currency”: “USD”, “period”: { “adjusted”: false } }
Whichever source answers
The record is identical no matter which step of the cascade produced it. No aliases, no branching on source.
One currency, daily rates
Converted per day of the period, so a historical number stays the same number next week.
Absent is null, never zero
A field a channel does not report comes back null and named. Nothing is quietly modelled.
SOURCES IN THE CASCADE
Kalodata[ SOURCE 02 ][ SOURCE 03 ][ … ]
Published. Which one answered a given row is not.
The model
Six entities. The same six on every channel.
Stable IDs that survive renames, handle changes and re-listings. Store the ID, not the URL.
| ENTITY | ID | WHAT IT IS | SIGNALS YOU FILTER AND SORT ON |
|---|---|---|---|
| Shop | shp_ | A storefront or seller | revenue · revenue_by_source · creators_count |
| Product | prd_ | One listing, in one market | revenue · avg_sale_price · commission_rate |
| Creator | crt_ | An affiliate who drives sales | gpm · engagement_rate · followers |
| Video | vid_ | Shoppable short-form content | views · gpm · revenue |
| Livestream | liv_ | One live selling session | viewers · avg_watch_seconds · revenue |
| Category | cat_ | A node in the shared tree | revenue_growth_rate · shops_count |
Category IDs are shared across channels — not per-channel. A filter written against
cat_beauty_personal_care today keeps selecting beauty when you turn the next
channel on.What you do with it
Search the market. Enrich your rows. Get told when it moves.
01Search
Start from filters, not identifiers. Range filters, multi-key sorting and cursor
pagination across all six entities.
POST /v1/products/search02Enrich
Start from rows you already have. Send the URLs and handles you hold; get back stable IDs
and the fields you asked for, 100 at a time.
POST /v1/enrich03Track
Stop polling. Put a set behind a tracker and get a signed webhook when a metric actually
crosses your threshold.
POST /v1/trackersWhat comes back
The same request, rendered for someone who does not read JSON.
Six rows from the search in the hero. Every column is a field in the schema, and the trend
comes from the same entity’s timeseries endpoint.
| PRODUCT | PRICE | REVENUE 30D | GROWTH | TREND | CREATORS | COMMISSION |
|---|---|---|---|---|---|---|
Ceramide Barrier Repair Serum 30ml GlowLab | 184,320 | +81% | 214 | 20% | ||
Overnight Peptide Lip Mask Aura Beauty | 142,880 | +34% | 168 | 18% | ||
Volumizing Dry Shampoo 200ml NorthPeak | 118,540 | −12% | 96 | 15% | ||
Niacinamide Pore Refining Toner GlowLab | 97,210 | +52% | 141 | 22% | ||
Scalp Detox Rosemary Oil Verdant Co | 88,470 | +19% | 73 | 25% | ||
Hydrocolloid Blemish Patch ×72 Aura Beauty | 76,330 | +7% | 205 | 17% |
Sample values, for layout6 of 418 matches · 6 credits
Coverage
Know what a field is worth before you build on it.
One endpoint grades every field for the market you are working in: how complete it is,
whether you can filter on it, and how far behind it runs.
So a thin field turns up while you are writing the query — not three weeks later, in a
dashboard nobody can explain.
How coverage worksmetrics.revenue
metrics.engagement_rate
agency
CHANNELS
LIVETikTok Shop
Amazon, Shopee & Lazada and Shopify are on the roadmap — same filters, same stored IDs,
no migration on your side.
Your first enriched row is one request away.
The quickstart takes you from an API key to a normalized record. Nothing to install.