AutomationFlowsFinance › Generate Invoice PDFs from Google Sheets with Docupotion

Generate Invoice PDFs from Google Sheets with Docupotion

Original n8n title: Automatically Generate an Invoice PDF From Google Sheets Data with Docupotion

Automatically generate an Invoice PDF from Google Sheets data with DocuPotion. Uses googleSheetsTrigger, googleSheets, n8n-nodes-docupotion, googleDrive. Event-driven trigger; 12 nodes.

Event trigger★★★★☆ complexity12 nodesGoogle Sheets TriggerGoogle SheetsN8N Nodes DocupotionGoogle Drive
Finance Trigger: Event Nodes: 12 Complexity: ★★★★☆ Added:

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 →

Download .json
{
  "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
          }
        ]
      ]
    }
  }
}
Pro

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 →

More Finance workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Finance

Invoice PDF to Sheets. Uses googleDriveTrigger, googleDrive, httpRequest, googleSheets. Event-driven trigger; 10 nodes.

Google Drive Trigger, Google Drive, HTTP Request +1
Finance

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

Google Sheets Trigger, Google Docs, OpenAI +4
Finance

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

Gmail Trigger, Google Sheets, Slack +3
Finance

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

Stripe Trigger, HTTP Request, N8N Nodes Templatefox +2
Finance

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

Airtable Trigger, Stripe, QuickBooks +2