# TikTok user search by country: 3 KR hits, 15 credits (https://www.socialcrawl.dev/blog/find-tiktok-creators-by-country) > 3 KR cooking accounts at 15 credits, all location KR. Omit country= and TikTok user search is 1 credit with location null. country=ZZ returns a free 400. TikTok user search can return only the creators in one country. On 2026-09-17, production `GET /v1/tiktok/search/users?query=cooking&country=KR&limit=3` at `https://www.socialcrawl.dev` returned three Korean-region accounts β€” `bear_wife12`, `bing_oii`, `leoniecadao`. `author.location` was KR / KR / KR, bios 3/3, 15 credits, no cursor, no redirect. That is how you find TikTok creators by country: ISO-2 on the same keyword search. Same `query=cooking` without `country` was still 1 credit and `author.location` null on all five rows. [TikTok's public search page](https://www.tiktok.com/search) does not expose an ISO-2 creator filter. The [Research API](https://developers.tiktok.com/products/research-api) Query User call looks up a known handle and has no country field ([spec](https://developers.tiktok.com/docs/en/research-api-specs-query-user-info)); that dead-end is in [TikTok data without an official API](/blog/tiktok-data-without-api). **Stack:** curl Β· `GET https://www.socialcrawl.dev/v1/tiktok/search/users` Β· header `x-api-key`. No TikTok developer app. Five captured calls, trimmed JSON, a two-mode credit table, then how to rerun it. A rounded creator portrait tile beside a clay-amber map pin, the visual for a TikTok user search filtered by country. ## How do I find TikTok creators by country? One GET with `query` plus `country=` (an [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) code) keeps only creators whose **public account region** matches. If you want a TikTok creator search for one market, this is the API shape: keyword plus country, not a marketplace board. [TikTok's public search page](https://www.tiktok.com/search) does not take ISO-2. The 2026-09-17 production call hit `https://www.socialcrawl.dev` with `Cache-Control: no-cache` and `--max-redirs 0`. A 3xx would have failed. Live call: ```bash curl -s --max-redirs 0 -H "x-api-key: $SOCIALCRAWL_API_KEY" \ -H "Cache-Control: no-cache" -H "Pragma: no-cache" \ "https://www.socialcrawl.dev/v1/tiktok/search/users?query=cooking&country=KR&limit=3" ``` HTTP **200** in 4.88s, `credits_used: 15`, `cached: false`, `dropped: 0`, `pagination.next_cursor: null`, `has_more: false`. Request `req-EZsguJxPPoP6LtHq`. Trimmed envelope from that response: ```json { "success": true, "platform": "tiktok", "endpoint": "/v1/tiktok/search/users", "credits_used": 15, "credits_remaining": 90136, "cached": false, "request_id": "req-EZsguJxPPoP6LtHq", "pagination": { "next_cursor": null, "has_more": false, "page_size": 3 }, "data": { "dropped": 0, "total": 3, "items": [ { "author": { "username": "bear_wife12", "display_name": "bear_wife", "location": "KR", "bio": "Breakfast for husband series 🌞\nbreakfast ideasπŸ’‘πŸ‘", "followers": 50558, "verified": false } }, { "author": { "username": "bing_oii", "display_name": "빙이", "location": "KR", "bio": "μ§‘μˆœμ΄μ˜ μ§‘λ°₯", "followers": 25877, "verified": false } }, { "author": { "username": "leoniecadao", "display_name": "Leonie", "location": "KR", "bio": "becoming.\nβ˜οΈπŸ’«πŸͺ½\nxoxo", "followers": 27045, "verified": false } } ] } } ``` | Handle | Display | location | Bio (trim) | Followers | | --- | --- | --- | --- | ---: | | `bear_wife12` | bear_wife | KR | Breakfast for husband series | 50,558 | | `bing_oii` | 빙이 | KR | μ§‘μˆœμ΄μ˜ μ§‘λ°₯ | 25,877 | | `leoniecadao` | Leonie | KR | becoming. | 27,045 | Every row is KR. Bios 3/3. Country mode already carries `author.location` and bio on the row. That is **the unified schema** β€” you do not set `include=profile` on this call. The formula is **5 credits Γ— delivered rows**; unused `limit` slots are refunded per the [TikTok user search endpoint](/platforms/tiktok/search-users) contract. This call asked for 3, got 3, paid 15. Unused slots refund when the page is short; this page was not. Country mode is a **single shot**. There is no cursor. Docs default is 8 rows, max 20 via `limit`; this call used `limit=3` only. `leoniecadao` (display name Leonie) is a KR-region account in this capture, not a nationality claim. Handles rotate: a later `query=cooking&country=KR` will return different usernames. `author.location` should still be KR on every row. A cheap follow-up proves the filter is account region, not a guess. `GET /v1/tiktok/profile?handle=bing_oii` returned HTTP 200, `author.location: KR`, bio `μ§‘μˆœμ΄μ˜ μ§‘λ°₯`, `computed.language: ko`, **1 credit** (`req-mVuw2HgR4Aacr8C8`, 4.14s). Followers were **25,877** on the search row and **25,907** on the profile a minute later. Search-index counts can trail the live profile by a few dozen. Looking up one known handle is a different call from filtering the search. This is not `include=profile` on a global page, not `GET /v1/tiktok/profile` as the search itself, not `hashtags/popular?countryCode=`, and not `trending?region=`. ## What happens if I omit `country` on TikTok user search? Same endpoint, same keyword, no `country`. The cheap global page is unchanged. That is still a TikTok users search across every region, not a country sample. ```bash curl -s --max-redirs 0 -H "x-api-key: $SOCIALCRAWL_API_KEY" \ -H "Cache-Control: no-cache" -H "Pragma: no-cache" \ "https://www.socialcrawl.dev/v1/tiktok/search/users?query=cooking&limit=5" ``` HTTP **200** in 2.76s, **1 credit**, `author.location` **null Γ— 5**, `author.bio` **null Γ— 5**, `has_more: true`, `next_cursor` present. Request `req-gGW6joIv78B3FQqR`. Handles on this call (not a country sample): `cookming_`, `cookingwithshereen`, `albert_cancook`, `cookinwithmegg`, `holmescooking`. Two of those five are verified (`cookingwithshereen`, `albert_cancook`); follower counts run from 1,509,058 (`cookming_`) to 15,821,414 (`albert_cancook`). None of that tells you where the account is registered. | | omit `country` (this run) | `country=KR` (this run) | | --- | --- | --- | | Credits | **1** per page | **5** per **delivered** row | | Rows this call | 5 (`limit=5`) | 3 (`limit=3`) | | `author.location` | **null Γ— 5** | **KR, KR, KR** | | `author.bio` | **null Γ— 5** | **3/3 filled** | | Pagination | **yes** (`has_more: true`, cursor) | **none** (`has_more: false`, `next_cursor: null`) | | Docs default / max | ~30 / paginated ([1-credit unfiltered search page](/blog/tiktok-api-more-per-credit)) | 8 default, 20 max, no cursor | Use omit-`country` when you want a cheap, paginated keyword page and you do not need region on the row. Pay the 5-per-row country mode when the filter is the point. The unfiltered ~30-row / 1-credit page is measured in [TikTok API documentation: 150 followers per credit](/blog/tiktok-api-more-per-credit). This call asked for 5 and got 5 with `has_more: true`. Do not read 30 from this `limit=5` page. Do not use `include=profile` as a substitute for `country=`. Hydration fills bio and `author.location` on a **global** page. It does not keep only KR (or US, or DE). Different call, different job. A small stack of clay-amber coins next to a rejected token, showing paid TikTok user search credits versus a free bad-code error. ## What does a bad country code cost β€” and does US behave the same? A typo is a free 400. `ZZ` is a [user-assigned ISO 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2), which is a polite way of saying it is not a country. The endpoint agrees. ```bash curl -s --max-redirs 0 -H "x-api-key: $SOCIALCRAWL_API_KEY" \ -H "Cache-Control: no-cache" -H "Pragma: no-cache" \ "https://www.socialcrawl.dev/v1/tiktok/search/users?query=cooking&country=ZZ" ``` HTTP **400** in 72 ms, `credits_used: 0`. Request `req-ie5mzqaOMywjuJvf`. Balance after the unfiltered call was 90,135 and stayed 90,135. ```json { "success": false, "error": { "type": "INVALID_REQUEST", "status": 400, "message": "Invalid value for 'country': 'ZZ'. Allowed values: US, GB, CA, …, KR, …, KH." }, "credits_used": 0, "credits_remaining": 90135, "request_id": "req-ie5mzqaOMywjuJvf" } ``` The message lists the allowed ISO-2 set (it includes `KR` and `US`). Invalid code is not a billed empty page. Same keyword, second market, so KR is not a one-off: ```bash curl -s --max-redirs 0 -H "x-api-key: $SOCIALCRAWL_API_KEY" \ -H "Cache-Control: no-cache" -H "Pragma: no-cache" \ "https://www.socialcrawl.dev/v1/tiktok/search/users?query=cooking&country=US&limit=3" ``` HTTP **200** in 5.36s, **3** rows, `author.location` **US / US / US**, bios **2/3**, **15 credits**, `next_cursor: null`, `has_more: false`. Request `req-vJg84OHsw1krbaj2`. | Handle | Display | location | Bio | Followers | | --- | --- | --- | --- | ---: | | `wenmeiceexpert` | WENMEICE | US | AliExpress meat thermometer / dropshipping | 2,120 | | `universal_truther` | Universal Truther | US | **null** | 7,119 | | `britsgoneusa` | Britsgoneusa | US | One got a job. One got a visa. | 30,542 | Same formula as KR (5 Γ— 3 = 15). Same single-shot pagination. Bios are **not** guaranteed: `universal_truther` came back with `location: US` and `bio: null` (and `posts_count: 0`). Write what the row has. `britsgoneusa` is a US-region row in this capture; the bio is about a visa. Public account region is what the account is registered as, not a passport. ## Is `country=` the same as video-search `region=`? No. Four "country" ideas get conflated, and only the first one is this param. 1. **Creator's public account region.** The two-letter region on the account. The SocialCrawl API puts it on `author.location`. `search/users?country=KR` keeps only those rows. A filter on the creator, not a routing hint. ([endpoint docs](/platforms/tiktok/search-users)) 2. **Request locale / proxy.** Video `search?region=` and default trending `region=` set where the request comes from. They do not filter creators. This run did not call `/v1/tiktok/search`. 3. **Audience geography.** Where followers live. [TikTok One](https://ads.tiktok.com/resources/help/article/how-to-find-creators-who-work-with-tiktok-one?redirected=2) treats this as a separate control from creator country. On a known handle, `GET /v1/tiktok/user/audience` ranks countries from a sample of public followers. Not search. 4. **Video registered region.** Research API `region_code` on a video query; trending rows carry `post.ext.region`. Neither is "creators whose account is in KR." [Creator Marketplace](https://ads.tiktok.com/business/en-US/blog/making-creator-marketing-easy) filters creator country and audience country as two separate UI controls. That is logged-in matchmaking, not `GET /v1/tiktok/search/users`. Do not conflate `hashtags/popular?countryCode=` either β€” that is a Creative Center hashtag board. ## How do I rerun this TikTok user search? 1. Get a key. A SocialCrawl account includes [100 free credits, no card](/pricing). Auth is `x-api-key` β€” **one API key**. No TikTok developer app, no Research API application. 2. Run the same KR call from above (`query=cooking&country=KR&limit=3`). Rows and handles will move; `author.location` should still be `KR` on every returned row; `credits_used` should be `5 Γ— rows`. Optional Python twin: ```python r = requests.get( "https://www.socialcrawl.dev/v1/tiktok/search/users", params={"query": "cooking", "country": "KR", "limit": 3}, headers={"x-api-key": os.environ["SOCIALCRAWL_API_KEY"]}, timeout=60, ) payload = r.json() print(r.status_code, payload.get("credits_used"), payload.get("pagination")) ``` 3. Where next: the [explorer](/explorer) to see the payload before writing a single line; the [TikTok user search endpoint](/platforms/tiktok/search-users) for the live param table; the [TikTok platform catalogue](/platforms/tiktok) for the rest of the reads; the [API reference](/docs/api-reference) if you want the envelope contract. If you want the 1-credit global page instead, that is the [unfiltered search](/blog/tiktok-api-more-per-credit). MCP and Agent Skills wrap the same `x-api-key` surface if an agent should fire the GET. ## Frequently asked questions ### Can I run a TikTok account search and keep only one country? Yes. `GET /v1/tiktok/search/users?query=…&country=KR` (ISO-2) keeps creators whose public account region matches. In-app account search by name is username lookup, not a country filter. This run: `query=cooking&country=KR&limit=3` returned 3 KR rows at 15 credits. ### How do I search TikTok users by location? Send `country=` as [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) (`KR`, `US`, `DE`). That is not a city, not GPS, and not a map pin. It keeps creators whose **public account region** matches. It is not filming location and not where the audience lives. ### How many credits does a country-filtered TikTok user search use? **5 per delivered row**; unused `limit` slots refunded. This run: KR `limit=3` β†’ **15**; US `limit=3` β†’ **15**. Omit `country`: **1** credit for the global page. Invalid ISO-2: **0**. Profile lookup of one handle is a separate 1-credit call. ### Does country-filtered user search paginate? **No cursor.** Single shot. Docs default 8, max 20 via `limit`. KR and US calls both came back `has_more: false` / `next_cursor: null`. The unfiltered page still paginates (`has_more: true` on this `limit=5` call). ### Does `country=` mean audience geography or where the video was filmed? Neither. It is public account region only (`author.location`). Audience geo is a different call (`GET /v1/tiktok/user/audience` on a known handle). Filming / video-registered region is video-search `region=`, Research `region_code`, or trending `post.ext.region`. To find a TikTok account region by username, use `GET /v1/tiktok/profile` (1 credit; `bing_oii` matched KR). `include=profile` hydrates a global page; it still does not filter. Handles will rotate on a rerun. `author.location` should still match the ISO-2 you asked for, and `credits_used` should still be 5 Γ— rows. Live param table: [TikTok user search endpoint](/platforms/tiktok/search-users). To see the payload before writing a single line, open the [explorer](/explorer).