YouTube is the second-largest search engine, but most creators and marketers have no idea where their videos rank for the keywords they care about. YouTube Studio shows impressions, not positions. The official Data API's search.list costs 100 quota units per call (you get 10,000 per day), doesn't let you pick the signed-out ranking for a country, and doesn't return transcripts.
This post covers:
- three ways to get YouTube search data, and why two of them break,
- a daily "where do I rank" check in ~20 lines of Python,
- adding likes, comments, subscriber counts and transcripts when you need them,
- what it costs, measured.
Three ways to get YouTube search data
- Official Data API: good for your own channel; quota-limited for search (about 100 searches a day), no transcripts.
- Scraping youtube.com: works until it doesn't. Store scrapers in this space have public issue lists full of "403", "rate limited", "runs never finish" and "wrong view counts".
- A licensed SERP feed: someone else runs the fetching at scale and sells you structured results. That's what the Actor below uses (DataForSEO's YouTube SERP API), so there are no proxies, cookies or browsers on your side.
Disclosure: we (SteadyScrape) built the tool below and get paid when it's used.
The examples use YouTube Search API: Rankings, Views & Transcripts (steady-scrape/youtube-search-video-stats), an Apify Actor that returns YouTube search results in ranked order as one row per result.
A daily rank check
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("steady-scrape/youtube-search-video-stats").call(run_input={
"searchQueries": ["python tutorial", "learn python fast", "python for beginners"],
"maxResultsPerQuery": 50,
"country": "US",
"trackChannels": ["@yourchannel"],
})
summary = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("OUTPUT")["value"]
for query, pos in summary["trackedChannelPositions"].items():
print(f"{query!r}: position {pos['position']}")
Schedule it once a day on Apify and append the output to a sheet, and you have a YouTube rank tracker. Every result row also carries position, viewCount, publishedAt, durationSec and isShort, so you can see what the videos above you have in common (age, length, Shorts vs long-form).
Stats and transcripts when you need them
Search rows already include views, channel, date and duration. Turn on addVideoDetails for likes, comment count, channel subscribers, tags and category, and addTranscripts for the captions text (optionally timestamped or translated). You can also pass a list of video URLs instead of queries.
In our test, 43 of 48 top-ranking videos had captions. Videos without captions aren't charged.
What it costs
| Run | Cost at list price |
|---|---|
| 1 query, top 20 results | $0.05 |
| Daily rank check, 5 queries x 50 | $0.40 per day |
| 10 queries x 100 results | $1.52 |
| 100 video URLs with full stats | $0.62 |
That's $0.02 per run, plus $1.50 per 1,000 search results, $0.006 per video for full stats and $0.0065 per transcript. Paid Apify plans get 10-25% off the per-result prices. Queries with no results, missing videos and invalid input are free, and you can cap any run with a maximum charge.
Speed: a batch of queries takes about 20-25 seconds. Our 100-result test finished in 36 seconds.
Wrap-up
If you just need to know where you rank and what the top videos look like, a licensed SERP feed is the least painful route: no quota math, no proxy bills, no broken selectors. The Actor is YouTube Search API: Rankings, Views & Transcripts on Apify. The first run with the prefilled example input (two queries, top 20 each) costs about $0.08.
Top comments (0)