YouTube View Generator
Pricing
from $5.00 / 1,000 completed views
YouTube View Generator
Generate real browser views on YouTube videos: rotating residential proxies, unique fingerprints, configurable watch time, ad skipping, and search or referrer traffic sources. Use only on videos you own or are authorized to promote.
Pricing
from $5.00 / 1,000 completed views
Rating
0.0
(0)
Developer
One House
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Generate real browser views on YouTube videos. Every view runs in its own Chromium instance, on its own proxy IP, with its own device fingerprint — and actually plays the video for a watch time you choose.
Authorized use only. Run this Actor only on videos and channels you own or have explicit permission to promote. Artificially inflating public metrics breaks YouTube's Terms of Service.
What it actually does
A headless page opened on a YouTube URL does nothing: the player sits paused at 0:00 and no watch time exists. This Actor drives the player the way a viewer would — starts playback, keeps it running, skips ads, and stays for the configured duration.
It also records YouTube's own telemetry for every view, so you can see what reached YouTube rather than guessing:
| Field | Meaning |
|---|---|
playbackPings | YouTube's /api/stats/playback call, sent once when a play session opens |
watchtimePings | /api/stats/watchtime, repeated as the video advances |
watchedSecs | Seconds the video was genuinely playing, ads excluded |
country | The country YouTube itself resolved for the view's IP |
What this does not promise: YouTube validates views server-side and discards ones it considers artificial. Sending the playback and watch-time signals is not the same as a view appearing on the public counter, and no tool can guarantee that outcome.
Features
- Real playback — the player is started and kept running, not just loaded
- Unique viewer identity — one proxy IP, one browser, one incognito context per view
- Watch time you control — a fixed number of seconds, or a share of the video's length
- Traffic sources — direct link, YouTube search (finds the video in results and clicks it), or an external referrer
- Ad skipping — presses Skip as soon as it appears
- 144p enforcement — video is the biggest proxy cost, and a view counts the same at any resolution
- Real parallelism — views run at the concurrency you set, from the first view onward
- Verification built in — playback and watch-time pings recorded per view
- Cost guard — the run stops itself if YouTube blocks several views in a row
Input
| Field | Description |
|---|---|
videoUrls | Watch links, youtu.be links, Shorts, embeds, or bare video IDs |
views | How many playbacks to generate (1–1000), spread across the videos |
concurrency | How many play at once (1–20) |
watchMode | seconds or percent of the video's length |
minWatchSeconds / maxWatchSeconds | Watch time range in seconds |
minWatchPercent / maxWatchPercent | Watch time range as a share of the video |
trafficSource | direct | youtube-search | external |
searchKeyword | Search phrase, required for the YouTube search source |
referer | Referrer URL, required for the external source |
lowestQuality | Pin playback to 144p to cut proxy traffic |
skipAds | Press Skip when it appears |
device | desktop | mobile | tablet | auto |
delayBetweenViewsSecs | Pause before starting the next view |
maxRetries | Retries on a fresh proxy IP when a view is refused or stalls |
proxyConfiguration | Apify Proxy or custom (Residential strongly recommended) |
{"videoUrls": [{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" }],"views": 20,"concurrency": 2,"watchMode": "percent","minWatchPercent": 40,"maxWatchPercent": 80,"trafficSource": "youtube-search","searchKeyword": "never gonna give you up","lowestQuality": true,"skipAds": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output
Each view pushes one dataset item:
{"viewId": "view-0-1700000000000","videoId": "dQw4w9WgXcQ","videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","videoTitle": "Rick Astley - Never Gonna Give You Up","status": "success","playbackStarted": true,"watchedSecs": 84.0,"targetWatchSecs": 84,"videoDurationSecs": 213.0,"percentWatched": 39.4,"playbackPings": 1,"watchtimePings": 8,"adsSkipped": 1,"quality": "tiny","trafficSource": "youtube-search","enteredViaSearch": true,"device": "desktop","country": "US","error": null,"timestamp": "2026-08-10T21:00:00.000Z"}
status is one of:
| Value | Meaning |
|---|---|
success | The video played for the full target watch time |
partial | Playback started but stalled before reaching the target |
failed | The player never started |
blocked | YouTube refused the request on every retry |
A run-level summary is stored in the default key-value store under SUMMARY, with the success rate, how many playbacks started, and total watch time generated.
Pricing
You are charged for each completed view — one that played for its full target watch time. Views that fail, stall, or get blocked cost nothing, and they are still written to the dataset so you can see what happened.
On top of that you pay the Apify platform usage the run consumes: compute time and, above all, residential proxy traffic. Proxy bandwidth is by far the largest part, so the settings below are what actually drive your bill.
Watch time and cost
Two settings drive almost all of your cost. Watch time is time a proxy connection and a browser stay open, and quality decides how much video travels through that proxy. Leaving lowestQuality on pins the stream to 144p instead of the 480p YouTube picks by default, which is the single biggest saving available.
As a measured reference point, a 24-second view at 144p through residential proxy moves about 6.4 MB — roughly half of it the YouTube page itself, which every view pays regardless of length. A 60-second view costs about 1.5x that, and a five-minute view roughly six times. Set the watch time you actually need; the difference is real money.
You can cap what a run may spend with the max cost per run setting in the Apify Console. Once that cap is reached the Actor stops starting new views instead of running up work nobody pays for.
Watch time is measured from how far the player's own clock advanced. Ads are excluded, because YouTube plays them through the same player and counting them would overstate what the video received, and a buffering stream earns nothing either — if the picture is frozen, the time does not count.
What limits concurrency is CPU rather than memory, and on Apify memory is how you buy it: roughly one core per 4 GB. A browser decoding video wants a fair share of a core, so allow about 2 GB per parallel view — 4 GB for two, 8 GB for four. You can run three players on 4 GB and they will finish, but they take noticeably longer to get going and stall more often, which costs proxy traffic. The concurrency you set is applied from the first view rather than ramped up, so a short run finishes in the number of batches you would expect.
Traffic sources
Direct opens the watch page straight away — the simplest and most reliable.
YouTube search loads the results for your keyword, scrolls until it finds your video, and clicks it, so the play arrives from a search rather than out of nowhere. If the video is not among the first results the view falls back to opening the link directly, and enteredViaSearch in the dataset tells you which happened. Pick a phrase your video actually ranks for.
External sends a referrer header from the address you supply, as if the viewer followed a link from another site.
Proxies
| Proxy | When to use |
|---|---|
| Apify Residential (default) | Recommended — each view arrives from a distinct home IP |
| Apify Datacenter | Cheaper, but YouTube treats datacenter ranges with far more suspicion |
| Custom proxies | Your own provider contract |
Running without a proxy makes every view arrive from the same address, which looks like one viewer replaying a video.
When views are refused
YouTube sometimes answers with a block instead of a page, and some residential addresses are throttled so hard that the player opens but the video never advances. Both cases retry on a fresh proxy IP, with a backoff so the new address does not walk into the same rate limit. A view is only reported as successful — and only billed — once the video's own clock has actually run for the target watch time, so a stalled stream never counts as a view. If several views in a row are refused, the run stops itself rather than spending the rest of your proxy budget against a wall.