Skip to main content
← Blog ··Updated ·7 min read

Airtable to Google Slides: the complete walkthrough (with templates)

Build the Airtable to Google Slides pipeline end to end: the base schema that makes it work, the field-to-placeholder map, ready-made deck templates, and the four failures that break it.

To generate Google Slides from Airtable, mark up one deck with placeholders, map each Airtable field to a placeholder once, and run: every matching record becomes its own deck, with linked records expanding into repeating slides. This walkthrough covers the base schema that makes it work, the field mapping, ready-made templates, and the four things that break it.

An ops engineer at an agency built the Airtable-to-Slides pipeline three times. The first version was a Saturday-afternoon Apps Script that worked beautifully for a month, then started corrupting the brand template every time the designer renamed a layer. The second was a Zapier flow, reliable until volume crossed about forty decks a day, when rate limits and per-task pricing began to bite. The third was a dedicated platform, and the third stuck.

This piece is the third version, written out in full. Not a survey of the options, which the Airtable document automation guide covers properly, but the actual build: the base schema that makes it work, the mapping between Airtable fields and template placeholders, and the four things that reliably break it.

Start from the record that becomes one deck

Almost every failed Airtable-to-Slides build starts in the wrong place, with the template. Start with a sentence instead: one row of this table becomes one deck.

For an agency reporting on client accounts, that sentence names the Accounts table. For a conference, the Events table, not the Sessions table. For a sales team, the Opportunities table. Get this wrong and everything downstream fights you, because the generator produces one document per row of whatever table you point it at.

A base shaped for generation usually looks like this:

TableRoleKey fields
AccountsOne row becomes one deckName, Quarter, Owner, Health, Logo
MetricsLinked to Accounts, one row per metricAccount (link), Label, Value, Change
ProjectsLinked to Accounts, one row per projectAccount (link), Title, Status, Due

The Accounts row supplies everything that appears once on the deck. The linked tables supply everything that repeats. That division is the entire mental model, and it maps exactly onto how a Slides template is built: fixed elements on the cover, a repeating slide for the linked records.

Map fields to placeholders once

The template is a normal Google Slides deck. Wherever a value should land, the designer types a placeholder in the text: {{account.name}}, {{quarter}}, {{metrics.total}}. They are ordinary text, so a designer can style them, move them, and see exactly where the data will sit.

Mapping is then a table of correspondences you set once:

Airtable fieldPlaceholderAppears
Accounts → Name{{account.name}}Cover title, every slide footer
Accounts → Quarter{{quarter}}Cover subtitle
Accounts → Health{{account.health}}Status block
Metrics (link)loop: {{metrics}}One row per metric in the summary table
Projects (link)loop: {{projects}}One slide per project
SourceToDocs dataset builder: an Airtable table with four selected fields and a filtered subset
The mapping, as the product sees it: choose the Airtable table that holds one row per deck, tick the fields the template needs, and add a subset for the rows this run should cover.

Two rules make this durable. Name placeholders after the data, not the slide, so {{account.name}} rather than {{title_slide_heading}}, because the deck will be redesigned and the data will not. And keep the linked data one hop from the driving record: a generator that reads Airtable properly will follow a link field and read the related record’s fields, but arbitrarily deep chains get fragile fast.

Start from a template that already has the placeholders

You do not have to build the deck from nothing. These are ready to run against an Airtable base, with placeholders already in place, and every one is a real Google Slides file rather than a picture of one:

The QBR deck is the closest match to the Accounts and Metrics structure above. The agency client report does the same job with a white-label cover per client. The event programme is the one to look at if your repeating unit is sessions rather than metrics, because it shows a loop nested inside a grouping.

What a run actually does

A run takes three inputs: the table (optionally filtered to a view), the template, and a destination Drive folder. For each matching row it copies the template, replaces every placeholder with that row’s values, expands each loop against the linked records, and writes the finished file to Drive. A PDF can be written alongside it, same name, same folder.

SourceToDocs split generation: one file per distinct value of the Region field, with filters and sort rules
One deck per row is a setting, not a loop you write: split on the field that identifies the account and every distinct value becomes its own file.

The consequence worth internalising: filtering is how you control scope. “Generate the report” becomes “generate the eleven accounts whose Quarter is Q3 and whose Health is not Churned”. You do that in the filter, not by making eleven copies of anything. Sorting works the same way, so the order of a view becomes the order of the repeating slides.

The four things that break it

Deep nesting. Following a link field to a related record is reliable. Following a link to a record that links to another record, and reading a rollup of that, is where builds get brittle. Flatten the far end into a field on the record you actually query.

Long values in fixed layouts. A Slides template has a fixed canvas, which is its strength for brand fidelity and its constraint for content. An account name of eight words will overflow a box sized for three. Either constrain the source field or design the box for the realistic maximum. If content length is genuinely unpredictable, that document wants Google Docs instead, where pages break on their own.

SourceToDocs delivery: PDF alongside the presentation, a Google Drive folder, and a run log showing 2 of 2 files done
Where it lands: the Drive folder, the PDF-alongside switch, and the run log that says how many files were produced and when.

Empty linked records. An account with no projects should produce a deck with the projects section absent, not a deck with an empty slide and a dangling heading. Decide this per loop before you run at volume, not after someone forwards a client a blank slide.

Renaming placeholders instead of fields. The mapping survives redesign, not renaming. If a placeholder must change name, change it in the template and the mapping together. This is the failure mode that killed the Saturday-afternoon Apps Script, and it is worth naming because it is the one that returns.

When a script is still the right answer

If the deck is genuinely one-off, or the logic is so specific that no mapping expresses it, a script is fine and honest. The Apps Script walkthrough covers that path with working code, and the Slides API guide covers what the API will and will not do. The judgement is in the Google Slides automation guide: scripts are cheapest at the start and most expensive to own, and the crossover comes sooner than most teams expect.

For the recurring, branded, one-per-account case, which is most of why people search for this in the first place, the mapping approach is the one that survives the designer, the volume, and the second year.

Common questions, answered

How do I connect Airtable to Google Slides? +
Three things have to meet: the Airtable base holding the records, a Google Slides deck you have marked up with placeholders, and a Google Drive folder for the output. You connect the base, pick the table that holds one row per deck, map each field to a placeholder once, then run. Every later run reuses that mapping, so connecting is a one-time job and generating is a button.
Do I need to flatten my Airtable data first? +
Not for linked records, and this is the part most tutorials get wrong. A generator that reads Airtable properly follows a link field to the related record and reads fields from it, so a deck can pull the account name from one table and its projects from another. What you cannot do is nest arbitrarily deep: keep the useful data one hop away from the record that drives the deck.
Can one run produce a deck per client? +
Yes, and that is the whole point of doing it this way. Filter the table to the rows you want, and the run produces one deck per matching row, each with its own data and its own file name. Ninety accounts is one run, not ninety.
How do repeating slides work, like one slide per product? +
A loop is bound to a link field. The template holds one slide marked as the repeating unit, and the run emits a copy of it for each linked record, in the order your view specifies. Sorting the view sorts the slides, which is the easiest way to control sequence without touching the template.
What happens when the designer edits the template? +
Nothing breaks, provided the placeholders keep their names. The master stays a normal Google Slides file that a designer opens and edits in the usual way. That is the practical difference from a scripted pipeline, where a renamed layer or a restructured slide typically breaks the code that targeted it.
Can I get a PDF as well as the Slides deck? +
Yes. Delivery can write a PDF beside the generated deck in the same Drive folder, with the same name. Teams that send the deck to a client usually want both: the Slides file to edit and the PDF to attach.
Does the free plan cover this? +
It covers proving it works. The Free plan exports one real document a month, up to ten pages, with no watermark and no credit card, which is enough to connect your own base and see your own deck come out correctly. Volume is what you pay for later.

Related reading

Stop hand-building the same document every cycle.

Tell us what you're trying to automate. We respond within one business day with a real number and a scoping call invitation.

Get Started →