Overview
This workflow monitors trending products on TikTok and cross-references them with Amazon listings to detect viral-to-marketplace opportunities. When a product starts trending on TikTok (based on hashtag volume and video engagement), the pipeline checks Amazon for the same product to see pricing, availability, and seller competition. Ecommerce teams use this to stock trending products before demand peaks on marketplaces.
Trigger
Daily cron schedule
Schedule
Runs daily
Workflow Steps
Scan TikTok trending hashtags
Query Scavio TikTok hashtag endpoint for product-related trending hashtags.
Identify product-related trends
Filter trends to find specific products or product categories with rising engagement.
Cross-reference on Amazon
Search Scavio Amazon for each trending product to check availability, pricing, and competition.
Score opportunity
Calculate an opportunity score based on TikTok trend strength vs Amazon competition level.
Output opportunity feed
Generate a ranked feed of product opportunities with TikTok and Amazon data.
Python Implementation
import requests
import json
from datetime import datetime
from pathlib import Path
API_KEY = "your_scavio_api_key"
TIKTOK_URL = "https://api.scavio.dev/api/v1/tiktok"
def check_tiktok_trend(product: str) -> dict:
res = requests.post(
f"{TIKTOK_URL}/search/videos",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"query": product},
timeout=15,
)
if not res.ok:
return {"product": product, "tiktok_videos": 0, "tiktok_views": 0}
videos = res.json().get("videos", [])
return {
"product": product,
"tiktok_videos": len(videos),
"tiktok_views": sum(v.get("play_count", 0) for v in videos),
}
def check_amazon(product: str) -> dict:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": product},
timeout=15,
)
res.raise_for_status()
results = res.json().get("organic", [])[:5]
prices = [r.get("price") for r in results if r.get("price")]
return {
"amazon_listings": len(results),
"price_range": f"${min(prices)}-${max(prices)}" if prices else "n/a",
}
def run():
date = datetime.utcnow().strftime("%Y-%m-%d")
products = ["LED face mask", "portable blender", "cloud slides", "Stanley tumbler", "hair oil serum"]
opportunities = []
for product in products:
tiktok = check_tiktok_trend(product)
amazon = check_amazon(product)
opportunities.append({**tiktok, **amazon})
opportunities.sort(key=lambda x: x["tiktok_views"], reverse=True)
Path(f"tiktok_amazon_{date}.json").write_text(json.dumps({"date": date, "opportunities": opportunities}, indent=2))
for o in opportunities:
print(f" {o['product']}: {o['tiktok_views']:,} TikTok views, {o['amazon_listings']} Amazon listings ({o['price_range']})")
if __name__ == "__main__":
run()JavaScript Implementation
const API_KEY = "your_scavio_api_key";
const T = "https://api.scavio.dev/api/v1/tiktok";
async function checkTrend(product) {
const tikRes = await fetch(`${T}/search/videos`, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, "content-type": "application/json" },
body: JSON.stringify({ query: product }),
});
const videos = tikRes.ok ? ((await tikRes.json()).videos ?? []) : [];
const amzRes = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform: "amazon", query: product }),
});
const listings = ((await amzRes.json()).organic ?? []).slice(0, 5);
return { product, tiktokVideos: videos.length, tiktokViews: videos.reduce((s, v) => s + (v.play_count ?? 0), 0), amazonListings: listings.length };
}
for (const p of ["LED face mask", "portable blender", "cloud slides"]) {
const r = await checkTrend(p);
console.log(`${r.product}: ${r.tiktokViews.toLocaleString()} TikTok views, ${r.amazonListings} Amazon listings`);
}Platforms Used
TikTok
Trending video, creator, and product discovery
Amazon
Product search with prices, ratings, and reviews