๐Ÿ”ฌ Generate marketing reports from Google Sheets with GPT-4 insights and PDF.co

โšก 330 views ยท ๐Ÿ”ฌ Document Extraction & Analysis

Description

This workflow pulls marketing data from Google Sheets, aggregates spend by channel, generates an AI-written summary, and outputs a formatted PDF report using a custom HTML template on PDF.co.


โš™๏ธ Setup Instructions

1๏ธโƒฃ Prepare Your Google Sheet

Connect Google Sheets in n8n

  1. Go to n8n โ†’ Credentials โ†’ New โ†’ Google Sheets (OAuth2)
  2. Log in with your Google account and grant access
  3. Select the Spreadsheet ID and Worksheet in the workflow

2๏ธโƒฃ Set Up PDF.co for PDF Reports

  1. Create a free account at PDF.co
  2. In PDF.co Dashboard โ†’ HTML to PDF Templates, create a new Mustache template
    • Paste the HTML provided at the bottom of this description
    • Save, and note your Template ID
  3. In n8n โ†’ Credentials โ†’ New โ†’ PDF.co API, paste your API Key and save
  4. In the workflow, select your PDF.co credential in the Create PDF node
  5. Replace the templateId with your Template ID

๐Ÿง  How It Works


๐Ÿ“ฌ Contact

Need help customizing this (e.g., filtering by campaign, sending reports by email, or formatting your PDF)?


๐Ÿ“„ HTML Template (for PDF.co)

> Paste this into a new HTML Template on PDF.co and reference its Template ID in your workflow.

<!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;

## ๐Ÿ”— Nodes Used

Google Sheets, AI Agent, OpenAI Chat Model, Structured Output Parser, Summarize

## ๐Ÿ“ฅ Import

Download [`workflow.json`](workflow.json) and import into n8n:
**Workflow menu โ†’ Import from File**

[๐Ÿ“– Importing guide](../../../docs/importing-templates.md) ยท [๐Ÿ”‘ Credential setup](../../../docs/credential-setup.md)