TikTok User Finder API: Find Accounts by Keyword in Code
Find TikTok accounts by keyword with one API call, page through the results, and read each profile, with the traps we hit when we ran it.

Find the TikTok accounts behind a keyword or a brand, with followers and verification, in one prompt. Paste this into your agent:
Set up https://monid.ai/SKILL.md, and then use Monid to search TikTok for the keyword "duolingo", page until the results stop looking relevant, keep the accounts whose handle starts with the keyword, and give me a table with handle, display name, followers, videos and whether it is verified.
One prompt finds the accounts behind a brand. 1 min setup · 8-20 hrs saved.
You have a brand, a niche or a keyword and you want the TikTok accounts that match: a list of handles with follower counts and verification, for outreach, competitor tracking or a dataset. This guide shows the quickest way to get that list into your agent or your spreadsheet, what a search and a profile read return (we ran both on 2026-10-16), and the traps we hit: a search route that fails, a second page that is not what you expect, and two follower counts in one profile. It runs through Monid, the OpenRouter for agent tools: one key, one balance, every tool priced per call.
What is the easiest way to find TikTok users through an API?
Monid. Install it once, add a key, and your agent searches TikTok users by keyword and reads any profile with no developer portal, no plan and no scraper to run.
- Pay per call. A search page and a profile read are each billed on their own, at $0.001 for the user search and $0.001 for the profile (Verified 2026-10-16 on the TikTok tools page). Buy calls as you need them: no monthly plan and no minimum top-up. Discovery and inspection are free; only a run bills.
- One install, every API. The same key and the same balance call TikTok and every other tool on Monid. No new account for Instagram or X when you need them next.
- Lives inside your agent. Install the CLI, add your key, run the prompt above, and the tools are there whenever your agent needs them, with nothing to keep running. Your agent reads
SKILL.mdand learns the rest, so setup is about a minute.
At that price a brand sweep of five search pages and a profile read for each of ten accounts is 15 calls, about $0.015 (Verified 2026-10-16).
How do you find TikTok accounts for a keyword or a list of brands?
Run one search per keyword, page with offset, keep the rows whose handle matches, and loop the whole thing over your list.
For agents
Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:
set up https://monid.ai/SKILL.md
It learns the whole discover, inspect, run workflow itself. More in the agent quickstart.
For humans
npm install -g @monid-ai/cli
monid keys add -k <your-api-key> -l main
Step 1. Search the keyword
monid run -p tikhub -e /api/v1/tiktok/app/v3/fetch_user_search_result \
--query '{"keyword": "duolingo"}'
The call needs keyword and nothing else. It returned 20 accounts, billed one call, and the response carried has_more: 1 and cursor: 20.
Step 2. Page with the offset
monid run -p tikhub -e /api/v1/tiktok/app/v3/fetch_user_search_result \
--query '{"keyword": "duolingo", "offset": 20}'
The paging parameter is offset. The live schema has no cursor input, even though the response reports a cursor field: read it, then send its value back as offset. The next section shows what the second page contains, which is why most jobs stop after the first.
Step 3. Filter on the handle, not the display name
brand = "duolingo"
rows = [u["user_info"] for u in page["user_list"]]
official = [r for r in rows if r["unique_id"].lower().startswith(brand)]
On our first page, 18 of 20 handles started with the keyword. The two that did not were teacherluke.duolingotest, a teacher's account, and duollingoportugal, a handle with a doubled letter and 1,349 followers. A display name such as "Duolingo Vietnam" with a flag emoji varies by account, while the handle is stable.
Step 4. Loop it over your list
Put one brand per line in brands.txt, then run:
mkdir -p out
while read -r brand; do
monid run -p tikhub -e /api/v1/tiktok/app/v3/fetch_user_search_result \
--query "{\"keyword\":\"$brand\"}" > "out/$(echo "$brand" | tr ' ' '_').json"
done < brands.txt
Each brand writes one file with its first 20 accounts. Page further only for the brands where the first page still looks relevant at row 20.
Or hand the whole job to an agent
Give this to your agent![]()
Set up https://monid.ai/SKILL.md, and then use Monid to for each brand on this list, search TikTok users, keep the accounts whose handle starts with the brand name, and give me one table with brand, handle, display name, followers, videos and verified or not.Can you build a TikTok user finder yourself with Python?
Yes, and for a one-off look it is a fair choice, but you own the maintenance. A scraper that drives TikTok's search page needs a browser, proxies, parsing and retries, and it breaks when TikTok changes the page or the blocking.
Free finders exist as websites and extensions that look up a handle you already know. They are fine for one name. They do not give you a keyword search over thousands of accounts with follower counts as typed JSON, which is the job of this post.
The rules side belongs in your plan too: read TikTok's terms before you build anything, because what you may do depends on where you operate and on how you use the data.
A call costs $0.001 (Verified 2026-10-16). Set against hours of your own time, the choice is easy: pick Monid for anything you will run more than once. The collection is maintained for you and the output is typed JSON instead of HTML you parse. The same trade-off holds for the other networks: the social media scraping API guide runs TikTok, Instagram, X, YouTube and LinkedIn endpoints through one key.
What does a TikTok user search return, and what can you build with it?
A page of account records with a paging pair, then one profile call per account you want to read in full. Both were run on 2026-10-16 against the keyword duolingo.
The search row
Each row wraps a user_info object next to a few empty slots (position, uniqid_position, challenges, items):
{
"user_info": {
"unique_id": "duolingo",
"nickname": "Duolingo",
"follower_count": 18265014,
"following_count": 317,
"aweme_count": 1121,
"total_favorited": 505243079,
"enterprise_verify_reason": "verified account",
"custom_verify": "",
"is_private_account": 0,
"sec_uid": "MS4wLjABAAAAxzJG…",
"uid": "6917704832925746181"
}
}
The response around the rows carries has_more, cursor and input_keyword. user_info holds roughly a hundred keys; the ones a finder uses are above, plus search_user_name, commerce_user_level and enable_direct_message.
The filters
The endpoint accepts three optional filters. user_search_profile_type set to VERIFIED returned five rows for duolingo with count 5, and all five carried enterprise_verify_reason: "verified account". The schema also lists user_search_follower_count (buckets from 0-1K to 100K and above) and user_search_other_pref (USERNAME, for username relevance).
The profile
One profile call, uniqueId set to duolingo, returned userInfo.user with the bio text in signature, bioLink, createTime as a Unix timestamp, privateAccount, isOrganization, commerceUserInfo with a category ("Shopping & Retail") and secUid, plus stats and statsV2 and a shareMeta line. itemList came back empty: a profile read does not return videos.
What you can build with it
- A brand's account map. Search the brand, keep the handle matches and you have every regional account with followers and verification.
- An outreach list by size. Use the follower filter to bucket accounts, then read each profile for the bio and link.
- A dataset from handles. Feed the handle list into the handle-to-dataset script to get one row per account.
What goes wrong when you search TikTok users at scale?
Four things hide until you run more than one brand. All four showed up on 2026-10-16.
Why did one search route return an error and the other 20 accounts?
The web route failed and the app route worked, on the same keyword, in the same minute. fetch_search_user returned HTTP 400, "Request failed. Please retry", and billed nothing; the response says so itself. The app route, fetch_user_search_result, returned 20 rows. Both are $0.001 a call (Verified 2026-10-16), and the web route has failed the same way on every attempt we have made. Its schema lists an optional cookie parameter described as "User cookie (if needed)": a session you would supply yourself.
Use the app route. The run status read COMPLETED even for the failed call, so check providerResponse.httpStatus in your loop rather than the status alone.
Why is page two not the same kind of result as page one?
Because search ranks by relevance, and relevance fades quickly. Page one for duolingo was the brand's own accounts, 13 of 20 verified. With offset 20 the call returned 40 rows, not 20, and has_more stayed 1 with cursor at 40. Two of those 40 were already on page one. Most of the rest were personal accounts: one with 5 followers and no videos, one with 68 followers, a handful with a few hundred.
Do not assume a page size. Count the rows you got and stop paging when the handles stop matching your pattern, not when has_more reaches 0.
Is the verified flag the same as official?
No. On page one, duolingoenglishtest (24,920 followers) and duolingothailand (506,424 followers) carried no verification, and both are the brand's own accounts. Verification is a strong hint, not a definition. Filter on the handle instead, and use the VERIFIED filter only when you want verified accounts and nothing else.
There is a second wrinkle in the same field: custom_verify was an empty string on every page-one row, and enterprise_verify_reason held the text. The mondly.app row on page two did the opposite and carried custom_verify: "Verified account". Read both fields.
Which follower count is right?
Both, depending on what you need. The duolingo profile call returned two stat blocks: stats said 18,300,000 followers and 505,400,000 likes as rounded integers, while statsV2 said "18263834" and "505363542" as exact strings. videoCount (1,204) and followingCount (317) matched in both. Read statsV2 and cast it yourself. If you chart stats, your line moves in steps of a hundred thousand.
Can you find a TikTok user by phone number, email or photo?
No. The search takes a keyword, and its schema has no parameter for a phone number, an email address, a photo or a video. Those are the most common suggestions when you type "tiktok user finder" into Google, and they describe a different job from the one this post covers.
What the keyword search does find is accounts whose handle, display name or bio matches your text. If you know a person's handle, skip the search and read the profile directly. If you know a name or a brand, search it and filter on the handle as above.
If your starting point is a username you want to check across other networks, one username across six platforms covers that direction.
Which endpoint should I use for which job?
| Endpoint | What it does | Input | Returns | Latency | Billing |
|---|---|---|---|---|---|
tikhub/api/v1/tiktok/app/v3/fetch_user_search_result | Search accounts by keyword | keyword, offset, count, filters | A page of account records with follower counts | About 3.7 s typical | Per call |
tikhub/api/v1/tiktok/web/fetch_user_profile | Read one account | uniqueId or secUid | Bio, link, verification, stats, no videos | About 2.0 s typical | Per call |
tikhub/api/v1/tiktok/web/fetch_search_user | Search accounts, web route | keyword, cursor, search_id, cookie | Failed with HTTP 400 on our run | About 1.4 s typical | Per call |
The latency is the endpoint's typical (median) run time from monid inspect on 2026-10-16. Billing is per call whatever the number of rows, so a page with five rows costs the same as a page with 40. Current figures are on monid.ai/tools.
The same TikTok endpoints from two providers, side by side, are in Apify vs TikHub for TikTok scraping.
When is another route a better fit?
You already have the handle. Searching for a name you know returns what you typed plus noise. Read the profile directly.
You need every account that exists. Search is a ranking, not a census. A small account with an unusual handle may never surface for a brand keyword, and paging deeper returns unrelated accounts, as the second page showed.
You need contact details. The record has no email and no phone number. enable_direct_message and bioLink are the closest fields, and they say whether you can message the account and where the bio points.
You need private accounts' content. The search and profile calls return what TikTok shows publicly. A privateAccount or is_private_account flag tells you to skip a handle; it does not unlock posts.
And the disclosure: we resell these endpoints. The most useful thing in this post is the route to avoid and the filter to use, which costs us calls rather than earning them.
Conclusion
The quickest way to find TikTok users by keyword is one search call through Monid: $0.001 a page (Verified 2026-10-16), one key for TikTok and everything else, about a minute to set up and ready inside your agent whenever you need it. Building a finder yourself works until TikTok changes its page, and costs hours of setup; Monid keeps the collection maintained.
Three things matter more than the choice of tool. Use the app route, because the web route returned a 400 on every attempt. Filter on the handle and count your rows, because page two was a different population and returned 40 rows instead of 20. And read statsV2 for follower counts, because stats is rounded.
How we estimated the time saved: building and keeping alive a TikTok search and profile scraper is roughly 4 to 10 hours each for getting past blocking, parsing typed rows with paging, and the first month of upkeep. That is 8 to 20 hours. The 1 minute is the install, key and first call once you already have a Monid key.
Free next step: run monid inspect -p tikhub -e /api/v1/tiktok/app/v3/fetch_user_search_result, search one brand you know, and print unique_id, follower_count and enterprise_verify_reason for each row. Start at monid.ai.
FAQ
Is there a free TikTok user finder API?
Not free, but close: through Monid each search page or profile read costs $0.001 (Verified 2026-10-16), with no monthly plan and no minimum top-up, and discovery and inspection cost nothing. A failed web-route call was not billed.
How do you find a TikTok user by username?
Call the profile endpoint with the handle as uniqueId. It returns the display name, bio, verification, creation time and follower counts for that account. If you only know part of the name, search the keyword first and filter on unique_id.
Can I look up a TikTok account by email or phone number?
No. The search endpoint takes a keyword, and its schema has no field for an email address or phone number. The account record has none either.
Why does the search return the same accounts on two pages?
Two of the 40 rows returned for offset 20 on our keyword had already appeared on page one. Deduplicate on unique_id or sec_uid when you merge pages.
What is the difference between a handle and a display name?
The handle is unique_id, the string in the profile URL, and the display name is nickname, free text that can hold emoji and spaces. Join and deduplicate on the handle.
Published September 2026.


