DEV Community

Vhub Systems
Vhub Systems

Posted on

I Automated TikTok Shop Product Research. Here's the Exact System (With Code).

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

  1. Viral product velocity — products gaining views faster than baseline
  2. Affiliate commission rates — products paying 10-20%+ are worth promoting
  3. Competition density — how many creators already promoting the product
  4. Price anchoring signals — original vs sale price ratio (higher = better conversion)
  5. 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
    )
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)