YouTube Rank Tracker
Pricing
from $1.80 / 1,000 results
YouTube Rank Tracker
Track where public YouTube videos rank for keywords across countries and languages. Monitor current and previous positions, rank changes, history, and video metadata across repeated runs.
Pricing
from $1.80 / 1,000 results
Rating
0.0
(0)
Developer
SearchShark Tools
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
YouTube Rank Tracker lets you monitor where public YouTube videos appear in YouTube search results for the keywords, countries, and languages you care about.
Track your own videos, compare competitors, monitor SEO movement over time, and build persistent ranking history without manually repeating YouTube searches.
- Track target videos: monitor one or many YouTube videos against one or many keywords
- Measure rank movement: compare current rank, previous rank, and rank change
- Build ranking history: keep best, worst, and average observed rank across repeated runs
- Localize searches: track by country and language
- Inspect YouTube metadata: capture title, channel, thumbnail, and result details when ranked
- Run efficiently: each normalized keyword is searched once, then all target videos are checked against the same result set
- Automate monitoring: use Apify Schedules, API, and integrations for recurring rank checks
What data does YouTube Rank Tracker return?
| Field | Meaning |
|---|---|
| keyword | Search query being tracked |
| targetVideoId | Normalized 11-character YouTube video ID |
| targetUrl | Canonical YouTube target URL |
| country | Country used for the search request |
| language | Language used for the search request |
| currentRank | Current observed video rank, or null when not found |
| previousRank | Previous observed numeric rank |
| rankChange | previousRank - currentRank when both ranks are numeric |
| status | Ranking transition status |
| bestRank | Best numeric rank observed so far |
| worstRank | Worst numeric rank observed so far |
| averageRank | Average across ranked observations |
| checkCount | Total valid observations recorded |
| rankedCheckCount | Number of observations with a numeric rank |
| searchedResultCount | Number of normalized video results checked |
| title | Video title when the target is found |
| channelName | Channel name when available |
| channelId | Channel ID when available |
| thumbnailUrl | Thumbnail URL when available |
| resultType | Result type for a matched target |
| firstTrackedAt | Timestamp of the first valid observation |
| previousCheckedAt | Timestamp of the previous valid observation |
| checkedAt | Timestamp of the current observation |
| error | Keyword-level error message when a search fails |
Missing rank values are returned as
null. The Actor does not invent a ranking position when the target is not present in the fetched search results.
Features
YouTube Rank Tracker is designed for YouTube SEO monitoring, competitor tracking, and recurring search-position analysis.
- Multiple keywords: track several search queries in one Actor run
- Multiple target videos: check several public YouTube videos for every keyword
- One search per keyword: all target videos are matched against the same ordered result set
- Keyword normalization: extra whitespace is normalized
- Keyword deduplication: duplicate keywords are removed case-insensitively while preserving the first spelling and order
- Video normalization: supports raw 11-character YouTube video IDs and supported YouTube video URL forms
- Video deduplication: equivalent target URLs and IDs are normalized to the same video
- Country and language localization: send locale values with each YouTube search
- Persistent history: compare observations across separate Actor runs
- Rank transitions: detect improved, dropped, unchanged, new, lost, and still-unranked states
- Historical statistics: preserve best, worst, average rank, total checks, and ranked checks
- Video metadata: return title, channel, thumbnail, and result type when the target is found
- Partial failure protection: one failed keyword does not stop later keywords
- History protection on failure: failed keyword searches do not mutate rank history
- Dataset-friendly output: one successful row per keyword-target pair
- HTTP-first search transport: normal runs use direct logged-out YouTube search responses instead of full browser automation
Input
You can configure YouTube Rank Tracker from the Apify Console or start it programmatically through the Apify API.
The Actor accepts four required inputs:
keywordsvideoTargetscountrylanguage
Keywords
Add one or more YouTube search queries that you want to track.
Example:
youtube seohow to grow on youtubebest video editing software
Each normalized keyword is searched independently.
Duplicate keywords are removed case-insensitively.
For example:
YouTube SEOyoutube seoYOUTUBE SEO
are treated as one keyword.
Whitespace is also normalized, so accidental repeated spaces do not create separate searches.
YouTube videos
Add one or more public YouTube video URLs or raw 11-character video IDs.
Examples:
https://www.youtube.com/watch?v=dQw4w9WgXcQdQw4w9WgXcQ
Equivalent forms are normalized to one target video.
Each target is checked against every keyword in the same run.
For example:
3 keywordsx5 target videos=15 keyword-target result rows
while still requiring only one YouTube search fetch per normalized keyword.
Country
Enter the country value used to localize the YouTube search request.
Examples:
USGBDEPHAUCA
Country values are normalized to uppercase.
Different country values can produce different YouTube search results and therefore different observed ranks.
Language
Enter the language value used to localize the YouTube search request.
Examples:
enesdefrja
Language values are normalized to lowercase.
Example input
{"keywords": ["Rick Astley Never Gonna Give You Up","80s music"],"videoTargets": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"country": "US","language": "en"}
Output
Results are stored in the Actor's default Apify Dataset.
You can access them from:
OutputStorageApify APIIntegrationsExports
Each successful Dataset row represents one target video checked for one keyword and locale combination.
If a keyword search itself fails, the Actor writes an error row for that keyword and continues with later keywords.
Example ranked result
The following structure is based on a real successful live Actor run:
{"keyword": "Rick Astley Never Gonna Give You Up","targetType": "video","targetVideoId": "dQw4w9WgXcQ","targetUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","country": "US","language": "en","currentRank": 1,"previousRank": 1,"rankChange": 0,"status": "UNCHANGED","bestRank": 1,"worstRank": 1,"averageRank": 1,"checkCount": 3,"rankedCheckCount": 3,"searchedResultCount": 19,"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channelName": "Rick Astley","channelId": "UCuAXFkgsw1L7xaCfnd5JJOw","thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hq720.jpg","resultType": "video","firstTrackedAt": "2026-09-10T05:31:54.482Z","previousCheckedAt": "2026-09-10T05:33:36.393Z","checkedAt": "2026-09-10T05:48:59.976Z"}
Example unranked result
A video that is not present in the fetched result set is still recorded:
{"keyword": "youtube seo","targetVideoId": "dQw4w9WgXcQ","country": "US","language": "en","currentRank": null,"previousRank": null,"rankChange": null,"status": "NOT_RANKED","bestRank": null,"worstRank": null,"averageRank": null,"checkCount": 2,"rankedCheckCount": 0,"searchedResultCount": 18}
When a target is not ranked, video metadata such as title, channelName, and thumbnailUrl may also be null because the target was not present in that fetched search response.
How ranking works
currentRank is the 1-based observed video position among normalized unique YouTube video results returned by the fetched search response.
Example:
Video A -> currentRank 1Video B -> currentRank 2Video C -> currentRank 3
The tracker does not count duplicate video IDs twice.
Non-video YouTube interface elements do not consume a video rank position.
This means the rank answers:
Where did this target video appear among the unique video results returned for this search?
It should not be interpreted as a permanent or universal YouTube ranking. Search results can change with time, locale, YouTube behavior, and other external factors.
Rank change
rankChange is calculated as:
previousRank - currentRank
So:
Previous 8 -> Current 5 -> rankChange +3Previous 3 -> Current 7 -> rankChange -4Previous 1 -> Current 1 -> rankChange 0
A positive value means the video improved.
A negative value means the video dropped.
Rank statuses
The Actor classifies each valid observation using one of these statuses:
FIRST_CHECK
The first recorded observation for this keyword, target video, country, and language identity.
IMPROVED
The video was ranked before and its numeric position improved.
Example:
Previous rank: 8Current rank: 5Status: IMPROVED
DROPPED
The video was ranked before and moved to a worse numeric position.
Example:
Previous rank: 4Current rank: 9Status: DROPPED
UNCHANGED
The video remained at the same numeric rank.
NEW_RANKING
The video was previously unranked and is now present in the search results.
LOST_RANKING
The video was previously ranked but is no longer present in the fetched search results.
NOT_RANKED
The video remained unranked across consecutive checks.
Persistent rank history
Rank history is stored in a named Apify Key-Value Store and reused across separate Actor runs.
The history identity includes the tracked search context, so repeated checks of the same:
keywordtarget videocountrylanguage
can be compared over time.
This powers:
previousRankrankChangestatusbestRankworstRankaverageRankcheckCountrankedCheckCountfirstTrackedAtpreviousCheckedAtcheckedAt
For meaningful history, keep the same keyword, target, country, and language when comparing repeated runs.
Historical statistics
bestRank
Best numeric rank observed so far. Lower is better.
worstRank
Worst numeric rank observed so far.
averageRank
Average across ranked observations.
Unranked null observations do not invent numeric rank values.
checkCount
Total successful rank observations recorded for the identity.
rankedCheckCount
Number of those observations where the target video had a numeric rank.
Multiple keywords and multiple videos
The Actor is optimized around the YouTube search result page.
For each normalized keyword:
- Fetch the YouTube search response once
- Normalize the ordered video results
- Compare every target video against that same result set
- Update persistent history for each valid keyword-target observation
- Write one Dataset row per keyword-target pair
Example:
100 keywordsx20 target videos=2,000 keyword-target comparisons
but approximately:
100 YouTube search fetches
rather than 2,000 separate search fetches.
This makes adding more target videos to an existing keyword set much more efficient than independently searching YouTube for every keyword-video pair.
Reliability
YouTube Rank Tracker isolates keyword-level failures.
If you track:
keyword Akeyword Bkeyword C
and keyword B fails to search, the Actor can still preserve successful results for keyword A and continue to keyword C.
A failed keyword produces an error row containing the keyword, locale, timestamp, and error message.
Most importantly:
A failed keyword search does not mutate the persistent rank history for that failed observation.
This avoids turning transport or parsing failures into fake ranking changes.
Performance
The current Actor uses an HTTP-first architecture with Crawlee and direct logged-out YouTube search responses.
Normal rank checks do not launch full browser automation.
This generally reduces:
Browser overheadStartup overheadMemory requirementsUnnecessary search duplication
The Actor also reuses one fetched search result set for all target videos attached to the same keyword.
Actual runtime depends on the number of keywords, YouTube response times, retries, and Apify infrastructure.
API and integrations
YouTube Rank Tracker can be started programmatically through the Apify API.
Because results are stored in the default Dataset, they can be connected to workflows such as:
- Google Sheets
- Make
- Zapier
- CRMs
- Internal dashboards
- Data warehouses
- SEO reporting pipelines
- AI agents
- MCP workflows
- Custom APIs
You can also export Dataset results in formats supported by Apify.
Scheduling
For actual rank tracking, repeated runs are more useful than a single one-time check.
Use Apify Schedules to run the Actor automatically.
Example monitoring cadence:
DailyEvery 12 hoursWeekly
Each successful repeated observation extends the persistent history for the same keyword-target-locale identity.
A typical workflow is:
1. Add target videos2. Add target keywords3. Choose country and language4. Run once to create FIRST_CHECK observations5. Schedule recurring runs6. Monitor IMPROVED, DROPPED, NEW_RANKING, LOST_RANKING, and UNCHANGED results
Example use cases
YouTube SEO tracking
Track an uploaded video for the queries you are targeting.
Example:
Target video:your YouTube videoKeywords:how to edit videosbest video editorvideo editing tutorial
Monitor whether your position improves after title, description, thumbnail, or content changes.
Competitor monitoring
Add competitor videos as additional targets.
For the same keyword, compare which tracked videos appear and where they rank.
This is useful for monitoring:
Competitor visibilityKeyword ownershipRanking movementNew ranking appearancesLost ranking positions
Content launch monitoring
After publishing a new video, create a keyword set and run recurring checks.
Watch for transitions such as:
NOT_RANKED-> NEW_RANKING-> IMPROVED
when they occur.
Locale comparison
Run the same target and keyword combinations with different country or language values.
Example:
US / enGB / enPH / enDE / de
Each locale is tracked independently.
Ranking-loss alerts
Use scheduled runs and downstream automations to detect:
DROPPEDLOST_RANKING
and route those rows into your reporting or alerting workflow.
Current limitations
The current version focuses specifically on public YouTube video rank tracking from logged-out search responses.
It does not currently provide:
Private-video accessLogin-required searchesCookie-based account personalizationCAPTCHA bypassBot-detection bypassAge-restricted access workaroundsContinuation-page deep scrapingChannel ranking targetsPlaylist ranking targetsYouTube Studio analyticsPersonalized signed-in rankings
The Actor intentionally fails cleanly rather than attempting account or access-control bypasses.
A target outside the fetched video result set is reported as:
currentRank: null
rather than being assigned an invented position.
FAQ
What exactly does this Actor track?
It tracks the observed position of target YouTube videos within the unique video results returned for a YouTube keyword search.
Can I track multiple videos?
Yes.
Add multiple values to videoTargets.
Every target is checked against every normalized keyword.
Can I track multiple keywords?
Yes.
Add multiple values to keywords.
Each normalized keyword receives its own search context.
Can I use a YouTube URL instead of a video ID?
Yes.
Supported YouTube video URLs are normalized to their 11-character video ID.
You can also provide the raw ID directly.
What does currentRank: null mean?
It means the target video was not found among the normalized unique video results available in that fetched YouTube search response.
It does not mean the Actor invented rank zero or an arbitrary fallback number.
Why is the first status FIRST_CHECK even when the video is not ranked?
Because FIRST_CHECK describes the history state: this is the first valid observation for that keyword-target-locale identity.
If the target remains unranked on a later successful check, the status becomes NOT_RANKED.
What happens if an unranked video later appears?
The status becomes:
NEW_RANKING
and currentRank contains the newly observed numeric position.
What happens if a ranked video disappears?
The status becomes:
LOST_RANKING
and the new currentRank becomes null.
Does the Actor preserve history between runs?
Yes.
Persistent rank history is stored in an Apify Key-Value Store and reused across Actor runs.
Does an error count as a ranking drop?
No.
A failed keyword search does not mutate the history for that failed observation.
This prevents request failures from being misclassified as LOST_RANKING or other rank changes.
Does the Actor search once for every target video?
No.
It searches once per normalized keyword and checks all targets against that shared result set.
Can I export the results?
Yes.
Results are written to the default Apify Dataset and can be accessed through Apify's supported exports, API, and integrations.
Can I schedule automatic rank checks?
Yes.
Use Apify Schedules to repeat the same input on your preferred cadence.
Does this use the official YouTube Data API?
The current implementation uses direct logged-out YouTube search responses rather than making the YouTube Data API the default search source.
Does this require a browser?
Not for the normal current workflow.
The Actor uses an HTTP-first search transport.
Recommended workflow
For useful ranking intelligence, choose keywords that actually match the search intent of the target video.
Good:
how to edit videosvideo editing tutorialbest editing software
Less useful:
videoyoutubecontent
Then:
Use stable keyword wordingUse the same country and language for longitudinal comparisonsSchedule repeated checksWatch status changes instead of relying on one isolated rankAdd competitor videos to the same keyword set when useful
Feedback and support
Found a bug or have a feature request?
Use the Actor's Issues tab on Apify.
Useful future additions may include:
Deeper result paginationChannel targetsAdditional locale controlsRanking alertsAdditional output viewsAdditional YouTube search intelligence
Track YouTube rankings without manual searching
Enter your keywords, add the public videos you want to monitor, choose a country and language, and run the Actor.
You receive structured YouTube ranking data with persistent history ready for SEO monitoring, competitor research, APIs, scheduled workflows, and automation.