Skip to main content

Generate Google Slides, Docs and PDFs from n8n

An n8n verified node that adds document generation to any n8n workflow, on n8n Cloud or self-hosted. Pass it rows from a form, a schedule, a CRM or an AI step, and it builds branded Google Slides, Google Docs and PDFs from your template, then delivers them where you choose.

n8n is very good at moving data between systems. It is not built to lay that data out as a document someone would put in front of a client. The SourceToDocs node closes that gap: it is the step in an n8n workflow that turns rows into a finished Google Slides deck, Google Doc or PDF, built from a template your designer owns.

You keep n8n as the orchestrator. Triggers, branching, retries and credentials stay where they already are. SourceToDocs does the one job n8n’s own Google nodes make hard, which is n8n document generation from a branded template at the volume your workflow produces.

The SourceToDocs node in the n8n nodes panel: generate Google Slides, Google Docs and PDF documents from the rows in your workflow
Search the nodes panel for SourceToDocs and install it from there. It is verified by n8n and sits next to n8n's own app nodes.

Why not n8n’s built-in Google Slides and Docs nodes

n8n ships Google Slides and Google Docs nodes, and for small edits they are the right tool. They are editing primitives, though, not a generator. The Google Slides node can create a presentation, read one, list its slides and replace text. The Google Docs node can create, read and update a document.

That works for swapping a client name into a fixed deck. It gets painful as soon as the document depends on how much data there is. How to append a slide to an existing deck is a recurring question on the n8n community forum, and the answer given is a raw HTTP call to the Google Slides API.

What you needBuilt-in Google nodesSourceToDocs node
Start from a branded templateCopy the file with the Drive node, then replace text placeholder by placeholderThe template is the document; one Generate step
One deck per row, account or clientLoop the items and repeat copy-and-replace for eachSet up once in SourceToDocs; one run produces every file
A slide or section repeated per row, such as a 40-session agendaNot supported by the node; needs HTTP requests to the Slides APIHandled by the template
PDF as well as Slides or DocsA separate Drive export stepPDF is an output format of the same run
Land the file in a Drive folderAnother node to move or upload itChosen in Deliver To

If your workflow fills in the same three fields on the same one-page deck, keep the native node. If the output is a real document that changes shape with the data, that is what this node is for.

What the node can do

The node has five actions, grouped the way n8n groups everything: by the thing they act on.

ResourceActionUse it to
DocumentGenerate documentStart a generation run and, optionally, wait for the files
DocumentGet documentRead one document’s setup
DocumentGet many documentsList the documents in a project
ProjectGet many projectsList the projects in your workspace
RunGet runCheck a run started earlier, by its ID
SourceToDocs node details in n8n, installed via npm, listing five actions: Generate document, Get document, Get many documents, Get many projects and Get run
The installed node's details panel. Generate document is the one most workflows use; the read actions are for lookups and for checking on long runs.

Generate is where nearly all the work happens. You point it at a project and a document, which is the template plus its setup in SourceToDocs, and tell it where the rows come from.

Two ways to feed it rows

The setting that matters most is Rows Come From. It decides whether n8n supplies the data or just pulls the trigger.

Connected data sources

SourceToDocs Generate settings in n8n with Rows Come From set to Connected Data Sources, delivering to a Google Drive folder and waiting up to 300 seconds

This workflow

SourceToDocs Generate settings in n8n with Rows Come From set to This Workflow, mapping all input items into a data set called sessions, with Unknown Keys set to Drop
The same Generate step configured both ways. Left: SourceToDocs reads the data source already connected to the project. Right: the workflow's own items become the rows of a data set.

Connected data sources. The project already reads from Airtable, Google Sheets or another connected source. n8n only decides when to generate: on a schedule, when a record changes, when someone submits a form. This is the simplest setup and the one to choose when the data already lives in a table SourceToDocs can read.

This workflow. The rows come from earlier n8n nodes instead. Each data set in the document gets its rows from an expression, and the usual one hands over every incoming item:

{{ $input.all().map(i => i.json) }}

Use this when the data doesn’t sit in one table: a webhook payload, a merged result from two APIs, a database query, or text an AI step just wrote. A document with several data sets gets one entry per set, so a deck can take its sessions from one node and its speakers from another.

n8n tends to add its own fields to every item, such as Airtable’s record ID and created time, or the Form Trigger’s submission time. Unknown Keys decides what happens to them. Drop strips anything that isn’t a column in the data set. Refuse sends the rows exactly as given, without stripping anything.

Set it up

  1. 01

    Install the node

    Open the nodes panel, search for SourceToDocs and click Install. The node is verified by n8n, so this works on n8n Cloud and on self-hosted instances. On self-hosted you can also install the npm package @twovmodules/n8n-nodes-sourcetodocs from Settings, then Community nodes.

  2. 02

    Add your credential

    Create a SourceToDocs account credential with an API token from your workspace. Every run the node starts is tied to that token.

  3. 03

    Pick the project and document

    Both are dropdowns that load from your workspace, so you choose the template by name rather than pasting IDs.

  4. 04

    Choose where rows come from

    Connected data sources, or this workflow with one row expression per data set.

  5. 05

    Choose delivery and waiting

    Select one or more Deliver To destinations, such as a Google Drive folder, and decide whether the workflow waits for the files.

The template itself is built in SourceToDocs, not in n8n. That separation is deliberate: a designer keeps editing the Google Slides or Docs master, and the n8n workflow never has to change when the layout does.

Get Started →

Waiting, retries and output

Generation is asynchronous: a short deck takes seconds, a long document with many repeated sections takes longer. The node gives you both ways of dealing with that.

  • Wait For Completion on. The node polls the run and only hands control to the next node once the files exist. You set how often it checks and how long it waits; the screenshots above check every 5 seconds for up to 300. Use this when the next step needs the files, for example to email a link or post it to Slack.
  • Wait For Completion off. The node returns as soon as the run has started. Save the run ID and check it later with Get run. Use this for big batches that would outlast the wait.
  • Idempotency Key. Set it to something unique to the request, such as an order or submission ID. If n8n retries the execution after a failure, the same key will not produce a second set of documents.
  • Simplify. When on, the node returns a compact result that is easier to map into the next node. Switch it off when you need the full run record.

Workflows teams build with it

The pattern is always the same: n8n catches the event and gathers the data, SourceToDocs produces the document. What changes is the trigger.

WorkflowTriggerRows come fromOutput
Proposal generatorForm Trigger or a CRM deal stageThis workflow: the form or deal fieldsBranded proposal deck plus a PDF for the client
Monthly client reportsSchedule Trigger on the first of the monthThis workflow: a database or analytics query per clientOne report per client, each in its own Drive folder
Airtable to Google SlidesAirtable record updateConnected data sourceA deck per record, regenerated when the record changes
Event programmeForm with an internal or public optionConnected data source, filtered per versionProgramme deck and PDF for the team, a public cut for attendees
AI-drafted documentsAny trigger, then an AI step that writes the copyThis workflow: the AI node’s output as rowsThe generated text laid into the branded template

The last row is worth a note. Asking an AI model to produce a whole deck gets you a deck that looks like the model’s idea of a deck. Asking it to write the words, then handing those words to a template, gets you your own layout every time. That split is the reason this node exists. 2V Automation, an n8n agency, describes the same pattern from their side: n8n for the plumbing, SourceToDocs for the document step.

Honest limits

  • The template lives in SourceToDocs. You can’t design or edit the layout from inside n8n. That is by design, but it means a new document type starts in the SourceToDocs app, not the workflow canvas.
  • Waiting has a ceiling. A run can take longer than Max Wait. The run itself carries on in SourceToDocs, so for very large batches turn waiting off and check on it with Get run.
  • Rows must match the data set. The node maps items to the columns you defined in SourceToDocs. Fields with no matching column are dropped or refused; they are never invented into the document.

FAQ

Can n8n generate Google Slides from a template?

Not well on its own. The built-in Google Slides node replaces text in an existing presentation, so you copy a deck and fill placeholders one by one, and repeating a slide per row needs raw API calls. The SourceToDocs node generates the full deck from your template in one step, including slides that repeat for every row.

Can n8n create PDFs?

Yes. Switch on Also generate PDF on the document and each single run delivers a PDF next to the Google Slides deck or Google Doc, so you don’t need an HTML-to-PDF service or a separate export step. Split runs (one file per customer) deliver the Google files only for now. See output formats.

Does my data have to be in SourceToDocs?

No. Set Rows Come From to This workflow and the rows come straight from your n8n items. Use Connected data sources only when the data already sits in a source the project reads, such as an Airtable base.

What happens if n8n retries a failed execution?

Set an Idempotency Key that is unique to the request. A retry with the same key won’t generate the documents a second time.

Do I still need the API?

Not for n8n. The node uses the same public API under the hood, so anything you’d do with an HTTP Request node is available as a configured step. The API is for the systems that aren’t n8n.

Related reading