Archived docs Get your API Key
Get started
Tutorials
Guides
Reference
Help for coding agents
🤖 AI Assistant

Creating an automation

Open json2video.com/dashboard/automations and press New automation. The dialog has three steps:

  1. Start from — how the automation's table (its dataset) is made. Four cards: From a template, Import a file, Connect a source and Blank.
  2. The details of the card you picked: the template, the file, or the source. Blank has none and skips this step.
  3. The name, the same for every card. Press Create automation.

Back returns to the previous step without losing what you picked. When the automation is created, it opens.

If New automation is greyed out, you have reached the number of automations your plan allows; hover it for the numbers. See Limits.

To see one working before building your own, start from an example instead.

Start from an example

At the foot of the Automations list, New to automations? Start from an example offers five ready-made automations. Each card shows the video it makes — hover it to play it — how many rows it brings, and about how many credits one of its videos costs.

Example What it makes Rows Credits per video
Simple quote of the day Famous quotes as vertical videos, with the author's portrait behind the words. 10 About 5
Simple reel Short stories as vertical reels: images, a voice-over, subtitles and an animated emoji per scene. 5 About 40
Simple Real Estate video Property listings: a photo slideshow with kinetic text, the key facts and the agent's contact. 5 About 35
Simple e-commerce product Vertical product ads: a hook, the product on a floating card, its highlights, the price with the discount and a button. 5 About 18
Simple local business ad Vertical ads for a local business: the customer's problem as a chat message, the services, a five-star review, the offer and the phone number. 5 About 22

Press Try this example to watch the video and see how it works, then Create example. That one step adds to your account:

  • A copy of the example's template, named after it with (example) at the end. It is yours: open it in the Editor to change the design, or delete it.
  • The automation, with the example rows in its table, already linked to that template and mapped.
  • A filter that lets only the first row through, so your first Render makes one video, not five or ten. Open the filter on the Workflow tab to let the other rows in.

Nothing is charged until you press Render. An example counts as one of your automations like any other: when you have reached your plan's number, the cards are greyed out and say so. If creating an example fails, nothing is left behind.

The new automation opens on its Workflow tab with a short guide — the dataset, the template, Render. Got it closes it.

From a template — the easiest

Pick one of your templates. JSON2Video reads its variables and builds the columns for you: the right names, the right types, and the required ones marked.

The automation arrives already linked to that template and already mapped. There is nothing to configure — fill in the rows and render.

This is the path to prefer. It is the only one where the table and the template cannot disagree, because the table was made from the template.

  • Every variable gets a column, whatever kind it is: a headline, a price, a photo with its framing, a voice, the subtitles. A photo, a voice or a subtitles setting becomes an Object column — one cell holding the whole thing, edited with the same picker the Video scripts form uses. See Column types.
  • A variable that a repeating scene loops over becomes a List of items column.
  • Turn on Start with one row holding the template's own default values to get a first row you can copy from.

Leave the name empty and the automation takes the template's name.

Import a file — CSV or JSON

Bring a file you already have. Drop it on Choose a CSV or JSON file, or click to pick it. The file is read once and the rows become yours: you edit them here, add columns, and add more rows later. Nothing is ever read from the file again.

Either format is limited to 5 MB, and to the number of rows your plan allows in one automation (10 on the Free plan, 5,000 on paid plans). A file with more rows than that is refused with the reason. To add rows to an automation that already exists, use Import rows, which adds the rows that fit and tells you how many did not.

After the file is read you see how many rows and columns it holds, the first rows, and any warning about the data.

A CSV file

Export it from Excel, Numbers, Google Sheets or whatever produced it.

  • The first line is read as the column names.
  • Commas, semicolons, tabs and pipes are all recognised as separators, and quoted fields with commas or line breaks inside them are read correctly.
  • The type of each column is guessed from its values, and you can correct the guess in the dropdown under each column name before anything is saved. Nothing is converted: a value that does not fit its type keeps the text the file had, and the pre-flight check reports it later.

Three guesses worth knowing about:

  • A column of numbers with a leading zero — zip codes, SKUs, phone numbers — stays Text, so 01234 does not become 1234.
  • A column of web addresses stays Text. It can still feed a template's photo or audio: the link is put where the template expects the file.
  • A column of dates is guessed as Date. Write dates year first (2026-09-18): a date like 09/10/2026 could be read either way, so a filter cannot compare it as a date.

A CSV holds one value per cell, so it cannot bring an Object or a List of items column. Once the automation exists the table is yours, and you can add those columns and fill them in here — or import a JSON file instead.

A CSV knows nothing about your templates, so the next step after creating the automation is to link a template and say which column feeds which variable.

A JSON file

JSON is the format to use when a column holds a list — the scenes of a reel, the rooms of a property, the products in a promo. It is the only file that can bring a List of items column, which is what feeds a template that repeats a scene.

A JSON file is a list of rows, one object per row:

[
  { "title": "Summer reel", "scenes": [ { "image_url": "https://example.com/a.jpg" }, { "image_url": "https://example.com/b.jpg" } ] },
  { "title": "Autumn reel", "scenes": [ { "image_url": "https://example.com/c.jpg" } ] }
]
  • Each key becomes a column. A key that only appears on row 400 still becomes a column.
  • A value that is a list of objects becomes a List of items column, and the keys inside the items become its item fields.
  • A value that is an object becomes an Object column.
  • Anything else is text, a number, a yes/no or a date, typed from the values themselves — there is no type dropdown to correct.
  • The list of rows can also sit inside an object, under data, rows, items, results, records or values. It is found on its own.

A list of plain values — "scenes": ["a.jpg", "b.jpg"] — is refused, with the reason: a repeated scene needs items with fields, and a list of plain values would produce no scenes at all, with no error. Write [{ "image_url": "a.jpg" }] instead.

Leave the name empty and the automation takes the file's name.

Connect a source

Point the automation at data that lives somewhere else, and let JSON2Video read it. Connected sources are available on paid plans; on the Free plan the card is locked and says Not included in your plan.

A connected source is remote and read-only. The rows and the column list belong to the origin, and you edit them there — the next sync brings the change across. You can still rename a column here and change its type, and you can import and detach at any time to make the rows yours. To own the rows from the start, import a file instead. → Syncing a connected source

The card has three tabs:

Tab What to paste in URL address
Google Sheet The sheet's link — see below.
CSV at a URL Any address that returns a CSV file without signing in.
API endpoint An address that returns JSON: a list of objects, or an object with the list inside it.

Then press Read this source. The address is read right there, before anything is created, so a sheet that was never published fails in the dialog — next to the field you typed it in — rather than an hour later with nobody watching. When it works you see how many rows and columns it holds, the first rows, and any warning. Read it again re-reads it after you change something at the origin.

Sync sets how often the source is read again: Only when I ask, Every hour, Every 6 hours or Every day (the default). You can change it later. See Syncing.

The dashboard never signs in to anything, and it cannot send a password, a token or an API key to your source. The address has to be readable by anyone who has it. Addresses inside a private network (localhost, 192.168.…, and the like) are refused.

Google Sheet

JSON2Video never signs in to your Google account, so the sheet has to be readable without one. Do one of these, then paste the link:

  1. Publish it (recommended). In the sheet, open File → Share → Publish to web, pick the tab, choose Comma-separated values (.csv), press Publish and copy the link.
  2. Share it. Press Share, set General access to Anyone with the link, and copy the address from your browser's bar.

Publishing comes first because it keeps working if someone later changes who the sheet is shared with. An address copied from the browser bar works while the sheet stays shared with anyone who has the link; the dialog says so in a warning, and if the sync later fails with a 401 or a 403, publish the sheet and paste that link instead. A sheet published as a web page instead of CSV is read as CSV anyway.

  • Only one tab is read: the one in the link, or the first tab if the link names none.
  • The first row gives the column names.
  • A sheet holds one value per cell, so it cannot carry a List of items or an Object column — and so it cannot feed a template that repeats a scene. It can feed a photo: see A column of links can feed a photo.

CSV at a URL

Any address that answers with a CSV file. The same rules as an imported CSV apply — the first line holds the column names — and, like a Google Sheet, it holds one value per cell, so it cannot feed a repeating scene.

An address that answers with a web page instead of a file is refused, because reading an HTML page as a CSV would make a table out of the page's markup.

API endpoint

An address that returns JSON. It is read like a JSON file: one object per row, lists of objects become List of items columns, objects become Object columns.

Where the list is in the payload (optional) — leave it empty if the endpoint returns the list itself, or puts it under data, rows, items, results, records or values. Otherwise give the path to it, with dots: data.items, response.products.

An API endpoint is the only connected source that can carry a list column, so it is the only one that can feed a template that repeats a scene without importing the data first.

The request is a plain GET with no credentials. If your API needs a key, expose a read-only address for this, or export the data to a JSON file and import it.

Every source: at most 5 MB, one request

A source is read with a single request of at most 5 MB, which has to answer within 20 seconds. The same row cap as a file applies: a source with more rows than your plan allows in one automation is refused with the reason.

The key column

Both the file and the source previews end with a dropdown: No key column, or one of the columns.

A key column is the field that says "this is the same row as last time": a SKU, a product id, an email address. It matters most on a connected source, where it decides what a sync does when a row changes at the origin:

  • With a key column, a row whose values changed is updated in place. It keeps its place, its history and its video, and it is ready to render again with the new values.
  • Without one, a row is recognised by a hash of all its values. Change one cell at the origin and that row reads as one row deleted and one row added: the old row is kept, marked orphaned, and the new one renders from scratch. Taking single rows out of a template's filter by hand is also not possible without a key column, because the row's identity changes with its values.

Set one whenever the data has a natural identifier. See Syncing a connected source.

On an imported file the key column is optional: the rows are yours and keep their identity whatever you edit. What it still does is travel with every video the row produces, as dataset_row_key — see Downstream systems know which row a video came from.

Blank

An empty table with one text column. Add the columns you want, type the rows in, then link a template.

Useful when the data does not exist anywhere yet.

The name

The last step asks for the Automation name. Leave it empty and it takes the template's name, the file's name or the source's name. You can rename it later with the pencil next to the name on the automation's page.

Next