Research playbook
How to pick the right Virlo workflow for a research question, in any niche, and how to read what comes back.
- What it does
- A field guide for researching short-form video, yourself or through an AI assistant.
- You get back
- What to run, how long it takes, how to rank viral videos, and how to read AI fields.
- Cost
- Reading this guide is free. Each workflow lists its price.
Working through an AI assistant? Give it the plain-text guide /agent-playbook.txt. If it's connected to Virlo by MCP, Available tools names the tool behind each workflow.
Pick the right workflow
Find your question. Swap :id-style parts for real values.
An agent (Content Research Agent) collects TikTok, YouTube, and Instagram videos for your keywords. Data Intelligence (+$1.00 per run) adds an AI breakdown of the videos worth studying. A creator lookup's $0.25 AI read is separate and covers fewer fields.
Research a niche
| Question | Run this | Cost |
|---|---|---|
| "What's working in X right now?" | One-time agent: POST /v1/agents with is_recurring: false | $0.50 (+$1.00 with Data Intelligence) |
| "Keep watching X for me." | Recurring agent: POST /v1/agents with is_recurring: true and a cadence | $0.50 per run, first run included; it starts right away (+$1.00 per run with Data Intelligence). |
| "What's working in X in Spanish or Thai?" | Agent, all languages: POST /v1/agents with english_only: false | Same as any agent |
| "Only videos uploaded from Canada." | Country filter (beta): GET /v1/agents/:id/videos?region=CA | Free |
| "What do these videos actually say?" | Transcripts: GET /v1/agents/:id/videos?include_transcript=true | Free |
Look up or track one thing
| Question | Run this | Cost |
|---|---|---|
| "Tell me about this creator." | Creator lookup: GET /v1/satellite/creator/:platform/:username | $0.50 (+$0.50 trend analysis, +$0.25 for the lookup's own AI read of each video) |
| "Who watches this creator?" | Audience: audience_demographics=true on a creator lookup, or POST /v1/tracking/creators/:id/audience-refresh | $0.50 per new snapshot |
| "Why did this video pop?" | Video outlier check (one video against the creator's usual numbers): POST /v1/satellite/video-outlier | $0.50 |
| "What's happening with this sound?" | Sound lookup (TikTok, Instagram): GET /v1/satellite/sounds/:platform/:music_id | $0.50 to $1.00 |
| "What's working under #X?" | Hashtag lookup (TikTok, Instagram, YouTube Shorts): GET /v1/satellite/hashtags/:platform/:hashtag | $0.50 to $2.50 |
| "Track this creator or video." | Tracking: POST /v1/tracking/creators or /v1/tracking/videos | $0.25 per check, daily by default |
Trends, sounds, and hooks
| Question | Run this | Cost |
|---|---|---|
| "What's trending today?" | Digests (Pop culture & News, videos, hashtags): GET /v1/trends/digest, /v1/videos/digest, /v1/hashtags | $0.05 to $0.25 |
| "What's starting to take off?" | Emerging Pop culture & News trends: GET /v1/trends/emerging | $0.25 |
| "What formats or memes are creators copying?" | Content Trends (video formats, not topics): GET /v1/content-trends | $0.25 |
| "Is this format still rising?" | One content trend: GET /v1/content-trends/:id | $0.05 |
| "Give me a format for a B2B, clinic, consumer brand, or local business." | Content Trends by client fit: GET /v1/content-trends?client_fit=b2b_saas | $0.25 |
| "What's trending in the US, UK, Australia, or Singapore?" | Pop culture & News by region: GET /v1/trends?region=us (or gb, au, sg) | $0.25 |
| "Find me a sound." | Sounds: GET /v1/sounds/trending, /breakout, /search | $0.10 to $0.25 |
| "What hooks work in X?" | Hooks: GET /v1/agents/:id/hooks for your agent's niche, or GET /v1/hooks/trending | $0.25 (free on an agent with Data Intelligence, or while it has no hooks yet) |
| "Which kinds of hooks work best?" | Hook types: GET /v1/hooks/types?sort=strong_hit_rate | Free |
| "Where is this hook from?" | Hook search: GET /v1/hooks/search?q=... | $0.25 |
| "Write me hooks for X." | Hook templates: GET /v1/hooks/library | $0.10 (+$0.25 if you also call /v1/hooks/trending) |
Most research follows one path: a one-time agent finds outlier creators (creators whose views far beat their follower count), a creator lookup checks the best ones, and tracking follows the winners.
Coming from Orbit or Comet?
POST /v1/agents replaces Orbit (now is_recurring: false) and Comet (now is_recurring: true). Both are deprecated and scheduled for removal. The announced date was August 3, 2026, and they still respond today, so migrate now. Old IDs work at /v1/agents/:id. See the migration guide.
How long things take
Agents and lookups run in the background. Start a job, check back at the pace in the table below until it's done (polling), then read the results. Or get a webhook when it finishes. More in How results load.
- Done means
finalized: true.status: completedalone can mean the AI report is still being written. Empty (null) AI fields mean "not yet," not "no data." The exception is a video withintelligence_status: "skipped": itsintelligencewill never arrive. partial_failureis usable (about 2% of runs). One platform or keyword failed, and the rest is there. Onlyfailed(rare) means no data.- Each status reply says when to check next (
pending_jobs[].retry_after_seconds).
| Job | Typical | Plan for | Check every |
|---|---|---|---|
| Agent run | About 8 min (9 in 10 within 20 min) | 45 min | 15 to 60 s |
| Creator lookup | 15 to 40 s | 2 min | 10 to 15 s |
| Sound lookup | 1 to 2 min | 5 min | 10 to 15 s |
| Hashtag lookup | 1 to 3 min | 5 min | 10 to 15 s |
| Video outlier check | 20 to 60 s | 3 min | 10 s |
Trend analysis makes sound and hashtag lookups a little slower. The job status check stops working after 24 hours.
Setting up an agent
Keywords matter most. Use specific phrases of two or more words ("jeep wrangler mods", not "jeep"). Send 7 to 12, the number suggest-keywords returns (50 at most); the price is the same. Cover synonyms of the same idea: each keyword is its own search on each platform.
Write a real intent. One required sentence on what you want to find. With Data Intelligence on, AI checks each video against it, and intent_match=true keeps only the matches when you read videos. See the Intent cookbook.
Exclude words that pull in the wrong topic, like apple the fruit when you mean Apple the company. A few exclude words remove more junk than an extra keyword adds.
- Each is matched as a whole word against captions and hashtags.
exclude_keywords_strictalso checks what's said in the video. - Use single words from the other meaning (
recipe,fruit,orchard). Phrases likeapple the fruitfilter out almost nothing, and excluding your own topic (apple) removes everything. - The free keyword helper (
POST /v1/agents/suggest-keywords) returns a readyexclude_keywordslist. Pass it straight through.
Other settings:
- Don't send
time_periodormin_views.POST /v1/agentsrejects them with a400error (MCP tools ignore them). Filter when you read instead, for free: the videos endpoint takesmin_views,platforms,start_date,end_date,region, andorder_by. english_onlyistrueby default, which now means English-speaking Western markets: creators in the US, UK, Canada, Australia, Ireland and Western and Northern Europe only, excluded elsewhere even when they post in English. For non-English or global niches, set it tofalseand write the keywords and intent in that language, or you get almost nothing.meta_ads_enabled: truealso collects matching ads from Meta's ad library at no extra cost, but a run can take up to about 45 minutes. Use it when a brand or product is involved.data_intelligence_enabled: true(+$1.00 per run) when you want to understand content (hooks, formats, messaging), not just count views. You can't add it to a run afterward.
Reading what you collected
Read everything you paid for. Reading is free. A one-time run keeps about 360 videos (later recurring runs about 200), plus slideshows, ads, outlier creators, sounds, an AI report, and trends. Once it's finished, start with GET /v1/agents/:id/summary, then read the full lists.
Filter by upload country (beta). Add region with a two-letter code (US, CA, any case) to the agent's videos or slideshows endpoint. A country name returns nothing, so convert it yourself. Coverage is partial: items with no known country drop out.
Creator lookups: add include=videos,outliers and raise max_videos to 50 to 100 (the default is 20; sound and hashtag lookups already default to 50). The price stays $0.50. cross_links=true finds the creator's profiles on other platforms.
All lookups (video outlier checks included) are saved. Re-read one free at GET /v1/satellite/runs/:run_id; the run_id is the job ID. Each paid lookup is saved as a new run with its own run_id, so a later lookup of the same creator, sound, or hashtag never overwrites an earlier one.
Refunds. Virlo refunds a failed creator, sound, or hashtag lookup in full, for example a handle that doesn't exist, or a lookup that stalls and is closed out as failed. The trend analysis surcharge comes back when no trends come out, the audience surcharge when no new snapshot was needed, and the Data Intelligence surcharge when the lookup had no posts to enrich or its analysis failed. The result or failed status then shows credits_refunded, in credits, and so does the saved run at GET /v1/satellite/runs/:run_id, even for a failed lookup. The hashtag depth surcharge comes back only when the whole lookup fails.
How recurring agents improve themselves
After each run, a recurring agent tunes its own keywords so it keeps finding new videos. This is autopilot. It is on by default for every new agent, whether you make it through the API, over MCP, or in the Virlo app.
- What it does: rewords searches, adds keywords (up to 15 in all), adds short-lived keywords for breaking stories in the niche, and collects more widely after a thin run. Keyword changes must pass a quality check first.
- What it never does: remove a keyword or exclude term you set (returned as
pinned_keywords), add charges, change the schedule, or pause the agent. Price per run is unchanged. - What changed and why:
GET /v1/agents/:id/activity(free) is the change log. - Breaking stories:
GET /v1/agents/:id/events(free). Each has a title, summary, importance score (0 to 10), and the keywords added. - Turn it off: send
autopilot: falsewhen you create or update the agent, orPUT /v1/agents/:id/autonomywith{ "autopilot": false }. The agent then keeps its setup exactly as you set it.cognition_enabled: falsestops self-review entirely, and the agent keeps collecting. - Proposals are deprecated.
GET /v1/agents/:id/proposalsand its apply, dismiss, and revert calls still work for now. Read the activity log instead.
One-time agents don't change themselves. See Autopilot.
Spotting the most viral
Raw views mislead. 500,000 views is routine for an account with 10 million followers and huge for one with 3,000. So rank by the Virality Score (weighted_score), as Virlo does for outlier creators and hooks. It rewards beating the follower count by a wide margin, weighted by audience size so one lucky video from a tiny account doesn't top every list.
That 3,000-follower video (167x its followers) scores 41: exceptional. 3,000,000 views on a 1,000,000-follower account (3x) scores 15: promising. Below 1x there's no score (the hooks endpoints show a negative one).
| Virality Score | Read it as |
|---|---|
| 35 or more | Exceptional: study it frame by frame |
| 25 to 35 | Very strong |
| 18 to 25 | Strong |
| 10 to 18 | Promising |
| Below 10 | Emerging or routine |
How the score is calculated
ratio = views / followers (only when followers > 0 and ratio > 1)
weighted_score = ln(ratio) × ln(followers)
exceptional: weighted_score ≥ 35
ln is the natural logarithm (Math.log in JavaScript, math.log in Python).
To find the real winners:
- Rank all videos by this score. The videos list can't sort by it, so compute it from
viewsandauthor.followers. First set aside videos withis_paid: true: they are ads, boosted posts or paid partnerships, so part of their views is ad spend. Report them as ads, not organic wins. The same flag is on trendtop_exemplarsand hookvideoobjects. - Check the plain multiplier: 20 times the follower count is notable, 100 times exceptional, 1,000 times a mega-outlier.
- Compute
engagement_rate = (likes + comments + shares) / views. Above 5% on a big video means people really reacted. Below 1% means passive spread (a popular sound, reposts, or paid promotion). - Compare with the AI's picks (
analysis_data.top_10_breakdown), which also weigh quality and topic fit. Videos on both lists are the real winners. - For whole accounts, sort creator outliers (
GET /v1/agents/:id/creators/outliers) byweighted_score(ln(outlier_ratio) × ln(follower_count)), not the raw ratio. They're the best source of rising talent and partnership leads. - Check
publish_date: a high score this week is a live trend; from months ago, it's history.
Platform benchmarks
Never compare raw views across platforms.
| Platform | Median views | Top 10% start at | Top 1% start at | Videos with a transcript |
|---|---|---|---|---|
| TikTok | ~39K | ~1M | ~6.6M | ~63% |
| Instagram Reels | ~3.8K | ~175K | ~3M | Almost none, ~40% with Data Intelligence |
| YouTube Shorts | ~1K | ~32K | ~2.5M | ~38% |
A 100K-view Reel is a bigger deal than a 100K-view TikTok. Spoken insights (hooks, messaging) come mostly from TikTok and YouTube. Instagram publishes no transcripts, so a Reel only has one when Data Intelligence transcribed its audio. Without it, lean on descriptions, hashtags, and the AI's visual analysis.
To read the words themselves, add include_transcript=true to Get videos. TikTok and YouTube transcripts are mostly plain text (source: "platform"). Timestamps always come with the ones Virlo transcribed (source: "transcribed"), which includes every Instagram transcript, and with a small share of platform ones, so check segments.
Reading Data Intelligence fields
With Data Intelligence on, each analyzed video gets AI-written fields (full list). Off-topic, year-old and underperforming videos are skipped. The ones that matter most:
- Hooks.
hook_textis the exact opening line.hook_typeis its style (question,bold_claim,pov_setup, and more). Use the hooks endpoints, or group your top videos byhook_typeand quote realhook_textlines as templates. summaryis on every analyzed item. Reading 100 summaries is the fastest way to "watch" 100 videos.content_formatincludes free-text values, so group close ones (skit,comedy_skit,skit_sketch).- Commercial signals (
is_sponsored,brands_mentioned[],cta_usages[]) show paid posts, organic brand mentions, and the niche's calls to action. To filter out paid posts, use the row'sis_paid, which reads platform labels and caption disclosures. - Trust checks. Use an item's fields only when
intelligence_statusis"ready"."skipped"items were left out on purpose and never get fields. Discount anything inlow_confidence_fields[].transcript_word_count: 0with visual fields filled in means a silent video, not missing data.
Find the winners' pattern. Count each hook_type, content_format, and emotional_tone in the top 25% of videos by Virality Score, then in the bottom 25%. The differences are the niche's real playbook.
Slideshows
TikTok image carousels (slideshows) come back separately from /slideshows, with their own AI fields. In product, education, and lifestyle niches they often beat video.
panel_texts[]andpanel_text_fullhold every slide's text in order. That's usually the whole content, so read it like a script you can adapt.narrative_arcis how the slides progress.text_densitysays whether text or images dominate.- The hook is slide 1. Read
hook_textas you would for a video. - Video-only fields (
visual_format,camera_perspective, captions, transcript) are absent by design.
Reading the AI report and trends
GET /v1/agents/:id/analysis/latest returns the AI report in analysis_data:
key_highlightis the top finding, in one paragraph.overviewholds the counts (total_videosanalyzed,avg_virality).themes[]are groups of what works, each withwhy_it_works,tactics[], aconfidencefrom 0 to 1, andevidence_video_ids[]. Trust 0.7 and up, check 0.5 to 0.7 against their videos, and call anything lower tentative. Match evidence IDs to the video list so every claim points to real videos.timing_analysisshows posting-time patterns,excluded_videoswhat the AI judged off topic, andconnecting_threadthe pattern tying the themes together.
GET /v1/agents/:id/trends/latest returns trends, each with a status: new (just appeared, the biggest opportunity), rising (growing, act now), steady (holding), or fading (skip it). On recurring agents, stable_key follows one trend across runs, and the prev_* fields show the change since the last run. A trend moving from new to rising with a growing video_count is the strongest "post about this now" signal.
Trusting audience data
Audience snapshots are built mainly from the people who comment on a creator's videos, not from the follower count. Before you share the numbers:
confidence_level:highormediumis usable. Forlow, say "limited signal" and don't present the percentages as fact.data_source, strongest first:comments,comments_extended,mixed,followers(TikTok only, never above medium confidence), thenprofile_only.profile_onlymeans no real signal and is refunded automatically. Treat it as "no data."- Cost: a snapshot is reused free for 30 days (
freshness_days). Only a new one costs $0.50. Asking again while one is being built returns that job for free.
Spending wisely
- Starting work costs money, and so do instant data requests (trends, hashtags, sounds, hooks). Re-reading is free, so first check what your team already has:
GET /v1/agents,/v1/satellite/runs,/v1/tracking/creators. - One well-scoped agent beats three vague ones. Put the effort into keywords, not retries.
- Add up the cost before a plan with several paid steps, and check your balance first (
GET /v1/account/balance, free). Top up if it's under $10. TheX-Balance-Remainingheader only appears on paid responses. - Vetting many creators?
POST /v1/satellite/creators/batchtakes up to 25, at $0.50 for each creator it looks up. A creator looked up in the last 6 hours with at least the same options comes back from cache for free. X-Costalways shows the full charge. A refund for a failed lookup or an empty post collection arrives after the job ends, as its own row in your usage history.
Live raw data or Virlo analysis?
Raw data routes return live, unprocessed data from TikTok, YouTube Shorts and Instagram Reels, in the same fields on every platform. One call returns one page, with no job to wait for.
- Use raw data for facts about one thing right now: a video's current counts, its comments or transcript, a creator's profile, or what a keyword or hashtag search shows at this moment.
- Use the analysis routes for judgement: trends, outliers and Virality Score (agents and lookups), hooks, sounds and hashtag stats. Raw data has no Virality Score, AI fields or history, and Virlo doesn't save it for you.
- Scope: YouTube search, hashtag and creator videos return Shorts only, and Instagram returns Reels only. Instagram has no transcript. Instagram search returns fewer results per page than TikTok and YouTube.
- Cost: $0.01 per call, so per page, even when the page is empty. Errors are free. Answer from the first page and only fetch more when you need them. To sample a whole niche, one agent run is the better buy than paging through searches.
- Audience sentiment: to learn how people feel about a brand or topic, take an agent's top 10 to 20 on-topic videos and read the first page of comments on each (about $0.20). Score each comment's stance toward the brands or topics you care about, weight by likes, and compare run to run. The video
sentimentfield only says how the creator feels. See the comment sentiment recipe. - Content ideas: the same comments, grouped into repeated questions, "part 2" requests and objections, ranked by how many videos they appear on, give an agency a ready list of what to make next. See Content ideas from comments.
- Quick creator vetting: before a deal, read a creator's profile, latest videos and comments on 5 to 10 of them (about $0.10) to check audience tone, red flags and fake-looking engagement. Use a creator lookup for the shortlist. See Quick creator vetting.
Content Trends
Content Trends (/v1/content-trends) are repeatable video formats creators are copying: a structure that stays the same while each creator swaps in their own subject. Virlo's detector finds them and the Virlo team reviews each one before it is published. Pop culture & News (/v1/trends) are topics people are talking about, so use Content Trends to decide what to make and Pop culture & News to decide what to talk about.
- Stages:
new(spotted in the last 7 days),rising(10 or more creators this week and at least 1.3 times last week),peaking(in between),fading(under 0.7 times last week) andarchived(no posts in 14 days, or fewer than 5 creators in a week once older than 7 days). The list returns live stages unless you ask forarchived. - Momentum: compare
creators_7dwithcreators_prev_7d. The earlier week is counted as it stood a week ago, so the comparison is fair. - Partial days: the last 7 days of
seriesare markedpartial. Videos are found a few days after they are posted (about 4 days at the median), so those days keep rising. A dip there is not a decline. - Fit:
client_fitsays whether a format suits a B2B SaaS, clinic, consumer brand or local business, and how to use it. For brands, also filterbrand_safety=safe. - Examples:
verified_fitmeans the video really does the format, andis_paidmarks paid posts, which come after organic ones. - Cost: $0.25 for the list and $0.05 for one trend. Read one trend instead of pulling the list again.

