---
title: "Top 10 countdown videos made and uploaded to YouTube daily"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/07976d59-8bc4-45e9-9920-d950ec242610"
updated: "2026-11-09"
---

# Top 10 countdown videos made and uploaded to YouTube daily

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

An n8n workflow that makes one top ten countdown video a day from a queue in Google Sheets. Models on OpenRouter write the subjects and the script, JSON2Video renders the video, and YouTube gets it as an unlisted upload.

Top 10 countdown videos made and uploaded to YouTube daily 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 one top ten countdown video a day and uploads it to YouTube. A Google Sheet holds the queue. Each morning one branch asks a model on OpenRouter for ten new subjects and adds them as rows, while a second branch takes the first subject still marked To Do. GPT-4o writes a spoken intro, an outro and ten ranked entries for it, each with an image prompt. JSON2Video renders the video from a ready template, with an AI voice and a picture for every scene, and YouTube gets it as an unlisted upload. The sheet records each step. It has 31 nodes, six of them notes that name the stages.

Two schedules fire every morning → OpenRouter adds ten subjects to the sheet → The next To Do subject gets an intro, outro and ten entries → JSON2Video renders the countdown from a template → YouTube takes it as an unlisted upload

### Who it suits

Faceless channels and small media teams that want a steady run of list videos without writing or editing them. The subjects are evergreen by design, so foods, places and brands suit it. Skip it for news or for anything whose facts must be checked, because the model ranks from what it already knows and cites nothing. Nothing goes public by itself.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Faceless YouTube | Solo creators | Keep a channel fed with one countdown a day while they work on longer videos | A creator watches the week’s unlisted uploads on Sunday and makes the best three public. |
| Food and travel media | Small editorial teams | Fill the sheet with their own subjects, such as regional dishes | A travel site queues Beaches in Portugal and embeds the finished video in a post. |
| Marketing agencies | Content producers | Run a test channel to learn which list topics hold viewers | An agency compares watch time across a month of subjects. |
| Social media | Short-form editors | Cut each countdown into clips for other networks | An editor trims the last three entries into a teaser for Instagram. |

You need some n8n and four accounts, for OpenRouter, JSON2Video, YouTube and Google, and its author puts setup at about 18 minutes once they are ready.

### Where to use it

Any n8n that can reach OpenRouter, JSON2Video, Google and YouTube runs it on its two schedules, and one sheet keeps the whole queue.

- n8n Cloud: import the file, add four credentials, then publish
- Your own n8n server: the same file and steps, with the hour in your server’s time zone
- Google Sheets: one row for each subject, with its two statuses and the video’s address
- YouTube: one unlisted upload a day, titled \`Top Ten:\` and the subject

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Make the sheet first.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| OpenRouter | An API key with credit, for both chat models |
| JSON2Video | An account and its API key. Renders on the free plan carry a watermark |
| YouTube | A channel, for a YouTube OAuth2 credential |
| Google | An account for a Google Sheets OAuth2 credential |
| ElevenLabs | A key saved in JSON2Video’s Connections, or JSON2Video’s own voice key instead |
| A sheet | A first tab named \`Sheet1\` with four headers in row 1 |

The sheet’s headers

| Column | What goes in it |
| --- | --- |
| \`Subject\` | A topic of four words or fewer |
| \`Creation Status\` | \`To Do\` until the video renders, then \`Created\` |
| \`Posting Status\` | \`To Do\` until the upload, then \`Unlisted\` |
| \`Video URL\` | The rendered file’s address, or \`Error\` |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Make the sheet and copy its ID: the long part of its address between `/d/` and `/edit`.
3. Add a Google Sheets OAuth2 credential, select it in the five sheet nodes and replace `YOUR_SHEET_ID` in each with the ID.
4. Add an OpenRouter credential and select it in `4o-mini` and `4o`.
5. Add an HTTP Header Auth credential with the header name `x-api-key` and your JSON2Video key as the value. Select it in `Generate Video` and `Get Video`.
6. In JSON2Video’s Connections, save your ElevenLabs key under the ID `my-elevenlabs-connection`. Or set `voice.ConnectionID` in `Generate Video` to `none` to use JSON2Video’s own key.
7. Add a YouTube OAuth2 credential for your channel and select it in `YouTube`.
8. Save, type one subject into the sheet with both statuses at `To Do`, and run the workflow from its manual trigger. Press Publish once the row reads `Created` and `Unlisted`.

JSON2Video reads its key from a header named `x-api-key`. A connection ID it does not know fails the render, so step 6 matters even if you never use ElevenLabs yourself.

### How to use it

Once published, both schedules run every morning. You can also type subjects in. Each day the first `To Do` subject becomes a video, and because a render takes a few minutes, the run keeps asking JSON2Video until the file is ready. Watch the unlisted upload in YouTube Studio and make it public yourself, and to skip a subject, change its `Creation Status` before the morning run.

What to change for a different result

| To change | Where |
| --- | --- |
| The subjects | The system message in \`AI Agent\`, and the sample list in \`Structured Output Parser\` |
| The script’s tone and length | The system messages in \`Intro \& Outro\` and \`Ranker\` |
| The models | \`4o\` for the scripts, \`4o-mini\` for the ideas |
| The voice and the pictures | \`voiceID\`, \`voiceModel\` and \`imageModel\` in the body of \`Generate Video\` |
| The upload | Title, description, category and privacy in \`YouTube\` |
| The hour | Each schedule trigger, ten in the morning in the file |

### Example

The idea branch has written a subject into the sheet.

The row before the run

| Column | Value |
| --- | --- |
| Subject | Board games |
| Creation Status | To Do |
| Posting Status | To Do |

`Ranker` returns ten entries in this shape, and one of them reads:

```json
{
  "voiceoverText": "At number six, it’s Ticket to Ride. Routes, trains and a race for the longest line make it easy to teach.",
  "imagePrompt": "Colored train cars spread across a map of North America on a wooden table.",
  "lowerThirdText": "Ticket to Ride"
}
```

Once the render is done, YouTube has an unlisted video titled Top Ten: Board games, and the row reads like this:

The row after the run

| Column | Value |
| --- | --- |
| Subject | Board games |
| Creation Status | Created |
| Posting Status | Unlisted |
| Video URL | The JSON2Video address of the file, good for seven days |

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. This one has two branches that never meet. One fills the sheet with ideas. The other turns one idea into a video. A credential is a key n8n keeps for you and hands to the node you pick it in. Type one subject by hand and run the manual trigger first. Each node then shows what it received and what it sent, which is where a refused key or a missing template turns up.

**For experts.** Three model calls write the script. JSON2Video does all the editing inside its template.

The model behind each step

| Step | Model or call | What to know |
| --- | --- | --- |
| \`AI Agent\` | \`4o-mini\`, which sets no model, so n8n’s default \`openai/gpt-4.1-mini\` | Its parser wants \`topTenSubjects\`, an array of ten strings |
| \`Intro \& Outro\` | \`openai/gpt-4o\` on OpenRouter | Returns two voice lines and two image prompts |
| \`Ranker\` | \`openai/gpt-4o\` on OpenRouter | Its parser wants an array of ten objects, read as \`output\[0\]\` to \`output\[9\]\` |
| \`Generate Video\` | JSON2Video’s \`v2/movies\`, with the template named in its body | Sends an \`elevenlabs\` voice, picked by its ElevenLabs ID, and \`flux-pro\` images as template variables |
| \`Switch\` | Four rules on \`movie.status\` | Has no rule for \`pending\`, so a queued render ends the run |

Nothing in the scripts is escaped.

### Good to know

Check two things first. The polling rule misses one of JSON2Video’s states, and both chat models have a shutdown date that falls within a few months.

- Retired models: OpenAI shuts down GPT-4o and GPT-4.1 mini on 14 January 2027 and names \`gpt-6-luna\` as the replacement, \`openai/gpt-6-luna\` on OpenRouter. OpenRouter still lists both older models today. Change \`4o\`, and set a model in \`4o-mini\`, before then
- A queued render: \`Switch\` tests \`preparing\`, a state JSON2Video does not list, and has no rule for \`pending\`. Change that value to \`pending\`, or a render still queued after two and a half minutes ends the run without an error
- Quotes: a script line with a double quote in it breaks the body of \`Generate Video\`. Wrapping each value in \`JSON.stringify()\` fixes it
- Repeats: \`Error\` leaves the subject at \`To Do\`, so it comes first again the next day
- A growing queue: the idea branch adds ten subjects a day and the video branch uses one
- No cap: a render stuck at \`running\` is polled forever. JSON2Video says to treat one still running after a quarter of an hour as failed
- A short-lived file: JSON2Video deletes a render after seven days, and the sheet never gets the YouTube link
- The template and the voice key: both live in JSON2Video. A template it cannot find, or a connection ID you never saved, fails the render
- Costs: OpenRouter bills each model call and JSON2Video bills a credit per second of video. The original setup note priced a \`flux-pro\` image at extra credits, and a video asks for twelve images
- Your data: the subjects and the scripts go to OpenRouter and JSON2Video, and the video goes to YouTube
- Credentials: the JSON holds none, and nothing from its author’s sheet

## README

```markdown
# Top 10 countdown videos made and uploaded to YouTube daily

An n8n workflow that turns a queue of subjects in Google Sheets into one top ten countdown video a day. Models on
OpenRouter fill the queue with ideas, then write an intro, an outro and ten ranked entries for the next subject.
JSON2Video renders the video from a template, with an AI voice and a picture for every scene, and YouTube gets it as an
unlisted upload. Nothing goes public by itself.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 31 nodes. Six are sticky notes that only name the stages. It holds no
  credential.
- `README.md`: these notes.

## What we changed from the original copy

- The author's sheet and its tab id are gone. `Google Sheets`, `Add to Sheet`, `Created Video`, `Error` and
  `Update Sheet` ask for `YOUR_SHEET_ID` and find the tab by the name `Sheet1`.
- A setup note with the author's name, his channel, a link to his copy of the sheet and a referral link is gone. Its
  steps are below.
- The OpenRouter, JSON2Video, Google Sheets and YouTube credentials are gone, along with the author's account names on
  them.
- Nothing else changed. The JSON2Video template ID, the voice and the image model are as the author left them.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- An OpenRouter API key with credit.
- A JSON2Video account and its API key. Renders on the free plan carry a watermark.
- A YouTube channel, and a Google account for the YouTube and Google Sheets credentials.
- An ElevenLabs API key saved in JSON2Video, or the switch in step 6 to JSON2Video's own key.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Make a Google Sheet whose first tab is named `Sheet1`, with the four headers below in row 1. Copy its ID: the long
   part of its address between `/d/` and `/edit`.
3. Add a Google Sheets OAuth2 credential. Select it in the five sheet nodes and replace `YOUR_SHEET_ID` in each with the
   ID.
4. Add an OpenRouter credential with your key and select it in `4o-mini` and `4o`.
5. Add an HTTP Header Auth credential with the header name `x-api-key` and your JSON2Video key as the value. Select it
   in `Generate Video` and `Get Video`.
6. Choose the key behind the voice. `Generate Video` sends `voice.ConnectionID` as `my-elevenlabs-connection`. In
   JSON2Video, open Dashboard, then Connections, and save your ElevenLabs key under exactly that ID. Or change the value
   to `none`, and JSON2Video voices it with its own key.
7. Add a YouTube OAuth2 credential for your channel and select it in `YouTube`.
8. Save. Type one subject into the sheet with both statuses at `To Do`, then run the workflow from
   `When clicking ‘Test workflow’`. Press Publish once the row reads `Created` and `Unlisted`.

## The sheet

Row 1 of `Sheet1` holds these four headers, spelled as here:

| Column | What goes in it |
|---|---|
| `Subject` | A topic of four words or fewer, such as `Board games` |
| `Creation Status` | `To Do` until the video renders, then `Created` |
| `Posting Status` | `To Do` until the upload, then `Unlisted` |
| `Video URL` | The rendered file's JSON2Video address, or `Error` |

## How a run goes

Both schedules fire every day at 10:00.

1. `Schedule Trigger1` starts the idea branch. `AI Agent` asks `4o-mini` for ten subjects that do not depend on the
   news. `Split Out` and `Loop Over Items` append each one as a row, with both statuses at `To Do`.
2. `Schedule Trigger`, or the manual trigger, starts the video branch. `Google Sheets` reads the first row whose
   `Creation Status` is `To Do`. With no such row, the run ends there.
3. `Intro & Outro` asks `4o`, which runs `openai/gpt-4o`, for a spoken intro and outro and an image prompt for each.
4. `Ranker` asks the same model for ten entries, from number 10 down to number 1. Each has a voice line of two or three
   sentences, an image prompt and a short label for the screen.
5. `Generate Video` posts all of it to JSON2Video's `v2/movies` as variables of the template named in its body,
   with an ElevenLabs voice and `flux-pro` images.
6. `150 Secs` waits two and a half minutes. `Get Video` asks for the project's status and `Switch` routes it. On
   `running` or `preparing`, `10 Secs` waits and the status is asked again.
7. On `done`, `Created Video` marks the row `Created` and writes the file's address. `Download Video` fetches the file,
   and `YouTube` uploads it as unlisted, titled `Top Ten:` and the subject. `Update Sheet` sets `Posting Status` to
   `Unlisted`.
8. On `error`, `Error` writes `Error` into `Video URL` and the run stops.

## Change the style

- The subjects: the system message in `AI Agent` and the sample list in `Structured Output Parser`.
- The script's tone and length: the system messages in `Intro & Outro` and `Ranker`.
- The models: `4o` sets `openai/gpt-4o`. `4o-mini` sets none, see Good to know.
- The voice and the pictures: `voiceID`, `voiceModel` and `imageModel` in the body of `Generate Video`.
- The upload: title, description, category, region and privacy in `YouTube`. Category `1` is Film & Animation.
- The hour: each schedule trigger, in the time zone your n8n uses.

## Good to know

- Retired models: OpenAI shuts down GPT-4o and GPT-4.1 mini on 14 January 2027, and names `gpt-6-luna` as the
  replacement. OpenRouter lists it as `openai/gpt-6-luna`, and still lists both older models today. Change the model in
  `4o`, and set one in `4o-mini`, before that date.
- The idea model: `4o-mini` names no model, so n8n uses the node's default. In current n8n that is
  `openai/gpt-4.1-mini`, whatever the node's name says.
- A queued render ends the run: JSON2Video reports `pending` while a render waits for a worker, and `Switch` has no
  rule for it. Its fourth rule tests `preparing`, a value missing from JSON2Video's list of states. Change that value to
  `pending` and a queued render is polled like a running one. As shipped, the run stops without an error and the
  subject comes up again the next day.
- Quotes break the body: the scripts go into the JSON of `Generate Video` between double quotes, with nothing escaped.
  A line the model writes with a double quote in it makes the body invalid, and the call fails. Wrapping each value in
  `JSON.stringify()` and dropping its outer quotes avoids that.
- Failed renders repeat: `Error` leaves `Creation Status` at `To Do`, so the same subject is first in line again the
  next day. Change its status by hand to skip it.
- The queue grows: the idea branch adds ten subjects a day and the video branch uses one. Set `Schedule Trigger1` to
  weekly, or turn it off once the sheet holds enough.
- No polling cap: a render that stays at `running` is asked about every ten seconds until it changes. JSON2Video says
  to treat a render still running after 15 minutes as failed.
- A short-lived file: JSON2Video deletes a rendered video after 7 days, so the address in `Video URL` stops working
  then. The YouTube link is never written to the sheet.
- The template lives in JSON2Video, not in the file. If JSON2Video answers that it cannot find it, copy a template that
  reads the same variables into your account and put its ID in `template`.
- The voice key: a connection ID JSON2Video does not know fails the render. Save the key under
  `my-elevenlabs-connection` or send `none`.
- Costs: OpenRouter bills three model calls for each video and one for each batch of ideas. JSON2Video bills one credit
  for each second of video. The original copy's setup note put a `flux-pro` image at 20 credits, against none for
  `flux-schnell`, and a video asks for twelve images. Check the current price in your JSON2Video dashboard before the
  schedule runs daily.
- Your data: the subjects and the scripts go to OpenRouter and JSON2Video, and the video goes to YouTube. The sheet
  stays in your Google account.
- Credentials: the JSON holds none, and nothing from its author's sheet.
```

## What is in it

2 files, 45 KB, downloaded as a zip.

```text
README.md  8 KB
workflow.json  38 KB
```

## Workflow check

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

- Steps: 20 steps, starting by hand or on a schedule
- AI: 3 steps call an AI model: Intro & Outro, Ranker and AI Agent
- Sign-ins: Signs in to: Google Sheets, JSON2Video, YouTube and OpenRouter
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 10 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/07976d59-8bc4-45e9-9920-d950ec242610)
- [Its page on Mindket](https://mindket.com/p/07976d59-8bc4-45e9-9920-d950ec242610)
