Blog / Tutorials / Zapier, Make, and Pipedream: Connecting YouTube Transcripts Without a Native App
Tutorials 9 min read â€ĸ November 13, 2026

Zapier, Make, and Pipedream: Connecting YouTube Transcripts Without a Native App

Founder

Scriptube does not have a native Zapier app, Make.com app, or Pipedream integration — say that plainly, because searching for "Scriptube Zapier integration" will otherwise waste your time looking for a tile that doesn't exist. What you do have is a documented webhook API and an HTTP API, and every one of these platforms has a generic way to consume both. This guide is the honest, manual version of what a native app would do for you.

If you're on n8n, skip this: there's an official node and you don't need any of the steps below — see n8n-youtube-transcript-automation.

The two integration points

Everything here uses one of two Scriptube mechanisms:

  • Registered webhooks — subscribe once to events (batch.completed, transcript.ready, credits.low, etc.) and every matching event across your account gets POSTed to one URL, with retries and a delivery log. Requires Pro or higher.
  • callback_url — attach a URL directly to one batch at submit time; it receives just that batch's batch.completed and transcript.ready events, no registration needed, available on any plan that can call the API.

Use a registered webhook if you want one Zap/scenario to react to everything your account does. Use callback_url if you're submitting the batch from the same automation and only care about that one batch's result — it's simpler and needs no separate setup step.

Step 1: Create the catch-hook on your platform

Each platform has a built-in app for this (exact menu names shift over time — these are current as of this writing):

  • Zapier: "Webhooks by Zapier" → trigger "Catch Hook". Copy the custom webhook URL it generates.
  • Make: add a "Webhooks" module → "Custom webhook" → create a new webhook, copy its URL.
  • Pipedream: create a new workflow with an "HTTP / Webhook" trigger, copy its endpoint URL.

You now have a URL that can receive a POST. Nothing reaches it yet — Scriptube doesn't know it exists.

Step 2: Register it with Scriptube

curl -X POST https://scriptube.me/api/webhooks/register \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://hooks.zapier.com/hooks/catch/XXXXX/YYYYY/",
    "events": ["batch.completed", "transcript.ready"],
    "secret": "a-dedicated-random-string-16-to-256-chars"
  }'

The secret must be at least 16 characters, and it should be a value you generated just for this — never your API key. Scriptube uses it to sign every delivery. The response is {"status": "active", "webhook_id": "...", "message": "..."}. Webhook limits are per plan: Pro gets 5, Business 10, Unlimited 25; Free and Starter can't register webhooks at all (use callback_url instead on those plans).

To unregister later: DELETE /api/webhooks/{webhook_id} with the same X-API-Key header.

Step 3: Verify the signature before you trust the payload

Every delivery carries two headers:

HeaderValue
X-Scriptube-TimestampUnix seconds when the payload was signed
X-Scriptube-Signaturesha256=<hex HMAC-SHA256(secret, "{timestamp}.{raw body}")>

Reject anything older than 5 minutes (replay protection) and anything whose signature doesn't match. Zapier and Make both let you drop into a short code step for this — here's the logic in JavaScript, usable in Zapier's "Code by Zapier" step or Make's custom function tooling:

const crypto = require('crypto');

const timestamp = inputData.headers['x-scriptube-timestamp'];
const signature = inputData.headers['x-scriptube-signature'];
const rawBody = inputData.rawBody; // must be the exact bytes received, not re-stringified JSON
const secret = 'a-dedicated-random-string-16-to-256-chars';

const tooOld = Math.abs(Date.now() / 1000 - Number(timestamp)) > 300;
const expected = 'sha256=' + crypto
  .createHmac('sha256', secret)
  .update(`${timestamp}.${rawBody}`)
  .digest('hex');

const valid = !tooOld && signature === expected;
output = { valid };

The part people get wrong: signing works on the raw request body as received, not a value you've already parsed and re-serialized back to JSON. Re-serializing can reorder keys or change whitespace, which produces a different byte string and a signature mismatch that has nothing to do with a forged request. If your platform's webhook step only exposes parsed JSON, look for a "raw body" or "raw payload" option — n8n's trigger node, for comparison, explicitly requests the raw bytes for exactly this reason.

Gate the rest of your Zap or scenario on valid === true with a Filter (Zapier) or Router (Make) step immediately after the code step, so an unsigned or forged POST never reaches your downstream actions.

Step 4: Route by event type

One registered webhook receives every event you subscribed to at one URL. Add a Filter/Router step reading the payload's event field (batch.completed, transcript.ready, credits.low, and so on) and branch from there — a Slack alert for credits.low, a spreadsheet row for batch.completed, for example. See slack-alert-transcript-batch-finished and youtube-transcripts-to-google-sheets-automatically for the downstream half of each of those.

Calling Scriptube's API from these platforms

Submitting a batch or pulling an export is a plain HTTP call, no native app required — Zapier's "Webhooks by Zapier > POST/GET", Make's generic "HTTP" module, and Pipedream's built-in axios or fetch all work the same way:

POST https://scriptube.me/api/v1/transcripts
Headers: X-API-Key: YOUR_API_KEY, Content-Type: application/json
Body: {"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "callback_url": "https://hooks.zapier.com/hooks/catch/XXXXX/YYYYY/"}

Using callback_url here instead of a registered webhook means you don't need Step 2 at all for this one Zap — Scriptube signs callback deliveries the same way, except with a per-batch secret returned once as callback_secret in the create response when your account has no registered webhook secret to fall back on.

Why not wait for a native app

A native Zapier or Make app buys you a polished trigger/action picker and listing in their app directory — it doesn't give you any capability the webhook API doesn't already expose. If you need this today, the setup above is the complete integration, not a stopgap.

For the underlying contract this all rests on — endpoints, retries, error codes — see youtube-transcript-api-complete-guide, and for the push-vs-poll decision generally, webhooks-vs-polling-youtube-transcripts.

Get an API key to start: /ui/signup.

Try Scriptube Free

Extract YouTube transcripts instantly. No credit card required.

Get Started

Related Articles

Tutorials

Your YouTube Transcript Library: Find Everything You've Already Processed

Every video you've ever submitted to Scriptube stays in your library — browsable by channel and playlist, searchable when you need to find something you...

Tutorials

How to Retry Failed YouTube Transcripts Without Resubmitting the Batch

A batch of 50 videos rarely comes back 50 for 50 — a couple of videos might have no captions, one might hit a rate limit, another might just need a second...

Tutorials

YouTube Transcript API: The Complete Guide

The Scriptube API lets you submit YouTube video, playlist, or channel URLs and get back transcripts and metadata as JSON, CSV, or JSONL, plus timed segments...