---
title: "News recap video with a HeyGen avatar"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/d8403dba-e362-40c9-93f8-d2aaef1b6fd4"
updated: "2026-11-09"
---

# News recap video with a HeyGen avatar

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow that reads the latest Morning Brew issue through Apify, has an agent write a 40 to 60 word spoken recap. HeyGen renders it as an avatar video, checked until it is ready. One edit is needed for the avatar to speak the recap.

News recap video with a HeyGen avatar is an n8n workflow in the Marketing \& SEO category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-09. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow makes a short news recap video with an AI avatar. Press Test workflow and Apify reads the latest issue of the Morning Brew newsletter. An agent named Script Writer, running GPT 4.1 Mini on OpenRouter, boils it down to a spoken script of 40 to 60 words on the top two to four stories. HeyGen then renders an avatar video, and the workflow asks for the video’s status, waits a little and asks again, until the status reads completed and the file is ready to download. One thing to know before you run it: the node that sends the request to HeyGen carries a fixed placeholder line, and the script is not wired in. The setup steps show the one edit that fixes that. Four more nodes sit apart, for picking an avatar and a voice. The file has 13 working nodes and five sticky notes.

### Who it suits

Newsletter editors, social media teams and small publishers who want a regular news clip without filming one, since the avatar reads the script and nobody has to be on camera.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Media and publishing | Newsletter editors | Turn each issue into a short clip for social media | A newsletter team posts a recap clip on the morning an issue goes out. |
| Social media | Social managers | Fill a Shorts or Reels slot with a news clip each weekday | A team publishes a clip under twenty seconds every day and never books a presenter. |
| Marketing agencies | Content producers | Point it at a client’s newsletter instead of Morning Brew | An agency swaps the address in News for the client’s page and gets a draft recap to review. |
| Education and training | Course teams | Recap a weekly digest for learners, always with the same presenter | A course team turns its Friday digest into a clip for the learners’ page. |

You need a little n8n: importing a file, adding credentials and editing one JSON body. Its author puts setup at about 11 minutes, which assumes the three accounts already exist.

### Where to use it

Any n8n that can reach Apify, OpenRouter and HeyGen will do. It starts by hand. A Schedule Trigger in front of `News` is what makes it daily.

- n8n Cloud: import the file into a new workflow there
- Your own n8n server: the same file, the same steps
- Another newsletter or page: change the address in the body of \`News\`
- Social channels: the video stays in HeyGen, so add a node that downloads it and posts it

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Have these ready before you import it.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| HeyGen | An account with API access, its API key, and an avatar and a voice you can use |
| Apify | An account and an API token, for the website-content-crawler actor |
| OpenRouter | An API key for the chat model that writes the script |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an HTTP Header Auth credential for HeyGen, with the header name `X-Api-Key` and your key as the value, and select it in the six HeyGen nodes.
3. Add an OpenRouter credential and select it in `GPT 4.1 Mini`.
4. Open `News`, set Authentication to Generic Credential Type and add an HTTP Header Auth credential with the header `Authorization` and the value `Bearer ` followed by your Apify token.
5. Run `Get Avatars` and `Get Voices` once each with Execute step, and copy an avatar’s id and a voice’s id from what they return.
6. In `Generate Video1`, put those ids where the body holds `avatar_id` and `voice_id`.
7. In the same node, replace `"YOUR_SCRIPT_TEXT"`, quotation marks included, with the expression below, so the avatar speaks the recap.
8. If you want HeyGen asked less often, open `Wait` and lengthen its pause, 5 seconds as exported.
9. Save, then press Test workflow.

```text
{{ JSON.stringify($('Script Writer').item.json.output) }}
```

Both Wait nodes lean on n8n’s defaults. `30 Seconds` stores an amount of 10 and no unit, and n8n’s default unit is seconds, so despite its name it waits 10 seconds. `Wait` stores nothing and pauses 5 seconds between status checks.

### How to use it

Press Test workflow. The run lasts as long as HeyGen takes to render. The loop asks for the video’s status, waits and asks again until it reads completed. The last reply from `Get Video1` is HeyGen’s status for the finished video, and it carries the link to the file. The four loose nodes at the top are separate and run only by hand. Two list your avatars and voices. The other two send one render request and ask for its status once.

### Example

Say an issue’s top stories are a rate cut, a merger ruling and a chipmaker’s earnings. Script Writer might return a paragraph like this one, meant to be said in under 20 seconds:

```text
Stocks rose after a rate cut, a court blocked a merger of two grocery chains, a chipmaker beat its earnings forecast and an airline announced new routes.
```

### For newcomers and experts

**If you are new.** n8n polls by looping. It asks HeyGen for the status, waits, and asks again. Run the workflow with the editor open and watch the loop, since each pass shows HeyGen’s reply, and do the two list nodes first, because they show your own avatar and voice ids.

**For experts.** Four stages carry the work. Each uses a different service.

What each stage uses

| Stage | Node | What it uses | What to know |
| --- | --- | --- | --- |
| Read the issue | News | Apify’s website-content-crawler through its run-sync endpoint, markdown output | The body sets no page or depth limit, so add maxCrawlPages with 1 to read only the issue |
| Write the script | Script Writer | An agent on openai/gpt-4.1-mini through OpenRouter | Its system message asks for one paragraph of 40 to 60 words, with no intro, outro or call to action |
| Render | Generate Video1 | HeyGen’s v2 video/generate at 1280 by 720, avatar style normal, speed 1.1 | Size, speed and style live in its JSON body |
| Wait for it | 30 Seconds, Get Video1, If, Wait | HeyGen’s v1 video\_status.get | Only completed ends the loop, and there is no branch for failed |

### Good to know

Each run spends HeyGen credits, Apify usage and a few OpenRouter tokens.

- Billing: HeyGen charges for each rendered video, Apify for the crawl and OpenRouter for the script
- Placeholder line: as exported, HeyGen speaks a fixed line, not the recap, until you do step 7
- Polling: as exported, the loop asks HeyGen for the status every 5 seconds until the video is done
- Failed renders: a video HeyGen reports as failed is checked again and again, so watch the first runs
- The newsletter: its text belongs to its publisher, so check Morning Brew’s terms before you post a recap
- Credentials: the JSON holds none, and nothing from its author’s accounts

## README

````markdown
# News recap video with a HeyGen avatar

An n8n workflow. It reads the latest Morning Brew issue with Apify, has an agent write a short spoken recap, asks HeyGen
to render an avatar video and checks until the video is ready. The original's setup note names Nate Herk as its author.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 18 nodes: 13 that work and five sticky notes. It holds no credential.
  The line HeyGen speaks is the placeholder `YOUR_SCRIPT_TEXT`, and `avatar_id` and `voice_id` are placeholders as they
  were in the original.
- Two quotation marks inside the crawler's JSON body were not escaped, which made the body invalid JSON. They are
  escaped here and nothing else in it changed.
- `README.md`: these notes.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- A HeyGen account with API access, its API key, and an avatar and a voice you can use.
- An Apify account and its API token.
- An OpenRouter API key.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add an HTTP Header Auth credential for HeyGen, with the header name `X-Api-Key` and your key as the value. Select it in
   `Generate Video`, `Generate Video1`, `Get Video`, `Get Video1`, `Get Avatars` and `Get Voices`.
3. Add an OpenRouter credential and select it in `GPT 4.1 Mini`.
4. Open `News`. It has no authentication yet. Set Authentication to Generic Credential Type and add an HTTP Header Auth
   credential with the header `Authorization` and the value `Bearer ` followed by your Apify token.
5. Run `Get Avatars` and `Get Voices` once, each on its own with Execute step, and copy an avatar's id and a voice's id
   from what they return.
6. In `Generate Video1`, and in `Generate Video` if you want the one-off test, put those ids where the body holds
   `avatar_id` and `voice_id`.
7. In `Generate Video1`, replace `"YOUR_SCRIPT_TEXT"`, quotation marks included, with this expression, so that the recap
   is what the avatar says:

```text
{{ JSON.stringify($('Script Writer').item.json.output) }}
```

8. If you want HeyGen asked less often, open `Wait` and lengthen its pause (below).
9. Save, then press Test workflow.

## The Wait nodes

`30 Seconds` stores an amount of 10 and no unit. This Wait node's default unit is seconds, so it waits 10
seconds before the first status check. `Wait` stores nothing and takes the default amount too: 5 seconds between checks.
A render takes a while, so 30 seconds there sends HeyGen far fewer requests.

## The two paths in the file

- The loose nodes at the top, `Get Avatars`, `Get Voices` and `Generate Video` followed by `Get Video`, are not
  connected to the trigger. Run each by hand with Execute step. The first two list your avatars and voices, and the last
  pair sends one render request and asks for its status once.
- The main path starts at `When clicking ‘Test workflow’`, and goes through `News`, `Script Writer`, `Generate Video1`,
  `30 Seconds` and `Get Video1`. `If` then ends the run when the status reads `completed`. Otherwise `Wait` sends it back
  to `Get Video1` for another look.

## What it reads and sends

| Node | What it does |
|---|---|
| `News` | Posts to Apify's website-content-crawler, with `https://www.morningbrew.com/issues/latest` as its start address and markdown output |
| `Script Writer` | An agent on `openai/gpt-4.1-mini` through OpenRouter. It gets the page's text and answers with one spoken paragraph |
| `Generate Video1` | Posts to HeyGen's `v2/video/generate` with an avatar, a voice, a speed of 1.1 and a size of 1280 by 720 |
| `Get Video1` | Asks HeyGen's `v1/video_status.get` for the status of the video `Generate Video1` started |

## Change it

- Another source: the address in the body of `News`. The system message of `Script Writer` talks about Morning Brew
  issues, so edit it too.
- Length and tone: the system message of `Script Writer`. As exported it asks for one paragraph of 40 to 60 words
  covering the top two to four stories, with no intro, outro or call to action.
- Only the one page: add `"maxCrawlPages": 1` to the body of `News`. The body sets no page or depth limit, so the
  crawler's own defaults apply.
- The look: `avatar_id`, `avatar_style`, `voice_id`, `speed` and `dimension` in `Generate Video1`.
- A daily run: put a Schedule Trigger in front of `News`. Nothing schedules the workflow as exported.

## Good to know

- Each run spends HeyGen credits, Apify usage and a few OpenRouter tokens.
- As exported, `Generate Video1` sends a fixed line, not the recap. Step 7 above is what connects them.
- Only `completed` ends the loop. A render that HeyGen reports as failed is checked again and again, so watch the first
  runs, and add a branch for `failed` if you automate it.
- The issue's text belongs to its publisher. Check Morning Brew's terms before you post a recap.
- The finished video is a link in HeyGen's status reply. Add a node on the true branch of `If` to download it, save it or post it.
````

## What is in it

2 files, 19 KB, downloaded as a zip.

```text
README.md  5 KB
workflow.json  14 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 8 steps, starting by hand
- Not reached: 4 nodes no run reaches: Generate Video, Get Voices, Get Avatars and Get Video
- AI: 1 step calls an AI model: Script Writer
- Sign-ins: Signs in to: HeyGen and OpenRouter
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 5 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/d8403dba-e362-40c9-93f8-d2aaef1b6fd4)
- [Its page on Mindket](https://mindket.com/p/d8403dba-e362-40c9-93f8-d2aaef1b6fd4)
