🎥 YouTube Video Downloader 🌍 avatar
🎥 YouTube Video Downloader 🌍

Pricing

$9.00/month + usage

Go to Store
🎥 YouTube Video Downloader 🌍

🎥 YouTube Video Downloader 🌍

Developed by

Scrape Architect

Scrape Architect

Maintained by Community

[𝗖𝗵𝗲𝗮𝗽𝗲𝘀𝘁 𝗣𝗿𝗶𝗰𝗲] 🚀 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

DT

Try to download audio but got 403

Closed

datdotatprotocol opened this issue
a day ago

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)"
]
}
}
ScrapeArchitect avatar

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.

ScrapeArchitect avatar

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:

  1. 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 value Bearer <YOUR_APIFY_TOKEN>.
  2. 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

ScrapeArchitect avatar

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:

  1. 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
  2. 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!

DT

datdotatprotocol

a day ago

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
ScrapeArchitect avatar

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:

  1. 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.

  2. 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):

  1. 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.

  1. (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!

DT

datdotatprotocol

5 hours ago

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"
}
}
]
ScrapeArchitect avatar

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

  1. 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.

  2. 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.

  3. 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!