TikTok Shop is generating billions in GMV and most product researchers are still doing it manually — scrolling TikTok for hours, screenshotting trending products.
I automated the entire research workflow. Here is the exact system.
What the System Tracks
- Viral product velocity — products gaining views faster than baseline
- Affiliate commission rates — products paying 10-20%+ are worth promoting
- Competition density — how many creators already promoting the product
- Price anchoring signals — original vs sale price ratio (higher = better conversion)
- Review velocity — new reviews per day as a proxy for sales volume
The Data Sources
TikTok Shop API (Official)
TikTok has a Shop API but it requires seller account verification and approval. For product research (not selling), the API scope is limited.
TikTok Hashtag Pages
Hastag pages like #TikTokMadeMeBuyIt show trending products in real time. The page is public, JavaScript-rendered.
TikTok Shop Web (shop.tiktok.com)
Product listings, prices, and review counts are accessible via the web interface.
The Technical Stack
TikTok Anti-Bot Overview
TikTok uses a custom bot detection system (webmssdk) that checks:
- Browser fingerprint consistency
- JavaScript challenge completion
- Cookie chain integrity (must follow proper session flow)
Naive requests fails immediately. Playwright with stealth patches works.
from playwright.async_api import async_playwright
import asyncio, json
async def scrape_tiktok_product(product_url: str):
async with async_playwright() as p:
browser = await p.chromium.launch(
headless=True,
args=['--disable-blink-features=AutomationControlled']
)
context = await browser.new_context(
viewport={'width': 1920, 'height': 1080},
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
)
# Inject stealth patches
await context.add_init_script("""
Object.defineProperty(navigator, 'webdriver', {get: () => undefined});
Object.defineProperty(navigator, 'plugins', {get: () => [1,2,3,4,5]});
""")
page = await context.new_page()
await page.goto(product_url, wait_until='networkidle')
# Extract product data from page JSON
data = await page.evaluate("() => window.__STORE__")
return data
Identifying Viral Velocity
The key metric is view acceleration, not absolute view count:
from datetime import datetime, timedelta
import statistics
def calculate_velocity_score(video_views_by_day: list) -> float:
if len(video_views_by_day) < 3:
return 0
# Compare last 3 days vs previous 7-day baseline
recent = video_views_by_day[-3:]
baseline = video_views_by_day[-10:-3]
recent_avg = statistics.mean(recent)
baseline_avg = statistics.mean(baseline) if baseline else recent_avg
if baseline_avg == 0:
return 0
return recent_avg / baseline_avg # >2.0 = going viral
# Products with velocity_score > 2.5 in the last 3 days = prime research targets
The Commission Rate Filter
Not all viral products are worth promoting. The minimum viable commission for TikTok affiliate:
- Commission rate: at least 10% (15%+ preferred)
- Product price: $20-$80 sweet spot (conversion rate drops above $100)
- Review count: >500 (social proof)
- Review rating: >4.3
def is_worth_promoting(product: dict) -> bool:
return (
product['commission_rate'] >= 0.10 and
20 <= product['price'] <= 80 and
product['review_count'] >= 500 and
product['rating'] >= 4.3 and
product['velocity_score'] >= 1.5
)
Competition Density Check
Before committing to a product, check creator saturation:
def get_creator_count(product_id: str) -> int:
# Search TikTok for product showcase videos
results = search_tiktok_videos(f'#{product_id} #TikTokShop')
unique_creators = len(set(v['author_id'] for v in results))
return unique_creators
# Under 50 creators promoting = low competition
# 50-200 = medium competition
# 200+ = saturated, look elsewhere
What My Automated System Found Last Month
| Product | Commission | Velocity Score | Creators | Result |
|---|---|---|---|---|
| LED mirror | 15% | 3.2x | 34 | Winner |
| Portable blender | 12% | 1.8x | 89 | Pass |
| Massage gun | 18% | 2.1x | 210 | Too saturated |
| Magnetic charger | 10% | 4.7x | 12 | Winner |
| Skincare roller | 20% | 1.4x | 445 | Saturated |
The system scans 300+ products daily and surfaces 3-5 genuine opportunities.
Ready-to-Use Setup
Building the TikTok stealth scraper from scratch takes a week. I have packaged the version I use:
TikTok + Social Media Scraper Bundle — €29
Includes:
- TikTok Shop product scraper (Playwright + stealth patches)
- Viral velocity calculator
- Commission rate filter
- Creator competition density checker
- Daily monitoring setup with Telegram alerts
Testing the velocity formula on different product categories — drop a comment if you want me to share what threshold values work for specific niches.
Top comments (0)