TikTok Shop Hot Products ranked "Micro Ingredients Multi Collagen Peptides Powder, 8oz" at position 2 as of 2026-08-08T10:01:35Z. The plain keyword collagen peptides is enough to score that demand in Python. On the same pull date, TikTok 7D growth was 288.16% with recent volume 650,495, Amazon 30D volume sat at 1,720,662 with score 57.4, and Google Search interest was 30.0 after a 30D drop of -41.18%. One requests helper and five get_growth calls produce the table. Parse the API body string twice before reading rows.
Pull the live board, then lock a keyword
get_top_trends needs no keyword. Use it to pick what to score next, then switch to get_growth for period math.
import json
import os
import requests
API_URL = "https://api.trendsapi.ai/api"
API_KEY = os.environ["TRENDSAPI_API_KEY"]
def trends_api(payload: dict):
r = requests.post(
API_URL,
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
r.raise_for_status()
return json.loads(r.json()["body"])
board = trends_api({
"mode": "get_top_trends",
"type": "TikTok Shop Hot Products",
"limit": 15,
})
print(board["data"][1]) # rank 2 row on 2026-08-08
Board snapshot used for this article (limit 15, offset 0, count 15):
| Rank | Product |
|---|---|
| 1 | Men's Loose-Fit Button Front Short Sleeve Collared Shirt |
| 2 | Micro Ingredients Multi Collagen Peptides Powder, 8oz |
| 3 | Women's Casual Denim Spaghetti Strap Backless Wide-Leg Jumpsuit |
| 4 | Ear Wax Removal tool kit with camera |
| 5 | Fiesta Print Tortilla Warmer Pouch |
Rank 2 maps cleanly to the research keyword collagen peptides. Long SKU titles rarely match source indexes; short category phrases do.
Multi-source get_growth payload
Call sources one at a time. Comma-separated multi-source growth can time out on some gateways. Loop instead.
SOURCES = [
"tiktok",
"amazon",
"google search",
"google shopping",
"youtube",
]
PERIODS = ["7D", "14D", "30D", "3M", "12M"]
keyword = "collagen peptides"
for source in SOURCES:
data = trends_api({
"mode": "get_growth",
"source": source,
"keyword": keyword,
"percent_growth": PERIODS,
})
for row in data["results"]:
print(source, row.get("period"), row.get("status"), row.get("growth"), row.get("recent_volume"))
Live figures pulled on 2026-08-08
TikTok
TikTok normalized the hashtag-style term to collagenpeptides. History in this pull runs from 2026-07-07 to 2026-08-05 (30 points). 3M failed with date_out_of_range.
| Period | Recent date | Recent value | Baseline value | Growth | Recent volume | Volume growth |
|---|---|---|---|---|---|---|
| 7D | 2026-08-05 | 59.0 | 15.2 | 288.16% | 650,495 | 17.28% |
| 14D | 2026-08-05 | 59.0 | 1.4 | 4114.29% | 650,495 | 24.04% |
| 30D | 2026-08-05 | 59.0 | 67.0 | -11.94% | 650,495 | -2.64% |
| 3M | error | date_out_of_range |
The 14D jump from 1.4 to 59.0 is a spike relative to a near-floor baseline. Pair it with 30D (-11.94%) before treating the SKU as a sustained breakout.
Amazon
Amazon returned 49 history points. 7D and 14D failed with collapsed_range (not enough distinct points for those presets).
| Period | Recent date | Recent value | Baseline value | Growth | Recent volume | Volume growth |
|---|---|---|---|---|---|---|
| 30D | 2026-07-31 | 57.4 | 56.2 | 2.14% | 1,720,662 | 2.24% |
| 3M | 2026-07-31 | 57.4 | 60.2 | -4.65% | 1,720,662 | -4.57% |
| 12M | 2026-07-31 | 57.4 | 60.1 | -4.49% | 1,720,662 | -4.37% |
Commerce volume is large and nearly flat over 12M. Social spike without Amazon acceleration is a content signal first, inventory signal second.
Google Search
Estimated monthly search volume on the recent point is 103,000. Volume growth fields are omitted on this source because volume is derived from the trend value.
| Period | Recent date | Recent value | Baseline value | Growth | Recent volume |
|---|---|---|---|---|---|
| 7D | 2026-08-01 | 30.0 | 37.0 | -18.92% | 103,000 |
| 30D | 2026-08-01 | 30.0 | 51.0 | -41.18% | 103,000 |
| 3M | 2026-08-01 | 30.0 | 68.0 | -55.88% | 103,000 |
| 12M | 2026-08-01 | 30.0 | 26.0 | 15.38% | 103,000 |
Search interest is cooler than mid-spring (baseline 68.0 on 2026-05-02) but still above the year-ago baseline of 26.0.
Google Shopping
| Period | Recent date | Recent value | Baseline value | Growth |
|---|---|---|---|---|
| 7D | 2026-08-01 | 4.0 | 5.0 | -20.0% |
| 14D | 2026-08-01 | 4.0 | 5.0 | -20.0% |
| 30D | 2026-08-01 | 4.0 | 16.0 | -75.0% |
| 3M | 2026-08-01 | 4.0 | 50.0 | -92.0% |
| 12M | 2026-08-01 | 4.0 | 5.0 | -20.0% |
Shopping interest fell from 50.0 on 2026-05-02 to 4.0 on 2026-08-01. That is a -92.0% 3M move while TikTok 7D is up sharply.
YouTube
| Period | Recent date | Recent value | Baseline value | Growth |
|---|---|---|---|---|
| 7D | 2026-08-01 | 68.0 | 79.0 | -13.92% |
| 30D | 2026-08-01 | 68.0 | 90.0 | -24.44% |
| 3M | 2026-08-01 | 68.0 | 64.0 | 6.25% |
| 12M | 2026-08-01 | 68.0 | 63.0 | 7.94% |
YouTube remains elevated on a 12M basis (+7.94%) while short windows cool from 90.0 and 79.0.
How to read the stack in code
A product research script should not average these sources. Rank them by decision:
- TikTok 7D/14D for creator and Shop momentum.
- Amazon 30D/12M volume for purchase intent that already clears checkout.
- Google Search and Shopping for broader demand and offer pressure.
- YouTube for review and how-to content load.
def row_ok(item: dict) -> bool:
return item.get("status") == "success"
summary = {}
for source in SOURCES:
data = trends_api({
"mode": "get_growth",
"source": source,
"keyword": keyword,
"percent_growth": ["7D", "30D", "12M"],
})
summary[source] = [r for r in data["results"] if row_ok(r)]
tiktok_7d = next(r for r in summary["tiktok"] if r["period"] == "7D")
amazon_30d = next(r for r in summary["amazon"] if r["period"] == "30D")
assert tiktok_7d["growth"] == 288.16
assert amazon_30d["recent_volume"] == 1720662
Absence matters. Amazon collapsed_range on 7D/14D and TikTok date_out_of_range on 3M are part of the result, not bugs to hide. Log the error string next to the source.
Hook this into a daily job
Schedule the board pull once, keep the top 10 titles, map each to a short keyword, then run growth for tiktok, amazon, and google search. Store data_date, recent_value, growth, and recent_volume. Free tier is 100 successful requests per month; a 10-SKU × 3-source daily job needs a paid tier (Starter 5,000).
For the reusable client pattern, auth header, and PyPI volume examples, use the evergreen Python Trends API page. For Google Search field details, see Google Search trends. For another SKU walkthrough on the same API shape, see portable coffee maker product research.
Collagen peptides on 2026-08-08 is a split signal: TikTok Shop and short-window TikTok growth are hot, Amazon volume is large but flat, and Google Shopping is deeply down from spring. The Python job surfaces that disagreement in minutes instead of forcing a single blended score. Keep the raw period rows in storage so later reviews can replay the same thresholds without re-calling the API.