In this tutorial you will make 50 vertical promo videos from a Google Sheet, using Claude Code and JSON2Video. Each row of the sheet is a product: a photo, a name, an old price, a new price and a discount. You describe the video once, Claude Code designs it, checks its own render, saves the design as a reusable template in your JSON2Video account and renders all 50 videos in parallel in the cloud. Next week, when the prices change, you update the sheet and run the same prompt again.
It is written for marketers, agencies, freelancers and shop owners who want many videos from data, not one video made by hand. You do not write code and you do not open a video editor.
Watch it first
Chapters
- 0:00 Intro
- 1:16 Setup
- 2:15 First video
- 4:26 Claude checks its own work
- 5:37 All 50 videos
- 7:39 What it cost
- 8:12 Sell it as a service
- 9:13 Remotion or JSON2Video?
- 9:40 Get the prompts
Prefer to read? Everything in the video is below, step by step, with the exact prompts. A full transcript is at the end.
What you need
- Claude Code, installed and signed in. It runs on your Claude plan.
- Node.js 20 or later, to install the JSON2Video command-line tool.
- A JSON2Video account and API key. A free account includes 600 credits and needs no credit card. Free renders carry a watermark and are limited to 60 seconds each, which is enough for this tutorial (a 10-second video costs 10 credits) but not for publishing.
- A Google Sheet with one row per product, shared as Anyone with the link · Viewer, whose photo column holds public direct links to image files. Make a copy of ours to start.
The steps
1 Install the CLI and connect it to Claude Code
You do this once. The JSON2Video command-line tool also contains an MCP server, which is how Claude Code gets its video tools. Run these three commands in an empty project folder, then start Claude Code in the same folder:
npm install -g @json2video/cli
json2video auth --api-key YOUR_API_KEY
json2video mcp install claude
claudemcp install claude adds the json2video server to the project's .mcp.json and installs a create-video skill in .claude/skills/. The skill works like a manual for Claude: how a video is structured, which elements exist, how to add music, voices and captions. That is why Claude gets good results without you explaining the format. Once Claude Code is open, type /mcp:
Watch out for
- Keep your API key private. It lets Claude render videos on your account. Never paste it into a prompt or commit it to a repository.
- If
json2videois not in the/mcplist, you probably started Claude in a different folder from the one where you ran the install. Go to that folder and start it again. - The
save_templatetool (used in step 6) needs CLI version 1.1.0 or later. If you installed the CLI long ago, run the install command again to update it.
More detail, and setup for Claude Desktop, Cursor and others, is in the MCP server guide.
2 Prepare the sheet
One row per product. These are the columns we used (the template sheet has them ready):
| Column | What it holds |
|---|---|
sku, category | Your own reference and grouping. Claude does not need them for the design, but they make the output CSV easy to match. |
product_name, brand | The texts shown in the video. |
old_price, price, discount | Written as you want them to appear, for example $32, $19, -40%. |
image_url | A public link straight to the image file. |
brand_color | A hex colour such as #3F6B4F, used for the video's accent. |
Two settings matter more than the rest. First, the photo links must be public and point directly at an image file, because the video is rendered in the cloud, not on your computer. A link to a private Google Drive file will not work. Second, share the sheet so that anyone with the link can view it. That lets Claude download it as a CSV without logging in. In Google Sheets, click Share, open General access and choose Anyone with the link with the Viewer role:

Viewer is enough: Claude only reads the sheet. It never edits it.
3 Ask for one video first
Paste the link to your sheet and brief Claude the way you would brief a designer. Ask for one video, for the first product only. It is much cheaper to get the design right on one video than to fix fifty.
My shop's products are in this Google Sheet: https://docs.google.com/spreadsheets/d/1RPDpTEnb2srB0EGjepDNdElP9gHOYDCo0D8TbqvN9ng/edit — make a short vertical promo video (about 10 seconds) for the first product: product photo, name, the old price crossed out, the new price and the discount, in the product's brand colour, with upbeat background music. Render it with JSON2Video and give me the link.
What Claude does next: it downloads the sheet as a CSV, loads the create-video skill, reads the guides it needs from the real documentation (image scenes, background music, transitions), and writes the video as a JSON description. It validates that description before rendering, which catches mistakes for free, and then tells you the cost and waits for your OK. In our run it quoted about 10 credits. Rendering happens in the JSON2Video cloud, so your laptop is not encoding anything.
Watch out for
- Claude asks before it spends credits. Read the estimate and say yes. The cost of a render is 1 credit per second of video, at any resolution.
- On a free account the video has a small watermark. That is expected.
- Claude's answers are in the language you write in. In one of our test runs it replied in Catalan because of the language set in Claude Code, so write your prompts in the language you want back.
4 Claude checks its own work
This is the part we like most. Claude does not just hand over a link and stop. It downloads the rendered video, pulls out frames and looks at them. In our recording the first render had a problem, and Claude found it without being told:
- Render 1. Claude noticed that the price screen was off-centre because of a zoom effect, so the “$32” old price was cut off on the left. It removed the zoom and rendered again.
- Render 2. Still off-centre. This time Claude worked out why: JSON2Video wraps the HTML of that scene in its own container, so the centring it had set on the page body was ignored. It moved the layout into a wrapper of its own.
- Render 3. Everything centred and readable. Claude reported that it took three renders and about 30 credits, not the 10 it had quoted.

Left to right: render 1 (“$32” cut off), render 2 (still off-centre), render 3 (fixed). These are the real frames Claude looked at.
Watch out for
- The self-check costs credits. Each fix is another render. Claude tells you before it re-renders, and says so in its final answer. The extra 20 credits in this example is the price of not finding the bug yourself.
- Claude reported that the photo in our sheet shows another brand's label printed on the bottle. Claude flags things like this; it is up to you to use photos you have the right to use.
5 Change the design with a prompt
If you do not love the first design, you do not open an editor. You tell Claude what to change, in the same session. Here we asked for a more premium look:
Nice. Now make it more premium: the photo full screen with a dark fade at the bottom, the product name in bold white uppercase, and a round yellow Shop now button with an arrow.
Claude rebuilt the video, rendered it and checked the frames again. It found that the small brand line was hard to read over the labels on the jars, so it made the fade stronger, added a little space and rendered once more. That redesign took two renders, about 20 credits. Same data, a very different video, from two lines of text.

Left: the first design. Right: the same product after the second prompt.
Repeat this step as often as you like. When you are happy, you are ready for the batch. The batch will use this design.
6 Save a template and render all 50 in parallel
Now the real point. Ask Claude to save the design as a template in your JSON2Video account, with the product fields as variables, and to render every product in the sheet:
Looks great. Save this design as a template in my JSON2Video account, with the product fields as variables. Then use the template to make the video for every product in the sheet, all 50 of them, rendering them all in parallel. When they are done, save a copy of the sheet as a CSV with a new video_url column.
What happened in our run:
- Claude checked all 50 rows first. It confirmed that the image links worked and spotted three products whose discount does not match their prices (SKU-2017, 2019 and 2048). It left them as in the sheet when we told it to.
- It saved the template with seven variables:
product_name,brand,old_price,price,discount,image_urlandbrand_color, and gave us the template ID and a link to open it in the editor. - It quoted the cost, about 500 credits (50 videos × 10 s × 1 credit), and said what it planned to do: two check videos first, one of them with the longest product name, then the other 48 at once if both looked right. It waited for our OK.
- It rendered the two check videos, looked at them, and started the other 48 in parallel. Each request is just the template ID and one product's data. In our run the 48 renders finished in about 48 seconds.
- It downloaded all 50, looked at a frame of each, and saved the CSV with the new
video_urlcolumn.

One frame from each of the 50 videos. Same design, 50 different products.
Watch out for
- Saving templates needs the right role. Creating a template through the API requires an API key with the editor, manager or admin role. If Claude reports “Insufficient permissions”, use a key with one of those roles.
- The batch cost 500 credits, including the two check videos. On a free account (600 credits) that leaves very little room for fixes, so top up or use a paid plan before running a real batch.
- Long names and prices must still fit. That is why Claude renders a check video with the longest name first. Do the same if you build the design yourself.
7 Let Claude review the batch and fix it
Claude downloaded all 50 videos and looked at every one. It then reported something worth fixing: in three videos, the dark fade covered part of the product, because the product sat low in the photo. We answered “yes, please fix those” and Claude took it from there:
- It looked at the opening frame of every video and found six more with the same problem, nine in total.
- It added a new optional variable to the template,
image_y, to move the photo up (default 0, so the other 41 videos stay unchanged). - One video came out wrong: the Ceramic Bud Vase Set showed a white pyramid instead of the vase. Claude found the cause itself (most photos are wider than the frame, and its shift pinned them to the left edge instead of centring them), fixed the template and rendered those videos again.

Left: from the first batch, the fade covers the bottle. Right: after Claude added image_y to the template.
The fix rounds took several more renders. In the end 9 videos were re-rendered with the final template, and the template is now better for the next batch. We stopped there. The remaining small flaws (a few long names close to the edge, photos that show the lower part of the product under the fade) are design choices you can tweak with another prompt.
Watch out for
- Fix rounds cost credits too: about 190 in our session (see the cost table). Ask Claude for the estimate before it re-renders, and decide whether a small flaw is worth it. At one point Claude itself suggested not re-rendering five videos for a 100-pixel centring difference nobody would notice.
- Claude only reports what it can see in the frames. Look at the videos yourself before you publish them.
8 Your template, ready for business workflows
Claude did not only make 50 videos. It saved the design as a template in your JSON2Video account. Open the Templates page in the dashboard and it is there, with the ID Claude gave you:
Open it in the editor (Claude gave you the link) and you see the same layout, with the parts that change listed as variables: product name, brand, prices, discount, photo, colour and the image_y that Claude added later.
This means Claude is no longer needed to make more videos. Your online shop, n8n, Make or your own code can render the template through the API: send the product data, get a video back. That is how a one-off job becomes a workflow that runs by itself, for example one video for every new product in a shop's database.
Use the template from your own code, n8n or Make
The request is a POST to /v2/movies with the template ID and the variables. Replace YOUR_TEMPLATE_ID with the ID Claude gave you (or copy it from the Templates page):
curl -X POST https://api.json2video.com/v2/movies \
-H "x-api-key: $JSON2VIDEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"template": "YOUR_TEMPLATE_ID",
"variables": {
"product_name": "Botanical Oil Trio",
"brand": "Verde Botanica",
"old_price": "$32",
"price": "$19",
"discount": "-40%",
"image_url": "https://example.com/photo.jpg",
"brand_color": "#3F6B4F"
}
}'The response returns a project ID straight away. The render runs in the cloud, and you poll GET /v2/movies?project=PROJECT_ID until it is done, or use a webhook. Details: create movie, templates, variables, webhooks. Check the exact variable names of your template in the editor's Variables panel, or ask Claude to run get_template.
In no-code tools, use the JSON2Video node in n8n or the “Create a Movie from my Template” module in Make, and map your columns to the same variable names. Wiring it to a shop's database is the part you do once per client. See the video automation hub for guides.
What it cost
JSON2Video charges 1 credit per second of video, at any resolution. Here is the real credit balance of our session, from 1,200 credits to 458:
| Step | What happened | Credits |
|---|---|---|
| First video | 3 renders (two with the off-centre price screen) | ~30 |
| Premium redesign | 2 renders | ~20 |
| The batch | 2 check videos + 48 in parallel, 50 × 10 s | 500 |
| Fix round 1 | Two 1-second tests + 3 re-renders | ~32 |
| Fix round 2 | 6 re-renders, the vase redone, a test | 80 |
| Fix round 3 | 8 re-renders for exact centring | 80 |
| Total (1,200 → 458 credits) | 742 | |
On the Professional plan ($49.95 a month for 12,000 credits) a credit costs about 0.4 cents. That makes the batch about $2.08, or 4 cents per video, and the whole session about $3.09. Cost estimates from Claude are good: it quoted 500 credits for the batch and the batch used exactly 500. Claude's own usage comes on top, under your Claude plan.
On a free account you get 600 credits, enough to try everything in this tutorial except the whole 742-credit session. Free videos carry a watermark and are limited to 60 seconds, so use a paid plan or a credit pack for videos you publish.
Sell it as a service
If you work with clients, what you just built is a service. Think of a shop with fifty products that wants fresh promos every week: new prices, new offers, new products. Nobody there wants to open a video editor fifty times. What you sell is the result, fresh videos every week, not the tool.
A weekly content package
- The client keeps their product list up to date in a Google Sheet (or exports it from their store).
- You keep the prompt and the template. Each week you run the same prompt, check the result and send the links.
- Claude Code makes the videos, checks them and fixes the ones that come out wrong.
- The rendering costs about $2 per batch of 50 ten-second videos (see What it cost), so your price is about your time, your design and the reliability of the service.
Because the design lives in a template, every client can have their own: their brand colours, their fonts, their layout. A new client is a new template and a new sheet, not a new project.
Put it on autopilot
When a client wants this in production, you can take Claude out of the loop. The template Claude saved in step 6 can be called from n8n, Make or a few lines of code (see step 8) and connected to the client's store or database:
- A new product goes into their database → its video is created automatically from the template.
- A name, a photo, a price or a description changes → the video is rendered again, so every product always has an up-to-date video.
Detecting new or changed products is done by the client's workflow (a trigger in n8n or Make, or a database hook in their code); JSON2Video renders whatever it receives. That is when a one-off job becomes a monthly retainer.
How to start
Start with one shop you know. Copy the Sheet, put ten of their products in it, run the three prompts and show them ten finished videos. It is much easier to sell a result they can watch than an idea.
Remotion or JSON2Video?
You can also make videos with Claude Code and Remotion, and it is a great tool. The honest answer depends on how many videos you need:
One video: use Remotion
Claude writes React code for one video, crafted frame by frame, and you render it on your own machine. You get full control of every frame.
Dozens or hundreds: JSON2Video
Claude creates a video template, the cloud renders the videos in parallel, and you plug the template into automatic workflows with n8n, Make or a few lines of code.
More on the options in video editing with Claude Code and in every way Claude can make videos.
Downloads
Everything we used, so you can run it yourself. Send the Markdown file to Claude Code (paste it into the chat, or save it in your project and ask Claude to follow it) and it will walk you through the same steps:
The product photos in the sheet are from Unsplash (Unsplash License). Some show other brands' labels, which is fine for a demo but not for your own shop: use your own photos.
FAQ and troubleshooting
Claude cannot load my photos, or the videos have empty pictures
Claude cannot read my sheet
Does Claude ask before spending credits?
My videos have a watermark
“Movie duration is longer than your plan allowance”
Claude answers in a different language
Claude cannot save the template
json2video --version; install again to update), and that your API key has the editor, manager or admin role. Then restart Claude Code in the same project folder.The tools do not appear in Claude Code
/mcp. If json2video is missing, run json2video mcp install claude in the folder where you start Claude Code, then restart it. To see the server's own errors, run json2video mcp run in a terminal. Authentication errors (401 or 403) almost always mean a missing or wrong API key: run json2video auth --api-key YOUR_API_KEY again. More in the MCP server guide.Will my 50 videos look exactly like yours?
Can I use this without Claude Code?
Full transcript
Read the full transcript of the video
Intro
If you're a marketer, or you run an agency, you know the problem: every product, every offer and every client wants its own video, and editing them one by one just doesn't scale. So let me show you how I made fifty product videos from a simple spreadsheet, with Claude Code doing the work.
The sheet and the result
Here's the spreadsheet: fifty products from an online shop, each with a photo, a price and a discount. And here are the fifty promo videos Claude Code made from it, one for every product, ready for Reels, TikTok or Shorts. It took about ten minutes and around two dollars, and I never opened a video editor. At the end, you'll get the prompts I used.
How it works
Here's the plan. Claude reads the sheet, designs the first video, and renders it in the cloud with JSON2Video. Then it does something I really like: it downloads the result and checks it, frame by frame, before it shows me anything. Once I'm happy with the design, it makes the other forty-nine. Nothing renders on my laptop, and I don't write a single line of code. This tutorial has seven short chapters: the setup, the first video, the self-check, all fifty, the cost, how to sell this to clients, and how it compares with Remotion.
Chapter 1: Setup
Setup takes about a minute, and you only do it once. First, I install the JSON2Video command-line tool with npm. Then I save my API key. You get one from a free account in the dashboard. It's the key that lets Claude render videos on your account, so keep it private; that's why it's hidden here. The third command is the important one: json2video mcp install claude. It writes a small config file in this project that tells Claude Code how to start the JSON2Video MCP server, and it also installs a skill called create-video. The skill is like a manual for Claude: how a video is structured, which elements exist, how to add music, voices and captions. That's why Claude gets good results without me explaining the format. Now I start Claude and type /mcp. There it is: JSON2Video, connected. If you don't see it, make sure you started Claude in the same folder where you ran the install.
Chapter 2: The sheet and the prompt
Now the data. This is the sheet: one row per product. The name, the brand, the old price, the new price, the discount, a link to the product photo, and the brand colour as a hex code. Two tips here. First, the photo links have to be public and point straight at the image file, because the video is rendered in the cloud, not on your computer. A link to a private Google Drive file won't work. Second, the sheet itself is shared so that anyone with the link can view it. That lets Claude download it as a CSV without logging in. Now the prompt. I paste the link and describe the video the way I'd brief a designer: a short vertical promo of about ten seconds, the product photo, the name, the old price crossed out, the new price and the discount, in the brand's colour, with upbeat music. Notice that I ask for one video first, for the first product only. It's much cheaper to get the design right on one video than to fix fifty.
Claude designs and renders
Claude reads the sheet and loads the create-video skill. Then it reads the guides it needs: here the image scenes, the background music and the transitions. So it isn't guessing; it's reading the real documentation. Then it writes the video as a JSON description: the scenes, the photo, the texts, the colours and the music. Before rendering, it validates that description, which catches mistakes for free, without spending any credits. It even tells me the cost, about ten credits, and waits for my OK. Then it sends it to render. From here, the work happens in the JSON2Video cloud. My laptop isn't encoding anything, so I could close it or keep working on something else. I've sped up the waiting here.
The first video
Here's the first one. About ten seconds, vertical, in the brand's colour, with the photo, the crossed-out price and the discount. Not bad for one paragraph of instructions. By the way, you can try all of this with a free JSON2Video account. You get six hundred credits, which is ten minutes of video, and you don't need a credit card. Free videos carry a small watermark. The link is in the description.
Chapter 3: Claude checks its own work
And this is the part I like most. Claude doesn't just hand me a link and stop. It downloads the video, pulls out frames, and actually looks at them. On the first try, the price screen is off-centre, and the thirty-two dollars is cut off. So it removes the zoom effect and renders again. Still off-centre. This time it works out why: JSON2Video wraps the HTML in its own container, so it moves the layout into a wrapper of its own. Third render, and everything is centred and readable. It even tells me it used thirty credits, not the ten it quoted. I didn't touch a thing.
Make it yours
But what if you don't love the first design? You don't open an editor. You just tell Claude what to change, the way you'd brief a designer. Here I ask for a more premium look: the photo full screen with a dark fade, a bold white title, and a round yellow button with an arrow. Claude rebuilds it, renders, and checks the frames again. The small brand line is hard to read over the jar labels, so it makes the fade stronger, adds a little space, and renders once more. Same data, a very different video, from two lines of text.
Chapter 4: All 50
Now the real point. I ask Claude to save this design as a template in my JSON2Video account, with the product fields as variables, and to render every product in the sheet, all in parallel. First it checks all fifty rows, and even spots three discounts in my sheet that don't match the prices. It saves the template with seven variables, tells me the cost, about five hundred credits, and waits for my OK. Then it renders two check videos, one with the longest name. Both look right, so it sends the other forty-eight at once, each one just the template ID and one product's data. Forty-eight videos, in under a minute.
It fixes its own batch
Then it downloads all fifty and looks at every one. In three videos, the dark fade covers part of the product. I say: fix those. It checks every opening frame, finds six more, and adds a new variable to the template to move the photo up. One of them comes out wrong, so it finds the bug, fixes the template, and renders those again. Nine videos fixed, and the template is better for the next batch.
Fifty videos
And here they are. Fifty videos, each with its own product, price and discount. Perfume, watches, coffee, shoes, all from the same design. The new file has a column with a link to every video. From here you can upload the videos, schedule them with your social media tool, or send them straight to the shop. And next week, when the prices change, you update the sheet and run the same prompt again.
Your template, ready for business workflows
And here's the detail that matters. Claude didn't just make fifty videos. It saved the design as a template in my JSON2Video account. Here it is in the editor: the same layout, and the parts that change, the name, the brand, the prices, the discount, the photo and the colour, are now variables. So this template is ready for a business workflow. Your store, n8n, Make or your own code can call it through the API, send the product data, and get a video back. No Claude in the loop.
Chapter 5: What it cost
So, what did it cost? JSON2Video charges one credit per second of video, at any resolution. The fifty videos are ten seconds each, so the batch came to exactly five hundred credits, as Claude estimated. With the first design, the redesign and the fixes, about seven hundred and forty in total. On the Professional plan, at forty-nine ninety-five a month, the batch is about two dollars, or four cents per video, and the whole session about three dollars. Claude's own usage comes on top, under your Claude plan.
Chapter 6: Sell this as a service
If you work with clients, this is a service. Think of a shop with fifty products that wants fresh promos every week: new prices, new offers, new products. You keep the prompt and the template. They update the sheet, and Claude makes the videos. That's a monthly content package you can sell, and the rendering costs you a couple of dollars a batch. What you're selling isn't the tool; it's the result: fresh videos every week without anyone opening an editor. A good way to start is with one shop you know. Make ten videos from their catalogue and show them.
Put it on autopilot
And when a client wants this in production, you can take Claude out of the loop. Take the template Claude saved, and connect it to their store with n8n, Make, or a few lines of code. When a new product goes into their database, its video is created automatically. And when a name, a photo or a description changes, the video is rendered again, so every product always has an up-to-date video. That's when a one-off job becomes a monthly retainer.
Chapter 7: Remotion or an editing API?
You might ask: why not Remotion? It's a great tool. If you need one video, crafted frame by frame, use Remotion: Claude writes the code, and you render it on your machine. But if you need dozens or hundreds of videos, JSON2Video is the better choice. Claude creates the video template, the cloud renders the videos in parallel, and you can plug it into automatic workflows with n8n, Make, or a few lines of code.
Get the prompts
Everything I used is in the description: the two prompts, the Google Sheet template and the setup commands. Paste them into Claude Code and it will set everything up for you. The step-by-step guide on our website is linked there too, with more examples, like editing an existing video or adding captions and a voice-over.
Outro
Start with a free account; you don't need a credit card. If you get stuck, open the support chat in the dashboard and ask. And if you'd like more videos like this, subscribe. See you in the next one.
Make your first video today
A free account includes 600 credits and needs no credit card. Setup takes about a minute. If you get stuck, open the support chat in the dashboard and ask.
Get a free API key →Keep reading
- Can Claude make videos? Every way to do it
- Video editing with Claude Code: more prompts, and what Claude does with FFmpeg
- MCP server guide in the documentation
- Variables and templates tutorials
- Video automation, with guides for n8n and Make
Published on October 21st, 2026