Guides · YouTube Transcript Scraper · Published July 15, 2026

Get YouTube transcripts in Make: one HTTP module, with error filtering

Build a Make (ex-Integromat) scenario that turns YouTube video IDs into transcript JSON: one HTTP module calling Apify's run-sync endpoint, an Iterator to fan out per-video items, and a filter on success so captionless videos never break the scenario.

By slvDev · Updated and technically verified July 20, 2026


The short answer: in Make, one HTTP "Make a request" module calling the YouTube Transcript Scraper through Apify's run-sync-get-dataset-items endpoint returns one JSON record per video in a single step. Add an Iterator to fan the array out into bundles and a filter on success so a captionless video flows past your destination instead of erroring the scenario. You need an Apify account (free tier works) and its API token — no YouTube Data API key.

The scenario: three modules

  • HTTP → Make a request — runs the actor and returns all rows at once.
  • Flow control → Iterator — one bundle per video row.
  • Your destination (Sheets, Notion, Slack, another webhook) — behind a filter on success = true.

Step 1: the HTTP module

Configure Make a request:

  • URL:
https://api.apify.com/v2/acts/apihq~youtube-transcript-scraper/run-sync-get-dataset-items
  • Method: POST
  • Headers: Authorization: Bearer YOUR_APIFY_TOKEN
  • Body type: Raw · Content type: JSON (application/json)
  • Request content:
{
  "videoIds": ["jNQXAC9IVRw", "dQw4w9WgXcQ", "00000000000"],
  "language": "en",
  "metadata": true
}
  • Parse response: Yes — this is what turns the JSON array into mappable Make data.

The endpoint starts the actor, waits for it to finish, and answers with the dataset items. Its wait limit is about five minutes; batches of up to 50 IDs normally finish well inside it (each video has its own 30-second deadline). For bigger jobs, run the async pair instead — POST /runs, then GET the dataset — the same trade-off as in the n8n guide.

Step 2: fan out with an Iterator

The HTTP module outputs one big array. Add Flow control → Iteratorand point its Array field at the HTTP module's Data. From here on, every bundle is one video: transcript rows and failure rows, side by side.

Step 3: filter on success

On the route to your destination, set a filter: success · equal to · true. Rows that pass carry the transcript segments and metadata.title; rows that don't carry a stable code instead — NO_CAPTIONS for videos without captions, PLAYABILITY for private or deleted ones (full registry). Those rows were not billed, and because they're filtered rather than thrown, the scenario run stays green. If you want a log of misses, add a second route with the inverted filter into a Sheets append.

What it costs

$3.00 per 1,000 delivered transcripts, billed on your Apify account, compute included. The three-ID example above costs at most $0.009 — and exactly $0.006 as written, because the third ID is an intentionally dead one that comes back as a free failure row. A batch of only dead IDs costs $0.00. Make's own operations count stays low too: one HTTP call per batch, not per video.

Make, n8n, or code?

You are…Use
Already living in Makethe ready-made Make blueprint — or build the three modules above by hand
On n8nthe ready-made n8n template
Comfortable in codePython or Node.js with the SDK

Deploying this?

Run one input on the YouTube Transcript Scraper. It comes back as either a billed transcript row or an unbilled, typed failure row — the contract this guide builds on.

A one-item first run costs under a cent, on your existing Apify account.