Search a continuously-crawled database of social media posts ranked by outlier score: how strongly a post overperforms the account's own baseline. Filter by platform, keyword, exact creator handle, content type, an outlier-score band (min/max), a view band (min/max), a follower band (min/max), an engagement-rate band (min/max) and time window; sort by outlier score, views, likes, engagement or recency. Returns post metadata, stats and thumbnails. Use this to find proven viral formats in any niche before creating content. Results may include deleted posts (deleted_at set) and posts from deactivated profiles (profile is_active=false), these are kept for their thumbnails and format ideas, with stats frozen at deletion; filter on deleted_at / is_active if you only want live content.
Search a continuously-crawled database of TikTok, Instagram and YouTube posts ranked by outlier score, a measure of how far a post overperforms the account's own baseline, not just how big its raw view count is. Filter by niche keyword, platform, content type, views, follower band, engagement rate and time window, then sort the winners to the top. Built for AI agents and content-research automations that need proven viral formats in any niche, not a random firehose of trending links.
Connect the Viral Outliers MCP server once and the search_outliers tool becomes available to your agent alongside all other skills:
claude mcp add --transport http viral-outliers https://viraloutliers.com/api/mcp \
--header "Authorization: Bearer so_live_YOUR_KEY"In Claude.ai or ChatGPT, add a custom connector pointing at https://viraloutliers.com/api/mcp. Your agent then calls search_outliers on its own whenever the task needs it.
| Name | Type | Description |
|---|---|---|
query | string | Keyword search over captions/titles/handles. |
platforms | string[] | "tiktok" | "instagram" | "youtube". |
handle | string | Exact creator handle (without @). Pins results to one account; takes precedence over the free-text query. |
watchlistId | string | Scope the search to the creators in one of your watchlists (id from list_watchlists / create_watchlist). Combine with any other filter. |
contentTypes | string[] | Platform content types (e.g. reel, short, slideshow). |
minOutlierScore | number | Only posts overperforming their account baseline by at least this factor. |
maxOutlierScore | number | Upper bound on outlier score, e.g. exclude extreme one-off spikes. |
minViews | number | Minimum view count. |
maxViews | number | Maximum view count. |
minFollowers | number | Floor on account size, e.g. exclude tiny/brand-new accounts. |
maxFollowers | number | Cap account size, find small accounts with huge posts. |
minEngagementRate | number | Minimum engagement rate, as a fraction of views: (likes+comments)/views. So 0.04 means 4%. |
maxEngagementRate | number | Maximum engagement rate, same fraction scale (0.04 = 4%). |
timeFrame | string | "one_week" | "one_month" | … | "all_time". |
sortBy | string | Sort key: outlier/views/likes/date/engagement, each _desc or _asc (default outlier_desc). |
page | number | Page number, 1-based. |
pageSize | number | Results per page, clamped to 1–100. |
Each result is a post record with its full stats: view, like and comment counts, engagement rate (returned as a fraction of views, so 0.04 means 4%), content type (reel, short, slideshow, video), a thumbnail, the owning profile, and the outlier score that ranked it. Because the ranking is relative to each account's own average, a 500k-view post from a creator who normally gets 5k floats to the top while a 500k-view post from a mega-account that always does millions does not. You see repeatable formats, not just big accounts.
Results are paginated (up to 100 per page) and can include deleted posts (deleted_at set) and posts from deactivated profiles (is_active=false), which are retained for their thumbnails and format ideas with stats frozen at the moment they vanished. Filter on deleted_at / is_active when you only want live content. Each call costs 1 credit (1 credit = $0.01).
The database is populated by continuously re-crawling tracked profiles and by on-demand crawls (crawl_profile), so the corpus is real creator content, already parsed into structured stats, not a live scrape you have to wait on. The outlier score for every post is computed against that account's rolling average across seven time windows, which is what lets minOutlierScore surface format-driven wins.
You compose a query from the filter parameters: a niche term over captions, titles and handles, or an exact handle to pin one creator; one or more platforms; a content-type list; a view band (minViews / maxViews); a follower band (minFollowers floors out tiny accounts, maxFollowers caps account size to find small-account wins); an outlier-score band (minOutlierScore / maxOutlierScore); an engagement-rate band (minEngagementRate / maxEngagementRate); and a time window from one week to all time. Then choose a sortBy (outlier score, views, likes, engagement or recency). The response is immediate; there is no job to poll. From a result you can go deeper with get_post, pull the media with download_post_media, transcribe it with request_transcript, or adapt it with remix_post.
A watchlist is a named set of creators you curate (competitors, clients, a niche shortlist). Pass its id as watchlistId and the search runs only over those accounts, with every other filter still available: "my 30 competitors, last month, outlier score above 3, sorted by views" is one call. Watchlists you build in the web app and watchlists an agent builds through the API are the same objects, so either side can use them.
The workflow is: create_watchlist (free) to get an id, add_watchlist_profiles (free, up to 25 profiles per call by id or by platform+handle) to fill it, then search_outliers with watchlistId whenever you want that set. Use list_watchlists to recall ids, get_watchlist to see the members, and remove_watchlist_profiles to prune. Because the filter is applied server-side, a watchlist search costs the same 1 credit as any other search, regardless of how many creators are in it.
Watchlists and followed profiles count against a workspace allowance rather than credits. It comes from a subscription (5 watchlists / 50 followed profiles on Basic, 15 / 150 on Pro, unlimited on Agency) or is earned from API usage: spend the equivalent of a plan's monthly price in credits within any 30-day window and you get that plan's watchlist limits, whichever is higher. Every API key holder starts with 1 watchlist and 10 followed profiles, so you can try the workflow before spending. Over-limit calls tell you exactly what unlocks more.
Content-research agents run a niche search on a schedule, take the top outliers, transcribe them and turn them into briefs or scripts. Competitor-watch automations filter to a specific set of handles and alert when a tracked account lands a fresh outlier. Format-mining workflows set maxFollowers low (e.g. under 10k) with a minimum outlier score to find small-account formats that travel before they saturate.
Because every result is already tied to a rich analytics record, the same search that finds a viral post also gives you everything needed to act on it, with no second system to join views to formats to transcripts.
Rolling your own version means running proxies against three platforms, parsing their ever-changing HTML and private APIs, storing history long enough to compute a per-account baseline, and defining "viral" in a way that is not just raw views. That is months of infrastructure that breaks every time a platform ships a change.
This endpoint hands you the finished signal: a normalized, cross-platform post record with an outlier score already computed, filterable in one authenticated call at a flat, predictable credit price. Compared with generic scraper marketplaces that return raw post dumps, the difference is the ranking: you get the posts that actually overperformed, not a page you still have to analyze yourself.
1 credit ($0.01) per call in prepaid credits (1 credit = $0.01). For example, 100 calls per dollar. Subscriptions include monthly credits; top-up packs start at $15. Failed asynchronous jobs are refunded automatically, and calls stop at a zero balance, never a surprise bill. See the full pricing table.
An outlier is a post that massively overperforms the account's own average, e.g. a channel that normally gets 5k views suddenly getting 500k. Outlier score measures that multiple, which surfaces repeatable formats instead of posts that are big only because the account is big.
Call the search_outliers skill with a niche keyword and a minimum outlier score. The response contains proven overperforming posts with stats and thumbnails, which the agent can analyze, transcribe, and turn into content briefs automatically.
Yes, maxFollowers is the classic trick: posts with millions of views from accounts under 10k followers are format-driven wins, not audience-driven ones, and are the most reproducible.
Tracked profiles are re-crawled continuously and new profiles can be added on demand with the crawl_profile skill; time-window filters (one week to all time) let you target current trends or evergreen formats.
Raw views mostly measure how big an account already is: a mega-creator's worst post still out-views a small creator's best. Outlier score normalizes each post against its own account's baseline, so what rises to the top is the format that overperformed, which is the part you can actually reproduce for a different audience.
Also available as a REST API endpoint.
Related topics: viral content research automation · TikTok trend discovery API · Instagram Reels analytics · YouTube Shorts outlier detection · viral format mining for content agents · cross-platform social post search