Preloader
Others
  • Estimated reading time: 4 Minutes

How to Vet a YouTube Channel Before You Buy It: Developer's Checklist

How to Vet a YouTube Channel Before You Buy It: Developer's Checklist

Buying an established YouTube channel has become a normal growth move for SaaS founders, indie hackers and dev-tool companies. Instead of spending a year building an audience from zero, you take over a channel that already ranks for the tutorials your users search for.

The problem is that most sellers hand you screenshots, and screenshots are easy to fake. As a developer you have a better option: pull the channel's public data yourself with the YouTube Data API v3 and check whether the numbers hold up. This guide walks through a small Python script that does exactly that.

What you need

  • A Google Cloud project with the YouTube Data API v3 enabled
  • An API key (public channel data does not need OAuth)
  • Python 3.9+ and the requests library

The API's default quota is 10,000 units per day. The calls below cost 1 unit each, so you can vet dozens of channels a day without paying anything.

Step 1: Pull the channel profile

Every check starts with channels.list. Ask for the snippet, statistics and contentDetails parts in one request:

import requests

API_KEY = "YOUR_API_KEY"
BASE = "https://www.googleapis.com/youtube/v3"

def get_channel(channel_id):
        params = {
            "part": "snippet,statistics,contentDetails",
            "id": channel_id,
            "key": API_KEY,
        }
        r = requests.get(f"{BASE}/channels", params=params, timeout=15)
        r.raise_for_status()
        items = r.json().get("items", [])
        return items[0] if items else None

From the response you get the channel's creation date (snippet.publishedAt), country, total views, subscriber count and video count. Two details matter:

  • Subscriber counts are rounded. The public API returns subscriber numbers rounded to three significant figures, so a channel showing 48,700 could really have 48,650. Do not let a seller argue over small differences.
  • Hidden subscribers are a flag. If statistics.hiddenSubscriberCount is true, ask why. Sellers sometimes hide counts that have dropped.

Compare publishedAt with the age the seller claims. An "aged channel since 2016" that was created last year has been misrepresented.

Step 2: Get the recent uploads

Each channel has an uploads playlist, found at contentDetails.relatedPlaylists.uploads. Read the latest 50 videos from it:

def get_recent_video_ids(uploads_playlist_id, limit=50):
        params = {
            "part": "contentDetails",
            "playlistId": uploads_playlist_id,
            "maxResults": limit,
            "key": API_KEY,
        }
        r = requests.get(f"{BASE}/playlistItems", params=params, timeout=15)
        r.raise_for_status()
        return [i["contentDetails"]["videoId"] for i in r.json().get("items", [])]

Step 3: Score engagement on those videos

Now fetch statistics for those videos with videos.list (up to 50 IDs per request) and calculate a few ratios:

from statistics import median

def engagement_report(video_ids, subscriber_count):
        params = {
            "part": "statistics,snippet",
            "id": ",".join(video_ids),
            "key": API_KEY,
        }
        r = requests.get(f"{BASE}/videos", params=params, timeout=15)
        r.raise_for_status()
        rows = []
        for v in r.json().get("items", []):
            s = v["statistics"]
            views = int(s.get("viewCount", 0))
            likes = int(s.get("likeCount", 0))
            comments = int(s.get("commentCount", 0))
            rows.append((v["snippet"]["publishedAt"], views, likes, comments))

        views = [r[1] for r in rows]
        med_views = median(views) if views else 0
        return {
            "videos_checked": len(rows),
            "median_views": med_views,
            "views_per_sub": round(med_views / subscriber_count, 3) if subscriber_count else None,
            "like_rate": round(sum(r[2] for r in rows) / max(sum(views), 1), 4),
            "comment_rate": round(sum(r[3] for r in rows) / max(sum(views), 1), 4),
            "last_upload": max(r[0] for r in rows) if rows else None,
        }

Use the median rather than the average. One viral video can make a dead channel look healthy, and the median ignores it.

How to read the numbers

There are no official benchmarks, so treat these as rules of thumb from comparing healthy and inflated channels:

Signal Healthy Worth questioning
Median views per subscriber on recent videos Around 0.02 or higher Below 0.005
Like rate (likes / views) Roughly 1% to 5% Well under 0.5%
Comment rate Some comments on most videos Zero comments on large view counts
Last upload Within the past few weeks Months of silence
Channel age vs. claim Matches Newer than claimed

A channel with 200,000 subscribers and a median of 400 views per new video has either bought subscribers or lost its audience. Either way, you would be paying for a number, not an audience.

Step 4: Check what the API cannot see

The public API will not show revenue, traffic sources, audience geography, copyright strikes or monetization status. Those live in YouTube Studio, which only the owner can open. So once a channel passes your script, ask for a live screen share of Studio, not screenshots, and check:

  • Traffic sources: most views should come from YouTube search, browse and suggested videos, not "External".
  • Channel status and features: no strikes or warnings.
  • Revenue over 12 months: steady, not one spike.

Handling the transfer

YouTube channels on Brand Accounts move by adding the buyer as an owner and later making them Primary owner. Google makes the new Primary owner wait seven days before removing the previous one, so expect a week of shared access. Never send money directly to a seller for that week. Use a marketplace with escrow that releases payment only after you control every login.

If you are shopping for a channel in your niche, a marketplace where you can buy YouTube channels and filter by category, subscriber range and monetization status saves a lot of cold outreach. Run every shortlisted listing through the script above before you open a single conversation with a seller. The same logic works on other platforms, too. Median views against followers, real comments and recent posting activity are just as telling when you look at TikTok accounts for sale, even if you have to collect the numbers by hand.

Wrapping up

Twenty lines of Python and a free API key will catch most of the fake or decaying channels on the market: rounded but plausible subscriber counts, median views that match the audience size, real comments and recent uploads. It will not replace a proper look inside YouTube Studio, but it filters out the obvious bad deals before they cost you a call, a deposit or a month of your time.

Related articles
How to Easily Remove Watermark from Photo: 2 Ways
27 Oct, 2026
  • Estimated reading time: 3 Minutes
RPC provider guide: infrastructure that won't let you down
27 Oct, 2026
  • Estimated reading time: 5 Minutes
How Do I Rank My Business on Google Maps?
27 Oct, 2026
  • Estimated reading time: 9 Minutes
4 Best AI UI Builders for React and Next.js Teams (2026)
27 Oct, 2026
  • Estimated reading time: 17 Minutes
Weekly trending
Our Sponsors

Our blog is proudly supported by industry-leading sponsors.