Opens in a new tab

What Is a Data Source in Templater? (Sheets, Excel, JSON, feeds)

Published October 28, 2026

A data source is the table of values that Templater pours into your After Effects template. Every row is one video. Every column is one thing that can change. Templater cannot insert anything into a dynamic layer without one, so choosing and shaping the data source matters in every project.

The word “table” matters, because it describes all of the options, even the ones that are not spreadsheets. A JSON file is a list of objects, and each object plays the part of a row. A web feed returns that same list. Que is JSON-based as well. In our documentation these all behave the same way once they reach the panel: one job per row or object, one dynamic element per column or property key. This piece explains the five kinds of source, how the names in your data must line up with the names in your template, which column names Templater has claimed for itself, and the mistakes that cost people an afternoon.

The five kinds of data source, and what each one is good for

Templater reads data from a Que campaign, a native Google Sheets document, a tab-separated value file, a plain text file containing JSON, or a remote JSON feed from a URL. All five are available in all three editions, Rig, Pro and Bot. Your choice has little to do with what Templater can do and a lot to do with who edits the data, where it lives and what else needs to touch it.

Google Sheets suits teams. The sheet lives in the cloud, and several Bot machines can read from it at once, even if they sit in different places. A native sheet can also take advantage of Google’s own features, such as pulling in data from the Google translation service, social network feeds and other external APIs, which means some of the content can be generated inside the sheet before Templater ever sees it. Two requirements apply. You must use Templater version 3.5 or later because of changes to Google’s security rules, and the machine must be able to reach your Google Drive account through your network, so a firewall that blocks Google’s servers will stop it. From Templater 3.7, our documentation describes a file picker workflow in which you choose the individual sheets Templater may see. If a sheet you expect is missing, check that you have access to it.

Tab-separated files suit people who live in Excel or Numbers. A common surprise is that Templater does not read an Excel file directly. You export it as a tab-delimited file first. When you do, mind one checkbox in Templater Preferences, labeled for tab-delimited files exported from Excel or Numbers. Check it only if the file really came from one of those programs. If it is checked for a file that did not, or unchecked for a file that did, unintended characters appear in your text layers.

A JSON text file suits developers who export from their own application. It holds an array of objects, and each property key is the equivalent of a column header. A URL feed is the same shape served over the web. Setting one up takes knowledge of web servers. You create a REST API with an endpoint that returns a JSON object array, and the property keys must match your dynamic layer names or the reserved keys. You can use any technology stack, and our documentation suggests a framework such as ExpressJS for Node or Laravel for PHP to get started quickly. In the panel, you paste the feed’s address into the Data source field in Batch Assets.

A Que campaign is the choice when you want Dataclay’s JSON-based data management behind the templates, and it can sit between other systems and Templater. Our FAQ says you can use Google Sheets and Que together by setting Que as the Templater data source and integrating the sheet through the Que API or Que’s built-in Zapier connection. We cover that pairing in our Zapier piece, and the Google Sheets reference goes into more depth on sheets. For a side-by-side look at all five, see the data sources overview.

Two limits apply to every kind. Templater can only pull data from a single data source at a time, and when that source is a Google Sheet it can only map data to one worksheet. If your data lives on several tabs, you consolidate them first. And text files, TSV and JSON alike, must be saved with UTF-8 encoding so that international characters come through intact.

How your data finds the right layer

Templater connects data to a template by name, with no other glue. A layer named introTitle receives the values from a column or property key named introTitle. When you preview, render or replicate, each mapped layer is updated with the matching value from the current row or object. Cells can hold text, URLs, image file paths or hex color values, so one row can change a headline, swap a picture and change a color in the same job.

Take an illustrative sheet for a set of event badges. The header row reads guestName, guestTitle and photo. The next row has a name, a job title, and a file name such as headshot-01.jpg. In the template, three dynamic layers carry exactly those names, with the Templater Settings effect applied once to each. That is the full mapping. Preview the second row, and the badge shows that person. Preview the third row, and it shows the next. If photo is a footage layer, the file path in that cell is resolved against the footage folder you set in the panel, so paths in your data are written relative to that folder.

The rules for column headers are stricter than they look, and they differ by source. For Google Sheets, Templater does not currently support column headers that begin with a numeral, contain spaces, or contain the _ character, and our troubleshooting table adds the dollar sign to that list. JSON property keys are the equivalent of column names, and our own example feed uses keys such as caption-1 and album-cover, so hyphens appear in practice. Layer names should not contain spaces either. A mismatch of any kind between a layer name and a header produces a layer that does not update, which is why our troubleshooting table lists names first when a preview looks frozen.

Most of this logic is about avoiding silent failure. A good habit is to build the header row first, copy each header into the layer name box in After Effects, and rename the layer explicitly. The documentation warns that a layer must be explicitly renamed after you create it, even when the source name you entered looks identical to the column name, or Templater may not process it as dynamic.

Columns Templater reserves, and the flags it understands

Some column names are not available for layers because Templater uses them for its own purposes. They are case-sensitive, and using one as a dynamic layer name can cause an error in processing your data source. Most are optional until you need what they do. The Bot requires render-status, and a bot column is needed when a Bot Name is set in Preferences or several Bots share a source:

  • id lets you label each output yourself instead of relying on the row number. The id is added to the output file name when there is no output column, or when it is blank. We recommend including it.
  • output sets the output file name for each job. If both columns exist, output overrides id for naming. You can prepend a relative folder path to sort files into subfolders, and our tip is to avoid a period in the name, which can cause After Effects output errors.
  • target names the composition to process for that row. If the composition cannot be found, or the column is absent, Templater uses the default target.
  • aep switches between After Effects project templates on a per-row basis, using absolute file paths. The projects must open without errors, and missing fonts or effects will halt the process.
  • render-status and bot are for the Bot. The first tracks whether a row is ready, queued, processing or done, and the second assigns a row to a named Bot when several run at once.
  • module and render-settings choose the After Effects output module and render settings template for rendered output, and their values are case-sensitive.

Our piece on what happens when a column name matches a reserved name covers that failure in detail. Projector has reserved data source names of its own, according to our documentation, so check its list too if you plan to deploy through Projector.

Flags are the other special vocabulary. Wrap a supported term in double braces or double brackets and Templater treats it as an instruction instead of text. The off flag hides a dynamic layer for that job. A composition name in braces swaps a composition layer’s source for the named project composition. A third form sets the default target composition. Flags are case-sensitive as well. The practical use is simple: a row that has no second caption can say off in that layer’s cell and the layer disappears for that one video.

Source-specific traps, and what the Bot changes

Row numbers trip people up. For Google Sheets and tab-delimited files, a batch start row must be greater than 1, since row 1 is the header row. For a JSON array, the start row must be greater than 0. Our batch render checklist also says the end row must be greater than the start row. Text with several lines in a cell needs a text layer that was created as a multi-line box, by clicking and dragging with the Text tool, and the line breaks must be made the way your spreadsheet application makes them natively. A single-line text layer will not show them correctly.

An empty cell has a defined meaning for footage. If the option to consider empty cells or null values as faulty is off, an empty cell makes Templater hold over the footage from the previously previewed row. Turn it on and the empty value is treated like a bad reference, handled by whichever missing-footage option you chose, such as a branded placeholder, which we recommend because it keeps batches moving.

The Bot adds two columns and some timing. With a single Bot, the data source needs a render-status column, and your application writes only the word ready into it. Templater writes the other values, queued, processing and done, or an error code such as ERR::MEDIA or ERR::AFXHOST. The Bot checks Google Sheets at intervals no shorter than 0.3 minutes, about 18 seconds, because of Google’s API rate limits, and it checks a URL feed at intervals no shorter than 0.2 minutes, about 12 seconds. Because the Bot overwrites files that share a name, make sure every row has a unique id or output value.

A URL feed has a particular limit. The Bot cannot update the render-status value in a feed, because the feed belongs to your system. Our documentation tells you to register custom scripts at events such as the end of a job or batch to update those values, or ready rows will render again. That is the sort of detail worth reading before choosing a feed over a sheet. For the Bot setup itself, see our guide to batch rendering.

Messy data is its own topic, and we wrote up an approach in how to handle dirty or incomplete data.

Which one should you pick?

Our suggestion: use Google Sheets when the content lives in the cloud and several machines or people need it, and remember the file picker step. Use a tab-separated file when the data is a one-time export from Excel or Numbers and nobody needs to change it midstream. Use JSON or a URL feed when your own application produces the data, and be ready to run a web server for the feed. Use Que when you want managed JSON data behind the templates and other systems feeding it.

Whatever you choose, build the header row first, match every layer name to it, add id or output so your files have names you chose, and preview three rows before you render three hundred. If you want the whole workflow around it, our complete Templater guide is the next stop, and the Templater page lists the editions.

That is the picture of how a data source works. Here are the questions we get most often before people choose one.

Frequently Asked Questions

What counts as a data source in Templater?

A data source is the table of values that fills your dynamic layers. It can be a Que campaign, a native Google Sheets document, a tab-separated value file, a plain text file containing JSON, or a remote JSON feed. Each row, or each object in a JSON array, is one render job, and each column or property key is one dynamic element in the template. Cells hold text, URLs, image file paths or hex color values.

Can Templater use an Excel spreadsheet?

Not directly. Export the Excel data as a tab-delimited file and point Templater at that file. In Templater Preferences, check the box for tab-delimited files exported from Excel or Numbers, and only for those files. If the box is set wrongly, unintended characters appear in dynamic text layers. Templater can also read a native Google Sheets document without any export.

Why does my layer not update when the data changes?

Start with the names. The layer name must match the column header or JSON property key, and the Templater Settings effect must be applied to the layer once. The preview menu also matters, since current state does not move to another row. With Google Sheets, headers that begin with a number or contain spaces, the _ character or a dollar sign can stop the mapping. Fix the header, rename the layer, and preview again.

Can I use more than one sheet or tab at once?

No. Templater pulls data from a single data source, and when that source is a Google Sheet it maps data to one worksheet only. If your information is spread across tabs, combine it into one worksheet first. You can still organize jobs inside that worksheet with columns such as id, output and target, and you can switch between After Effects project files row by row with the aep column.

Which column names are reserved by Templater?

The reserved names are id, target, output, aep, render-status, bot, module and render-settings. They are case-sensitive, and using one as a dynamic layer name can cause an error in processing. Only render-status is required for the Bot, and bot is required when several Bots share one data source. The rest are optional controls for naming outputs, switching compositions or projects, and choosing output settings.

What do I need to set up a URL feed?

You need a web server with a REST API endpoint that returns a JSON object array. The property keys must match your dynamic layer names or the reserved keys. Any technology stack works. In Templater, you enter the feed address in the Data source field under Batch Assets. One limit applies to the Bot: it cannot update render-status in a feed, so you register scripts to update those values at job events, or ready rows render again.

Leave the first comment

Sign up

Stay up to date with Datclay's newsletter. We won't spam your inbox.

Newsletter Signup
Name
Name
First
Last

By submitting your email, you agree to our Terms and Privacy Policy. You can opt out at any time.