Skip to main content

Generate PDF invoices from Google Sheets with PDF.co

Workflow preview

Workflow preview
100%
Generate PDF invoices from Google Sheets with PDF.co preview
Open on n8n.io

Important notice

This workflow is provided as-is. Please review and test before using in production.

1. Workflow Overview

This workflow automatically pulls invoice rows from Google Sheets and generates a PDF invoice using a PDF.co template. Perfect for small businesses that manage invoices in Sheets but need professio...

Best for

  • Invoice Processing automation workflows
  • Multimodal AI automation workflows
  • intermediate n8n builders looking for reusable templates

Tools used

n8n-nodes-base.manualtrigger, n8n-nodes-base.stickynote, n8n-nodes-base.googlesheets, n8n-nodes-base.code, n8n-nodes-pdfco.pdfco api

Source and attribution

This workflow is cataloged by N8N Workflows and links back to its original n8n.io source page by Robert Breen.

Original n8n.io source

1.1 Workflow description

Title
Generate PDF invoices from Google Sheets with PDF.co
Workflow name
Generate PDF invoices from Google Sheets with PDF.co

This workflow automatically pulls invoice rows from Google Sheets and generates a PDF invoice using a PDF.co template.
Perfect for small businesses that manage invoices in Sheets but need professional, ready-to-send PDFs.


⚙️ Setup Instructions

1️⃣ Connect Google Sheets

  1. Copy this Invoice Template Sheet into your own Drive
  2. In n8n → Credentials → New → Google Sheets (OAuth2)
    • Log in with your Google account and save
  3. In the workflow, select your Spreadsheet ID and Worksheet (Sheet1) in the Google Sheets node

2️⃣ Connect PDF.co

  1. Create a free account at PDF.co
  2. Copy your API Key from the dashboard
  3. In n8n → Credentials → New → PDF.co API
    • Paste your API Key → Save
  4. In the PDF.co node, select your credential and choose the HTML Template to PDF operation

3️⃣ Create Your PDF.co HTML Template

  1. In your PDF.co dashboard, go to Templates → New Template
  2. Paste in the HTML from the template section below
  3. Save the template and copy its Template ID
  4. Replace the templateId in the workflow with your new ID

🧠 How It Works

  • Get Invoice Rows → Reads your Google Sheet rows (customer, line items, totals)
  • Convert to HTML Import (Code node) → Formats rows into structured data for the invoice template
  • Create PDF (PDF.co) → Sends the data into PDF.co and generates a professional PDF invoice

📬 Contact

Need help customizing this (e.g., add taxes, change invoice styling, or auto-email invoices)?

📧 [email protected]
🔗 Robert Breen
🌐 ynteractive.com


📄 Full HTML Template for PDF.co

Use this HTML when creating your PDF.co template:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>Invoice {{invoiceNumber}}</title>
  <style>
    body { font-family: Arial, Helvetica, sans-serif; margin: 36px; color: #222; }
    .header { display: flex; justify-content: space-between; align-items: center; }
    .brand { max-height: 56px; }
    h1 { margin: 12px 0 4px; font-size: 22px; }
    .meta { font-size: 12px; color: #555; }
    .two-col { display: flex; gap: 24px; margin-top: 16px; }
    .box { flex: 1; border: 1px solid #ddd; padding: 12px; border-radius: 6px; }
    .label { font-size: 11px; color: #666; text-transform: uppercase; letter-spacing: .02em; }
    table { width: 100%; border-collapse: collapse; margin-top: 16px; }
    th, td { border-bottom: 1px solid #eee; padding: 10px 8px; font-size: 13px; }
    th { background: #fafafa; text-align: left; }
    tfoot td { border-top: 2px solid #ddd; font-size: 13px; }
    .right { text-align: right; }
    .totals td { padding: 6px 8px; }
    .grand { font-weight: 700; font-size: 14px; }
    .notes { margin-top: 18px; font-size: 12px; color: #444; }
  </style>
</head>
<body>
  <div>
    <div>
      <h1>Invoice {{invoiceNumber}}</h1>
      <div>Date: {{invoiceDate}} &nbsp; | &nbsp; Due: {{dueDate}}</div>
    </div>
    {{#company.logoUrl}}
    <img src alt="Logo" />
    {{/company.logoUrl}}
  </div>

  <div>
    <div>
      <div>From</div>
      <div><strong>{{company.name}}</strong></div>
      <div>{{company.address}}</div>
      <div>{{company.phone}}</div>
      <div>{{company.email}}</div>
    </div>
    <div>
      <div>Bill To</div>
      <div><strong>{{billTo.name}}</strong></div>
      <div>{{billTo.address}}</div>
      <div>{{billTo.email}}</div>
    </div>
  </div>

  <table>
    <thead>
      <tr>
        <th>#</th>
        <th>Description</th>
        <th>Qty</th>
        <th>Unit Price</th>
        <th>Line Total</th>
      </tr>
    </thead>
    <tbody>
      {{#items}}
      <tr>
        <td>{{line}}</td>
        <td>{{description}}</td>
        <td>{{qty}}</td>
        <td>{{unitPriceFmt}}</td>
        <td>{{lineTotalFmt}}</td>
      </tr>
      {{/items}}
    </tbody>
    <tfoot>
      <tr>
        <td colspan="4">Subtotal</td>
        <td>{{subTotalFmt}}</td>
      </tr>
      <tr>
        <td colspan="4">Tax ({{taxRatePct}})</td>
        <td>{{taxAmountFmt}}</td>
      </tr>
      <tr>
        <td colspan="4">Discount</td>
        <td>-{{discountFmt}}</td>
      </tr>
      <tr>
        <td colspan="4">Total</td>
        <td>{{totalFmt}}</td>
      </tr>
    </tfoot>
  </table>

  <div>
    <strong>Notes:</strong> {{notes}}<br />
    <strong>Terms:</strong> {{terms}}
  </div>
&lt;/body&gt;
&lt;/html&gt;

1.2 Logical Blocks

This catalog entry is organized from the workflow JSON. The node-level section below shows the executable blocks available for review before importing the template.

2. Block-by-Block Analysis

Block 1 - When clicking ‘Execute workflow’

Type / Role
n8n-nodes-base.manualTrigger - manualTrigger
Config choices
Version 1

Block 2 - Sticky Note

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 3 - Sticky Note51

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 4 - Get Invoice Rows

Type / Role
n8n-nodes-base.googleSheets - googleSheets
Config choices
Version 4.7

Block 5 - Convert to html import

Type / Role
n8n-nodes-base.code - code
Config choices
Version 2

Block 6 - Create PDF

Type / Role
n8n-nodes-pdfco.PDFco Api - PDFco Api
Config choices
Version 1

Block 7 - Sticky Note57

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

Block 8 - Sticky Note58

Type / Role
n8n-nodes-base.stickyNote - stickyNote
Config choices
Version 1

3. Summary Table

Workflow Generate PDF invoices from Google Sheets with PDF.co
Complexity intermediate
Nodes 8
Categories Invoice Processing, Multimodal AI
Author Robert Breen
Published 26 Aug 2025

4. Reproducing the Workflow from Scratch

  1. 1. Download the workflow JSON

    Use the JSON export at /data/workflows/7859/7859.json as the source template for this automation.

  2. 2. Import the template into n8n

    Open n8n, import the downloaded JSON, and review each node before activating the workflow.

  3. 3. Configure credentials and variables

    Replace placeholder credentials, API keys, webhook URLs, account IDs, and environment-specific values with your own settings.

  4. 4. Test with sample data

    Run the workflow manually or in a staging workspace, inspect node output, and confirm downstream systems receive the expected data.

  5. 5. Activate and monitor

    Enable the workflow only after testing, then monitor executions, errors, and rate limits during the first production runs.

5. General Notes & Resources

Review imported nodes carefully before activation. This catalog entry is intended to help you inspect the workflow structure, understand required services, and find related templates faster.

Node names, credentials, schedules, webhook paths, and external service limits may need adjustment for your workspace.

Frequently asked questions

What does Generate PDF invoices from Google Sheets with PDF.co do?

This workflow automatically pulls invoice rows from Google Sheets and generates a PDF invoice using a PDF.co template. Perfect for small businesses that manage invoices in Sheets but need professio...

What do I need before importing this workflow?

Review the workflow JSON, configure any required credentials in n8n, and test the automation in a safe workspace before using it in production.

Can I customize this workflow?

Yes. Use the block-by-block analysis and the downloadable JSON to inspect each node, then adjust credentials, prompts, schedules, filters, or destinations for your Invoice Processing, Multimodal AI use case.