This workflow follows the Google Drive → Google Sheets recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": false
},
"name": "Automatically generate an Invoice PDF from Google Sheets data with DocuPotion",
"tags": [],
"nodes": [
{
"id": "487323b0-8936-4a05-bdc9-f54a0836a3fc",
"name": "Invoice Status Updated to Active",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
16,
368
],
"parameters": {
"event": "rowUpdate",
"options": {
"columnsToWatch": [
"status"
]
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1441531062,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QDxomX6g1ycS_4p9MU3vdEuveKGwGyw0eqnsMzDo0ho/edit#gid=1441531062",
"cachedResultName": "invoices"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1QDxomX6g1ycS_4p9MU3vdEuveKGwGyw0eqnsMzDo0ho",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QDxomX6g1ycS_4p9MU3vdEuveKGwGyw0eqnsMzDo0ho/edit?usp=drivesdk",
"cachedResultName": "invoices"
}
},
"typeVersion": 1
},
{
"id": "8b686e35-af70-41f4-931b-cf1b48d9300e",
"name": "Filter for Updated Invoice",
"type": "n8n-nodes-base.filter",
"position": [
224,
368
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "ebf2d281-ae77-43a8-a40a-bdab7b8dbb86",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "Active"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "05f9174f-5025-4878-870f-7b4da57c6094",
"name": "Loop Over Invoices",
"type": "n8n-nodes-base.splitInBatches",
"position": [
480,
368
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "68d816b5-26d8-4007-9132-6ee7adc71335",
"name": "Get Invoice Items",
"type": "n8n-nodes-base.googleSheets",
"position": [
704,
384
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.invoice_number }}",
"lookupColumn": "invoice_number"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1852295381,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QDxomX6g1ycS_4p9MU3vdEuveKGwGyw0eqnsMzDo0ho/edit#gid=1852295381",
"cachedResultName": "line items"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1QDxomX6g1ycS_4p9MU3vdEuveKGwGyw0eqnsMzDo0ho",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QDxomX6g1ycS_4p9MU3vdEuveKGwGyw0eqnsMzDo0ho/edit?usp=drivesdk",
"cachedResultName": "invoices"
}
},
"typeVersion": 4.7
},
{
"id": "ecd31ef9-ff28-4a67-974c-b94d3e964039",
"name": "Create JSON Object From Items",
"type": "n8n-nodes-base.aggregate",
"position": [
880,
384
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "a1cba617-6079-4f2e-aadb-f68c7eec26e1",
"name": "Generate PDF",
"type": "n8n-nodes-docupotion.docupotion",
"position": [
1040,
384
],
"parameters": {
"data": "={\n \"invoice_number\": \"{{ $('Invoice Status Updated to Active').item.json.invoice_number }}\",\n \"invoice_date\": \"{{ $('Invoice Status Updated to Active').item.json.invoice_date }}\",\n \"due_date\": \"{{ $('Invoice Status Updated to Active').item.json.due_date }}\",\n \"customer_name\": \"{{ $('Invoice Status Updated to Active').item.json.customer_name }}\",\n \"customer_company\": \"{{ $('Invoice Status Updated to Active').item.json.customer_company }}\",\n \"customer_address\": \"{{ $('Invoice Status Updated to Active').item.json.customer_address }}\",\n \"customer_email\": \"{{ $('Invoice Status Updated to Active').item.json.customer_email }}\",\n \"total\": \"{{ $('Create JSON Object From Items').item.json.data.reduce((sum, item) => sum + (item.quantity * item.unit_price), 0).toFixed(2) }}\",\n \"line_items\": {{ JSON.stringify($('Create JSON Object From Items').item.json.data) }}\n} ",
"templateId": "YOUR_DOCUPOTION_TEMPLATE_ID"
},
"typeVersion": 1
},
{
"id": "de59529a-1d63-4bde-bd17-446bf921e8b5",
"name": "Upload to Google Drive",
"type": "n8n-nodes-base.googleDrive",
"position": [
1056,
672
],
"parameters": {
"name": "=Invoice-{{ $('Loop Over Invoices').item.json.invoice_number }}.pdf",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "root",
"cachedResultName": "/ (Root folder)"
}
},
"typeVersion": 3
},
{
"id": "5d9d2160-d4cd-4275-b3a4-278dcfaef7a7",
"name": "Add Link to Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1056,
896
],
"parameters": {
"columns": {
"value": {
"status": "Sent",
"pdf_url": "={{ $json.webViewLink }}",
"invoice_number": "={{ $('Loop Over Invoices').item.json.invoice_number }}"
},
"schema": [
{
"id": "invoice_number",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "invoice_number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "invoice_date",
"type": "string",
"display": true,
"required": false,
"displayName": "invoice_date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "due_date",
"type": "string",
"display": true,
"required": false,
"displayName": "due_date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "status",
"type": "string",
"display": true,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "customer_name",
"type": "string",
"display": true,
"required": false,
"displayName": "customer_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "customer_email",
"type": "string",
"display": true,
"required": false,
"displayName": "customer_email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "customer_company",
"type": "string",
"display": true,
"required": false,
"displayName": "customer_company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "customer_address",
"type": "string",
"display": true,
"required": false,
"displayName": "customer_address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "pdf_url",
"type": "string",
"display": true,
"required": false,
"displayName": "pdf_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"invoice_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1441531062,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QDxomX6g1ycS_4p9MU3vdEuveKGwGyw0eqnsMzDo0ho/edit#gid=1441531062",
"cachedResultName": "invoices"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1QDxomX6g1ycS_4p9MU3vdEuveKGwGyw0eqnsMzDo0ho",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QDxomX6g1ycS_4p9MU3vdEuveKGwGyw0eqnsMzDo0ho/edit?usp=drivesdk",
"cachedResultName": "invoices"
}
},
"typeVersion": 4.7
},
{
"id": "6706b40e-13eb-42c4-805b-914146499702",
"name": "Sticky Note - Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-576,
176
],
"parameters": {
"color": 4,
"width": 540,
"height": 656,
"content": "## Generate PDF Invoices from Google Sheets\n\n**Who's it for:** Freelancers, small businesses, or anyone issuing invoices from a spreadsheet.\n\n**What it does:** When you change the status of an invoice to `Active` in Google Sheets, this workflow creates a PDF of an invoice from a reusable DocuPotion template.\n\n**How it works:**\n1. Google Sheets Trigger watches the `invoices` sheet for status changes (polls every minute)\n2. Filter: only rows where `status = Active` proceed\n3. Loop over each updated invoice:\n - Fetch matching rows from the `line items` sheet\n - Aggregate line items into a single array\n - Generate PDF via DocuPotion template\n - Upload to Google Drive\n - Update the invoice row: set `pdf_url` and status `Sent`\n\n**Setup (see sticky notes below):**\n- Copy the example Google Sheet (link in template description) and replace the document ID in all three Google Sheets nodes\n- Install the DocuPotion community node\n- Create a DocuPotion invoice template and paste its ID into the `Generate PDF` node\n- Connect Google Sheets, Google Drive, and DocuPotion credentials"
},
"typeVersion": 1
},
{
"id": "6472b160-a55f-4bc5-8480-ac8b92295c6a",
"name": "Sticky Note - Sheets Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
0,
0
],
"parameters": {
"color": 5,
"width": 532,
"height": 300,
"content": "### \u2699\ufe0f Setup: Google Sheets\nReplace the **document ID** in this node (and in `Get Invoice Items` + `Add Link to Google Sheet`) with your own.\n\nYour Sheet needs two tabs:\n- **invoices**: `invoice_number`, `invoice_date`, `due_date`, `status`, `customer_name`, `customer_email`, `customer_company`, `customer_address`, `pdf_url`\n- **line items**: `invoice_number`, `description`, `quantity`, `unit_price`\n\nTo trigger: set a row's `status` to `Active`."
},
"typeVersion": 1
},
{
"id": "39cdb2fd-220f-4c13-81d3-3ad0ccba02ff",
"name": "Sticky Note - DocuPotion Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
1200,
384
],
"parameters": {
"color": 3,
"width": 404,
"height": 184,
"content": "### \u2699\ufe0f Setup: DocuPotion\nThis is a **community node**. Install via:\nSettings \u2192 Community Nodes \u2192 DocuPotion\n\nThen create your invoice template in DocuPotion and replace the `YOUR_DOCUPOTION_TEMPLATE_ID` placeholder in this node's **Template ID** field."
},
"typeVersion": 1
},
{
"id": "2e7c0c29-1ee8-457b-94fd-0da1ebc19b4e",
"name": "Sticky Note - Drive Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
1216,
672
],
"parameters": {
"color": 6,
"width": 320,
"height": 172,
"content": "### \u2699\ufe0f Optional: Google Drive\nPDFs are saved to the **root** of your Drive with filename `Invoice-{invoice_number}.pdf`.\n\nTo save them to a subfolder instead, change the **Folder** field in this node."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"executionOrder": "v1"
},
"connections": {
"Generate PDF": {
"main": [
[
{
"node": "Upload to Google Drive",
"type": "main",
"index": 0
}
]
]
},
"Get Invoice Items": {
"main": [
[
{
"node": "Create JSON Object From Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Invoices": {
"main": [
[],
[
{
"node": "Get Invoice Items",
"type": "main",
"index": 0
}
]
]
},
"Upload to Google Drive": {
"main": [
[
{
"node": "Add Link to Google Sheet",
"type": "main",
"index": 0
}
]
]
},
"Add Link to Google Sheet": {
"main": [
[
{
"node": "Loop Over Invoices",
"type": "main",
"index": 0
}
]
]
},
"Filter for Updated Invoice": {
"main": [
[
{
"node": "Loop Over Invoices",
"type": "main",
"index": 0
}
]
]
},
"Create JSON Object From Items": {
"main": [
[
{
"node": "Generate PDF",
"type": "main",
"index": 0
}
]
]
},
"Invoice Status Updated to Active": {
"main": [
[
{
"node": "Filter for Updated Invoice",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
Easily transform your Google Sheets invoice data into professional PDF documents without manual effort, saving hours on administrative tasks and ensuring timely billing for small business owners or freelancers. This workflow automatically detects when an invoice status updates to active in Google Sheets, compiles the associated items into a structured format, and generates a polished PDF using DocuPotion. It then uploads the file to Google Drive and inserts the link back into the sheet for seamless tracking and sharing.
Use this workflow when you maintain invoices in Google Sheets and need event-driven PDF generation for recurring billing cycles, such as monthly client services. Avoid it for one-off invoices or complex custom designs requiring manual tweaks, as it relies on predefined templates in DocuPotion. Common variations include adapting the trigger for new sheet entries or integrating email notifications to send the PDF directly to clients.
About this workflow
Automatically generate an Invoice PDF from Google Sheets data with DocuPotion. Uses googleSheetsTrigger, googleSheets, n8n-nodes-docupotion, googleDrive. Event-driven trigger; 12 nodes.
Source: https://github.com/docupotion/n8n-templates/blob/main/invoice-from-google-sheets.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Invoice PDF to Sheets. Uses googleDriveTrigger, googleDrive, httpRequest, googleSheets. Event-driven trigger; 10 nodes.
This workflow is a sophisticated, end-to-end solution that automates the entire billing lifecycle, from invoice creation to intelligent payment reminders and status tracking. It's designed to give you
How It Works Trigger: Watches for new emails in Gmail with PDF/image attachments. OCR: Sends the attachment to OCR.space API (https://ocr.space/OCRAPI) to extract invoice text. Parsing: Extracts key f
This workflow automatically generates and delivers professional invoice PDFs whenever a Stripe checkout session completes. It fetches the line items from Stripe, formats them into a clean invoice with
This is the ultimate sales-to-cash automation. When a deal in Airtable is marked "Approved for Invoicing," this workflow intelligently syncs customer data across QuickBooks and Stripe (creating them i