DEV Community

Viet Automation
Viet Automation

Posted on

Best YouTube Transcript & Web Scraping APIs for n8n and LangChain AI Agents (2026 Benchmark)

Executive Summary (Empirical Findings + Verified Oct 2026 Pricing):

  • What Happens When You Scrape Directly from a Cloud Server IP (AS54113 Live Test on Oct 28, 2026):
    1. YouTube /api/timedtext Silent 0-Byte Block: Across all 3 tested public YouTube videos (dQw4w9WgXcQ, aircAruvnKk, rfscVS0vtbw), fetching the watch page from our Linux cloud server returned HTTP 200 (1.44 MB – 1.91 MB HTML) with a valid "captionTracks" URL, but fetching the /api/timedtext URL directly from the cloud IP returned 0 bytes (100% failure without a residential proxy / PoToken).
    2. HTML Boilerplate Token Waste (95.5% Waste): Across 10 production web URLs tested via direct HTTP GET, raw HTML totaled 1,614,278 bytes (~400,740 LLM tokens) while actual readable body text was only 73,015 bytes (~16,416 tokens)β€”meaning 95.5% of raw HTML is script/style/DOM boilerplate.
    3. Unauthenticated Jina Reader Cloud IP Block (HTTP 40103): Calling https://r.jina.ai/<url> without an API key from a datacenter IP (AS54113) returned HTTP 401 AuthenticationRequiredError on 10 out of 10 URLs ("blocked from performing anonymous queries due to bad network reputation").
  • Best Solution for YouTube Transcripts, Google Maps & Social Media: Apify (Free plan includes $5.00/month in recurring usage creditsβ€”covering ~1,000 YouTube transcript runs/mo with built-in residential proxy rotation).
  • Best Solution for Clean LLM Markdown & Structured JSON Extraction: Firecrawl (1,000 free credits/mo, Hobby $19/mo monthly or $16/mo annual for 5,000 pages at 1 credit/page).

⚑ Quick Decision & Free Developer Credits Matrix (Verified Oct 2026)

API Provider Primary Use Case in n8n / LangChain Official Free Tier (Oct 2026) Official Paid Entry Tier Official Partner / Access Link
1. Apify YouTube Transcripts, TikTok, Google Maps, LinkedIn & E-Com $5.00/mo Recurring Usage Credit (No credit card required) Starter: $39/mo (or pay-per-usage Compute Units + Proxy) πŸ‘‰ Claim $5/mo Free Apify Credit
2. Firecrawl Crawling Websites & Docs into Clean LLM Markdown / JSON 1,000 Credits/mo Free (1 credit = 1 page scrape) Hobby: $16/mo (annual) or $19/mo (monthly) for 5,000 credits πŸ‘‰ Claim 1,000 Free Firecrawl Credits
3. Jina Reader URL-to-Markdown Conversion via Token Billing (r.jina.ai) Free API Key required on Cloud IPs (500 RPM limit) $0.050 per 1M output tokens (Prototype) / $0.045/1M (Production) jina.ai/api-dashboard/pricing
4. Bright Data Enterprise Scraping Browser & 72M+ Residential Proxies Trial credit for verified corporate accounts Pay-as-you-go per GB / per 1,000 requests brightdata.com/pricing
5. YouTube Data API v3 Managing Captions Only on Channels You Personally Own 10,000 quota units/day (captions.download = 200 units) Returns 403 Forbidden on third-party videos without owner OAuth2 developers.google.com/youtube/v3

πŸ› οΈ Deploying inside an automation workflow? Connect Apify and Firecrawl directly to n8n Cloud (14-Day Free Trial) or Make.com (1,000 Free Credits) using the copy-paste HTTP node templates in Section 4.


1. Table A β€” Live Empirical Server Benchmark (Measured Oct 28, 2026)

To avoid theoretical estimates, we executed our open-source benchmark script (run_live_benchmarks.py, raw output stored in live_benchmark_results.json) directly from our Linux cloud server (Linux x86_64, Python 3.12.3, Egress ASN: AS54113) at 2026-10-28T05:31:55Z (12:31:55 PM UTC+7).

1.1. Live Test 1: Raw HTML vs. Clean Extracted Text Across 10 Production URLs

Why can't you just wire a raw HTTP Request node into Claude or GPT-4o? Below is the exact byte and token measurement across 10 real URLs, alongside what happens when calling https://r.jina.ai/<url> anonymously from a cloud server IP:

Target Website Direct HTTP Status Direct Latency (ms) Raw HTML Payload (Bytes) Raw HTML Est. Tokens (~4 chars/tok) Clean Extracted Text (Bytes) Clean Text Est. Tokens HTML Boilerplate Waste (%) Unauthenticated r.jina.ai from Cloud IP
1. docs.n8n.io 200 179.4 ms 528,101 B 132,008 tok 1,446 B 361 tok 99.7% HTTP 401 (40103 ASN Block)
2. news.ycombinator.com 200 331.4 ms 34,766 B 8,691 tok 4,054 B 1,013 tok 88.3% HTTP 401 (40103 ASN Block)
3. en.wikipedia.org/wiki/RAG 200 274.2 ms 252,874 B 62,988 tok 24,921 B 6,194 tok 90.1% HTTP 401 (40103 ASN Block)
4. www.python.org 200 264.6 ms 21,180 B 2,774 tok 15,057 B 1,979 tok 28.9% HTTP 401 (40103 ASN Block)
5. httpbin.org/html 200 87.2 ms 3,741 B 935 tok 3,596 B 898 tok 3.9% HTTP 401 (40103 ASN Block)
6. github.com/n8n-io/n8n 200 362.8 ms 416,814 B 104,158 tok 8,740 B 2,178 tok 97.9% HTTP 401 (40103 ASN Block)
7. scrapethissite.com/pages/ 200 90.6 ms 10,970 B 2,742 tok 1,182 B 295 tok 89.2% HTTP 401 (40103 ASN Block)
8. example.com 200 31.7 ms 577 B 144 tok 171 B 43 tok 70.4% HTTP 401 (40103 ASN Block)
9. docs.apify.com/academy 200 28.9 ms 41,673 B 10,418 tok 2,398 B 600 tok 94.2% HTTP 401 (40103 ASN Block)
10. elevenlabs.io/docs/... 200 361.4 ms 303,582 B 75,882 tok 11,450 B 2,855 tok 96.2% HTTP 401 (40103 ASN Block)
TOTAL / AVERAGE 10/10 201.2 ms avg 1,614,278 B 400,740 tok 73,015 B 16,416 tok 95.5% Waste 10/10 Blocked without API Key

Two Critical Engineering Takeaways from Table A:

  1. 95.5% LLM Token Waste on Raw HTML: Passing raw HTML from those 10 pages into an LLM consumes 400,740 input tokens (exceeding standard context windows and costing ~$1.20 per run on frontier models), whereas stripping HTML boilerplate reduces the payload to 16,416 tokens (~$0.049).
  2. Jina Reader Requires an API Key Header on Cloud Datacenter IPs: Many tutorials claim you can call https://r.jina.ai/https://example.com without authentication. While that works from a residential home IP, our live test proves that cloud servers (AS54113) receive {"code":401,"status":40103,"message":"You have been blocked from performing anonymous queries due to bad network reputation (AS54113). Please authenticate."}. Always pass Authorization: Bearer jina_YOUR_KEY when calling Jina from n8n Cloud or a VPS.

1.2. Live Test 2: What Happens When You Fetch YouTube Transcripts Directly from a Cloud IP?

We also tested fetching public YouTube transcripts directly from our Linux server on 3 popular videos without a residential proxy:

YouTube Video ID & Title Watch Page HTTP Status Watch Page Latency & HTML Size captionTracks URL Found in HTML? Direct /api/timedtext HTTP Status & Latency /api/timedtext Response Bytes Transcript Extracted?
dQw4w9WgXcQ (Rick Astley) 200 225.3 ms (1,448,701 B) True 200 (76.5 ms) 0 Bytes ❌ Failed (0-Byte Block)
aircAruvnKk (3Blue1Brown Neural Nets) 200 876.4 ms (1,681,769 B) True 200 (39.0 ms) 0 Bytes ❌ Failed (0-Byte Block)
rfscVS0vtbw (freeCodeCamp Python) 200 998.1 ms (1,910,028 B) True 200 (38.9 ms) 0 Bytes ❌ Failed (0-Byte Block)

πŸ” Why Direct /api/timedtext Returns 0 Bytes on Cloud Servers: Even when YouTube serves the watch page HTML (1.4 MB–1.9 MB) and exposes the "captionTracks" JSON array, calling the https://www.youtube.com/api/timedtext?... URL from a datacenter IP without a browser-generated poToken (Proof of Origin Token) and residential proxy results in an empty 0-byte response body (HTTP 200, content-length: 0). This is why custom Python scripts (youtube-transcript-api) fail in production on n8n Cloud, AWS, and Railway unless routed through Apify's Residential Proxy Transcript Actors.


2. Table B β€” Official Vendor Published Pricing & Credit Specs (Verified Oct 2026)

All pricing figures below are taken directly from each vendor's official pricing documentation as of October 2026:

Vendor Free Tier Allowance Entry Paid Tier Mid / Standard Tier Billing Unit & Official Rate Official Pricing Source
Apify $5.00/mo recurring usage credit ($0/mo plan) Starter: $39/mo (or $19/mo basic usage tier; ~$0.20–$0.30/Compute Unit) Scale: $199/mo Pay-per-usage (Compute Units + Proxy + Store Actor fee; ~$2.50–$5.00 per 1,000 YouTube transcripts) apify.com/pricing
Firecrawl 1,000 Credits/mo ($0, 2 concurrent requests) Hobby: $19/mo ($16/mo billed annually) for 5,000 credits/mo (5 concurrent) Standard: $99/mo ($83/mo billed annually) for 100,000 credits/mo (25 concurrent) 1 credit = 1 /scrape or /crawl page (+1 credit/PDF page; +4 credits/page for LLM JSON extraction) firecrawl.dev/pricing
Jina Reader Free API Key raises rate limit from 20 RPM to 500 RPM $0.050 per 1M output tokens (Prototype tier) $0.045 per 1M output tokens (Production tier; 5,000 RPM) Billed strictly on output response tokens (r.jina.ai) or min 10,000 tokens per search (s.jina.ai) jina.ai/api-dashboard/pricing
YouTube Data API v3 10,000 quota units/day Free quota (requires Google verification for extensions) N/A captions.list = 50 units; captions.download = 200 units (requires channel owner OAuth2) developers.google.com/youtube/v3

3. Copy-Paste n8n Node Configurations for Production Reliability

3.1. Apify Synchronous YouTube Transcript Node (Bypasses the 0-Byte TimedText Block)

Using Apify's $5/mo Free Credit, you can extract ~1,000 YouTube transcripts per month inside n8n with a single HTTP Request node calling Apify's synchronous dataset endpoint:

  • Method: POST
  • URL: https://api.apify.com/v2/acts/pintostudio~youtube-transcript-scraper/run-sync-get-dataset-items
  • Authentication: Header Auth (Authorization: Bearer YOUR_APIFY_API_TOKEN)
  • JSON Body:
{
  "videoUrl": "{{ $json.source_url }}",
  "language": "en"
}
Enter fullscreen mode Exit fullscreen mode

3.2. Firecrawl /v1/scrape Node (Eliminates 95.5% HTML Token Waste)

To turn any webpage into clean Markdown (1 credit/page) or structured JSON (5 credits/page) inside n8n using Firecrawl's 1,000 Free Monthly Credits:

  • Method: POST
  • URL: https://api.firecrawl.dev/v1/scrape
  • Authentication: Header Auth (Authorization: Bearer fc-YOUR_FIRECRAWL_KEY)
  • JSON Body:
{
  "url": "{{ $json.target_url }}",
  "formats": ["markdown"],
  "onlyMainContent": true
}
Enter fullscreen mode Exit fullscreen mode

4. Frequently Asked Questions (FAQ)

Why does fetching YouTube /api/timedtext from a cloud server return 0 bytes?

In our live October 28, 2026 server test, fetching the YouTube watch page from a cloud datacenter IP (AS54113) returned HTTP 200 with a "captionTracks" URL, but requesting that /api/timedtext URL returned a 0-byte empty body because YouTube enforces BotGuard / poToken verification on datacenter ASNs. Routing requests through Apify solves this via managed residential proxies and browser sessions.

Why did r.jina.ai return HTTP 40103 AuthenticationRequiredError in the benchmark?

Jina Reader blocks anonymous (keyless) requests originating from cloud datacenter ASNs (AS54113) due to shared IP reputation. Passing a free Jina API key in the Authorization: Bearer header restores access and raises your rate limit from 20 RPM to 500 RPM (jina.ai/api-dashboard/pricing).

How does Firecrawl's credit pricing compare to Jina Reader's token pricing?

Firecrawl charges a flat 1 credit per scraped page (with 1,000 free credits/month and 5,000 credits for $16/mo annual on Hobby), making cost per page 100% predictable (firecrawl.dev/pricing). Jina Reader charges $0.045–$0.050 per 1 million output tokens, which is very cheap for short pages but varies with document length.


5. Embedded JSON-LD Structured Data (For AI Search & GEO Indexing)

{
"@context": "https://schema.org",
"@graph": [
{
"@type": "TechArticle",
"headline": "5 Best YouTube Transcript & Web Scraping APIs for n8n and LangChain AI Agents (2026 Live Server Benchmark & Official Pricing)",
"datePublished": "2026-10-28",
"dateModified": "2026-10-28",
"author": {
"@type": "Organization",
"name": "AI Workflow Architecture Lab"
},
"description": "Empirical benchmark measured from a Linux cloud server on October 28, 2026 across 10 production URLs and 3 YouTube videos, combined with verified vendor pricing for Apify, Firecrawl, and Jina Reader."
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Why does fetching YouTube /api/timedtext from a cloud server return 0 bytes?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Fetching the YouTube watch page from a cloud datacenter IP returns HTTP 200 with a captionTracks URL, but requesting that /api/timedtext URL directly from a datacenter ASN returns a 0-byte empty body due to YouTube's PoToken and BotGuard enforcement. Using Apify routes requests through residential proxies to extract transcripts reliably."
}
},
{
"@type": "Question",
"name": "How much HTML token waste is removed by converting web pages to Markdown before calling an LLM?",
"acceptedAnswer": {
"@type": "Answer",
"text": "In our live benchmark across 10 production websites (including docs.n8n.io, GitHub, Wikipedia, and Hacker News), raw HTML totaled 1,614,278 bytes (~400,740 tokens) while extracted readable text totaled 73,015 bytes (~16,416 tokens)β€”an average boilerplate reduction of 95.5%."
}
},
{
"@type": "Question",
"name": "How does Firecrawl pricing compare to Apify and Jina Reader in October 2026?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Firecrawl includes 1,000 free credits/month and charges 1 credit per standard page scrape (+4 credits for LLM JSON extraction), with the Hobby plan at $19/mo monthly ($16/mo annual) for 5,000 credits. Apify includes $5.00/month in free recurring usage credits. Jina Reader bills by output tokens at $0.045 to $0.050 per 1 million tokens."
}
}
]
}
]
}

Top comments (2)

Collapse
 
alexshev profile image
Alex Shev •

For agent workflows, accuracy alone is not enough. The benchmark becomes much more actionable when it includes provenance, retry semantics, rate-limit behavior, latency distribution, and what happens when a video is unavailable or changes mid-run. Those are the properties that determine whether a pipeline can make a safe decision without silently inventing a transcript.

Collapse
 
vietautomation profile image
Viet Automation •

Great point, thanks! You're right β€” accuracy alone doesn't tell you if an agent can act safely. In my n8n setups I handle this by: (1) storing the source URL + fetch timestamp with every transcript, (2) retrying with backoff only on 429/5xx, never on "video unavailable", and (3) failing closed β€” if no transcript comes back, the workflow stops instead of letting the LLM guess. I'll add latency and failure-mode columns in the next benchmark update.