
🎥 YouTube Video Downloader 🌍
Pricing
$9.00/month + usage

🎥 YouTube Video Downloader 🌍
[𝗖𝗵𝗲𝗮𝗽𝗲𝘀𝘁 𝗣𝗿𝗶𝗰𝗲] 🚀 YouTube-Kids Video, Shorts, Audio & YouTube Video Downloader 🎵 Instantly grab 🎥 videos, 🎵 audio, & 📱 Shorts from YouTube & YouTube Kids! Supports 360p to 4K Videos 🌍, and family-friendly content 👨👩👧👦. Get direct MP4/MP3 links in seconds! ⚡
5.0 (1)
Pricing
$9.00/month + usage
0
Total users
22
Monthly users
9
Runs succeeded
>99%
Last modified
18 days ago
Try to download audio but got 403
Closed
Hi team,
I am trying your actor with my n8n workflow to download video from youtube, as a source for my video content. But any time I try to download using your downloaded url, I got 403 error, while I can access it easily if I use my browser.
Below is the error I received, it mentioned clearly that I need to use some credentials for your URL?
{"errorMessage": "Forbidden - perhaps check your credentials?","errorDescription": "403 - \"\"","errorDetails": {"rawErrorMessage": ["403 - \"\""],"httpCode": "403"},"n8nDetails": {"nodeName": "Download file","nodeType": "n8n-nodes-base.httpRequest","nodeVersion": 4.2,"itemIndex": 0,"time": "6/8/2025, 11:43:16 PM","n8nVersion": "1.94.1 (Self Hosted)","binaryDataMode": "filesystem","stackTrace": ["NodeApiError: Forbidden - perhaps check your credentials?"," at ExecuteContext.requestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_openai@4.78.1_encoding@0.1.13_zod@3.24.1_/node_modules/n8n-core/src/execution-engine/node-execution-context/utils/request-helper-functions.ts:1421:10)"," at processTicksAndRejections (node:internal/process/task_queues:95:5)"," at ExecuteContext.requestWithAuthentication (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/n8n-core@file+packages+core_openai@4.78.1_encoding@0.1.13_zod@3.24.1_/node_modules/n8n-core/src/execution-engine/node-execution-context/utils/request-helper-functions.ts:1707:11)"]}}

Scrape Architect (ScrapeArchitect)
thanks for creating issue i am looking on your problem i will come soon with your answer. Is it using my actor to get only the video download urls via automatically runing my actor? And i have a little advice, the video download urls has time limit. so it's better to re-run the actor againg after few hours to get new download urls. It's not possible to use same download urls for long time. if any urls don't work after few hours then re-nun the actor with the same video and get new download urls for the video it will work.

Scrape Architect (ScrapeArchitect)
Hi there,
The 403 is happening because your n8n workflow isn’t authenticated with Apify—even though your browser already is. You can fix this entirely on your end by securely adding your Apify API token into n8n:
-
Save your Apify token as a credential in n8n
- In n8n, go to Credentials → New Credential → HTTP Header Authentication (or “API Token” if available).
- Give it a name like “Apify API” and set the header key to
Authorization
with the valueBearer <YOUR_APIFY_TOKEN>
.
-
Attach that credential to your HTTP Request node
- Open your “Download file” node.
- Under Authentication, select the “Apify API” credential you just created.
- Keep the URL exactly as returned by the actor—no need to append
?token=
.
That way, n8n will send your token behind the scenes, your download link remains private, and you’ll get a clean 200 response instead of a 403.
Let me know if you hit any other snags!
— Scrape Architect

Scrape Architect (ScrapeArchitect)
Here is additonal Solution,
You can fix the 403 error on your end—no changes needed to the actor itself. Here’s what to do in your n8n workflow:
-
Add your Apify API token
- Option A: Append it to the URL
https://api.apify.com/v2/key-value-stores/…/records/your-key?token=YOUR_APIFY_TOKEN
- Option B: Use an HTTP header
- In your HTTP Request node, under Headers, add:
Authorization: Bearer YOUR_APIFY_TOKEN
- In your HTTP Request node, under Headers, add:
- Option A: Append it to the URL
-
Run the download again
With the token included, Apify will authenticate your request and return the file instead of a 403.
That’s it—just plug your token into the URL or headers, and n8n will be able to fetch the file exactly like your browser does. Good luck!
datdotatprotocol
Hi team,
Thank you for your support. But I have applied what you suggested, but it is not working.
Here is the url that I'm trying to download audio from:
https://rr3---sn-jvhj5nu-2ial.googlevideo.com/videoplayback?expire=1749419501&ei=jbFFaI2RMqWAkucP19u-0Q4&ip=2601%3A8c%3A4a7f%3Aa90%3Aa072%3Abb3%3A9b6a%3Aca5c&id=o-AJeCXiq-9HEMWIMkpO8OyHTsnvoFkqEhO3ZNdwM38d9f&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&met=1749397901%2C&mh=Fl&mm=31%2C29&mn=sn-jvhj5nu-2ial%2Csn-ab5sznz6&ms=au%2Crdu&mv=m&mvi=3&pl=38&rms=au%2Cau&initcwndbps=3980000&bui=AY1jyLO7NqskyCD8qvBm6XRAKp1JchuRstZpzx7q-Xz7W6oRpQb0Z01K1bomvbeWclOhtF8bqY3-gAvC&vprv=1&svpuc=1&xtags=drc%3D1&mime=audio%2Fmp4&ns=ex7ZfDURM3yl_5p2s9FkxpMQ&rqh=1&gir=yes&clen=11804399&dur=729.338&lmt=1735369471493760&mt=1749397306&fvip=5&keepalive=yes&lmw=1&c=TVHTML5&sefc=1&txp=6308224&n=uqnqDIEJSXm-4Q&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhAMjq5mRnKVovh4lZI93-Sy6E_nKkGuKn0F_G5rO6dOoNAiARFCVYqxsEF462jYbS8maXchUcJwVWT1Om8Mjw9W2XDQ%3D%3D&lsparams=met%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms%2Cinitcwndbps&lsig=APaTxxMwRQIhAJYyiJ7Q_gBWcJvjEaU1pl6eeDFMR5o265KB-roD_kwdAiBQfnfjIe-VarCs1Mqqpc6TPKEe_7doDngnr8epCXqgzQ%3D%3D

Scrape Architect (ScrapeArchitect)
I’m extremely sorry to hear that. But I’d like to try one last time. Here’s my final piece of advice — please give it a try. If it still doesn’t work, then unfortunately, it’s beyond my control and likely depends on Google and Apify :-
The URL you pasted is a signed YouTube CDN link, not a static file on Apify – it has two key protections:
-
IP lock (ip=… in the query string) YouTube ties that URL to the exact IP address that requested it. Your browser got it from the actor while you were logged in, so it works. When n8n (on a different machine/IP) tries it, YouTube sees the wrong IP and returns 403 Forbidden.
-
Short expiration (expire=… timestamp) Even if you were on the same IP, these URLs only live a few minutes. After that, YouTube won’t serve them.
What you can do yourself
You don’t need the actor team to change anything—just switch to fetching through Apify’s proxy layer (which maintains the same IP and lifetime):
- Use the actor‐run files API Instead of hitting the Googlevideo URL directly, call:
https://api.apify.com/v2/actor-runs/{RUN_ID}/files/{KEY}?token=YOUR_APIFY_TOKEN
Replace {RUN_ID} with the run ID you see in the dashboard, and {KEY} with the name of the file (e.g. audio.mp4 or whatever your actor outputs). This endpoint streams the content through Apify’s servers, so the IP stays consistent and the URL doesn’t expire immediately.
- (Advanced) Proxy the signed URL yourself If you really must use the Googlevideo link, configure your n8n HTTP Request node to go through a proxy that has the same outgoing IP as the actor did. That’s generally more work and less reliable than option #1.
Example for n8n
Node: HTTP Request
URL:
https://api.apify.com/v2/actor-runs/abcd1234/files/audio.mp4?token={{$credentials.apify.token}}
Method: GET
Response Format: File / Binary
That way, you never talk directly to YouTube’s CDN—Apify handles the handshake, and you just grab the file. Good luck!
datdotatprotocol
Thank you for your support.
Can I know where I can find tis file key
in your scraper's output?
Because I have tried to analyze the output json below, but cannot find the id anywhere:
[{"original_url": "https://www.youtube.com/watch?v=K75j8MkwgJ0","requested_resolution": "480p","title": "Optimize Your AI - Quantization Explained","channel": "Matt Williams","duration": "12m 9s","provided_resolution": "480p","thumbnail": "https://i.ytimg.com/vi/K75j8MkwgJ0/maxresdefault.jpg","downloadable_video_link": "https://rr3---sn-jvhj5nu-2ial.googlevideo.com/videoplayback?expire=1749419501&ei=jbFFaI2RMqWAkucP19u-0Q4&ip=2601%3A8c%3A4a7f%3Aa90%3Aa072%3Abb3%3A9b6a%3Aca5c&id=o-AJeCXiq-9HEMWIMkpO8OyHTsnvoFkqEhO3ZNdwM38d9f&itag=135&aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C271%2C278%2C313&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&met=1749397901%2C&mh=Fl&mm=31%2C29&mn=sn-jvhj5nu-2ial%2Csn-ab5sznz6&ms=au%2Crdu&mv=m&mvi=3&pl=38&rms=au%2Cau&initcwndbps=3980000&bui=AY1jyLO7NqskyCD8qvBm6XRAKp1JchuRstZpzx7q-Xz7W6oRpQb0Z01K1bomvbeWclOhtF8bqY3-gAvC&vprv=1&svpuc=1&mime=video%2Fmp4&ns=ex7ZfDURM3yl_5p2s9FkxpMQ&rqh=1&gir=yes&clen=19388548&dur=729.295&lmt=1736142112343601&mt=1749397306&fvip=5&keepalive=yes&lmw=1&c=TVHTML5&sefc=1&txp=5432434&n=uqnqDIEJSXm-4Q&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRAIgIQCcJeu3xFUoizGoOmLbcWZA5xu9oSSzB9SAyBDvqpYCIE4G1xAoyZ-Yiw5B_8e1nDC9d-dEpyWe5Q0_-iJ7fwP5&lsparams=met%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms%2Cinitcwndbps&lsig=APaTxxMwRQIhAJYyiJ7Q_gBWcJvjEaU1pl6eeDFMR5o265KB-roD_kwdAiBQfnfjIe-VarCs1Mqqpc6TPKEe_7doDngnr8epCXqgzQ%3D%3D","downloadable_audio_link": "https://rr3---sn-jvhj5nu-2ial.googlevideo.com/videoplayback?expire=1749419501&ei=jbFFaI2RMqWAkucP19u-0Q4&ip=2601%3A8c%3A4a7f%3Aa90%3Aa072%3Abb3%3A9b6a%3Aca5c&id=o-AJeCXiq-9HEMWIMkpO8OyHTsnvoFkqEhO3ZNdwM38d9f&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&met=1749397901%2C&mh=Fl&mm=31%2C29&mn=sn-jvhj5nu-2ial%2Csn-ab5sznz6&ms=au%2Crdu&mv=m&mvi=3&pl=38&rms=au%2Cau&initcwndbps=3980000&bui=AY1jyLO7NqskyCD8qvBm6XRAKp1JchuRstZpzx7q-Xz7W6oRpQb0Z01K1bomvbeWclOhtF8bqY3-gAvC&vprv=1&svpuc=1&xtags=drc%3D1&mime=audio%2Fmp4&ns=ex7ZfDURM3yl_5p2s9FkxpMQ&rqh=1&gir=yes&clen=11804399&dur=729.338&lmt=1735369471493760&mt=1749397306&fvip=5&keepalive=yes&lmw=1&c=TVHTML5&sefc=1&txp=6308224&n=uqnqDIEJSXm-4Q&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&sig=AJfQdSswRQIhAMjq5mRnKVovh4lZI93-Sy6E_nKkGuKn0F_G5rO6dOoNAiARFCVYqxsEF462jYbS8maXchUcJwVWT1Om8Mjw9W2XDQ%3D%3D&lsparams=met%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms%2Cinitcwndbps&lsig=APaTxxMwRQIhAJYyiJ7Q_gBWcJvjEaU1pl6eeDFMR5o265KB-roD_kwdAiBQfnfjIe-VarCs1Mqqpc6TPKEe_7doDngnr8epCXqgzQ%3D%3D","merged_downloadable_link": "https://rr3---sn-jvhj5nu-2ial.googlevideo.com/videoplayback?expire=1749419501&ei=jbFFaI2RMqWAkucP19u-0Q4&ip=2601%3A8c%3A4a7f%3Aa90%3Aa072%3Abb3%3A9b6a%3Aca5c&id=o-AJeCXiq-9HEMWIMkpO8OyHTsnvoFkqEhO3ZNdwM38d9f&itag=18&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D%3D&met=1749397901%2C&mh=Fl&mm=31%2C29&mn=sn-jvhj5nu-2ial%2Csn-ab5sznz6&ms=au%2Crdu&mv=m&mvi=3&pl=38&rms=au%2Cau&initcwndbps=3980000&bui=AY1jyLPyAafaEE1bQbqwb9qB6_3McvF6O8Kk-cIq2OqUHbHSouWwVt2Q9OrpPaflF7AD3hHAux0OO82i&vprv=1&svpuc=1&mime=video%2Fmp4&ns=XdjhcrAiMQyTD8O4NnkxesAQ&rqh=1&gir=yes&clen=39806223&ratebypass=yes&dur=729.361&lmt=1736142102155836&mt=1749397306&fvip=5&lmw=1&c=TVHTML5&sefc=1&txp=5438434&n=XH_giS2g-y7SzA&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Cbui%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&sig=AJfQdSswRQIhAIqTZlj0AxZ50nk7HbDDuO1uT7Sms33TqUgjXFA16ERlAiAZ-mPv0VSyxK-VIE-yFBEOc8U7CNaANqKwwRJ1tTwJsg%3D%3D&lsparams=met%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Crms%2Cinitcwndbps&lsig=APaTxxMwRQIhAJYyiJ7Q_gBWcJvjEaU1pl6eeDFMR5o265KB-roD_kwdAiBQfnfjIe-VarCs1Mqqpc6TPKEe_7doDngnr8epCXqgzQ%3D%3D","additional_metadata": {"video_format": {"ext": "mp4","format_note": "480p","height": 480,"width": 854,"fps": 30,"vcodec": "avc1.4d401f","acodec": "none"},"audio_format": {"ext": "m4a","format_note": "medium, DRC","acodec": "mp4a.40.2","abr": 129.48,"asr": 44100},"source_platform": "youtube","video_type": "long","video_upload_date": "2024-12-28","comment_count": "280","like_count": "6.8K","channel_url": "https://www.youtube.com/channel/UCHaF9kM2wn8C3CLRwLkC2GQ"}}]

Scrape Architect (ScrapeArchitect)
Hey there! You’re right—the default YouTube Video Downloader actor only pushes the video stream into Key–Value storage, so you get a video_<hash>.mp4
key, but it leaves the audio behind as just a signed URL in your dataset. That’s why you don’t see an audio key.
What you can do right now
-
Fetch audio directly Use your HTTP Request node to grab the
downloadable_audio_link
URL as a binary file. In n8n, set Response Format to “File/Binary” and point it at the signed URL (with your Apify token in headers or query). That bypasses the need for a stored key. -
Proxy via Apify If you want Apify to handle IP locking and expiry, swap your URL for the actor-runs files API pattern (even though the audio wasn’t saved, you can still proxy the signed URL through Apify’s servers by streaming it yourself in a lightweight wrapper step).
What I’d need to do to add audio keys
To have both video and audio written into Key–Value (or Files) storage, the actor’s code must explicitly download the audio stream and call Apify.setFile('audio.mp4', stream)
(or Apify.setValue()
for KV). I don’t want to bloat this shared actor with extra features that most users don’t need—so I’m not going to retrofit it.
Your options
-
Use the existing actor + your own download step Continue using the default actor for video, then in n8n pull the audio URL directly as described above. No changes to the actor, no extra cost.
-
Order a custom actor I can build you a tailored version that automatically saves both video and audio (and even merged files) into storage so you get
video.mp4
,audio.mp4
,merged.mp4
keys every run. This will include a small one-time setup fee or adjusted pricing to cover maintenance. -
Grab custom scripts If you just want Node.js snippets or an Apify SDK script you can drop into your own actor, I can provide those too—again, at a modest cost.
If you’d like to go down route 2 or 3 (or just discuss pricing), drop me a line at scrapearchitect@gmail.com. I’m happy to work out the details and get you a seamless end-to-end n8n integration!