Your agent finds the creators
Stormy is a remote MCP server for creator search: connect it once, then ask for the people you want in plain language.
Instagram, YouTube and LinkedIn search live · TikTok answers from cache · priced per result, not per seat.
Connect your agent
One line in your MCP client, and your agent runs the search itself — including asking what a run will cost before it spends anything.
https://stormy.ai/mcpAuthorization: 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 includedCount the tools yourself — the server lists them without a key:
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_peopleSearch one social network and return normalized public results, source URLs, and a usage receipt.
get_video_transcriptEverything said in a YouTube video, as text.
lookup_profileLook up one profile URL, handle, or channel ID and return normalized public fields plus a usage receipt.
find_emailsFind verified contact emails for 1-25 Instagram, TikTok, or YouTube profiles.
estimate_priceReturn the authoritative rate card and maximum workflow estimate without spending credits.
account_statusShow entitlements, remaining prepaid usage, and the checkout or top-up URL.
describe_social_dataReturn the machine-readable platform, field, pricing, reliability, and workflow contract.
start_social_jobQueue fresh, bulk, or email work with durable retries and status.
get_social_jobReturn status, progress, exact poll timing, result/error, and the complete timeline.
list_social_jobsList recent durable jobs, optionally filtered by any documented job status.
cancel_social_jobCancel a queued, scheduled, throttled, or retrying job before a worker starts it.
What a call looks like
Three asks in plain language, the tool call each one turned into, and what came back.
Find handmade jewellery creators I could send samples to.
search_people({
platform: "tiktok",
query: "handmade jewellery creators",
limit: 3
}){
"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: trueand 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.
The near misses come back too
A fresh run hands back up to fifty of the people it turned down alongside the ones it kept, so you can see which criterion did the damage.
- 01
Expand
Your sentence becomes search terms — every term required, not whichever one is broadest.
- 02
Collect
Candidates come back from the network, plus anything already in the cache from earlier runs.
- 03
Judge
Whatever clears the filters goes to a model with your criteria. The ones it turns down are dropped, with the quote that failed them.
- @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
rides along as match_evidence on results from search_people and start_social_job whenever the model recorded its checks
All four of those were dropped, and that run returned fewer people than it was asked for. Coming back with nobody is a permitted answer here: two of the thirteen benchmark queries below carry a fill floor of zero, so a run that returns no one still passes.
Run one yourself
No key and no signup — a real call to the same API a customer pays for, answered from the TikTok cache, with the same receipt.
https://stormy.ai/api/v1/search TikTok · cached{
"platform": "tiktok",
"query": "handmade jewelry",
"limit": 3
}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 — and a call that matches nobody bills nothing.
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": {
"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, one of them is not live, and you should hear that here rather than from your first query.
| Network | Status |
|---|---|
| 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
The field names your agent receives, per network — normalized profiles, the posts behind them, and a contact email where one exists.
TikTok26 fieldsSearch 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
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 /emailsProfile data · 12 fields
Returned by /profile, and on each row of /search results.
idsec_uidhandlenicknameurlsignatureavatar_urlverifiedfollower_countfollowing_countlikes_countvideo_countPost data · 14 fields
Returned when you ask for posts with include_posts.
video_idurldescriptioncreate_timedurationviewslikescommentssharessavesimage_urlis_pinnedmusichashtagsLinkedIn26 fieldsSearch 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
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 LinkedInProfile 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_summaryPost data · 10 fields
Returned when you ask for posts with include_posts.
post_urltextheadlineposted_datetimetotal_interactionsnum_likesnum_commentsnum_repostsposter_nameposter_linkedin_urlYouTube24 fieldsSearch 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
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 /emailsProfile data · 13 fields
Returned by /profile, and on each row of /search results.
channel_idhandlenameurlsubscribersdescriptionvideos_counttotal_viewsprofile_image_urlbanner_image_urlcountrykeywordslinksPost data · 11 fields
Returned when you ask for posts with include_posts.
video_idurltitledescriptionpublished_atdurationviewslikescommentsthumbnail_urltranscriptReddit16 fieldsSearch 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
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 RedditProfile data · 4 fields
Returned by /profile, and on each row of /search results.
authorauthor_urlkarmaaccount_created_atPost data · 12 fields
Returned when you ask for posts with include_posts.
idurlpermalinksubredditauthortitletextcreated_atscoreupvote_ratiocomments_countover_18Instagram22 fieldsSearch 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
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 /emailsProfile 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_namePost data · 9 fields
Returned when you ask for posts with include_posts.
media_idpost_urlcaptiontaken_atlike_countcomment_countimage_urllocationcommentsMirrors GET https://stormy.ai/api/v1/capabilities → fields_by_platform, which is public and needs no key.
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 each run has to clear.
| # | Query | Asked for | Fill floor |
|---|---|---|---|
| 01 | fitness creators who post workout content at least weekly | 10 | 0.80 |
| 02 | roofing contractors in Ohio | 10 | 0.60 |
| 03 | med spas in Scottsdale Arizona doing botox and fillers | 8 | 0.60 |
| 04 | fractional CMO growth operator B2B mid-market | 8 | 0.60 |
| 05 | competitive pinball players who stream tournament runs | 5 | 0.40 |
| 06 | AI agents founders building developer toolsnetwork we do not claim | 5 | 0.00 |
| 07 | creators who post exclusively in Latin about medieval falconry techniqueshould return nobody | 5 | 0.00 |
| 08 | creadores de cocina casera mexicana que publican recetas en español | 8 | 0.60 |
| 09 | Handwerker aus Bayern die ihre Baustellen auf YouTube zeigen | 6 | 0.50 |
| 10 | long-form YouTube channels reviewing home espresso machines | 8 | 0.70 |
| 11 | skincare creators who review products they bought themselves | 20 | 0.75 |
| 12 | home cooking creators who share family recipesplus 500k followers and verified only | 10 | 0.20 |
| 13 | US creators Korean culture kbeauty | 8 | 0.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 and the same receipts, for when your own code is doing the calling. Everyone who has used Stormy so far came in through here — it works, it is simply the smaller door now.
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. On a fresh search each candidate is put in front of a model with your criteria, and the ones it turns down 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. That date matters, because a run can judge a candidate on a stored row rather than one fetched in the moment — we are moving verification onto fresh data, and until that is true everywhere the stamp is how you tell. 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