100 free credits. No credit card required.Start building
Logo
Universal Search logo
100 free credits. No credit card required

Universal Search Creators API

Returns one ranked list of creators matching a niche across TikTok, Threads and Instagram, fused by handle with follower scores; country= keeps the creators posting about it in one market.

GET /v1/search/creators

Last updated November 2026Maintained by the SocialCrawl team

When to use the Universal Search Creators API

Use it to find creators about a topic in one call; add country= for one Latin American, Spanish or Brazilian market. search/everywhere covers posts, not profiles.

From the API reference

Fans a niche query across TikTok user search, Threads user search, and Instagram profile search by default, then merges matching creators into one deterministically ranked list. Ranking is a published formula of query relevance, follower scale, and verification. No LLM rerank by default. Pass sources=youtube, twitter, or facebook (or a CSV of any of the six) to add those profile searches; omitting sources keeps the original three-platform walk so existing callers do not change. Pass brief= (what you are looking for, in your own words) to have the first 40 creators judged from their name, handle and bio: each gets brief_match ({ fits_brief, account_kind, account_kind_confidence, brief_score }) and the list is re-ranked so creators who post about your brief lead, with brands, shops, academies and repost pages below them; data.brief reports what was judged and the ranking version. relevance=filter also drops creators that do not fit and lists them in data.brief.dropped_ids. Pass country (CL, AR, MX, CO, PE, EC, UY, ES, BR) to find the creators who post about your query in that market, on TikTok and Instagram, instead of searching account names. The market's own name is added to your query (inteligencia artificial with CL searches inteligencia artificial chile, returned as data.country.by_source.<source>.query_sent). On TikTok the result is the creators behind the videos whose own region is the market and whose text is about your query, with their follower counts. On Instagram it is the profiles a Google search from the market finds, each read from its About this account panel and kept only when the creator declares that country, with followers and bio. Each creator then carries country ({ value, source }, where source is post_region on TikTok and declared_country on Instagram) and evidence (up to 3 posts or the profile text that found it, with links), and data.country counts per source what was kept and what was dropped as another country, off topic or with no country declared. min_followers, verified_only, sort and brief work as they do without it. Flat 10 credits with a coverage-based partial refund; with country, the searches it runs are billed on top at their own price.

Searching 69 platforms in parallel

·TikTok logoTikTok·Instagram logoInstagram·YouTube logoYouTube·Facebook logoFacebook·X logoX·LinkedIn logoLinkedIn·Reddit logoReddit·Threads logoThreads·Pinterest logoPinterest·Twitch logoTwitch·Truth Social logoTruth Social·Snapchat logoSnapchat·Kick logoKick·Bluesky logoBluesky·Kwai logoKwai·Rumble logoRumble·Spotify logoSpotify·Apple Music logoApple Music·TikTok Shop logoTikTok Shop·Amazon Shop logoAmazon Shop·Google Shopping logoGoogle Shopping·Trustpilot logoTrustpilot·TripAdvisor logoTripAdvisor·Yelp logoYelp·Linktree logoLinktree·Komi logoKomi·Pillar logoPillar·lnk.bio logolnk.bio·Facebook Ads logoFacebook Ads·Google Ads logoGoogle Ads·LinkedIn Ads logoLinkedIn Ads·Google Search logoGoogle Search·Google News logoGoogle News·Finance logoFinance·Polymarket logoPolymarket·Tavily logoTavily·Hacker News logoHacker News·GitHub logoGitHub·Perplexity logoPerplexity·Naver logoNaver·Utility logoUtility·Universal Search logoUniversal Search
·TikTok logoTikTok·Instagram logoInstagram·YouTube logoYouTube·Facebook logoFacebook·X logoX·LinkedIn logoLinkedIn·Reddit logoReddit·Threads logoThreads·Pinterest logoPinterest·Twitch logoTwitch·Truth Social logoTruth Social·Snapchat logoSnapchat·Kick logoKick·Bluesky logoBluesky·Kwai logoKwai·Rumble logoRumble·Spotify logoSpotify·Apple Music logoApple Music·TikTok Shop logoTikTok Shop·Amazon Shop logoAmazon Shop·Google Shopping logoGoogle Shopping·Trustpilot logoTrustpilot·TripAdvisor logoTripAdvisor·Yelp logoYelp·Linktree logoLinktree·Komi logoKomi·Pillar logoPillar·lnk.bio logolnk.bio·Facebook Ads logoFacebook Ads·Google Ads logoGoogle Ads·LinkedIn Ads logoLinkedIn Ads·Google Search logoGoogle Search·Google News logoGoogle News·Finance logoFinance·Polymarket logoPolymarket·Tavily logoTavily·Hacker News logoHacker News·GitHub logoGitHub·Perplexity logoPerplexity·Naver logoNaver·Utility logoUtility·Universal Search logoUniversal Search
·TikTok logoTikTok·Instagram logoInstagram·YouTube logoYouTube·Facebook logoFacebook·X logoX·LinkedIn logoLinkedIn·Reddit logoReddit·Threads logoThreads·Pinterest logoPinterest·Twitch logoTwitch·Truth Social logoTruth Social·Snapchat logoSnapchat·Kick logoKick·Bluesky logoBluesky·Kwai logoKwai·Rumble logoRumble·Spotify logoSpotify·Apple Music logoApple Music·TikTok Shop logoTikTok Shop·Amazon Shop logoAmazon Shop·Google Shopping logoGoogle Shopping·Trustpilot logoTrustpilot·TripAdvisor logoTripAdvisor·Yelp logoYelp·Linktree logoLinktree·Komi logoKomi·Pillar logoPillar·lnk.bio logolnk.bio·Facebook Ads logoFacebook Ads·Google Ads logoGoogle Ads·LinkedIn Ads logoLinkedIn Ads·Google Search logoGoogle Search·Google News logoGoogle News·Finance logoFinance·Polymarket logoPolymarket·Tavily logoTavily·Hacker News logoHacker News·GitHub logoGitHub·Perplexity logoPerplexity·Naver logoNaver·Utility logoUtility·Universal Search logoUniversal Search
·TikTok logoTikTok·Instagram logoInstagram·YouTube logoYouTube·Facebook logoFacebook·X logoX·LinkedIn logoLinkedIn·Reddit logoReddit·Threads logoThreads·Pinterest logoPinterest·Twitch logoTwitch·Truth Social logoTruth Social·Snapchat logoSnapchat·Kick logoKick·Bluesky logoBluesky·Kwai logoKwai·Rumble logoRumble·Spotify logoSpotify·Apple Music logoApple Music·TikTok Shop logoTikTok Shop·Amazon Shop logoAmazon Shop·Google Shopping logoGoogle Shopping·Trustpilot logoTrustpilot·TripAdvisor logoTripAdvisor·Yelp logoYelp·Linktree logoLinktree·Komi logoKomi·Pillar logoPillar·lnk.bio logolnk.bio·Facebook Ads logoFacebook Ads·Google Ads logoGoogle Ads·LinkedIn Ads logoLinkedIn Ads·Google Search logoGoogle Search·Google News logoGoogle News·Finance logoFinance·Polymarket logoPolymarket·Tavily logoTavily·Hacker News logoHacker News·GitHub logoGitHub·Perplexity logoPerplexity·Naver logoNaver·Utility logoUtility·Universal Search logoUniversal Search
Universal Search API

What can you do with the Creators API?

The Creators endpoint gives you structured Universal Search data with computed fields in a single request. No scraping infrastructure to build or maintain.

Example Request

# GET /v1/search/creators: Metered: holds 10 credits per call up front and refunds what the call does not use. Cache hits are free and failed calls are refunded.
# Check the price first for 0 credits: add dry_run=1 to the query. Nothing is fetched or charged.
# --max-time 19: this endpoint's measured p99 latency x 1.5.
# --retry 3: retries timeouts, 429 and 5xx, honoring Retry-After.
# -o response.json keeps only the final attempt's body.
# One Idempotency-Key per request, reused on every retry, so a retried call is never charged twice.
IDEMPOTENCY_KEY=$(od -An -N16 -tx1 /dev/urandom | tr -d ' \n')
curl -sS --max-time 19 --retry 3 -o response.json \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  "https://www.socialcrawl.dev/v1/search/creators?query=skincare+routine&sources=tiktok%2Cinstagram&min_followers=50000&verified_only=false&sort=relevance&country=CL" && cat response.json
# GET /v1/search/creators: Metered: holds 10 credits per call up front and refunds what the call does not use. Cache hits are free and failed calls are refunded.
# Check the price first for 0 credits: add dry_run=1 to the query. Nothing is fetched or charged.
import os
import random
import time
import uuid

import requests

API_KEY = os.environ.get("SOCIALCRAWL_API_KEY", "YOUR_API_KEY")
TIMEOUT_S = 19  # this endpoint's measured p99 latency x 1.5.
MAX_RETRIES = 3
URL = "https://www.socialcrawl.dev/v1/search/creators"


def backoff(attempt):
    # Exponential backoff with jitter: about 1 s, 2 s, then 4 s.
    return 2 ** attempt * (0.5 + random.random() / 2)


def socialcrawl(params):
    # One Idempotency-Key per request, reused on every retry, so a retried call is never charged twice.
    idempotency_key = str(uuid.uuid4())
    for attempt in range(MAX_RETRIES + 1):
        try:
            res = requests.get(
                URL,
                params=params,
                headers={"x-api-key": API_KEY, "Idempotency-Key": idempotency_key},
                timeout=TIMEOUT_S,
            )
            body = res.json()
        except (requests.RequestException, ValueError):
            # A timeout, a dropped connection or a non-JSON gateway page: retry with the same key.
            if attempt == MAX_RETRIES:
                raise
            time.sleep(backoff(attempt))
            continue
        if body["success"]:
            return body
        error = body["error"]
        # Branch on error["type"], never on the message text.
        if error["type"] == "RESOURCE_NOT_FOUND":
            return None  # refunded: nothing to read
        retry_after = res.headers.get("Retry-After")
        # SERVICE_UNAVAILABLE without Retry-After is a withdrawn endpoint: permanent.
        permanent = error["type"] == "SERVICE_UNAVAILABLE" and retry_after is None
        if not error.get("retryable") or permanent or attempt == MAX_RETRIES:
            raise RuntimeError(f"{error['type']}: {error['message']} (request_id {body['request_id']})")
        # Retry-After (seconds) wins; otherwise back off.
        time.sleep(float(retry_after) if retry_after else backoff(attempt))


params = {
    "query": "skincare routine",
    "sources": "tiktok,instagram",
    "min_followers": "50000",
    "verified_only": "false",
    "sort": "relevance",
    "country": "CL",
}
body = socialcrawl(params)
if body is not None:
    print(body["data"])
// GET /v1/search/creators: Metered: holds 10 credits per call up front and refunds what the call does not use. Cache hits are free and failed calls are refunded.
// Check the price first for 0 credits: add dry_run=1 to the query. Nothing is fetched or charged.
const API_KEY = process.env.SOCIALCRAWL_API_KEY ?? "YOUR_API_KEY";
const TIMEOUT_MS = 19_000; // this endpoint's measured p99 latency x 1.5.
const MAX_RETRIES = 3;

type Page = { next_cursor: string | null; has_more: boolean };
type SocialCrawlResponse =
  | { success: true; data: any; pagination?: Page; credits_used: number; request_id: string }
  | { success: false; error: { type: string; message: string; retryable: boolean }; request_id: string };

const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
// Exponential backoff with jitter: about 1 s, 2 s, then 4 s.
const backoffMs = (attempt: number) => 2 ** attempt * 1000 * (0.5 + Math.random() / 2);

async function socialcrawl(url: URL) {
  // One Idempotency-Key per request, reused on every retry, so a retried call is never charged twice.
  const idempotencyKey = crypto.randomUUID();
  for (let attempt = 0; ; attempt++) {
    let res: Response;
    let body: SocialCrawlResponse;
    try {
      res = await fetch(url, {
        headers: {
          "x-api-key": API_KEY,
          "Idempotency-Key": idempotencyKey,
        },
        signal: AbortSignal.timeout(TIMEOUT_MS),
      });
      body = (await res.json()) as SocialCrawlResponse;
    } catch (error) {
      // A timeout, a dropped connection or a non-JSON gateway page: retry with the same key.
      if (attempt >= MAX_RETRIES) throw error;
      await sleep(backoffMs(attempt));
      continue;
    }
    if (body.success) return body;
    // Branch on error.type, never on the message text.
    if (body.error.type === "RESOURCE_NOT_FOUND") return null; // refunded: nothing to read
    const retryAfter = res.headers.get("Retry-After");
    // SERVICE_UNAVAILABLE without Retry-After is a withdrawn endpoint: permanent.
    const permanent = body.error.type === "SERVICE_UNAVAILABLE" && retryAfter === null;
    if (!body.error.retryable || permanent || attempt >= MAX_RETRIES) {
      throw new Error(`${body.error.type}: ${body.error.message} (request_id ${body.request_id})`);
    }
    // Retry-After (seconds) wins; otherwise back off.
    await sleep(retryAfter ? Number(retryAfter) * 1000 : backoffMs(attempt));
  }
}

const url = new URL("https://www.socialcrawl.dev/v1/search/creators");
url.searchParams.set("query", "skincare routine");
url.searchParams.set("sources", "tiktok,instagram");
url.searchParams.set("min_followers", "50000");
url.searchParams.set("verified_only", "false");
url.searchParams.set("sort", "relevance");
url.searchParams.set("country", "CL");

const body = await socialcrawl(url);
if (body) console.log(body.data);

Parameters worth sending

  • country=CL Results for one country.

Parameters

ParameterRequiredDescription
queryYesNiche or topic (2-256 chars), forwarded to every profile search.
sourcesNoOptional CSV allowlist of creator sources (tiktok, threads, instagram, youtube, twitter, facebook). Mutually exclusive with exclude. Omit to keep the default TikTok + Threads + Instagram walk. With country, only tiktok and instagram (the default), and any other source is a free 400.
excludeNoOptional CSV blocklist of creator sources. Mutually exclusive with sources.
min_followersNoDrop fused creators whose follower count is below this integer floor.
verified_onlyNoWhen true, keep only verified creators after fusion.
sortNoWhich axis dominates rank: relevance (default), followers, or verification. (relevance | followers | verification)
briefNoOptional. What you want to find, in your own words (3-300 chars), for example brief=Korean creators who review skincare products. The first 40 creators are judged from their name, handle and bio: does the account post about your brief (fits_brief, 0 to 1), and what kind of account is it (individual_creator, brand_or_business, media_or_publisher, fan_or_repost_page, cannot_tell; null when unsure). With sort=relevance (the default) they are re-ranked so creators who fit and are individual people lead; other sorts keep their order and only gain the labels. These are signals to review, not a finding. Adds 2 credits.
relevanceNoOptional, only with brief. score (default) ranks and labels; filter also drops judged creators that do not fit the brief and lists them in data.brief.dropped_ids. A creator that could not be judged is never dropped. (score | filter)
judgmentsNoOptional. on (default) or off. On, the first 40 creators also carry account ({ account_kind: individual_creator, brand_or_business, media_or_publisher, fan_or_repost_page, cannot_tell or null when unsure, account_kind_confidence, named_person }), judged from their name, handle and bio, and data.account_kinds reports how many were judged. The order is unchanged and it is free. off returns the response without it. (on | off)
countryNoOptional. Two-letter market code (CL, AR, MX, CO, PE, EC, UY, ES, BR) to find the creators who post about your query in that market, instead of searching account names. Runs on TikTok and Instagram: the market's name is added to your query, TikTok creators are kept when the video's own region is the market and its text is about your query, and Instagram creators when they declare that country on their About this account panel. Each creator carries country and evidence, and data.country reports the query sent and what was kept and dropped per source. The searches and lookups it runs are billed on top at their own price, at most 12 credits. Any other code is a free 400. (CL | AR | MX | CO | PE | EC | UY | ES | BR)
Example Response

What does the Universal Search Creators API return?

Every response follows one unified schema. Here is a real, unmodified response body, so you can see the exact fields you get back before spending a credit.

Example response
{
  "success": true,
  "platform": "search",
  "endpoint": "/v1/search/creators",
  "data": {
    "creators": [
      {
        "author": {
          "id": "user_058794",
          "username": "user_1cb194",
          "display_name": "user_a15759",
          "bio": null,
          "followers": 6045690,
          "verified": false,
          "avatar_url": "https://example.com/avatars/user_805cd1.png",
          "url": "https://example.com/user_d7235c"
        },
        "sources": [
          "tiktok"
        ],
        "relevance": 0.45,
        "follower_rank": 1,
        "verified": false,
        "rrf_score": 0.017897727272727273,
        "account": {
          "account_kind": "individual_creator",
          "account_kind_confidence": 1,
          "named_person": 0.87
        }
      }
    ],
    "creators_by_source": {
      "tiktok": [
        {
          "id": "user_b598dc",
          "username": "user_4d9b4a",
          "display_name": "user_67c672",
          "bio": null,
          "followers": 36,
          "verified": false,
          "avatar_url": "https://example.com/avatars/user_ea00c5.png",
          "url": "https://example.com/user_c06400"
        },
        {
          "id": "user_a8ec20",
          "username": "user_7b906f",
          "display_name": "user_3af5a8",
          "bio": null,
          "followers": 5085,
          "verified": false,
          "avatar_url": "https://example.com/avatars/user_676794.png",
          "url": "https://example.com/user_e80546"
        }
      ],
      "threads": [],
      "instagram": [
        {
          "id": "user_d64a0b",
          "username": "user_c1e003",
          "display_name": "user_2c8d0f",
          "bio": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
          "followers": 22456,
          "verified": false,
          "avatar_url": "https://example.com/avatars/user_99e358.png",
          "url": "https://example.com/user_60d233"
        },
        {
          "id": "user_9a0493",
          "username": "user_d61117",
          "display_name": "user_c043e7",
          "bio": "Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted). Sample comment text (redacted).",
          "followers": 28396,
          "verified": false,
          "avatar_url": "https://example.com/avatars/user_88de7a.png",
          "url": "https://example.com/user_995add"
        }
      ],
      "youtube": [],
      "twitter": [],
      "facebook": []
    },
    "computed": {
      "platform_spread": {
        "tiktok": 30,
        "instagram": 44
      },
      "verified_share": 0,
      "follower_distribution": {
        "p50": 6045690,
        "p90": 6045690
      }
    },
    "legs": [
      {
        "endpoint": "/v1/tiktok/search/users",
        "status": 200,
        "credits_used": 1,
        "latency_ms": 1941,
        "error": null
      },
      {
        "endpoint": "/v1/instagram/search/profiles",
        "status": 200,
        "credits_used": 1,
        "latency_ms": 7963,
        "error": null
      }
    ],
    "sources_called": [
      "tiktok",
      "instagram"
    ],
    "sources_succeeded": [
      "tiktok",
      "instagram"
    ],
    "coverage": 1,
    "partial_failure": false,
    "methodology_version": "search-creators/1.0",
    "account_kinds": {
      "methodology_version": "creators-account-kind/1",
      "status": "complete",
      "judged": 1,
      "unjudged": 0
    }
  },
  "credits_used": 10,
  "request_id": "req_example000000",
  "cached": false,
  "credits_remaining": 9999,
  "source": "captured",
  "captured_at": "2026-10-02T12:48:35.176Z",
  "redacted": true
}

Live sample illustrating the unified response shape. Field values reflect the record you query.

API Details

How does the Universal Search Creators API work?

Send a GET request with your API key and get back clean, structured JSON in our unified schema. Supported computed fields are populated when the source provides the required inputs.

Method

GET

Response

JSON

Why SocialCrawl

Why use SocialCrawl for Universal Search Creators data?

We handle the complexity of Universal Search data extraction so you can focus on building. Unified schema, AI enrichment, and zero platform logic in your code.

Developer First

How do you scrape social media data in seconds?

The fastest social media scraping API for developers. Scrape profiles, posts, comments, and analytics from 69 platforms covering 10B+ monthly active users.

One schema, every platform

Query 69 platforms with identical response structures. Write your integration once.

Computed fields, not just scraped

When an endpoint supports these metrics and the source provides the required inputs, the normalized record includes engagement_rate, estimated_reach, content_category, and language. Ready to use.

See your data before you code

Visual Data Explorer. Paste any URL, get rich result cards, sortable tables, CSV export.

import requests

response = requests.get(
    'https://www.socialcrawl.dev/v1/tiktok/profile',
    params={'handle': 'charlidamelio'},
    headers={'x-api-key': 'sc_YOUR_API_KEY'}
)
data = response.json()
[ .JSON ]
{
  "success": true,
  "platform": "tiktok",
  "data": {
    "author": {
      "username": "charlidamelio",
      "followers": 152400000
    },
    "engagement": {
      "likes": 12400000000,
      "engagement_rate": 0.087
    },
    "metadata": {
      "language": "en",
      "content_category": "lifestyle"
    }
  }
}
+ 69 platforms
FAQ

Have a question? We got answers

Find answers to frequently asked questions about SocialCrawl's API, pricing, and capabilities.

Contact us
How do I search for influencers with an API?
Call GET /v1/search/creators?query=skincare+routine. SocialCrawl searches TikTok, Threads and Instagram profiles at once and returns one merged list of creators. Add sources=youtube, twitter or facebook to include those platforms too.
How are the creators ranked?
Creators are ranked by a published formula of query relevance, follower scale and verification, with no LLM rerank by default. The sort parameter sets which axis dominates: relevance (the default), followers or verification.
Can I filter creators by followers or verification?
Yes. min_followers drops creators below an integer floor, verified_only=true keeps only verified creators, and exclude removes whole sources. sources and exclude cannot be used together.
Can I find creators who match a description, not just a keyword?
Yes. Add brief, for example Korean creators who review skincare products, and the first 40 creators are judged from their name, handle and bio. Each gets brief_match with fits_brief and account_kind, so brands and repost pages rank below individual creators.
Can I find creators in one country?
Yes, with country set to one of the supported two-letter market codes. It runs on TikTok and Instagram and returns creators who post about your query in that market, each with country and evidence. Any unsupported code is a free 400.
How much does the influencer search API cost?
A search costs 10 credits flat. brief adds a small judging charge that is refunded if judging could not answer for every creator, and country bills its extra searches on top, each listed in data.legs. A cached page is free, and there is no subscription.

Ask AI about SocialCrawl

Ready to scrape Universal Search Creators data?

Get your API key and start pulling Universal Search data in under 60 seconds.

Start for free

🤖 AI agent or LLM? Read this page as markdown