TikTok Shop Hot Products ranked a facial hydrocolloid acne patches SKU at #4 as of 2026-08-10T00:01:32Z. That board has no keyword time series, so the next step is to score acne patches on Amazon, Google Shopping, Google Search, and YouTube from Python. On the 2026-08-11 pull, Amazon sat at score 47.9 with volume 190,441 on 2026-07-31 (+5.97% over 30D, -1.03% over 3M, -10.13% over 12M). Google Shopping sat at 5.0 on 2026-08-08 (+150.0% over 7D from 2.0 on 2026-08-01, -89.13% over 3M). Google Search sat at 41.0 on 2026-08-08 (0.0% over 7D, -48.1% over 3M). YouTube sat at 60.0 on 2026-08-08 (+53.85% over 7D, +39.53% over 3M). TikTok keyword series returned no_data. One Bearer POST, four sources, double-parsed JSON.
Shared Python client
Reuse the same helper as the Python Trends API integration and the demand sensing API page. requests, Bearer auth, second json.loads on body.
import json
import os
import requests
API_URL = "https://api.trendsapi.ai/api"
API_KEY = os.environ["TRENDSAPI_API_KEY"]
def trends_api(payload):
res = requests.post(
API_URL,
headers={
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
},
json=payload,
timeout=60,
)
res.raise_for_status()
envelope = res.json()
# body is a JSON string; parse it a second time
return json.loads(envelope["body"])
Free tier is 100 successful requests per month. Starter 5,000. Pro 25,000. Business 100,000. Only HTTP 200 counts.
Step 1: read the live board
get_top_trends needs a type and no keyword. Limit 15 returned the derma roller listing at rank 1, a sports top at rank 2, GeeYea nude ankle strap block heel sandals at rank 3, and facial hydrocolloid acne patches at rank 4.
board = trends_api({
"mode": "get_top_trends",
"type": "TikTok Shop Hot Products",
"limit": 15,
})
print(board["as_of_ts"], board["data"][3])
Normalize the long SKU title to acne patches. Keep rank 4 and the as_of_ts in the output row for audit. Marketplace context from Amazon Best Sellers Top Rated on the same session (as_of_ts 2026-08-10T04:01:35Z) led with AA batteries, AAA batteries, and Crocs Classic Clog, so the acne patches signal is social-commerce led rather than Amazon bestseller led.
Step 2: Amazon growth and volume
Amazon is the absolute-volume anchor. Prefer monthly presets. On this pull, 7D and 14D returned collapsed_range. Amazon source notes live at Amazon trends.
amazon = trends_api({
"mode": "get_growth",
"source": "amazon",
"keyword": "acne patches",
"percent_growth": ["7D", "14D", "30D", "3M", "6M", "12M"],
})
| Period | Status | Recent date | Score | Volume | Growth |
|---|---|---|---|---|---|
| 7D | collapsed_range | n/a | n/a | n/a | n/a |
| 14D | collapsed_range | n/a | n/a | n/a | n/a |
| 30D | success | 2026-07-31 | 47.9 | 190,441 | +5.97% |
| 3M | success | 2026-07-31 | 47.9 | 190,441 | -1.03% |
| 6M | success | 2026-07-31 | 47.9 | 190,441 | -6.99% |
| 12M | success | 2026-07-31 | 47.9 | 190,441 | -10.13% |
Baseline volumes tell the same story: 179,342 on 2026-06-30, 192,363 on 2026-04-30, 204,575 on 2026-01-31, and 211,778 on 2025-07-31. Volume growth was +6.19% (30D), -1.0% (3M), -6.91% (6M), and -10.08% (12M), within 0.3 points of score growth on each successful period.
Step 3: Shopping, Search, and YouTube
Call each source separately. Shopping, Search, and YouTube tip on 2026-08-08 for this pull.
for source, periods in [
("google shopping", ["7D", "14D", "30D", "3M", "6M", "12M"]),
("google search", ["7D", "14D", "30D", "3M", "6M", "12M"]),
("youtube", ["7D", "14D", "30D", "3M", "6M", "12M"]),
]:
body = trends_api({
"mode": "get_growth",
"source": source,
"keyword": "acne patches",
"percent_growth": periods,
})
print(source, body["results"])
| Source | Recent date | Score | 7D | 14D | 30D | 3M | 6M | 12M |
|---|---|---|---|---|---|---|---|---|
| google shopping | 2026-08-08 | 5.0 | +150.0% | see note | -16.67% | -89.13% | -61.54% | -88.1% |
| google search | 2026-08-08 | 41.0 | 0.0% | -16.33% | -28.07% | -48.1% | -16.33% | -16.33% |
| youtube | 2026-08-08 | 60.0 | +53.85% | -11.76% | 0.0% | +39.53% | -29.41% | -13.04% |
Shopping 7D baseline was 2.0 on 2026-08-01. Shopping 14D baseline was 0.0 on 2026-07-25 with recent 5.0 on 2026-08-08, so report the raw scores instead of the inflated percent growth. Shopping longer windows remain deep red: 46.0 on 2026-05-09 (3M), 13.0 on 2026-02-07 (6M), and 42.0 on 2025-08-09 (12M). Search baselines were 41.0 on 2026-08-01 (7D, flat), 49.0 on 2026-07-25 (14D), 57.0 on 2026-07-11 (30D), and 79.0 on 2026-05-09 (3M). YouTube baselines were 39.0 on 2026-08-01 (7D), 68.0 on 2026-07-25 (14D), 60.0 on 2026-07-11 (30D, flat), and 43.0 on 2026-05-09 (3M). The short YouTube bounce sits against a 6M decline from 85.0 on 2026-02-07.
Step 4: TikTok keyword series is a separate signal
try:
tiktok = trends_api({
"mode": "get_growth",
"source": "tiktok",
"keyword": "acne patches",
"percent_growth": ["7D", "14D", "30D"],
})
except Exception as exc:
tiktok = {"error": str(exc)}
On 2026-08-11 the TikTok keyword series returned no_data for acne patches. That does not contradict TikTok Shop Hot Products rank 4. The board is a live SKU ranking. The keyword series is a separate hashtag/search history. Keep both fields in the scorecard: tiktok_shop_rank=4 and tiktok_keyword=no_data.
Step 5: Amazon history for level checks
series = trends_api({
"mode": "get_time_series",
"source": "amazon",
"keyword": "acne patches",
})
print(series[-1], max(series, key=lambda p: p["value"]))
Amazon monthly history for acne patches peaks at score 100.0 with volume 397,188 on 2023-11-30. Nearby peaks were 95.2 / 378,264 on 2023-10-31 and 86.3 / 342,739 on 2023-09-30. Later years are lower: 86.5 / 343,677 on 2024-03-31, 74.6 / 296,151 on 2024-12-31, 62.8 / 249,368 on 2025-11-30, then 47.9 / 190,441 on 2026-07-31. The 30D rebound from 45.2 / 179,342 on 2026-06-30 is real, but the tip remains far below the 2023 peak. Early series points include 42.0 / 166,945 on 2022-07-31 and 54.7 / 217,068 on 2022-08-31, so the category has multi-year Amazon coverage for threshold logic.
Put the scorecard in one function
def acne_patches_scorecard():
board = trends_api({
"mode": "get_top_trends",
"type": "TikTok Shop Hot Products",
"limit": 15,
})
rows = []
for source in ["amazon", "google shopping", "google search", "youtube"]:
body = trends_api({
"mode": "get_growth",
"source": source,
"keyword": "acne patches",
"percent_growth": ["7D", "14D", "30D", "3M", "6M", "12M"],
})
for result in body.get("results", []):
rows.append({"source": source, **result})
return {
"as_of_ts": board["as_of_ts"],
"tiktok_shop_rank": 4,
"keyword": "acne patches",
"growth": rows,
}
Read the table as a cross-source check, not a single green light. Amazon volume is stable-to-soft on a 12M view (-10.13%) with a mild 30D lift (+5.97% score, +6.19% volume). Shopping is a low absolute score (5.0) with a low-base 7D spike from 2.0, while 3M and 12M remain deeply negative at -89.13% and -88.1%. Search is flat over 7D at 41.0, down -28.07% over 30D from 57.0, and down -48.1% over 3M from 79.0. YouTube is the loud short signal (+53.85% 7D to 60.0 from 39.0) without matching Search lift, and the 6M view is still down -29.41% from 85.0. That mix reads as a content-led bounce on a category that has already cooled on Amazon and Shopping from 2023-2024 peaks.
What to store from one run
Persist the fields an analyst can replay without another API call. Minimum columns: pull_date=2026-08-11, board_as_of_ts, tiktok_shop_rank=4, keyword=acne patches, Amazon tip date 2026-07-31, Amazon tip score 47.9, Amazon tip volume 190441, Shopping tip 5.0 on 2026-08-08, Search tip 41.0, YouTube tip 60.0, plus every period status string including collapsed_range and no_data. Also store Amazon peak 100.0 / 397188 on 2023-11-30 from the time series call so a later dashboard can show tip-versus-peak without refetching history.
A practical nightly compare uses three booleans. amazon_30d_up is true when Amazon 30D growth exceeds +5%. shopping_low_base_spike is true when Shopping tip is under 10.0 and Shopping 7D growth exceeds +100%. youtube_leads_search is true when YouTube 7D growth exceeds +50% while Search 7D is at or below 0.0%. On this pull all three are true. That is enough to page a product researcher, not enough to raise inventory on its own. Confirm with a second keyword such as pimple patches or a brand SKU before changing buy plans.
For the evergreen demand sensing loop around this pattern, use the demand sensing API page. For a broader shop-board pipeline that starts from many TikTok Shop ranks instead of one SKU, use the ecommerce product research pipeline.