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 Make | the ready-made Make blueprint — or build the three modules above by hand |
| On n8n | the ready-made n8n template |
| Comfortable in code | Python or Node.js with the SDK |