DEV Community

API Serpent
API Serpent

Posted on

YouTube's Free API Is 100 Searches/Day. Here's the Fix for Developers Who Need 100K.

The quota math that kills YouTube tool ideas:
10,000 units/day ÷ 100 units per search = 100 searches/day
That's it. One hundred. Then you get this:

# After request #101:
googleapiclient.errors.HttpError: 
<HttpError 403 when requesting
https://www.googleapis.com/youtube/v3/search?...
returned "The caller does not have permission",
details: "quotaExceeded">
Enter fullscreen mode Exit fullscreen mode

For anyone building a YouTube SEO tool, creator research platform, or content analytics dashboard — you hit this wall before you finish prototyping.

The alternative

import requests

# No Google Cloud. No quota. No OAuth.
resp = requests.get(
    "https://apiserpent.com/api/social/youtube/search",
    params={
        "q": "python tutorial beginner",
        "num": 10,
        "order": "viewCount",
        "country": "us",
        "duration": "long"   # short | medium | long | any
    },
    headers={"X-API-Key": "YOUR_KEY"}
)

for video in resp.json()["results"]:
    print(f"#{video['position']}: {video['title']}")
    print(f"  Views: {video['views']:,} | Duration: {video['duration']}")
    print(f"  Channel: {video['channel']}")
Enter fullscreen mode Exit fullscreen mode

Views AND likes in one call (official API requires separate calls):

resp = requests.get(
    "https://apiserpent.com/api/social/youtube/video",
    params={"id": "VIDEO_ID"},
    headers={"X-API-Key": "YOUR_KEY"}
)
v = resp.json()
print(f"Views: {v['views']:,} | Likes: {v['likes']:,} | Tags: {v['tags'][:3]}")
Enter fullscreen mode Exit fullscreen mode

YouTube rank tracker: 500 keywords, no quota

def check_youtube_rank(keyword: str, target_channel: str) -> int | None:
    results = requests.get(
        "https://apiserpent.com/api/social/youtube/search",
        params={"q": keyword, "num": 50, "order": "relevance"},
        headers={"X-API-Key": "YOUR_KEY"}
    ).json().get("results", [])

    for video in results:
        if target_channel.lower() in video.get("channel", "").lower():
            return video["position"]
    return None

# Run 500 keyword checks
keywords = ["python tutorial", "django rest api", "flask tutorial"]
channel = "Corey Schafer"

for kw in keywords:
    pos = check_youtube_rank(kw, channel)
    print(f"'{kw}': #{pos or 'Not ranked'}")

# Cost: 500 calls × $0.00001 = $0.005
Enter fullscreen mode Exit fullscreen mode

Five thousandths of a dollar. No quota approval email. No waiting.

10 free calls: apiserpent.com/youtube-api

Top comments (0)