100 free credits on signup · no card required

TikTok Search API

One keyword in. Clean JSON out.

Send a keyword, get back an array of public TikTok videos matching it, each one already carrying its view, like, comment, share and save counts. It is the search box on tiktok.com, returned as JSON instead of an infinite scroll. Billing is per result at 4 credits, so a 20-video search costs 80 credits.

Credits 4 / result
Input ?query=
Cache 15m–7d
Paging limit
GET · BEARER
Request composing…
P @plannerpro

How I plan a week of posts in 30 minutes

▶ 0♥ 5,120
Fresh when it matters
age-aware cache
Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<div class="css-1qb2n7d-DivItemContainer e148ts220" data-e2e="recommend-list-item"><div class="css-x6y88p-DivContainer"><a class="css-1g95xhm-AVideoContainer" href="/@tiktok/video/7231338487075638570"><video src="blob:https://www.tiktok.com/8f3a..."></video></a></div><div class="css-1f5bbrz-DivCardFooter"><strong data-e2e="video-views" class="css-ws4x78">1.2M</strong><strong data-e2e="like-count">88.4K</strong><strong data-e2e="comment-count">2,314</strong></div><h3 class="css-1yy6f0h">Behind the scenes of our new feature</h3><script id="__UNIVERSAL_DATA_FOR_REHYDRATION__" type="application/json">{"__DEFAULT_SCOPE__":{"webapp.video-detail"...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 13 typed fields
{
"data": [
{
"id": "v_77120",
"url": "https://example-result-url",
"caption": "How I plan a week of posts in 30 minutes",
"author": {
"handle": "plannerpro"
},
"metrics": {
"views": 88210,
"likes": 5120
},
"posted_at": "2026-07-08T16:20:00Z"
}
],
"meta": {
"count": 2,
"limit": 20,
"item": "result"
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 Full objects, not stubs

An array. Every element is a full video object, not a stub: id, canonical URL, caption, the five engagement counters, runtime, publish timestamp, the author's handle and display name, the attached sound, and the parsed hashtags. You do not need a second call to the stats endpoint to find out how a result performed.

02 Ranking is TikTok's, not yours

Result ordering comes from TikTok's own search ranking, which weighs relevance, recency and engagement in a mix nobody outside the company can see. It is not sorted by views, and it is not strictly chronological. If you need a deterministic order, sort the array yourself after it lands.

03 Captions are what match

Search is keyword-based over captions and on-video text. A query of `cold brew` will surface videos whose creators wrote about cold brew, which is not the same set as everything about cold brew. Videos with no caption are effectively invisible to search however popular they are.

Field explorer Pick a key to see its type and the caveats.
number|null Nullable Sortable metric
likes

Public like count.

{
"id": "v_77120",
"url": "https://example-result-url",
"caption": "How I plan a week of posts in 30 minutes",
"views": 88210,
"likes": 5120,
"comments": 0,
"shares": 0,
"saves": 0,
"duration_sec": 0,
"posted_at": "2026-07-08T16:20:00Z",
"author": { … },
"music": "…",
"hashtags": ["…"]
}
Good fit

Reach for this when

  • Finding creators in a niche you have no seed list for. Search the topic, group the results by author.handle, and the recurring names are your shortlist.
  • Brand and product monitoring: run the same query daily and store new ids, so you see the moment someone with reach starts talking about you.
  • Building a corpus for analysis. Search returns videos with metrics attached, which is enough to answer questions about a topic without touching another endpoint.
  • Trend research before you commit to a content angle — check whether a phrase already has saturated coverage or is genuinely open.
  • Feeding a pipeline: search for URLs, then pass the interesting ones to the TikTok Transcript API to read what was actually said.
Different job?

There's an endpoint for that

  • You want everything under a specific tag. Use the TikTok Hashtag Search API — tag browsing and keyword search return different sets, and tags are the stricter filter.
  • You already know the creator. The TikTok Channel Videos API returns their recent uploads directly and costs less than searching for their name and hoping.
  • You have one video URL and want its numbers. That is the TikTok Stats API, at 3 credits for a single call rather than per-result billing.
  • You need historical coverage of a topic going back years. Search reaches what TikTok surfaces today, which skews recent and popular. There is no date-range parameter.

Pricing

Start free, pay for what comes back

Each returned video is 4 credits — about 2¢ on the monthly plan. You are billed per item returned, so a default 20-result search runs about 40¢, and an empty search still costs 1 credit.

Estimate your bill
$13/ month
30 results/day × 4 credits × 365 days = 43,800 credits/yr, or $150/yr on the annual plan plus 32 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 43,800
Plan Annual $54/yr
Per result

Estimate only, on a full-year basis. 4 credits per returned result. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

4 credits per video returned. The default is 20 results, which is 80 credits, roughly 40 cents on the monthly plan. Pass `limit` to control it. A broad exploratory query with limit=100 costs 400 credits, and it is easy to burn a plan running that in a loop.

50 is the ceiling for a synchronous response. Ask for more and the request is submitted as an async job instead: you get a job handle back and collect the results when it finishes, rather than rows in the reply. There is no pagination either way — one call returns one batch, and no cursor comes back to continue from.

You are charged for what comes back, not what you asked for. If TikTok has only 7 matches for an obscure query, you are billed for 7.

Keep queries to two or three words. Long natural-language phrases match badly because TikTok is comparing them against short captions, not documents. `protein pancakes` works; `best high protein pancake recipe for meal prep` will return less, not more.

There are no boolean operators, no quoted phrases, no minus-exclusions. Whatever filtering logic you need, apply it to the returned array in your own code.

Run the same query twice a day apart and you will get overlapping but different sets. TikTok's ranking shifts constantly and new videos push old ones out. Treat search as a sampling method, not a census.

This is the reason to dedupe on `id` rather than position. If you are monitoring, store every id you have already seen and diff against it.

Responses sit in the fast cache class, so the same query repeated inside the window returns in milliseconds with x-cache: hit. A cache hit is billed identically to a fresh call — the caching is there for speed, not discounts. Add fresh=true when you specifically need to bypass it.

Search reaches what a logged-out visitor can see. Private accounts, deleted videos and content restricted in the region we read from are simply absent from results. Nulls are normal inside a result too — plenty of live videos have no attached sound or no hashtags.

Questions

Frequently asked

Send a GET to /v1/tiktok/search with a query parameter and your API key. You get back an array of matching public videos with their metrics attached. No TikTok developer account, no app review, no OAuth. TikTok's official Display API has no public keyword search at all, which is why most people end up here.

4 credits per result returned. Credits are $0.005 each monthly and $0.0045 annual, so a 20-result search runs about 40 cents. Set the limit parameter to control spend — you are billed on what actually comes back, so a query with only 5 matches costs 20 credits, not 80. Failed calls are never charged.

You set it with the limit parameter, and the default is 20. Up to 50 comes back synchronously; anything larger is routed to an async job, so asking for 200 gets you a job handle to collect from rather than 200 rows in the response. Practical ceilings also come from TikTok rather than us: obscure queries genuinely run out of matches. Since ranking shifts between runs, one 200-result call is usually worse value than a smaller query on a schedule, deduped on id — there is no cursor to walk, so scheduled repeats are how you build coverage.

No operators, no quoted phrases, no exclusions. Plain keywords only. You can put a hashtag in the query and it will often match, but for tag-based collection the TikTok Hashtag Search API is the right endpoint — it browses the tag page directly and returns a more complete set than keyword matching does.

TikTok reranks search continuously and new uploads displace older ones, so two runs a day apart will overlap without matching. That is the platform's behaviour, not a caching artefact. Store the ids you have seen and diff against them rather than comparing result positions between runs.

Not in the request. The endpoint takes a query and a limit, nothing else. Every result carries posted_at and views, so filter the array once it lands. Bear in mind that filtering after the fact does not refund the credits for results you discard, so keep queries narrow if budget matters.

No. You get the caption, the metrics, the author and the hashtags, but not the spoken words. Take the url field from any result and pass it to the TikTok Transcript API to get the spoken words as text. That is a common two-step pipeline: search wide, then transcribe only the handful of videos worth reading.

Next

Pairs well with

Full TikTok API reference →
/v1/tiktok/hashtag-search
TikTok Hashtag Search API Videos posted under a TikTok hashtag. 3 cr / result
/v1/tiktok/transcript
TikTok Transcript API Full transcript of a TikTok video with timestamped segments. 8 cr / video
/v1/tiktok/channel-videos
TikTok Channel Videos API Latest videos from a TikTok account with per-video metrics. 3 cr / video
/v1/instagram/reels-search
Instagram Reels Search API Keyword search over Instagram reels. 3 cr / result

More TikTok endpoints

/v1/tiktok/transcript Full transcript of a TikTok video with timestamped segments. 8 credits / video /v1/tiktok/summary Short AI summary of a TikTok video, built on its transcript. 10 credits / video /v1/tiktok/stats Views, likes, comments and shares for a single TikTok video. 3 credits / video /v1/tiktok/comments Paginated comments on a TikTok video; charged per comment returned. 2 credits / comment /v1/tiktok/channel-stats Follower counts and profile metadata for a TikTok account. 3 credits / profile /v1/tiktok/channel-videos Latest videos from a TikTok account with per-video metrics. 3 credits / video /v1/tiktok/hashtag-search Videos posted under a TikTok hashtag. 3 credits / result /v1/tiktok/download Resolves a downloadable media URL for a TikTok video (URL expires within 1h). 7 credits / video

Try the TikTok Search endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/tiktok/search
Get your free API key