Skip to main content

Search TikTok

Search TikTok by keyword across three verticals — videos, users, or hashtags. The query is passed to TikTok's native search, which is relevance-ranked.

GET /v1/tiktok/search
No boolean operators

TikTok's search is a relevance engine, not a boolean index. Operators like AND / OR / NOT are not supported — they'd be treated as literal words. Just pass natural keywords (e.g. dental care).

Query parameters

ParameterTypeDefaultDescription
querystringRequired. A keyword, e.g. dental care or looksmaxxing.
typestringvideoSearch vertical: video, user, or hashtag.
countinteger20Results requested per TikTok page. Maximum 30.
max_pagesinteger1Number of TikTok pages to fetch. Maximum 100.

Pagination follows TikTok: fetching max_pages pages returns those pages' items, deduplicated across pages, in TikTok's relevance order. Fewer pages may come back if TikTok has no more results.

Examples

Videos:

curl -G "$LISTENX_BASE/v1/tiktok/search" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'query=dental care'

Users, three pages:

curl -G "$LISTENX_BASE/v1/tiktok/search" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'query=dentist' \
--data-urlencode 'type=user' \
--data-urlencode 'max_pages=3'

Hashtags:

curl -G "$LISTENX_BASE/v1/tiktok/search" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'query=looksmaxxing' \
--data-urlencode 'type=hashtag'

Response (video)

{
"query": "dental care",
"type": "video",
"pages_requested": 1,
"pages_fetched": 1,
"returned": 18,
"results": [
{
"id": "7523456789012345678",
"url": "https://www.tiktok.com/@doc/video/7523456789012345678",
"type": "video",
"desc": "3 tips for whiter teeth #dentalcare",
"created_at": "2025-06-12T15:25:12+00:00",
"author": {
"id": "99887766",
"unique_id": "doc",
"nickname": "Dr. Smile",
"sec_uid": "MS4wLjABAAAA…",
"is_verified": true,
"follower_count": 120400,
"heart_count": 3400000
},
"engagement": {
"play_count": 185300,
"digg_count": 4045,
"comment_count": 238,
"share_count": 512,
"collect_count": 1290,
"repost_count": 12
},
"music": { "id": "…", "title": "original sound", "author": "doc", "is_original": true },
"cover": "https://…",
"duration": 15
}
],
"billing": {
"endpoint": "tiktok.search",
"units": 1,
"unit_price": "0.010000",
"amount": "0.010000",
"balance_after": "97.240000",
"request_id": "…"
}
}

The results[] shape depends on type:

  • video — post records (see above); id is the video id.
  • user{ id, unique_id, nickname, sec_uid, avatar_url, is_verified, signature, follower_count }.
  • hashtag{ id, name, desc, view_count, video_count }.

Fields

FieldDescription
typeThe search vertical you queried.
pages_requestedThe max_pages you asked for.
pages_fetchedTikTok pages actually fetched (also the number of billed units).
returnedNumber of items in results (deduplicated across pages).
results[]Lightweight records, in TikTok's relevance order.

Billing

Search is billed per page fetchedunits = pages_fetched, minimum 1. So max_pages=3 costs up to 3 units (fewer if TikTok runs out of pages sooner). See Billing.

Notes

  • To fetch complete details (all engagement metrics, media URLs, hashtags, music, etc.) for a specific video, call the post endpoint with its id.
  • TikTok's search is a discovery surface; results are not exhaustive and can shift over time.