DEV Community

Muhammad Irfan Khalid
Muhammad Irfan Khalid

Posted on

How can I identify winning TikTok Shop products using sales data?


If you're building an e-commerce tool, one of the more interesting problems is determining whether a TikTok Shop product is actually gaining momentum.

A simple query such as:

ORDER BY total_sales DESC
Enter fullscreen mode Exit fullscreen mode

isn't enough.

The products with the highest lifetime sales may already be mature and highly competitive. For trend detection, I'd rather combine recent sales, sales velocity, reviews, pricing, competition, inventory, and market data.

1. Start With Recent Sales

Lifetime sales are useful, but recent sales can reveal momentum.

For example:

Product A
Lifetime sales: 100,000
24h sales: 300

Product B
Lifetime sales: 8,000
24h sales: 1,200
Enter fullscreen mode Exit fullscreen mode

Product A is more established, but Product B may deserve more attention if the goal is identifying emerging products.

A useful data model could store periodic snapshots:

{
  "product_id": "12345",
  "country": "US",
  "timestamp": "2026-08-16T08:00:00Z",
  "total_sales": 8000,
  "price": 29.99,
  "reviews": 320
}
Enter fullscreen mode Exit fullscreen mode

Store another snapshot later and you can calculate changes over time.

2. Calculate Sales Velocity

A basic sales velocity calculation could be:

sales_velocity = units_sold / time_period
Enter fullscreen mode Exit fullscreen mode

For example:

1,200 units / 24 hours = 50 units/hour
Enter fullscreen mode Exit fullscreen mode

But the more interesting metric is change in velocity.

If a product moves from:

20 units/hour
       ↓
35 units/hour
       ↓
50 units/hour
Enter fullscreen mode Exit fullscreen mode

then demand appears to be accelerating.

This is more useful for trend detection than simply sorting by lifetime sales.

3. Compare Sales With Reviews

Reviews provide additional context.

For example:

Product A
Sales: 20,000
Reviews: 5,000

Product B
Sales: 7,000
Reviews: 250
Enter fullscreen mode Exit fullscreen mode

Product B might be worth investigating because it has meaningful sales with comparatively few reviews.

I wouldn't use this as a standalone scoring mechanism, though.

It's better treated as one feature in a larger model.

4. Add Competitor Signals

Product-level data becomes more useful when combined with shop-level data.

For example:

Product
   ↓
Find shops selling product
   ↓
Count successful shops
   ↓
Track product adoption
   ↓
Monitor changes
Enter fullscreen mode Exit fullscreen mode

If a product begins appearing across several successful stores, that could be another indication of increasing demand.

You could store something like:

{
  "product_id": "12345",
  "shops_selling": 27,
  "top_shops_selling": 8,
  "shops_added_last_7d": 6
}
Enter fullscreen mode Exit fullscreen mode

Now you have another measurable signal.

5. Include Country-Level Data

Cross-market analysis is particularly interesting.

A product might be mature in the US but relatively early in another market.

Instead of:

product_id → sales
Enter fullscreen mode Exit fullscreen mode

use:

product_id
    ↓
country
    ↓
sales
    ↓
velocity
    ↓
historical trend
Enter fullscreen mode Exit fullscreen mode

This allows you to compare markets independently.

For example:

US       → High sales / Low growth
UK       → Medium sales / High growth
Germany  → Low sales / High growth
Enter fullscreen mode Exit fullscreen mode

The German market might deserve additional research even though its absolute sales are lower.

6. Track Price and Inventory

Sales aren't enough to determine whether a product is commercially interesting.

I'd also store:

price
price_change
stock
sku_count
shipping
delivery_estimate
Enter fullscreen mode Exit fullscreen mode

This allows you to distinguish:

High demand + healthy economics

from:

High demand + poor margins

or:

High demand + insufficient inventory

7. Build a Product Scoring Model

Once you have these features, you can build a basic scoring system.

For example:

score =
    sales_growth * 0.30
  + sales_velocity * 0.25
  + review_signal * 0.10
  + competitor_growth * 0.15
  + market_growth * 0.10
  + inventory_signal * 0.05
  + price_signal * 0.05
Enter fullscreen mode Exit fullscreen mode

The weights shouldn't be considered universal.

They should be adjusted based on your use case and historical results.

For a trend-detection application, sales growth might deserve more weight.

For a sourcing application, margin and inventory might matter more.

8. Store Historical Data

This is probably the most important architectural decision.

A current snapshot tells you:

"This product has 8,000 sales."

Historical data tells you:

"This product had 3,000 sales last week and now has 8,000."

The second piece of information is much more useful for detecting momentum.

A simple architecture could be:

Marketplace Data
       ↓
Data Collection
       ↓
Normalization
       ↓
Database
       ↓
Historical Snapshots
       ↓
Feature Calculation
       ↓
Scoring
       ↓
Dashboard / API / Alerts
Enter fullscreen mode Exit fullscreen mode

9. Automate the Research

If you're building an e-commerce SaaS product, manually checking products doesn't scale.

A scheduled process could:

  1. Retrieve products by country/category.
  2. Store the latest snapshot.
  3. Compare it with previous snapshots.
  4. Calculate sales velocity.
  5. Calculate growth rates.
  6. Update product scores.
  7. Flag products with unusual momentum.
  8. Send results to a dashboard or alert system.

For example:

Every 6 hours
      ↓
Fetch product data
      ↓
Calculate changes
      ↓
Update database
      ↓
Recalculate scores
      ↓
Trigger alerts
Enter fullscreen mode Exit fullscreen mode

This turns product research from a manual task into a repeatable data pipeline.

10. API-Based Implementation

I've been working on this problem from the API side as well.

The TikTok Shop Product Ecommerce Data API I'm building provides structured product and shop data that can be used for this type of application.

The available data includes areas such as:

  • Rising products
  • Untapped products
  • Sales velocity
  • Price drops
  • Competitor shop analysis
  • Shop product catalogs
  • Shop statistics
  • SKU stock
  • Product variants
  • Logistics information

The country parameter also makes it possible to build country-specific research workflows.

The interesting part isn't simply exposing an endpoint.

It's what developers can build on top of the data.

For example:

API
 ↓
PostgreSQL
 ↓
Historical snapshots
 ↓
Python/Node processing
 ↓
Trend scoring
 ↓
React dashboard
 ↓
Alerts
Enter fullscreen mode Exit fullscreen mode

That could become a product research platform, competitor monitoring system, pricing tracker, or internal analytics tool.

A Practical Example

Suppose your database contains:

Product A
24h sales: 300
48h sales: 500

Product B
24h sales: 1,200
48h sales: 1,500

Product C
24h sales: 2,000
48h sales: 2,100
Enter fullscreen mode Exit fullscreen mode

Simply sorting by 24h sales gives:

C > B > A
Enter fullscreen mode Exit fullscreen mode

But looking at the rate of change tells a different story.

Product B has increased much more sharply relative to its previous period.

That could make it more interesting for an emerging-trend detector, even though Product C has higher absolute sales.

This is why ranking products requires context.

What I Would Track

If I were building a product intelligence system from scratch, my core dataset would include:

Product ID
Country
Category
Timestamp
Total Sales
Recent Sales
Sales Velocity
Reviews
Price
Price Change
Shop Count
Shop Growth
SKU Count
Stock
Shipping
Enter fullscreen mode Exit fullscreen mode

Then I'd create derived features such as:

sales_growth
velocity_growth
sales_review_ratio
shop_adoption_growth
price_change
market_growth
inventory_change
Enter fullscreen mode Exit fullscreen mode

Those features provide much more useful information than a simple "total sales" field.

Final Thoughts

There isn't a single formula that can reliably identify a winning TikTok Shop product.

The better approach is to combine multiple signals and monitor how they change over time.

A useful pipeline is:

Collect data
     ↓
Store historical snapshots
     ↓
Calculate sales velocity
     ↓
Measure growth
     ↓
Analyze competitors
     ↓
Compare markets
     ↓
Check pricing/inventory
     ↓
Score products
     ↓
Review promising candidates
Enter fullscreen mode Exit fullscreen mode

The goal isn't to predict the next viral product with certainty.

It's to give developers and e-commerce teams a repeatable, data-driven way to identify products worth investigating before committing significant resources to them.

I'd be interested to hear how other developers approach this problem.

What signals would you add to a product-trend scoring system?

Top comments (0)