# Get YouTube transcripts in n8n, Make and Zapier

> Call the CleanScript API from an HTTP step in n8n, Make or Zapier to get a YouTube, TikTok or Instagram transcript and check a creator for new posts.

Updated 2026-10-06. HTML: /blog/transcripts-in-automations-http

Any automation tool with an HTTP step can get a transcript. You don't need a plugin: one request, two or three mapped fields, and the rest of your workflow has clean text.

## The request

| Setting | Value |
|---|---|
| Method | `POST` |
| URL | `https://api.cleanscript.ai/v1/transcript` |
| Header | `Authorization` = `Bearer ` followed by your key |
| Body (JSON) | `{"url": "<the post link from your trigger>"}` |
| Timeout | 2 minutes or more |

Create the key on the [API keys page](/dashboard/api-keys) and store it as a credential, not in the step.

- **n8n:** HTTP Request node, Header Auth credential, Send Body as JSON. The timeout is under Options.
- **Make:** HTTP, Make a request, with Parse response on.
- **Zapier:** Webhooks by Zapier, Custom Request.

Short posts answer in seconds. A long video can take up to 2 minutes, which is why the timeout matters.

To test the request first:

```bash
curl https://api.cleanscript.ai/v1/transcript \
  -H "Authorization: Bearer $CLEANSCRIPT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://youtu.be/jwnez8HdN7E"}'
```

## Fields to map

| Field | What it is |
|---|---|
| `text` | The full transcript |
| `post.title` | The video title (YouTube only; TikTok and Instagram use `post.description`) |
| `post.author.name` | The channel or account |
| `post.url` | The link to the post |
| `sections[0].url` | A link to the first section |

Pass `text` to the next step: an AI step that summarises it, a row in a sheet, a page in your notes.

## Fields instead of the whole text

For just the parts you need, such as a summary or the brands mentioned, change the URL to `https://api.cleanscript.ai/v1/extract` and add a `preset`, a `prompt` or your own `schema` to the body:

```json
{ "url": "https://youtu.be/jwnez8HdN7E", "preset": "mentions" }
```

Map `data` for the values; `citations` has the quote behind each. See [extract fields from a video](/blog/json-schema-fields-from-video).

## Check a creator for new posts

`GET /v1/posts` lists a creator's recent posts, newest first. Run it on a schedule with `since` set to the date of your last run, and send each new post's `url` to the transcript step:

```bash
curl -G https://api.cleanscript.ai/v1/posts \
  -H "Authorization: Bearer $CLEANSCRIPT_API_KEY" \
  --data-urlencode "author=https://www.youtube.com/@Fireship" \
  -d since=2026-10-05
```

You get `{"author": …, "posts": […]}`, each post the same object as everywhere else. A listing costs 1 credit and works for YouTube channels and TikTok and Instagram profiles (on YouTube, videos only, not Shorts).

`since` is a date, so a post from the day of your last run comes back again. Keep the `id`s you've processed and skip them. See [Creator posts](/docs/posts).

## Safe to re-run

Automations retry. Two things keep that cheap:

- The same request again within 6 hours is free, and a failed request is never charged.
- An `Idempotency-Key` header with a value unique to the post, such as `transcript-` plus the post ID, makes a retry return the first result.

On `429` (too many requests) or `503` (try again), wait the seconds in the `Retry-After` header and retry. For the other errors, see [what to do when a request fails](/blog/youtube-transcripts-in-production).

## Watch your credits

Every response has an `X-Credits-Remaining` header. `GET /v1/account` returns your balance for free, which makes a good first step in a scheduled flow: stop early when it's low.
