The Viral Outliers CLI

One command per API skill, generated from the same registry as the docs, so it never lags the API. JSON on stdout, credit metering on stderr, and --wait for jobs that take a while. Built for terminals, CI, and shell-native agents such as Claude Code.

Install

npm install -g viral-outliers     # Node 20 or newer, no other dependencies
# or run it without installing:
npx viral-outliers commands

Source and issues: github.com/Viral-Outliers/cli.

Authenticate

viral-outliers login --key so_live_YOUR_KEY   # validates the key and stores it (0600) in your config dir
viral-outliers whoami                       # credit balance

The key is resolved in this order: --key, the VIRAL_OUTLIERS_API_KEY environment variable, then the stored config. No key yet? Run any billable command anyway: the API answers 402 with a payment link that gives you a key without an account (how that works), or create one at Settings, API Keys.

Examples

viral-outliers search-outliers --query "home workout" --platforms tiktok --min-outlier-score 5
viral-outliers get-post <postId> --include-transcript=false
viral-outliers request-transcript --url https://www.tiktok.com/@creator/video/123 --wait
viral-outliers compare-profiles --handles tiktok:creator_a --handles instagram:creator_b
viral-outliers create-topup-link --pack-id pack_s        # free: a Stripe link for the account owner
viral-outliers search-outliers --body '{"query":"stoic quotes","pageSize":50}' --compact --quiet
  • Repeatable list flags also accept comma-separated values: --platforms tiktok,youtube.
  • --body takes raw JSON and is merged over the flags, so any parameter the API accepts can be sent.
  • --wait polls the free job endpoint until the job finishes, then fetches the result (a transcript fetch costs 1 credit).
  • Every billable response prints credits: charged=N balance=M to stderr (silence it with --quiet). 1 credit = $0.01.

Exit codes

0Success
1API or network error (server error, not found, invalid params, --wait timeout); the error body is printed to stderr as JSON
2Payment required (HTTP 402): out of credits, or no API key was sent and the payment link that issues one is printed
3Rate limited (HTTP 429); back off and retry
4Invalid or revoked API key (HTTP 401); run viral-outliers login
5Usage error (unknown command or flag, missing required parameter, invalid --body JSON)

Commands

Flags marked * are required. Run viral-outliers help <command> for every flag with its description.

Billable

CommandCostWhat it does
search-outliers1 creditFind statistically overperforming ("outlier") social media posts across TikTok, Instagram and YouTube with rich filters. details
--query--platforms--handle--watchlist-id--content-types--min-outlier-score--max-outlier-score--min-views--max-views--min-followers--max-followers--min-engagement-rate--max-engagement-rate--time-frame--sort-by--page--page-size
search-profiles1 creditFind tracked creator profiles by name/handle across platforms, with follower and performance stats. details
--query--platforms--page--page-size
get-post <postId>1 creditFull data for one post: stats, outlier scores across seven time windows, plus cached transcript and visual analysis when available. details
--include-transcript--include-visual-analysis
get-profile <profileId>1 creditFollower counts, average performance baselines and recent posts for one tracked profile. details
request-transcriptasync10 creditsQueue AI speech transcription for any tracked video post; poll the job, then fetch via get_post. details
--url--post-id
request-visual-analysisasync10 creditsQueue AI scene-by-scene visual analysis (on-screen text, shot breakdown, editing style) for any tracked post; poll the job, then fetch via get_post. details
--url--post-id
crawl-profileasync40 creditsAdd any public TikTok, Instagram or YouTube profile to the tracked database on demand. details
--platform*--handle*
compare-profiles2 creditsBenchmark 2–5 tracked creators side by side: followers, average views/likes/engagement, and who wins each metric. details
--profile-ids--handles
niche-trends2 creditsThe posts spiking in a niche right now, plus which formats and creators are driving it. details
--query--platforms--time-frame--limit
resolve-post-url1 creditTurn a public TikTok/Instagram/YouTube post URL into the internal post id every other skill uses. details
--url*
download-post-mediaasync3 creditsGet direct media URLs (video or slideshow images) for a tracked post; fetched on demand when not stored. details
--url--post-id
remix-postasync20 creditsTurn any public viral post into a niche-adapted content idea: rewritten hook, script segments, a why-it-went-viral analysis and an execution checklist. details
--url--post-id--target-niche*--tone

Free

get-job-status <jobRef>freeFree polling endpoint for asynchronous jobs (crawls, transcriptions). details
get-credit-balancefreeFree endpoint returning your current credit balance. details
get-pricingfreeFree, unauthenticated, machine-readable price list: per-skill credit costs, credit packs and the USD-per-credit rate. details
get-remix-result <jobRef>freeFree: fetch the finished output of a remix_post job. details
create-topup-linkfreeOut of credits? Get a ready-to-pay Stripe link for a credit pack to hand to the account owner. Free. details
--pack-id*
report-issuefreeHit a bug, wrong data, or a missing capability? Tell us. It is free, and you can ask to be notified when it is fixed. details
--message*--skill--wants-update
get-trending-outliersfreeFree, no-auth teaser: the current top trending outlier posts across platforms. details
track-profilefreeKeep a TikTok, Instagram or YouTube profile fresh on a schedule (daily, every 3 days or weekly) and pull its new posts. details
--profile-id--platform--handle--url--frequency
untrack-profilefreeStop the scheduled refresh crawls for a monitored profile. Free. details
--profile-id*
list-tracked-profilesfreeSee every profile you are monitoring, its cadence, next refresh time and whether it is paused. Free. details
create-watchlistfreeCreate a named set of creators you can then search with a single watchlistId filter. Free. details
--name*--notes
list-watchlistsfreeAll your watchlists with their ids and profile counts, so an agent can pick one to search. Free. details
get-watchlist <watchlistId>freeOne watchlist with its member creators (ids, handles, platforms, follower counts). Free. details
add-watchlist-profilesfreeAdd up to 25 tracked creators to a watchlist per call, by profile id or by platform+handle. Free; counts against your followed-profiles allowance. details
--watchlist-id*--profile-ids--handles
remove-watchlist-profilesfreeRemove creators from a watchlist by profile id. Free. details
--watchlist-id*--profile-ids*
delete-watchlistfreeDelete one of your watchlists and its memberships, freeing the allowance it used. Free. details
--watchlist-id*
get-tracked-updatesfreePull the posts first seen since your last check across all monitored profiles, then advance the cursor. Free. details
--limit

Prefer MCP? The same skills are available as tools at https://viraloutliers.com/api/mcp; see the getting-started guide.