YouTube Most Replayed Scraper - Heatmap Peaks & Timestamps
Pricing
from $3.65 / 1,000 video returneds
YouTube Most Replayed Scraper - Heatmap Peaks & Timestamps
Find the most replayed moments of any YouTube video: the top peaks of YouTube's own Most replayed heatmap as timestamped links, the chapter each peak falls in and the caption line spoken there, plus the raw heatmap segments. Videos without a heatmap are listed free.
Pricing
from $3.65 / 1,000 video returneds
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
YouTube Most Replayed Scraper - Heatmap Peaks, Chapters & Timestamps
Find the moments viewers replay most in any YouTube video. For each video you get the top peaks of YouTube's own "Most replayed" heatmap as timestamped links that start playback right there, the chapter each peak falls in, and the caption line spoken at that moment - plus the raw heatmap segments, if you want to draw or analyse the curve yourself.
Videos that have no heatmap are returned as a free row that says so. You pay only for videos that have one.
Best for
- Clipping and Shorts - jump straight to the parts people rewatch instead of scrubbing through a long video.
- Content research - see which chapter and which sentence held attention, across a list of your own or competitors' videos.
- Heatmap analysis - the full
heatmaparray (start, duration, intensity 0 to 1) for every video, ready for a chart.
What one row looks like
Measured on 2026-09-14 on "But what is a neural network? | Deep learning chapter 1" (3Blue1Brown, aircAruvnKk):
{"status": "ok","videoId": "aircAruvnKk","title": "But what is a neural network? | Deep learning chapter 1","channelTitle": "3Blue1Brown","lengthSeconds": 1120,"topMomentTimestamp": "8:35","topMomentUrl": "https://www.youtube.com/watch?v=aircAruvnKk&t=515s","topMomentIntensity": 0.8682,"topMomentChapter": "Why layers?","topMomentTranscript": "The goal is to have some mechanism that could conceivably combine pixels into edges, or edges into patterns, or patterns into digits. And to zoom in on one very specific example, let's say the hope is for one particular neuron in the second layer to pick up","topMoments": [{ "rank": 1, "source": "youtube-most-replayed-label", "startSeconds": 515.2, "endSeconds": 526.4, "timestamp": "8:35", "url": "https://www.youtube.com/watch?v=aircAruvnKk&t=515s", "intensity": 0.8682, "chapterTitle": "Why layers?", "transcriptText": "The goal is to have some mechanism that could conceivably combine pixels into edges ..." },{ "rank": 2, "source": "youtube-most-replayed-label", "startSeconds": 627.2, "endSeconds": 638.4, "timestamp": "10:27", "url": "https://www.youtube.com/watch?v=aircAruvnKk&t=627s", "intensity": 0.828, "chapterTitle": "Edge detection example", "transcriptText": "So a common thing to do is to pump this weighted sum into some function ..." }],"momentSpacingSeconds": 56,"openingExcludedSeconds": 33.6,"mostReplayedLabels": [{ "startSeconds": 504, "endSeconds": 582.4, "labelSeconds": 515.2, "timestamp": "8:35", "url": "https://www.youtube.com/watch?v=aircAruvnKk&t=515s", "label": "Most replayed" }],"chapterSource": "description","chapters": [{ "title": "Introduction example", "startSeconds": 0, "timestamp": "0:00", "url": "https://www.youtube.com/watch?v=aircAruvnKk&t=0s" }],"transcriptLanguage": "en","transcriptIsAutoGenerated": false,"transcriptNote": null,"heatmapSegmentCount": 100,"heatmapSegmentSeconds": 11.2,"heatmap": [{ "startMillis": 0, "durationMillis": 11200, "intensityScoreNormalized": 0.3526 }]}
(Arrays are shortened here; a real row has all top moments, all chapters and all 100 heatmap segments.)
How the moments are chosen
YouTube's heatmap splits a video into equal segments (100 on every video measured on 2026-09-14: 11.2 seconds each on a 1,120-second video, 0.19 seconds each on a 19-second one) and gives each an intensity from 0 to 1, where 1 is that video's most replayed segment.
Ranking by intensity alone does not work: viewers who start a video always pass through its first seconds, so on popular videos the opening segment is often the strongest (on MrBeast's "$456,000 Squid Game In Real Life!" the first three segments read 1.000, 0.247, 0.160, while YouTube's own "Most replayed" labels sit at 5:54 and 12:35). So topMoments is built like this:
- YouTube's own "Most replayed" labels come first (
source: "youtube-most-replayed-label"), ordered by the intensity of the segment they point at. The moment starts at the label's time. - The opening is excluded: 3% of the video's length or the first segment, whichever is longer (33.6 seconds on the 1,120-second example). A YouTube label inside the opening is left out of
topMomentstoo. The excluded length is returned inopeningExcludedSeconds, and every label is still returned unchanged inmostReplayedLabels. - The rest are heatmap peaks (
source: "heatmap-peak"): only segments at least as strong as both neighbours, strongest first, never with intensity 0. - A peak closer than minSecondsBetweenMoments to a moment already picked is skipped, so the moments are different scenes rather than slices of one peak. The default is automatic: 5% of the video's length, at least 5 seconds (56 seconds on the 1,120-second example). YouTube's own labels are not thinned by this rule.
- Each moment's
urlstarts playback at the moment's start, rounded down to the second. A video can return fewer moments than you asked for.
mostReplayedLabels are the "Most replayed" labels YouTube itself shows on the progress bar, returned exactly as YouTube places them (0 to 3 per video in the videos measured on 2026-09-14; PSY - GANGNAM STYLE had 3, one of them at 0:02).
Chapters and captions
chapterTitleis the chapter whose start is at or before the moment. Chapters come from the video description (chapterSource: "description") or YouTube's automatic chapters ("auto"); many videos have neither, and then it isnull.transcriptTextis the captions spoken during that heatmap segment, up to 300 characters. Uploaded captions in transcriptLanguage are preferred, then YouTube's auto-generated ones in that language. If the video has neither, the first available captions are used as they are - nothing is translated - andtranscriptNotenames the language used.- If a video has no captions, or they cannot be read, the video row is still returned with
transcriptText: nullandtranscriptNotesaying why. Captions never block or change the charge for a row.
How captions are read, plainly: the public watch page's own caption links return an empty file (checked again on 2026-09-14), so captions are read through YouTube's player endpoint (/youtubei/v1/player) and caption file, the way transcript tools do. YouTube's robots.txt disallows those paths for crawlers. If you prefer not to use them, set includeTranscript to false: only the public watch page is requested, and everything except transcriptText is still returned.
Rows you are never charged for
no-heatmap- the video page was read in full and YouTube shows no Most replayed graph for this video. In the videos measured on 2026-09-14 the graph was missing on uploads with a few hundred or a few thousand views (for example 222 views) and on a 24/7 live stream. The row still carries the video's title, channel, length and view count.age-restricted- YouTube asks viewers to sign in to confirm their age, and the page carries no Most replayed graph. It is not retried. (An age-restricted video whose page does carry the graph is returned and charged like any other.)blocked- YouTube answered with a bot check on every attempt. A bot check is never reported as "no heatmap": measured on 2026-09-14, the bot-check page YouTube sends to Apify's own IP still contains a heatmap for some videos and not for others, so nothing can be concluded from it.incomplete-page- the page came back without the video's own data on every attempt.no-such-video- YouTube reports the video as unavailable (wrong id, private or removed).unreadable- any other page that could not be read.invalid-input- a line that is not a video URL or id (a channel or playlist URL, for example).duplicate- the same video given twice; it is read and charged once.not-read- lines left unread because maxVideos or the run's maximum total charge was reached.budget-reached- a video was read but did not fit inside the maximum total charge; the row says how many were returned.example-input- the input was empty and one example video was read.
Videos are returned one at a time. When the run's maximum total charge is reached, the next video is not requested.
Input
| Field | Meaning |
|---|---|
videos | One per line: watch URL, youtu.be link, /shorts/ or /live/ URL, or an 11-character id. |
maxVideos | Maximum video rows to return (1-1,000, default 100). |
topMomentsCount | Top moments per video (1-20, default 5). |
minSecondsBetweenMoments | Minimum spacing between heatmap peaks in seconds; 0 = 5% of the video length, at least 5 seconds. |
includeTranscript | Add the caption line at each moment (default on; see above). |
transcriptLanguage | Preferred caption language code (default en). |
includeHeatmap | Include all raw heatmap segments (default on). |
useProxy | Request pages through a proxy (default on). Measured on 2026-09-14: from Apify's own IP 5 of 7 watch page requests were bot checks; through a datacenter proxy 4 of 4 were read in full. |
{"videos": ["https://www.youtube.com/watch?v=aircAruvnKk", "dQw4w9WgXcQ"],"topMomentsCount": 5,"includeTranscript": true,"transcriptLanguage": "en"}
How it reads YouTube
- One watch page per video (
/watch?v=...&hl=en&gl=US), plus two small requests per video for captions when includeTranscript is on. - The heatmap is read only from the block whose video id matches the video you asked for, and the row is returned only when the page's own video details are present and match that id.
- A bot check, HTTP 429 or a page missing the video data is retried on a new proxy session, up to 3 attempts.
- A short pause between videos.