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

Prism Find Accounts API

Returns candidate public accounts for a person's or a company's name on Instagram, TikTok, X, LinkedIn and Threads, ranked per platform, each with a match level and a match confidence.

GET /v1/prism/find-accounts

Last updated November 2026Maintained by the SocialCrawl team

When to use the Prism Find Accounts API

Use it when you have a name, and perhaps a domain, but no handles and want a shortlist to review. It never states who runs an account; your reviewer decides.

From the API reference

Runs the existing account searches for name on each platform (instagram/search/profiles, tiktok/search/users, twitter/search/users, and linkedin/search/people for a person or linkedin/search/companies for a company), keeps the top candidates public accounts of each (private accounts are dropped), and ranks them. With website, an account in the search results whose own website is that domain is always among the candidates, in place of the lowest one without that link. For a company with website, a LinkedIn company search that fails is answered by linkedin/company/by-domain, whose page is then the one LinkedIn candidate. Each platform returns candidates (rank, handle, display name, profile URL, followers, verified flag, a bio excerpt and choice_probability, the judged probability that this account is the target's own) and one match: handle is the leading candidate, level is same, possible (connected but not shown to be the target's own, such as a fan or regional account), different, uncertain (the ranking was flat or the check was unsure), or none (none of the candidates is the target's own account, or the search found nothing), with confidence (the weaker of the ranking and the check), basis and evidence (website_match, cross_link, bio_consistent, fan_or_parody). The leading candidate is always checked a second time against the name and context you sent; a ranking alone is never a match. With website, an account that links to that site and is platform-verified is taken as the match without judging (basis: exact_link); an unverified account linking to it is judged like the rest. employer (person only) and location give the judgment context. These are automated labels for a human reviewer, not an identification: automated_decision is false and the response never states who runs an account. If the judgment is unavailable, candidates come back in search order with match.level null, _warnings says why, and the judging credits are refunded. LinkedIn is included by default for a company only, because its search costs 10 credits. Threads (threads/search/users) and YouTube (youtube/search with type=channels, whose channel rows carry the description and subscribers) are searched only when named in platforms. Each platform's match also carries match_confidence (0 to 1, null when there is no candidate), how sure the response is that handle is the target's own account, and accepted, true when match_confidence is at or above match_confidence_floor (0.6). data.items lists the accepted accounts, one per platform at most, as canonical author rows with their match; a platform below the floor lists no item, so a reader of items gets no match rather than a guess. With website, match.evidence adds domain (the site checked), domain_match and domain_source (external_url or bio): whether the leading account's own website, or else a link or a domain in its bio, is that domain or a subdomain of it. The account's own website is the strong evidence: it lifts a flat ranking (uncertain) or a same to at least 0.9. A link or domain in the bio is weaker, because a reseller or a fan names the site too: it lifts only a same, to at least 0.75. An email address at the domain is not a domain match, an own website on another domain overrules the bio, and a possible or different account is never lifted. A profile, link-in-bio or site-builder page given as website (LinkedIn, a Google Site, a link page) is not checked. With profile_check=true, the leading candidate on Instagram, TikTok, Threads and (for a company) LinkedIn, whose search results carry no bio or website, is looked up on its profile before the check, so the domain check and the check read its bio and website; X search results already carry both.

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
Prism API

What can you do with the Find Accounts API?

The Find Accounts endpoint gives you structured Prism data with computed fields in a single request. No scraping infrastructure to build or maintain.

Example Request

# GET /v1/prism/find-accounts: Metered: holds 17 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 28: 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 28 --retry 3 -o response.json \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  "https://www.socialcrawl.dev/v1/prism/find-accounts?name=Ogilvy&type=company&website=ogilvy.com" && cat response.json
# GET /v1/prism/find-accounts: Metered: holds 17 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 = 28  # this endpoint's measured p99 latency x 1.5.
MAX_RETRIES = 3
URL = "https://www.socialcrawl.dev/v1/prism/find-accounts"


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 = {
    "name": "Ogilvy",
    "type": "company",
    "website": "ogilvy.com",
}
body = socialcrawl(params)
if body is not None:
    print(body["data"])
// GET /v1/prism/find-accounts: Metered: holds 17 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 = 28_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/prism/find-accounts");
url.searchParams.set("name", "Ogilvy");
url.searchParams.set("type", "company");
url.searchParams.set("website", "ogilvy.com");

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

Parameters

ParameterRequiredDescription
nameYesThe person's or the company's name, 2 to 120 characters.
typeNo`person` (default) or `company`. Sets the default platforms and the LinkedIn search used. (person | company)
platformsNoComma-separated subset of linkedin, instagram, tiktok, twitter, threads, youtube. Default: instagram, tiktok, twitter for a person; linkedin, instagram, tiktok, twitter for a company. Threads and YouTube are searched only when named. An unknown member is a 400.
employerNoOptional current employer of the person, used only as context for the judgment (type=person only).
locationNoOptional city or country, used only as context for the judgment.
websiteNoOptional official website or domain (e.g. ogilvy.com). A platform-verified account linking to it is taken as the match without judging.
candidatesNoAccounts judged per platform, 1 to 5 (default 5), taken from the top of each search. With `website`, an account whose own website is that domain is always included.
profile_checkNoOptional, default false. When true, the leading candidate on Instagram, TikTok, Threads and (for a company) LinkedIn is looked up on its profile before the check, so the domain check reads its bio and website: 1 credit a lookup (5 for a LinkedIn company page), refunded when it fails.
Example Response

What does the Prism Find Accounts 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": "prism",
  "endpoint": "/v1/prism/find-accounts",
  "data": {
    "name": "Ogilvy",
    "type": "person",
    "context": {
      "employer": null,
      "location": null,
      "website": "ogilvy.com"
    },
    "platforms": [
      {
        "platform": "instagram",
        "status": "ok",
        "candidates": [
          {
            "rank": 1,
            "handle": "ogilvy",
            "display_name": "Ogilvy",
            "url": "https://example.com/redacted",
            "followers": 583444,
            "verified": true,
            "bio_excerpt": "Sample comment text (redacted).",
            "choice_probability": 0.37
          },
          {
            "rank": 2,
            "handle": "user_2b0fa2",
            "display_name": "user_9f80b3",
            "url": "https://example.com/redacted",
            "followers": 43619,
            "verified": false,
            "bio_excerpt": "Sample comment text (redacted).",
            "choice_probability": 0.01
          }
        ],
        "match": {
          "handle": null,
          "level": "none",
          "confidence": 0.54,
          "basis": "judged",
          "evidence": {
            "website_match": null,
            "cross_link": null,
            "bio_consistent": null,
            "fan_or_parody": null
          }
        }
      },
      {
        "platform": "tiktok",
        "status": "ok",
        "candidates": [
          {
            "rank": 1,
            "handle": "user_32e1e4",
            "display_name": "user_47133f",
            "url": "https://example.com/redacted",
            "followers": 6572,
            "verified": false,
            "bio_excerpt": null,
            "choice_probability": 0.01
          },
          {
            "rank": 2,
            "handle": "user_32c4f9",
            "display_name": "user_c00da1",
            "url": "https://example.com/redacted",
            "followers": 639,
            "verified": false,
            "bio_excerpt": null,
            "choice_probability": 0.01
          }
        ],
        "match": {
          "handle": null,
          "level": "none",
          "confidence": 0.96,
          "basis": "judged",
          "evidence": {
            "website_match": null,
            "cross_link": null,
            "bio_consistent": null,
            "fan_or_parody": null
          }
        }
      }
    ],
    "automated_decision": false,
    "notice": "Candidate accounts ranked from public search results, for human review. A match level is an automated label, not proof of who runs an account; your reviewer decides. Private accounts are not listed.",
    "methodology_version": "find-accounts-v1",
    "identity_methodology_version": "identity-v1",
    "legs": [
      {
        "endpoint": "/v1/instagram/search/profiles",
        "status": 200,
        "credits_used": 1,
        "latency_ms": 5992,
        "error": null
      },
      {
        "endpoint": "/v1/tiktok/search/users",
        "status": 200,
        "credits_used": 1,
        "latency_ms": 2479,
        "error": null
      }
    ],
    "coverage": 1,
    "partial_failure": false
  },
  "credits_used": 6,
  "request_id": "req_example000000",
  "cached": false,
  "credits_remaining": 9999,
  "source": "captured",
  "captured_at": "2026-10-02T12:49:03.604Z",
  "redacted": true
}

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

API Details

How does the Prism Find Accounts 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 Prism Find Accounts data?

We handle the complexity of Prism 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
What does the Prism Find Accounts API return?
Returns candidate public accounts for a person's or a company's name on Instagram, TikTok, X, LinkedIn and Threads, ranked per platform, each with a match level and a match confidence. The response uses the same JSON envelope as every SocialCrawl endpoint, with the data, credits_used and request_id fields.
When should I use the Prism Find Accounts endpoint?
Use it when you have a name, and perhaps a domain, but no handles and want a shortlist to review. It never states who runs an account; your reviewer decides.
How much does the Prism Find Accounts API cost?
The price depends on the request, from 2 to 29 credits per call. Every new account gets 100 free credits. Credits for failed or empty calls are refunded automatically, and there is no subscription.
What parameters does the Prism Find Accounts API need?
The one required parameter is name (the person's or the company's name, 2 to 120 characters). It also accepts 7 optional parameters, all listed on this page.
How do I call the Prism Find Accounts API?
Send a GET request to https://www.socialcrawl.dev/v1/prism/find-accounts?name=Ogilvy with your API key in the x-api-key header. An Authorization: Bearer header works too.

Ask AI about SocialCrawl

Ready to scrape Prism Find Accounts data?

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

Start for free

🤖 AI agent or LLM? Read this page as markdown