Search TikTok creators
search_creatorsSearch the Tokfluence TikTok creator index (millions of profiles) by keyword and structured filters. This is the primary tool: use it to build a candidate pool, then narrow it yourself.
How to get good results:
A brief with more than one requirement goes in
concepts, notquery. "Curly hair creators over 40" is two requirements, and asking for it as one keyword returns curly-hair creators of any age mixed with over-40 creators with any hair.concepts: ["curly hair", "over 40"]requires both.Run several searches with different keywords rather than one search with a long keyword string. The index matches creator bios, hashtags and captions, so "postpartum" and "pelvic floor" find different people and the union is the pool.
Start wide and tighten. A first pass with only
queryandmin_followerstells you how much supply exists; add filters once you can see the shape of it.regionsis the filter most likely to hide people from you. Creators we hold no country for are removed by it even though nothing says they are in the wrong place. Readregion_filterin the response: when the number it reports dwarfs your result count, search withoutregionsand read location off the bios.niche_levelcontrols how hard a keyword has to bind. "wide" matches a creator who used the tag once, "laser" only creators the tag actually defines. Default "balanced". Drop to "wide" when a niche returns almost nothing.Results are relevance-ranked by default, so page 1 is the index's best guess. It is a guess: keep reading with
pageuntil you have a pool several times larger than the list you intend to deliver, then rank it yourself.Passing
sortreplaces relevance ranking with that ordering. Useful to answer "who are the biggest creators here", bad for finding the right ones. Once sorted you are descending through reach, not fit, so on-brief hits thin out as you page and that is NOT the niche running out. Judge coverage unsorted. The response says so inrankingwhenever sort is combined with a keyword.Creators who state a minor's age in their bio are always excluded, and nothing turns that off. About half state no age at all; those come back marked
age_unknownand have NOT been cleared. For a paid-promo brief, read their bios before you deliver them.Contact emails are stored unvalidated, so some of them are not addresses at all. Read
contact_email_confidenceon each row and send only tohas_validated_email. A bounce costs the customer their own sending reputation.Results are a starting point, not a verdict. Rank the pool yourself on the evidence in each row (bio wording, hashtags, engagement against follower count), and call get_creator_posts on the handful you are unsure about.
Every response carries a coverage verdict saying whether the index really covers
this niche and what to do next. Follow it. When it reports a genuine gap, tell the
user what you found and offer to start a crawl; never start one without asking.
Set include_images to show the creators' profile pictures inline in the chat.
Use it when you are presenting a shortlist to the user, who is choosing people to
work with and should be able to see them. Leave it off while you are sweeping
pages to build a pool, where nobody is looking at the intermediate results.
A search call costs 1 credit, plus 1 per profile with contact details it returns
(a contact email or phone in the row). Rows without contact details are free, and
an empty page costs nothing. Every page is its own call. Control the cost with the
contact filters: has_email: true returns only creators with an email, so every
credit buys someone you can reach; has_email: false and has_phone: false return
only creators without, at 1 credit a page. Creators removed for stating a minor's
age are not charged.
When the balance cannot cover every profile with contact details, the page is still
returned whole: the profiles it could not pay for come back without their contact
values, and billing says how many.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "search_creators"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. Read several pages to build a pool; `max_page` in the response is the last one you can ask for. | |
| sort | No | Result ordering. Defaults to relevance. | |
| brand | No | true returns brand accounts, false returns individual creators. | |
| query | No | Keyword or phrase matched against bios, hashtags and captions. Omit to filter without a keyword. | |
| gender | No | Filter on the profile-picture category. An estimated presentation category, inferred by a model from the profile picture. It is not the creator's sex or gender identity, and it is sometimes wrong. Do not use it to make discriminatory or eligibility decisions about a person. | |
| regions | No | ISO-3166 alpha-2 country codes, e.g. ['GB','IE']. Matches the creator's own country, inferred from tagged places and caption language. Many creators carry no country at all, especially recently crawled ones, and this filter removes them along with the ones known to be elsewhere. The response's `region_filter` says how many that cost you. | |
| concepts | No | Requirements the creator must ALL satisfy, one per entry, e.g. ['curly hair', 'over 40']. Each is matched by its own words or by the hashtags creators in that niche actually use, so a creator tagged #over40club counts as 'over 40' without writing the phrase. Use this for any brief with more than one requirement; use `query` for a single subject. Both can be given: concepts decide who is in the set, query orders them. | |
| hashtags | No | Hashtags the creator posts under, without '#'. Narrower and more literal than `query`. | |
| mentions | No | Accounts the creator mentions. Useful for finding creators who already work with a brand. | |
| per_page | No | Results per page, 1-100. Default 25. | |
| has_email | No | true: only creators with a contact email on file. false: only creators without one (with has_phone false too, a page costs 1 credit). Note true means a string is present, not that it is a working address: it is applied upstream against unvalidated data. Every row carries contact_email_confidence and has_validated_email, and the response's `email_filter` says how many of the page survived validation. Build outreach from has_validated_email, not from this. | |
| has_phone | No | true: only creators with a contact phone number. false: only creators without one. | |
| niche_level | No | How strongly the keyword must define the creator. Default 'balanced'. | |
| max_followers | No | Maximum follower count. | |
| min_followers | No | Minimum follower count. | |
| include_images | No | Show each creator's profile picture inline in the chat. Default false. Turn on when presenting results to the user, off while sweeping for a pool. | |
| has_youtube_linked | No | Only creators with a linked YouTube. | |
| is_tiktok_verified | No | Blue-tick accounts only. | |
| min_engagement_rate | No | Minimum engagement rate as a 0-1 fraction (0.05 = 5%). Same scale as the engagement_rate field in results. | |
| analyzed_within_days | No | Only creators we last analysed within this many days, e.g. 60. Leaves out profiles whose stats are months old. This is when we last read the profile, not when the creator last posted: check get_creator_posts for that. 1-365; omit for no limit. | |
| has_instagram_linked | No | Only creators with a linked Instagram. |