The problem
A common marketing brief sounds simple: "find YouTube channels similar to this one." Doing it by hand means opening each channel's About page in a browser, scrolling to the small "similar channels" shelf, and copying names and subscriber counts into a spreadsheet. For one channel that is a minor chore; for a shortlist of twenty or fifty channels it is an afternoon of copy-paste work.
The obvious programmatic route does not help: the YouTube Data API has no endpoint for similar channels. Third-party influencer platforms wrap this kind of data in expensive seats. And any home-grown similarity score — category matching, keyword overlap — is a guess, not evidence of who YouTube itself considers a peer.
What the actor does
The YouTube Channel Lookalike Finder reads exactly one surface: the "similar channels" widget YouTube's own front end renders on a channel's About page. It returns the channels YouTube's recommendation system actually displayed at the moment of the run, each with:
-
similarChannelId— the canonicalUC…identifier -
similarChannelName— the display name shown in the widget -
similarSubscriberCountText— YouTube's own rounded UI text (for example "1.13M subscribers"), never a fabricated exact number -
widgetPosition— the 1-based order the shelf rendered on that run
Every row carries a status: "ok" for a delivered similar channel, "empty" when the requested channel resolved but its widget had nothing to show, and "error" when the channel could not be resolved or the input was rejected. Only "ok" rows are billed. The requested channel is never returned as its own lookalike — the extraction step is handed the requested channel's confirmed channelId and structurally excludes it. Two closed negative cases are checked live: a handle that returns HTTP 404, and a syntactically valid but non-existent channel ID that returns HTTP 200 with "This channel does not exist" in the page body.
One honest boundary: the widget's size is not fixed and is entirely YouTube's decision. The README records measurements of the same channel returning 12, then 7, then 6 similar channels across independent runs, and a range of 0 to 12 across well-known channels in a single session. The actor reports what the widget showed, without padding or normalizing.
No API key, no login, no captcha, and no browser session — every request is an unauthenticated GET with a consent cookie and an English/US locale.
Example: input and output
Input is a list of 1–50 channel values — a @handle, a full YouTube channel URL, or a bare UC… channel ID:
{
"channels": ["@mkbhd"],
"maxConcurrency": 1
}
A real delivered row from a live run of that exact input:
{
"requestedChannel": "@mkbhd",
"requestedChannelId": "UCBJycsmduvYEL83R_U4JriQ",
"requestedCanonicalChannelUrl": "http://www.youtube.com/@mkbhd",
"similarChannelId": "UCG7J20LhUeLl6y_Emi7OJrA",
"similarChannelName": "The Studio",
"similarSubscriberCountText": "1.13M subscribers",
"widgetPosition": 1,
"source": "about-page-similar-channels-widget",
"status": "ok",
"confidence": "display-text",
"partial": false,
"action": "ingest",
"error": null,
"checkedAt": "2026-08-17T20:17:28.175Z"
}
A channel whose widget renders nothing produces a free, clearly labelled row instead — status: "empty" with similarChannelId: null and the requested channel's identity still resolved, so "this channel has no lookalikes today" is never confused with "this channel does not exist."
Pricing and the free limit
Pricing is pay-per-event: $0.005 per actor start plus $0.010 per delivered similar channel. Empty and error rows are always free.
Apify's free plan gives $5 of usage credits per month. At this tariff, $5 covers about 499 delivered similar channels in total (0.005 + 0.010 × N ≤ 5) — roughly four full runs of 100 delivered channels each at about $1.005 per run.
Try it
Run it on the free plan and inspect the dataset before wiring it anywhere: YouTube Channel Lookalike Finder
For AI agents and MCP
The actor takes JSON in and returns a flat, machine-checkable row per channel — status, similarChannelId, and action fields are designed to be branched on directly by an agent tool call or an n8n workflow, without parsing YouTube HTML. An agent should read status first: "ok" rows carry a usable similarChannelId; "empty" and "error" rows never do, and the widget's size varies per run, so rows for one requested channel should be consumed until its batch ends. The README documents an MCP server setup for calling the actor through Apify's hosted MCP endpoint, alongside JavaScript, Python, and CLI examples.
Top comments (0)