Algrow

Docs

Viral & Thumbnail Search

Find outlier videos and search channels by thumbnail image.

Search for viral videos across Shorts and Longform channels, find videos similar to a specific video, or browse by filters alone. Filter by video views, channel size, growth metrics, upload recency, outlier score, and more. q, video_id, and video_url are all optional — omit them to browse by filters (e.g. “biggest outliers from the last 7 days”).

Query Parameters

NameTypeRequiredDefaultDescription
qstringOptional—Search query. Matches video titles and channel names with similarity scoring. Also accepts search as an alias. Omit along with video_id / video_url to browse by filters alone.
video_idstringOptional—YouTube video ID (e.g. dQw4w9WgXcQ). Finds videos similar to this video using title similarity.
content_typestringOptionalshortsContent type: shorts or longform
sort_bystringOptionalviewsSort by: views (most viewed), recent (newest fetched), upload_date (newest uploaded), similarity (most similar — requires q/video_id/video_url; auto-selected when one is given), outlier_score (biggest over-performers — video views vs what the channel usually gets)
pageintegerOptional1Page number (1-indexed, max 20)
per_pageintegerOptional20Results per page (max 50)
min_video_viewsintegerOptional—Minimum video view count
max_video_viewsintegerOptional—Maximum video view count
min_subsintegerOptional—Minimum channel subscriber count
max_subsintegerOptional—Maximum channel subscriber count
min_uploadsintegerOptional—Minimum channel video count
max_uploadsintegerOptional—Maximum channel video count
min_channel_ageintegerOptional—Minimum channel age in days
max_channel_ageintegerOptional—Maximum channel age in days
min_upload_dateintegerOptional—Newest allowed upload (days ago, 0 = today)
max_upload_dateintegerOptional—Oldest allowed upload (days ago, e.g. 365 = 1 year)
min_durationintegerOptional—Minimum video duration in minutes (longform only)
max_durationintegerOptional—Maximum video duration in minutes (longform only)
min_views_24hintegerOptional—Minimum channel views gained in last 24h (shorts only)
max_views_24hintegerOptional—Maximum channel views gained in last 24h (shorts only)
min_views_48hintegerOptional—Minimum channel views gained in last 48h (shorts only)
max_views_48hintegerOptional—Maximum channel views gained in last 48h (shorts only)
min_outlier_scorefloatOptional—Minimum outlier score. A video's outlier_score = how many times more views it has than its channel usually gets (long-form videos are compared with what the channel's own videos usually have at the same age; Shorts with the channel's average views per video), so 2.5 means “video got 2.5× the channel's typical views.” Use to surface videos over-performing their channel.
max_outlier_scorefloatOptional—Maximum outlier score. Rarely needed — usually pair with min_outlier_score.

Response Fields (per video)

FieldTypeDescription
video_idstringYouTube video ID
titlestringVideo title
channel_namestringChannel name
channel_idstringYouTube channel ID
view_countintegerTotal video views
outlier_scorefloat|nullOutlier multiplier — how many times more views the video has than its channel usually gets (long-form videos are compared with what the channel's own videos usually have at the same age; Shorts with the channel's average views per video). 4.2 = video got 4.2× the channel's typical views. null for brand-new uploads before the channel average is computed.
thumbnail_urlstringVideo thumbnail URL
upload_datestring|nullUpload date (ISO 8601)
urlstringFull YouTube URL
subscriber_countintegerChannel subscriber count
durationinteger|nullVideo duration in seconds
view_increase_24hinteger|nullChannel views gained in last 24h (shorts with realtime filters only)
view_increase_48hinteger|nullChannel views gained in last 48h (shorts with realtime filters only)
similarity_scoreinteger|nullSimilarity score (0–100) when using search. Higher = more similar.
Example Requests
# Find viral gaming Shorts with 1M+ views from small channels
curl "https://api.algrow.online/api/viral-videos/search?q=gaming&content_type=shorts&min_video_views=1000000&max_subs=50000" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Longform fitness videos uploaded in last 7 days, sorted by views
curl "https://api.algrow.online/api/viral-videos/search?q=fitness+workout&content_type=longform&max_upload_date=7&sort_by=views" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Find videos similar to a specific video by ID
curl "https://api.algrow.online/api/viral-videos/search?video_id=dQw4w9WgXcQ&content_type=longform" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Search for cooking videos from channels under 100k subs
curl "https://api.algrow.online/api/viral-videos/search?q=cooking&max_subs=100000" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "success": true,
  "content_type": "shorts",
  "page": 1,
  "per_page": 20,
  "count": 20,
  "videos": [
    {
      "video_id": "dQw4w9WgXcQ",
      "title": "This cooking hack changed everything",
      "channel_name": "Chef Secrets",
      "channel_id": "UCxxxxxxxxxxxxxxxxxxxxxx",
      "view_count": 4200000,
      "outlier_score": 4.2,
      "thumbnail_url": "https://i.ytimg.com/vi/.../maxresdefault.jpg",
      "upload_date": "2026-03-15T00:00:00+00:00",
      "url": "https://www.youtube.com/shorts/dQw4w9WgXcQ",
      "subscriber_count": 32000,
      "duration": 58,
      "view_increase_24h": 180000,
      "view_increase_48h": 320000
    }
  ]
}

GET/api/viral-videos/channel-ideas

What to make next for a channel, taken from the channels most like it. Resolves the channel, finds the closest channels by what they cover, reads what actually worked on them, groups the same topic (or the same title shape) written different ways, and removes what this channel has already made. Ranked by how many separate channels made an idea work, not by raw views, so a big channel covering something does not crowd out a real idea.

Query Parameters

NameTypeRequiredDefaultDescription
channelstringRequired—A channel ID (UCxxx), @handle, bare handle, or channel URL.
kindstringOptionalsubjectssubjects: topics to make next. formats: title shapes to steal, e.g. How To Make {thing} PUFF and Why It Happens.
sortstringOptionalprovenproven: worked on several different channels, ranked by how many channels made it work, then by size. best: the single biggest win, whoever got it.
limitintegerOptional40Rows back. Max 200.

Read hits against videos: 2 hits in 5 tries is a crowded topic where most attempts sink; 3 hits on 3 channels is one that travels. A 422 with "code": "not_enough" means the channel resolved but too little is held behind it to say anything honest. It is not an error; show the reason rather than an empty list.

Response Fields (per result)

FieldTypeDescription
namestringThe topic in its best-performing wording, or the title template.
variantsarrayOther wordings (or near-identical templates) folded into this row.
videosintegerHow many videos on the peer channels tried this.
channelsintegerHow many separate channels tried it.
hitsintegerVideos that beat their own channel’s average by 2× or more.
hit_channelsintegerSeparate channels with at least one hit. This is what sort=proven ranks on.
best_multiplefloatThe biggest single win, as a multiple of that channel’s average.
median_multiplefloatThe middle result across every attempt.
best_viewsintegerViews on the best video.
example_titlestringTitle of the best video.
example_urlstringYouTube URL of the best video.
example_channelstringChannel name of the best video.
example_thumbnailstringThumbnail of the best video.
Example Requests
# Subjects worth making next, proven across several channels
curl "https://api.algrow.online/api/viral-videos/channel-ideas?channel=@CookTheMexicanWay" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Title formats worth stealing, biggest single wins first
curl "https://api.algrow.online/api/viral-videos/channel-ideas?channel=UCEpgRWDUGVu7UaYc7fB1Idw&kind=formats&sort=best" \
  -H "Authorization: Bearer YOUR_API_KEY"
Response
{
  "success": true,
  "channel_id": "UCEpgRWDUGVu7UaYc7fB1Idw",
  "kind": "subjects",
  "sort": "proven",
  "peer_channels": 75,
  "peer_videos": 1026,
  "results": [
    {
      "name": "carne asada tacos",
      "variants": ["carne asada taco recipe", "authentic carne asada tacos"],
      "videos": 5,
      "channels": 5,
      "hits": 2,
      "hit_channels": 2,
      "best_multiple": 15.3,
      "median_multiple": 0.6,
      "best_views": 439951,
      "example_title": "Taqueria Style Carne Asada Tacos - Blackstone Griddle",
      "example_url": "https://www.youtube.com/watch?v=...",
      "example_channel": "TexMex at Home",
      "example_thumbnail": "https://i.ytimg.com/vi/.../maxresdefault.jpg"
    }
  ]
}

Search for longform videos by thumbnail similarity. Provide a YouTube video URL, an image URL, or a text description to find videos with visually similar thumbnails using similarity matching.

Request Body (JSON)

NameTypeRequiredDefaultDescription
image_urlstringOne of three—URL of a thumbnail image to search with. Supports JPEG, PNG, WebP, and GIF formats.
video_urlstringOne of three—YouTube video URL — automatically extracts its thumbnail. Accepts watch, shorts, and youtu.be links.
qstringOne of three—Text description of the thumbnail style to search for (e.g. “red arrow pointing at shocked face”, “before and after transformation”).
limitintegerOptional20Maximum number of results to return (1–50)
min_similarityfloatOptional0.3Minimum similarity threshold (0–1). Higher values return fewer but more visually similar results.
min_viewsintegerOptional—Minimum video view count filter

Response Fields (per video)

FieldTypeDescription
video_idstringYouTube video ID
titlestringVideo title
channel_namestringChannel name
channel_idstringYouTube channel ID
view_countintegerTotal video views
thumbnail_urlstringVideo thumbnail URL
upload_datestring|nullUpload date (ISO 8601)
urlstringFull YouTube URL
durationinteger|nullVideo duration in seconds
subscriber_countintegerChannel subscriber count
similarity_scoreintegerVisual similarity score (0–100). Higher = more similar thumbnail.
Example Requests
# Search by image URL — find videos with similar thumbnails
curl -X POST "https://api.algrow.online/api/thumbnail-search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"image_url": "https://i.ytimg.com/vi/abc123/maxresdefault.jpg", "limit": 10}'

# Search by text — describe the thumbnail style you're looking for
curl -X POST "https://api.algrow.online/api/thumbnail-search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "red arrow pointing at shocked face", "limit": 20}'

# Text search with filters — only high-view results
curl -X POST "https://api.algrow.online/api/thumbnail-search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "before and after transformation", "min_views": 100000, "min_similarity": 0.5}'
Response
{
  "success": true,
  "count": 10,
  "videos": [
    {
      "video_id": "abc123",
      "title": "How I Made $10k in 30 Days",
      "channel_name": "Finance Tips",
      "channel_id": "UCxxxxxxxxxxxxxxxxxxxxxx",
      "view_count": 1500000,
      "thumbnail_url": "https://i.ytimg.com/vi/abc123/maxresdefault.jpg",
      "upload_date": "2026-03-20",
      "url": "https://www.youtube.com/watch?v=abc123",
      "duration": 612,
      "subscriber_count": 85000,
      "similarity_score": 78
    }
  ]
}

Search terminated/deleted channel videos by thumbnail similarity. Same as /api/thumbnail-search but searches the terminated channels archive instead of active longform channels. Provide a YouTube video URL, an image URL, or a text description.

Request Body (JSON)

NameTypeRequiredDefaultDescription
image_urlstringOne of three—URL of a thumbnail image to search with. Supports JPEG, PNG, WebP, and GIF formats.
video_urlstringOne of three—YouTube video URL — automatically extracts its thumbnail. Accepts watch, shorts, and youtu.be links.
qstringOne of three—Text description of the thumbnail style to search for (e.g. “red arrow pointing at shocked face”, “before and after transformation”).
limitintegerOptional20Maximum number of results to return (1–50)
min_similarityfloatOptional0.3Minimum similarity threshold (0–1). Higher values return fewer but more visually similar results.
min_viewsintegerOptional—Minimum video view count filter
max_viewsintegerOptional—Maximum video view count filter

Response Fields (per video)

FieldTypeDescription
video_idstringYouTube video ID
titlestringVideo title
channel_namestringChannel name
channel_idstringYouTube channel ID
view_countintegerTotal video views
thumbnail_urlstringVideo thumbnail URL
urlstringFull YouTube URL
subscriber_countintegerChannel subscriber count
similarity_scoreintegerVisual similarity score (0–100). Higher = more similar thumbnail.
Example Requests
# Search by image URL — find terminated videos with similar thumbnails
curl -X POST "https://api.algrow.online/api/terminated-thumbnail-search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"image_url": "https://i.ytimg.com/vi/abc123/maxresdefault.jpg", "limit": 10}'

# Search by text — describe the thumbnail style
curl -X POST "https://api.algrow.online/api/terminated-thumbnail-search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"q": "red arrow pointing at shocked face", "limit": 20}'

# Search by YouTube video URL
curl -X POST "https://api.algrow.online/api/terminated-thumbnail-search" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"video_url": "https://www.youtube.com/watch?v=abc123", "min_views": 50000}'
Response
{
  "success": true,
  "count": 10,
  "videos": [
    {
      "video_id": "abc123",
      "title": "How I Made $10k in 30 Days",
      "channel_name": "Finance Tips",
      "channel_id": "UCxxxxxxxxxxxxxxxxxxxxxx",
      "view_count": 1500000,
      "thumbnail_url": "https://audio.algrow.online/thumbnails/abc123.jpg",
      "url": "https://www.youtube.com/watch?v=abc123",
      "subscriber_count": 85000,
      "similarity_score": 78
    }
  ]
}