Machine-readable version of this page: llms.txt
MCP11 tools live at stormy.ai/mcp

Your agent finds the creators

Creator search as an MCP server and REST API. Say who you want in plain language; a fresh search checks every candidate against your criteria and shows you the evidence.

Instagram, YouTube and LinkedIn search live · TikTok answers from cache · priced per result, not per seat.

Find handmade jewellery creators I could send samples to.

MCP tool call
search_people({
  platform: "tiktok",
  query: "handmade jewellery creators",
  limit: 3
})
Receipt1.3 s · no key
{
  "usage": {
    "operation": "cached_result",
    "metered_results": 3,
    "billed_results": 0,
    "cost_usd": "0.00",
    "credits": 0,
    "plan": "free"
  }
}
  • @nar_jewellery18,828 followers

    IG: nar_jewellery & nar_grillz · Toronto Business

    last_updated 28 May 2025

  • @zoandcojewellery_16,756 followers

    ✨ A new era of everyday jewellery ✨ High Quality | Affordable Luxury

    last_updated 28 May 2025

  • @ideas_handmade15,800 followers

    Интересные идеи handmade🐰ideas handmade🐰

    last_updated 27 May 2025

  • Cached rows carry the date they were collected, so you always know how old an answer is. Ask for fresh: true and the same call collects them again now.

Recorded 30 July 2026. The first tab is the keyless cache preview — you can run that exact call yourself further down this page.

Streamable HTTP · remote server · nothing to host

Connect your agent

One line in your MCP client and your agent does the research itself — searching, verifying, and pricing its own work before it spends anything.

URLhttps://stormy.ai/mcp
AuthAuthorization: Bearer stm_live_...
export STORMY_API_KEY=stm_live_...

claude mcp add --transport http stormy https://stormy.ai/mcp \
  --header "Authorization: Bearer $STORMY_API_KEY"

Then ask it, in your own words

Find me 10 Instagram creators under 50k followers who post about other people's handmade jewellery — not brands selling their own — and show the usage receipt.

Get a key — $10 of credit included

Count the tools yourself — the server lists them without a key:

tools/list
curl -s https://stormy.ai/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

11 tools your agent can call

read from tools/list on load

  • search_people

    Search one social network and return normalized public results, source URLs, and a usage receipt.

  • get_video_transcript

    Everything said in a YouTube video, as text.

  • lookup_profile

    Look up one profile URL, handle, or channel ID and return normalized public fields plus a usage receipt.

  • find_emails

    Find verified contact emails for 1-25 Instagram, TikTok, or YouTube profiles.

  • estimate_price

    Return the authoritative rate card and maximum workflow estimate without spending credits.

  • account_status

    Show entitlements, remaining prepaid usage, and the checkout or top-up URL.

  • describe_social_data

    Return the machine-readable platform, field, pricing, reliability, and workflow contract.

  • start_social_job

    Queue fresh, bulk, or email work with durable retries and status.

  • get_social_job

    Return status, progress, exact poll timing, result/error, and the complete timeline.

  • list_social_jobs

    List recent durable jobs, optionally filtered by any documented job status.

  • cancel_social_job

    Cancel a queued, scheduled, throttled, or retrying job before a worker starts it.

How the search works

Fewer results, and the reason for each

Every candidate is checked against every criterion you gave, and the ones that fail are thrown away rather than used to reach the number you asked for.

  1. 01

    Expand

    Your sentence becomes search terms — every term required, not whichever one is broadest.

  2. 02

    Collect

    Candidates come back from the network, plus anything already in the cache from earlier runs.

  3. 03

    Verify

    A model checks each candidate against each criterion. Failures are dropped, with the quote that failed them.

query:roofing contractors in Ohiocriteria:is an actual roofing contractor or roofing companyoperates in Ohioposts their own project work
  • @bolaceyconstruction951 followers

    Roofing | Siding | Baths📍Ohio

    • is an actual roofing contractor or roofing company — metRoofing | Siding | Baths
    • operates in Ohio — met📍Ohio
    • posts their own project work — not metnone
  • @roofprosplus545 followers

    Roof Pros Plus

    • is an actual roofing contractor or roofing company — met🛠️ Gutters, Fascias & Soffits
    • operates in Ohio — not met🇨🇦 Made in Ontario for Ontario
    • posts their own project work — metposts_count: 671
  • @roof__expert19,216 followers

    Roof_Expert_Dmitry

    • is an actual roofing contractor or roofing company — metRoofing content🎥 is here👇🔨
    • operates in Ohio — not metSeattle WA📍🇺🇸
    • posts their own project work — metNew REELS🎞 every day📆
  • @roofingpov_25,008 followers

    Bruce P | Roofing POV

    • is an actual roofing contractor or roofing company — met23 | SoCal Roofer
    • operates in Ohio — not metSoCal Roofer
    • posts their own project work — metPOV • Rooftops • Tools

returned as match_evidence on every result from search_people and start_social_job

Every one of those four was dropped. When nothing genuinely matches, the honest answer is an empty list — and that is the answer you get.

Run one yourself

No key, no signup. A real TikTok search against the same API a customer pays for, with the same receipt.

POSThttps://stormy.ai/api/v1/search TikTok · cached
Request
{
  "platform": "tiktok",
  "query": "handmade jewelry",
  "limit": 3
}
Response
Press Run to call the live API.

Every row carries last_updated, and the receipt says what it cost: a cached result is $0.01, and the anonymous preview bills you nothing at all.

What a run costs

You are charged per result that comes back, never per seat. Nothing matched means nothing billed, and every call returns a receipt saying exactly what it spent.

Cached result

profiles and posts already indexed

$0.01

Fresh profile

current profile data from the source

$0.05

Fresh discovery

per matching person returned

$0.08

Verified email

charged only when an email is found

$0.15

Live estimate

100 people

$23.00

Fresh discovery
$8.00
Verified emails
up to $15.00

Maximum shown — an email attempt that finds nothing costs $0.

Usage receipt · on every response
{
  "usage": {
    "operation": "cached_result",
    "metered_results": 3,
    "billed_results": 0,
    "cost_usd": "0.00",
    "credits": 0,
    "plan": "free",
    "remaining_usage_usd": null
  }
}

That is the real receipt from the keyless run above — metered three, billed none. A call on your own key fills the same fields in: billed_results, cost_usd and remaining_usage_usd, so your agent can decide whether the next call is worth making. New accounts start with $10 of credit and no card — about 125 fresh creators, or 66 verified emails.

Where it looks

Four networks carry creator search today, and one of them is not live. You should hear that from this page rather than from your first query.

NetworkStatus
InstagramBio, follower count, engagement rate, business category, posts with captions.Live
YouTubeSubscribers, video counts and views, plus full transcripts with or without captions.Live
LinkedInHeadline, followers, posting cadence and interaction averages. No email lookup here.Live
TikTokNo live credential right now, so TikTok answers from what was collected earlier. Rows carry the date.Cache only
X and RedditBoth endpoints accept them, neither is tuned for creator discovery — persona 06 in our benchmark is exactly this case.Not tuned

Two runs we measured on 30 July 2026: an Instagram search returned 10 of 10 matching profiles in about 29 seconds; the same shape of search on YouTube took about 8. Those are two runs with two queries, not an average and not a promise.

What comes back

Normalized profiles, the posts behind them, and a contact email where one exists. These are the field names your agent receives, per network.

TikTok26 fields

Search creators by niche, resolve any @handle to a live profile, read their videos with view and engagement counts, and enrich verified emails.

POST /searchPOST /profilePOST /emails

Profile data · 12 fields

Returned by /profile, and on each row of /search results.

idsec_uidhandlenicknameurlsignatureavatar_urlverifiedfollower_countfollowing_countlikes_countvideo_count

Post data · 14 fields

Returned when you ask for posts with include_posts.

video_idurldescriptioncreate_timedurationviewslikescommentssharessavesimage_urlis_pinnedmusichashtags
LinkedIn26 fields

Search people and companies, resolve a profile URL to headline, follower count and posting cadence, and read posts with interaction breakdowns. No email lookup.

POST /searchPOST /profileno /emails on LinkedIn

Profile data · 16 fields

Returned by /profile, and on each row of /search results.

idnamelinkedin_urlheadlinecountryfollowerstotal_postsposts_last_6_monthsposting_frequencyavg_likesavg_commentsavg_repostsavg_total_interactionstop_post_textlast_post_dateai_summary

Post data · 10 fields

Returned when you ask for posts with include_posts.

post_urltextheadlineposted_datetimetotal_interactionsnum_likesnum_commentsnum_repostsposter_nameposter_linkedin_url
YouTube24 fields

Search channels by topic, resolve a handle or channel id to subscribers and links, read videos including transcripts where published, and enrich verified emails.

POST /searchPOST /profilePOST /emails

Profile data · 13 fields

Returned by /profile, and on each row of /search results.

channel_idhandlenameurlsubscribersdescriptionvideos_counttotal_viewsprofile_image_urlbanner_image_urlcountrykeywordslinks

Post data · 11 fields

Returned when you ask for posts with include_posts.

video_idurltitledescriptionpublished_atdurationviewslikescommentsthumbnail_urltranscript
Reddit16 fields

Search discussions across subreddits and read posts with score and upvote ratio. Author profiles carry karma and account age. No email lookup.

POST /searchPOST /profileno /emails on Reddit

Profile data · 4 fields

Returned by /profile, and on each row of /search results.

authorauthor_urlkarmaaccount_created_at

Post data · 12 fields

Returned when you ask for posts with include_posts.

idurlpermalinksubredditauthortitletextcreated_atscoreupvote_ratiocomments_countover_18
Instagram22 fields

Search creators by niche, resolve a username to follower count, bio links and business category, read posts with engagement, and enrich verified emails.

POST /searchPOST /profilePOST /emails

Profile data · 13 fields

Returned by /profile, and on each row of /search results.

usernamefull_namebiographyprofile_pic_urlfollower_countfollowing_countposts_countavg_engagement_ratebiolinkscountryis_verifiedis_business_accountbusiness_category_name

Post data · 9 fields

Returned when you ask for posts with include_posts.

media_idpost_urlcaptiontaken_atlike_countcomment_countimage_urllocationcomments

Mirrors GET https://stormy.ai/api/v1/capabilities fields_by_platform, which is public and needs no key.

The benchmark

We test in public

Thirteen persona queries live in the repo beside the code that runs them — the exact wording, the network, the target count and the fill floor a run has to clear. Two of the floors are zero, because those queries are supposed to come back empty.

#QueryAsked forFill floor
01fitness creators who post workout content at least weekly100.80
02roofing contractors in Ohio100.60
03med spas in Scottsdale Arizona doing botox and fillers80.60
04fractional CMO growth operator B2B mid-market80.60
05competitive pinball players who stream tournament runs50.40
06AI agents founders building developer toolsnetwork we do not claim50.00
07creators who post exclusively in Latin about medieval falconry techniqueshould return nobody50.00
08creadores de cocina casera mexicana que publican recetas en español80.60
09Handwerker aus Bayern die ihre Baustellen auf YouTube zeigen60.50
10long-form YouTube channels reviewing home espresso machines80.70
11skincare creators who review products they bought themselves200.75
12home cooking creators who share family recipesplus 500k followers and verified only100.20
13US creators Korean culture kbeauty80.60

The fill floor is the share of the target count a run must return to pass. Publishing the two queries we expect to fail is the point: a search product is worth what it refuses to return, and a harness that rewards filling the quota would teach the pipeline to invent matches. We are not publishing per-run scores here until the numbers are stable enough to stand behind — when they are, this table gets two more columns.

There is a REST API too

Same contract, same receipts, for when your own code is doing the calling. Bearer auth, three synchronous endpoints, and durable jobs with idempotency keys for bulk work. Everyone who has used Stormy so far came in through here — it works, it is simply the smaller door now.

POST /searchPOST /profilePOST /emailsPOST /jobs
Read the docs
bash
curl -X POST 'https://stormy.ai/api/v1/search' \
  -H 'Authorization: Bearer stm_live_...' \
  -H 'Content-Type: application/json' \
  -d '{"platform":"youtube","query":"home espresso reviewers","limit":10,"fresh":true}'

Shipped recently

Commit subjects, unedited, with their dates.

  • 30 Jul 2026Transcribe a YouTube video whether or not it has captions
  • 30 Jul 2026Require every search term, not whichever one is broadest
  • 29 Jul 2026Keep the product standing when ten people use it at once
  • 28 Jul 2026Restore the 75s batch timeout that measured 6/6
  • 26 Jul 2026Actually run a job worker
  • 25 Jul 2026Stop the cached TikTok search scanning the table for impossible matches

Questions

What if nothing matches what I asked for?

You get fewer results, or none. Every candidate is checked against every criterion and the ones that fail are dropped rather than used to fill the count — and because you are charged per returned result, a search that finds nobody costs you nothing. Two of the thirteen benchmark personas exist to keep this true: one asks for creators who post exclusively in Latin about medieval falconry, and returning zero is how it passes.

Where does the data come from?

Public profiles and posts on the networks themselves. Anything collected on an earlier run is served from our cache and every row carries a last_updated date so you can see how old it is; ask for fresh: true and it is collected again now. The verification step never comes from cache — your criteria are checked against the profile on every run. Emails are found only where a creator published one.

Where does my API key live?

In your client's config, sent as an Authorization: Bearer header. Never in a URL, a request body, or an MCP tool argument — the server's own capabilities document says so, and no tool on it accepts a key as input. Keys are created in your account, revocation takes effect immediately, and nothing you type into the runner on this page is authenticated at all: it calls the API anonymously.

What does a typical run cost?

A cached result is $0.01. A fresh profile is $0.05. A verified matching person from a fresh search is $0.08, and a contact email is $0.15 charged only when one is found. Ten fresh creators is therefore $0.80, and the $10 you get at signup covers roughly 125 of them. There is no seat price and no minimum.

Is TikTok live?

No. TikTok has no live credential right now, so it answers from data collected earlier — real profiles with real numbers, stamped with the date they were collected. Instagram, YouTube and LinkedIn run live. We would rather label that here than let you find it in your first query.

How do I get help?

Email founders@stormy.ai and one of the two people who built this answers. If your agent is the one that is stuck, point it at llms.txt or have it call describe_social_data on https://stormy.ai/mcp — that returns the whole contract, machine-readable.

Point your agent at it

One line of config, $10 of credit, and creator research stops being your job.

https://stormy.ai/mcp