Youtube Most Replayed Scraper With Full Video Metadata & Tags avatar

Youtube Most Replayed Scraper With Full Video Metadata & Tags

Pricing

from $5.99 / 1,000 results

Go to Apify Store
Youtube Most Replayed Scraper With Full Video Metadata & Tags

Youtube Most Replayed Scraper With Full Video Metadata & Tags

Extract the most replayed moments from any video with the YouTube Most Replayed Scraper. Get timestamps, replay intensity data, and engagement insights. Ideal for content optimization, highlight detection, and viewer behavior analysis. Fast, accurate, and easy to automate.

Pricing

from $5.99 / 1,000 results

Rating

0.0

(0)

Developer

Scrapier

Scrapier

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

YouTube Most Replayed Scraper — Heatmap Peaks, Tags & Metadata

YouTube Most Replayed Scraper With Full Video Metadata & Tags reads a YouTube watch page and returns one structured row per video: the replay heatmap and "Most replayed" peak windows, the creator's own tag list, and the complete watch-page metadata block — exact view and like counts, duration, category, publish date, channel ID and thumbnail. Every peak carries seconds, an HH:MM:SS label, a timestamped deep link and a position percent. The output is clean JSON, ready to pass to an LLM, load into a spreadsheet, or feed into a monitoring pipeline — no login, no API key, no browser.


🧭 What is Youtube Most Replayed Scraper With Full Video Metadata & Tags?

It is a YouTube watch-page scraper: give it one or more youtube.com/watch, youtu.be, or /shorts/ URLs, and for each one it returns a single JSON record combining three things that normally live in three different places — the replay heatmap, the creator's tag list, and the full metadata block. It does this from the same HTML page it already downloads to find the heatmap, so the tags and metadata cost nothing extra to extract. No YouTube account, API key, or login is required — it reads the page a logged-out visitor sees.

What you get back, per video:

  • 🔥 The replay heatmapheatSeek, up to 100 normalised intensity samples exactly as YouTube's own replay graph draws them
  • 📈 Positioned "Most replayed" peakspeaks[], each with startSeconds, endSeconds, a timestampLabel, a clickable deepLink, and positionPercent
  • 🏷️ The creator's real tag listkeywords, the array typed into YouTube Studio, not hashtags guessed from the description
  • 📊 The full metadata block — exact view/like counts, duration, category, publish date, channel ID, thumbnail, description, and availability flags
  • 🎯 Tag and length filteringtagKeywords, minLengthSeconds, maxLengthSeconds narrow a run before anything is charged
  • 🛰️ Automatic proxy escalation — starts direct, switches itself to Apify Residential the moment YouTube blocks it

📦 What data can you get with Youtube Most Replayed Scraper With Full Video Metadata & Tags?

Every run returns three kinds of result, merged into one row per video.

Result TypeExtracted FieldsPrimary Use Case
Video metadatatitle, channelOwner, videoId, category, lengthSeconds, durationLabel, exactViewCount, exactLikeCount, likeCountHidden, publishDate, uploadDate, videoAgeDays, channelId, channelUrl, ownerChannelName, isLiveContent, isFamilySafe, isUnlisted, isPrivate, isCrawlable, allowRatings, availableCountryCount, thumbnailUrl, embedUrl, descriptionFull, descriptionLengthCataloguing, competitor benchmarking
Creator tagskeywords, keywordCountYouTube SEO / keyword research, tagKeywords filtering
Replay heatmap & peaksheatSeek, mostReplayed, peaks, peakCount, hasHeatmap, heatmapSampleCount, topMomentClip sourcing, editing feedback, attention analysis

Full metadata merged onto every peak

This is the actor's core difference from a plain heatmap scraper: every peak in peaks[] is returned in the same row as lengthSeconds, exactViewCount, category and the rest of the metadata block, so a raw millisecond offset is never disconnected from the video it belongs to. positionPercent is computed directly from lengthSeconds, so "112810 ms" becomes "14% of the way in" without a second lookup. The metadata comes from the same ytInitialPlayerResponse blob the actor already parsed for playability — no second request, no extra cost:

{
"videoId": "UsdedFoTA68",
"lengthSeconds": 801,
"exactViewCount": 4369824,
"peaks": [
{
"startSeconds": 104.26,
"timestampLabel": "0:01:52",
"deepLink": "https://youtu.be/UsdedFoTA68?t=112s",
"positionPercent": 14.02,
"label": "Most replayed"
}
]
}

Creator tag list for YouTube SEO research

keywords is the literal tag array a creator entered in YouTube Studio, exposed on the watch page but not shown in YouTube's own UI. Combined with the tagKeywords input, you can pull only the videos in a niche that are tagged a certain way — case-insensitive substring matching, kept if any tag contains any of your words. Non-matching videos are dropped before they are ever saved or charged.


🆚 How does this differ from the official YouTube Data API?

The YouTube Data API v3 videos resource returns statistics, snippet and content-details fields for a video, but it has no endpoint for the replay heatmap or "Most replayed" peaks at all — checked against the current videos reference on developers.google.com/youtube/v3/docs/videos on 2026-08-04, which documents view/like/comment counts and lists nothing related to replay intensity.

FeatureYouTube Data API v3This Actor
SetupGoogle Cloud project + API key or OAuthPaste URLs, click run
Most-replayed heatmap peaksNot present in the videos resource (checked 2026-08-04)heatSeek, peaks, topMoment
Creator tagssnippet.tags, documented fieldkeywords + tagKeywords filter
Exact view/like countsstatistics.viewCount / likeCountexactViewCount / exactLikeCount, null (never a fake 0) when hidden
Full descriptionsnippet.descriptiondescriptionFull + descriptionLength, toggleable
Usage limitsSubject to a Google Cloud usage quota managed in the API ConsoleGoverned by requestTimeoutSecs / maxRetries and Apify's pay-per-result pricing

Use the official API when you need authenticated write access, playlists, or channel management inside your own Google Cloud project. Use this actor when you need the replay heatmap or creator tags that the API simply does not expose, without setting up API credentials.


🚀 How to scrape YouTube's most replayed moments with this actor

  1. Open Youtube Most Replayed Scraper With Full Video Metadata & Tags on the Apify Store and click Try for free.
  2. Paste one or more watch URLs into 🎬 YouTube watch URLs (videoUrls), one per line.
  3. Optionally set 🏷️ Keep only videos tagged with… (tagKeywords), 🔥 Skip videos with no replay heatmap (skipVideosWithoutHeatmap), or the length filters (minLengthSeconds / maxLengthSeconds).
  4. Start the run.
  5. Download the dataset as JSON, CSV or Excel from the Apify Console, or pull it through the API with apify_client.
{
"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"tagKeywords": ["excel"]
}

How to scrape multiple videos in one run

videoUrls (and the legacy urls key) both accept an array — paste as many watch URLs as you want and each becomes exactly one dataset row. There is no built-in cap on how many URLs you can submit. Videos are fetched and parsed one at a time, in the order submitted — the run does not fetch multiple watch pages concurrently, so total run time scales roughly linearly with the number of URLs.


⬇️ Input

All fields are optional. The actor still needs at least one resolvable URL to run — if videoUrls is empty and urls is left at its untouched default, the run fails with "No URLs provided."

ParameterRequiredTypeDescriptionExample Value
videoUrlsNoarrayYouTube watch URLs, one per line. Each becomes exactly one row.["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]
urlsNoarray (default ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"])Legacy compatibility key from the base actor. Anything placed here is scraped too.["https://youtu.be/UsdedFoTA68"]
includeDescriptionNoboolean (default true)Emit descriptionFull and descriptionLength. Turn off for a smaller dataset.true
tagKeywordsNoarrayCase-insensitive substring match against keywords. Kept if any tag contains any word. Non-matches are not charged.["excel", "tutorial"]
skipVideosWithoutHeatmapNoboolean (default false)Drop videos with no published heatmap before saving or charging.true
minLengthSecondsNointeger (minimum 0)Drop videos shorter than this.60
maxLengthSecondsNointeger (minimum 0)Drop videos longer than this.3600
proxyNoobject (default {}, proxy editor)Proxy configuration. No proxy by default.{}
requestTimeoutSecsNointeger (default 20, min 5, max 180)Seconds to wait for a watch page before treating it as failed.20
maxRetriesNointeger (default 3, min 0, max 10)Extra attempts after the first failure. Unavailable videos are not retried — they return an uncharged accounting row instead.3

Example JSON input

{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/UsdedFoTA68"
],
"includeDescription": true,
"tagKeywords": ["excel"],
"skipVideosWithoutHeatmap": true,
"minLengthSeconds": 60,
"maxLengthSeconds": 3600,
"proxy": {},
"requestTimeoutSecs": 20,
"maxRetries": 3
}

Common pitfall: urls ships with a default value — an example Rick Astley URL. The actor treats an untouched urls default as "nothing was set here" and ignores it whenever videoUrls has anything in it. If you actually want to scrape that exact default video, either change the URL slightly or put it in videoUrls instead — leaving both fields at their defaults scrapes only that one example video.


⬆️ Output

Results are pushed as typed, normalized JSON — one item per submitted URL, with a consistent schema across successful, filtered, and failed rows. Export as JSON, CSV, Excel, or HTML from the Apify Console, or read the dataset through the API.

Scraped results

[
{
"channelOwner": "Leila Gharani",
"title": "10 Best Excel Tips for Beginners",
"videoId": "UsdedFoTA68",
"viewCount": "4369824",
"likes": "64749",
"comments": "1.2K",
"dateText": "Jun 18, 2020",
"relativeDate": "5 years ago",
"mostReplayed": [
{ "visibleTimeRangeStartMillis": 104260, "visibleTimeRangeEndMillis": 144360, "decorationTimeMillis": 112810 }
],
"heatSeek": [
{ "startMillis": "0", "durationMillis": "8020", "intensityScoreNormalized": 0.42 }
],
"error": null,
"errorReason": null,
"sourceUrl": "https://youtu.be/UsdedFoTA68",
"videoUrl": "https://www.youtube.com/watch?v=UsdedFoTA68",
"lengthSeconds": 801,
"durationLabel": "0:13:21",
"exactViewCount": 4369824,
"exactLikeCount": 64749,
"likeCountHidden": false,
"descriptionFull": "In this video, you'll learn 10 Excel tips...",
"descriptionLength": 3175,
"keywords": ["XelplusVis", "Leila Gharani", "Advanced Excel tricks"],
"keywordCount": 24,
"category": "Education",
"publishDate": "2020-06-18T02:00:19-07:00",
"uploadDate": "2020-06-18T02:00:19-07:00",
"videoAgeDays": 2234,
"channelId": "UCJtUOos_MwJa_Ewii-R3cJA",
"channelUrl": "https://www.youtube.com/@LeilaGharani",
"ownerChannelName": "Leila Gharani",
"isLiveContent": false,
"isFamilySafe": true,
"isUnlisted": false,
"isPrivate": false,
"isCrawlable": true,
"allowRatings": true,
"availableCountryCount": 249,
"thumbnailUrl": "https://i.ytimg.com/vi_webp/UsdedFoTA68/maxresdefault.webp",
"embedUrl": "https://www.youtube.com/embed/UsdedFoTA68",
"hasHeatmap": true,
"heatmapSampleCount": 100,
"peakCount": 1,
"peaks": [
{
"startMillis": 104260,
"endMillis": 144360,
"decorationTimeMillis": 112810,
"startSeconds": 104.26,
"endSeconds": 144.36,
"durationSeconds": 40.1,
"timestampLabel": "0:01:52",
"deepLink": "https://youtu.be/UsdedFoTA68?t=112s",
"positionPercent": 14.02,
"label": "Most replayed"
}
],
"topMoment": {
"startSeconds": 120.3,
"durationSeconds": 8.02,
"timestampLabel": "0:02:00",
"deepLink": "https://youtu.be/UsdedFoTA68?t=120s",
"positionPercent": 15.02,
"intensityScoreNormalized": 1.0
}
},
{
"channelOwner": "Some News Channel",
"title": "Breaking coverage, uploaded 4 hours ago",
"videoId": "abc123XYZdef",
"hasHeatmap": false,
"heatmapSampleCount": 0,
"peakCount": 0,
"peaks": [],
"topMoment": null,
"keywords": ["news", "live"],
"keywordCount": 2,
"error": null,
"errorReason": null
},
{
"channelOwner": "",
"title": "",
"videoId": "",
"mostReplayed": [],
"heatSeek": [],
"keywords": [],
"keywordCount": 0,
"hasHeatmap": false,
"peakCount": 0,
"peaks": [],
"topMoment": null,
"error": "ERROR: This video is unavailable",
"errorReason": "VIDEO_ERROR",
"sourceUrl": "https://www.youtube.com/watch?v=deletedvideo1",
"videoUrl": null
}
]

The second item shows a video with no published heatmap — hasHeatmap: false and empty peaks, but full tags and metadata still present. The third item is a failure row: errorReason is set and it is not charged. Filter these out with errorReason == null if you only want billed, successful results. heatSeek carries up to 100 entries when a heatmap exists; it is truncated above for readability.


💡 How can I use the data extracted with this actor?

  • ✂️ Clip and short-form creators: use topMoment.deepLink and peaks[].deepLink to jump straight to the seconds an audience rewinds, instead of scrubbing manually.
  • 🔍 SEO and content strategists: mine keywords across the top videos in a niche with tagKeywords, and compare tag lists against your own uploads.
  • 🤖 AI engineers and LLM developers: feed the structured JSON directly to a model as grounding context — a video ID and query in, a metadata-plus-heatmap record out, no scraping code inside the agent.
  • 📊 Researchers and media analysts: cross-reference category, publishDate, videoAgeDays and hasHeatmap to study how heatmap availability tracks video age across a sample.

📈 How do you monitor a video's replay peaks over time?

The heatmap and view/like counts are not static — a heatmap that is absent (hasHeatmap: false) on a brand-new upload can appear once YouTube finishes processing it, and topMoment.positionPercent can shift as a video accumulates more views. Monitoring means running the same set of watch URLs on a schedule and diffing the result against the previous run.

Fields worth diffing between runs: hasHeatmap (did a heatmap appear or disappear), peakCount and topMoment.startSeconds / positionPercent (did the standout moment move), exactViewCount and exactLikeCount (growth), and keywordCount (did the creator retag the video).

A typical workflow: run the actor against a fixed list of videoUrls on an Apify Schedule, store each run's dataset, then compare the latest topMoment and exactViewCount against the prior run and alert when the peak position moves by more than a few percentage points, or a heatmap appears for the first time.


🔌 Integrate this actor and automate your workflow

Youtube Most Replayed Scraper With Full Video Metadata & Tags works with any language or tool that can call the Apify API.

REST API with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run = client.actor("your-username/youtube-most-replayed-scraper-with-metadata-and-tags").call(
run_input={
"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"tagKeywords": ["excel"],
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("errorReason") is None:
print(item["videoId"], item["peakCount"], item.get("topMoment"))

Scheduled monitoring and delivery

Set up an Apify Schedule to re-run the same videoUrls list on a recurring interval, and attach an Apify webhook on the run's SUCCEEDED event to push the finished dataset to your own endpoint. The actor itself has no built-in scheduler — both of these are Apify platform features available to any actor.


Yes. This actor reads only what any logged-out visitor sees on a public YouTube watch page — view counts, tags, descriptions, and the replay heatmap YouTube itself renders in the player. Public web data is generally accessible for extraction; scraping publicly available data was the position taken in hiQ Labs v. LinkedIn (9th Cir., 2019), though that case concerned a different platform and jurisdiction can change the analysis.

The data this actor returns describes videos and channels, not private individuals — it is business and content metadata, so the governing framework is YouTube's own Terms of Service and general database-rights principles rather than GDPR or CCPA, which apply to personal data about private individuals. Scraping for one-off monitoring carries a different risk profile than scraping at scale to build a training dataset. Consult your legal team for commercial use cases involving bulk data storage or redistribution.


❓ Frequently asked questions

How many videos can I scrape in one run, and are they fetched in parallel?

There is no built-in cap on how many URLs you can submit — each becomes one row. They are fetched sequentially, one video at a time, not concurrently, so run time scales with the number of URLs.

Does this actor need a YouTube account, API key, or login?

No. It sends a plain HTTP request to the public watch page, the same one a logged-out visitor loads.

How does it handle YouTube's anti-bot blocking?

It starts with no proxy. If YouTube responds with a login or age-verification wall, the actor detects that specific signal and switches itself to Apify's Residential proxy group for the rest of the run — once switched, it stays on Residential. For runs of more than a couple of videos, selecting Residential proxy from the start avoids the wasted first attempt.

Does it extract the creator's real tags, or guess them from the description?

Real tags only. keywords comes from the video's own player data — the exact array the uploader typed into YouTube Studio. Videos with no tags return an empty array, never an invented one.

Why is hasHeatmap false and peaks empty for some videos?

YouTube has not published a replay heatmap for that video yet — this is common on recent uploads and tracks video age, not popularity. Tags and metadata are unaffected. Set skipVideosWithoutHeatmap to true to drop such videos before they are saved or charged.

Why is exactLikeCount sometimes null?

The channel has hidden its like count. exactLikeCount returns null and likeCountHidden returns true — it never returns a fabricated 0, and it never returns the literal UI caption "Like" that YouTube's like button can display.

How do I keep only videos matching certain tags or a length range?

Use tagKeywords for a case-insensitive substring match against the creator's tags, and minLengthSeconds / maxLengthSeconds to exclude Shorts or multi-hour streams. Videos dropped by any filter are excluded before they are saved or charged.

How do I monitor a video's replay peaks or view count over time?

Run the same videoUrls list on a recurring Apify Schedule, then diff topMoment, exactViewCount, exactLikeCount and hasHeatmap against the previous run's dataset.

Does this actor work with Claude, ChatGPT, and AI agent frameworks?

It has no dedicated MCP server. It is callable as a standard HTTP endpoint through apify_client or the Apify REST API by any agent framework that can issue an HTTP request, which is enough to build an agent that retrieves fresh video data before answering.

Can I use this actor without managing proxies myself?

Yes. proxy defaults to {} (no proxy), and the actor detects blocking and escalates to Apify Residential automatically. You only need to select a proxy group yourself if you want to skip that first detection step on larger runs.

Will my existing urls input still work?

Yes. urls is the original key from the base most-replayed-only actor and is still accepted and scraped alongside videoUrls, so existing input JSON and scheduled tasks keep running unchanged.


💬 Your feedback

Found a bug, or a metadata field you need that isn't here? Open an issue on this actor's Apify Store page, or reach the Scrapier team through the Actor's support tab in Apify Console. Bug reports and field requests are what keep this actor's coverage current.