# Tiktok Ad Research

> Research TikTok Creative Center Top Ads by brand, market, industry, and objective through Crawlora. Use for competitor-ad comparisons, creative briefs, messaging and format analysis, and inspection of public ad-performance charts.

- Skill: `crawlora-org/tiktok-ad-research` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add crawlora-org/tiktok-ad-research`
- Raw SKILL.md: https://api.skillmd.com/api/skills/crawlora-org/tiktok-ad-research/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: Crawlora-org (https://skillmd.com/u/crawlora-org)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/crawlora-org/tiktok-ad-research

---


# TikTok ad research

Build a sourced comparison of TikTok Top Ads and explain which creative ideas
are supported by observed content and public performance signals. Top Ads is a
selected collection of high-performing auction ads, not every advertiser's campaigns.

## Setup and requests

Set `CRAWLORA_API_KEY` to your key from [crawlora.net](https://crawlora.net).
Run the bundled `scripts/crawlora.sh` from this skill directory or by absolute
path. It sends `x-api-key` to `https://api.crawlora.net/api/v1` and prints JSON.
Keep the key in the environment. Read [reference/endpoints.md](reference/endpoints.md)
for the ten Top Ads endpoints and their exact parameters.

## Workflow

1. Determine the brands/product keywords, market, objective, lookback period,
   and requested sample size from the brief. Discover current industry,
   objective, language, and country IDs through `/tiktok/top-ads/filters`;
   use `/locations` and `/location-info` when the geography needs clarification.
2. Search `/tiktok/top-ads/list`, keeping market, period, and objective consistent
   across competitors. `period` is `7`, `30`, or `180`; `limit` is at most 100.
   `order_by` accepts `for_you`, `impression`, `ctr`, `play_2s_rate`,
   `play_6s_rate`, `cvr`, or `like`. State the sort because it changes the sample.
3. Deduplicate by Top Ads material ID and fetch `/tiktok/top-ads/detail` for a
   bounded shortlist. **Use the returned material ID**, not a TikTok video ID.
   Recommendations and spotlight ads can widen discovery, but mark them as
   supplemental rather than silently mixing them into a matched comparison.
4. Use `/tiktok/top-ads/analysis` when performance over the ad's duration matters.
   Metrics are `retain_ctr`, `retain_cvr`, `click_cnt`, `convert_cnt`, and
   `play_retain_cnt`; `period_type` is `7`, `30`, or `180`. Match metric and
   period across ads before comparing charts or percentiles.
5. Inspect the actual creative when the environment supports video/image viewing.
   If only metadata is accessible, limit conclusions to title/copy and returned
   fields. Do not claim to have watched a hook or heard audio from metadata alone.
6. Summarize recurring messaging, format, offer, and call-to-action patterns with
   linked examples. Present proposed creative tests as hypotheses; public charts
   do not establish what caused conversion performance.

```sh
scripts/crawlora.sh /tiktok/top-ads/filters
scripts/crawlora.sh /tiktok/top-ads/list \
  keyword=skincare country_code=US period=30 limit=10 order_by=ctr
```

## Output and interpretation

Return a comparison with `material_id`, available advertiser/title, source link,
country, objective, lookback, duration, observed messaging/format, returned
performance fields, and retrieval time. Preserve metric labels and units as
reported; a percentile is not a raw CTR, spend estimate, or ROI.

- Keyword results may mention a brand without belonging to it. Verify advertiser
  identity where available and mark uncertain matches.
- No matches means none in the queried Top Ads sample, not that the competitor
  is inactive. Describe the filters and coverage rather than claiming all ads.
- Keep signed media URLs as returned; they may expire. Retain material IDs and
  source-page links when available so the research can be repeated.
- The response can contain nested upstream `code`/`msg`/`data`. Check both the
  Crawlora envelope and any upstream code before treating `materials` as results.
  Stop at `pagination.has_more=false` or the agreed sample bound.
- On `429`, back off; retry a transient `5xx` once. Stop on `401`/`403` and
  report the source limitation. Preserve a partial comparison if only some
  details/charts load, clearly marking missing observations.

