Make Tutorial

Automate Invoice Generation with Make

Connect Stripe, Gumroad, or any payment platform to auto-generate and send professional invoices using Make's visual scenario builder and iteration modules.

Vincent Ventalon
Vincent Ventalon
· Updated

Why automate invoices?

You just got a payment notification. Now you need to create an invoice — open your template, copy the customer details, add line items, double-check the math, export to PDF, attach it to an email. For one order? Fine. For 10 a day? That's your entire morning gone.

Stripe's built-in invoices work, but they look like everyone else's. Same layout, same font, same "powered by Stripe" branding. If you're running a serious business, you probably want something that actually looks like your business.

Here's what we're building: a Make scenario that fires whenever you get paid, retrieves the invoice details from Stripe, generates a branded PDF, and delivers it to your customer via email while saving a copy to Google Drive.

Complete Make scenario: Stripe trigger, Retrieve Invoice, TemplateFox PDF generation, Router to Gmail and Google Drive

Use this template on Make — import the complete scenario in one click and configure your accounts.

1

Create your invoice template

1.1 — Choose a template

Start with one of our pre-built invoice templates or create your own:

  1. Go to Templates
  2. Filter by Invoice category
  3. Choose a template that matches your style (minimal, corporate, creative)
  4. Click Use Template to add it to your dashboard

This tutorial uses the Freelancer Consultant Invoice template. It's clean, supports VAT and IBAN fields, and works well for both freelancers and small businesses.

Other options: European Corporate for enterprise invoicing, Modern with QR Code for instant payments.

Screenshot: Freelancer Consultant Invoice template in the template gallery

1.2 — Understand the template structure

The template uses dynamic fields that get replaced with real data. Some fields you'll hardcode (your company info), others come from Make (client, invoice details).

Freelancer Consultant invoice template in the visual editor showing dynamic fields

Hardcode once (your company)

  • company_name — Your business name
  • company_address — Your address
  • company_vat — Your VAT number
  • iban, bic, bank_name — Bank details

Edit these directly in the template — they stay the same for every invoice.

Dynamic from Make (per invoice)

  • client_company — Customer name
  • client_address — Customer address
  • invoice_number — Unique invoice ID
  • invoice_date, due_date — Dates
  • items[] — Line items array

Map these from your payment platform in the Make scenario.

Auto-expanding line items table

The items table automatically repeats for each product in the items array. Send 2 items, get 2 rows. Send 10 items, get 10 rows.

Each row uses:
{{items.description}} — Service name
{{items.amount_excl_vat}} — Price before tax
{{items.vat_rate}} — Tax rate (20%)
{{items.vat_amount}} — Tax amount

Automatic totals with expressions

The template calculates subtotal, VAT, and total automatically using sum() expressions. You don't need to calculate these in Make.

Subtotal: {{sum(items, 'amount_excl_vat')}}
VAT: {{sum(items, 'vat_amount')}}
Total: {{sum(items, 'amount_excl_vat') + sum(items, 'vat_amount')}}

Page numbers (for multi-page invoices)

The footer shows page numbers using system variables. If your invoice has many line items and spans multiple pages, pagination is automatic.

{{sys.page_number}} / {{sys.total_pages}} → 1 / 2

Learn more: Expressions · System variables · Tables

1.3 — Test with the Preview tab

The Preview tab lets you test your template with sample data before building the Make scenario. The JSON panel on the right contains your test data, and the rendered invoice appears on the left in real-time.

1

JSON data maps to template fields

Each key in the JSON (like client_company) fills its matching {{client_company}} placeholder.

2

Line items array becomes table rows

The objects in the items array generate table rows automatically.

3

Totals calculate automatically

The sum() expressions add up all values across the items array.

Tip: Use the Copy Payload button to copy the JSON structure. This is the exact format you'll need to send from the Make HTTP module.

View full JSON payload example
{
"company_name": "Jane Smith Consulting",
"company_address": "15 Baker Street, London W1U 3BW",
"company_email": "jane@smithconsulting.co.uk",
"company_vat": "GB 123 4567 89",
"client_company": "Acme Corp Ltd",
"client_address": "100 Market Street, Manchester M1 1PD",
"client_vat": "GB 987 6543 21",
"invoice_number": "INV-2026-0087",
"invoice_date": "March 15, 2026",
"due_date": "April 14, 2026",
"payment_terms": "Net 30",
"iban": "GB29 NWBK 6016 1331 9268 19",
"bic": "NWBKGB2L",
"bank_name": "NatWest",
"notes": "Thank you for your business.",
"items": [
{
"description": "UX Research & Analysis",
"amount_excl_vat": 2400,
"vat_rate": "20%",
"vat_amount": 480
},
{
"description": "Wireframes & Prototyping",
"amount_excl_vat": 3600,
"vat_rate": "20%",
"vat_amount": 720
},
{
"description": "Design System Setup",
"amount_excl_vat": 5200,
"vat_rate": "20%",
"vat_amount": 1040
}
]
}
2

Build your Make scenario

The scenario runs automatically. Payment hits Stripe, invoice lands in your customer's inbox and gets archived to Google Drive. All using native modules — no HTTP configuration or JSON to write.

Complete Make scenario: Stripe trigger, Retrieve Invoice, TemplateFox PDF generation, Router to Gmail and Google Drive
Scenario flow:
Stripe (trigger) → Retrieve Invoice → TemplateFox (Generate PDF) → Download PDF → Router → Gmail + Google Drive

2.1 — Set up the Stripe trigger

The scenario starts when a Stripe checkout session completes. Stripe's native Make module handles the webhook automatically.

  1. Go to make.com and create a new scenario
  2. Click the + button to add your first module
  3. Search for Stripe → select Watch Events
  4. Filter by checkout.session.completed
  5. Connect your Stripe account and run once to pull sample data

Testing with Stripe Test Mode

Connect Make using your test secret key (starts with sk_test_). Then create a test payment in Stripe Dashboard:

  • Card: 4242 4242 4242 4242
  • Expiry: any future date (e.g., 10/30)
  • CVC: 123

2.2 — Retrieve the invoice

The checkout event contains an invoice ID. Add a second Stripe module to retrieve the full invoice object — it includes the customer details, line items, amounts, and everything you need.

  1. Click + after the trigger
  2. Search for Stripe → select Retrieve an Invoice
  3. Map the Invoice ID field to the checkout session's invoice property

What you get from the invoice object

number — Invoice number (e.g., INV-0087)
customer_name — Customer name
customer_email — Customer email
customer_address — Full address object
lines.data[] — Line items array
subtotal, tax, total — Amounts (in cents)
currency — Currency code
due_date — Due date timestamp

Stripe amounts: Stripe sends amounts in cents (e.g., 2500 = $25.00). Use Make's built-in formatNumber() to divide by 100 when mapping to your template.

2.3 — Generate the PDF

TemplateFox has a native Make module — no HTTP configuration needed. Select your template, and the module automatically loads its fields for visual mapping.

  1. Click + after the Retrieve Invoice module
  2. Search for TemplateFox → select Generate PDF
  3. Connect your TemplateFox account using your API key (from your dashboard)
  4. Select your invoice template from the dropdown
  5. The template fields appear automatically — map each one from the Stripe invoice data using Make's variable picker

Tip: Hardcode your company info (address, IBAN, VAT) directly in the template editor. Only map dynamic data — customer name, invoice number, amounts, line items — from the Stripe module. This keeps the scenario cleaner.

The module returns a signed URL to the generated PDF. This URL is used in the next steps to email and store the invoice.

2.4 — Deliver the invoice

The last part of the scenario downloads the PDF and delivers it to two destinations in parallel using a Router: email to the customer and a copy to Google Drive for your records.

Download the PDF

  1. Add an HTTP → Get a file module
  2. Map the URL to the PDF URL from the TemplateFox module

Add a Router

  1. Add a Router module after the download — this creates two parallel branches

Branch 1: Email the invoice

  1. Add Gmail → Send an Email
  2. To: map to customer_email from the Retrieve Invoice module
  3. Subject: Your Invoice {{number}}
  4. Attachments: map the downloaded PDF file from the HTTP module

Branch 2: Save to Google Drive

  1. Add Google Drive → Upload a File
  2. Select your destination folder
  3. File name: {{number}}.pdf
  4. Data: map the downloaded PDF file

That's it. Payment comes in → invoice gets generated → customer receives a branded PDF by email → a copy is saved to your Drive. Turn the scenario on and it runs 24/7.

Import the complete scenario to get started in one click.

3

Scale with iteration

The basic scenario above handles one invoice per payment. But Make really shines when you need to process invoices in bulk — generating dozens or hundreds at once from a spreadsheet, database, or batch of transactions.

3.1 — Bulk invoicing with the Iterator module

Make's Iterator module splits an array into individual items and processes each one separately. This is perfect for generating invoices from a batch of records — like rows in Google Sheets or records in Airtable.

Batch invoicing flow:
Google Sheets (Watch Rows) → Iterator → TemplateFox (Generate PDF) → Gmail → Google Sheets (Update Row)

Here's how to set it up:

  1. Use Google Sheets → Search Rows as the trigger (filter for rows where "Invoice Sent" = FALSE)
  2. Add a Flow Control → Iterator module
  3. Point the Iterator at the array of rows from Google Sheets
  4. Add the TemplateFox → Generate PDF module — it runs once per row
  5. Add the Gmail module to send each invoice
  6. Add Google Sheets → Update Row to set "Invoice Sent" = TRUE

Rate limits: Make processes Iterator items sequentially, not in parallel. For large batches (100+ invoices), consider scheduling the scenario to run during off-peak hours. The TemplateFox API handles concurrent requests well, but email providers may have sending limits.

Screenshot: Make scenario with Iterator module showing batch invoice processing flow

3.2 — Conditional routing

Make's Router module lets you branch your scenario based on conditions. Use this to send different invoice templates depending on the transaction type, region, or amount.

By region

EU customers get a VAT-compliant template with IBAN details. US customers get a simpler template with USD formatting.

By amount

Orders over $1,000 use a detailed template with extra terms and conditions. Smaller orders use a minimal receipt-style template.

To set up routing:

  1. Add a Router module after your trigger
  2. Each route gets a filter — e.g., customer.address.country = "US"
  3. Each route has its own TemplateFox module pointing to a different template
  4. All routes can share the same email module at the end

Pro tip: Combine Router with Iterator for maximum flexibility. For example: fetch all unpaid invoices from Airtable, iterate through them, then route each one to the right template based on the client's country.

Screenshot: Make scenario with Router module showing two branches for EU and US invoice templates

Supported platforms

Any payment platform with a Make module or webhook support works. Here are the most popular:

S
Stripe
G
Gumroad
P
Paddle
L
LemonSqueezy
P
PayPal
S
Square
S
Shopify
W
WooCommerce
C
Chargebee

Same workflow, other platforms

Not your automation tool? The same setup works elsewhere:

Frequently asked questions

Which payment platforms can I connect?

Any platform with a Make module or webhook support: Stripe, Gumroad, Paddle, LemonSqueezy, PayPal, Square, Shopify, WooCommerce, and hundreds more. If it can send a webhook or has a Make module with a "Payment Received" trigger, it works. For platforms without a native module, use the generic HTTP webhook trigger.

Can I include line items and taxes on the invoice?

Yes. Use data binding to pass arrays of line items from your payment platform. Use Make's data transformer to format amounts or restructure nested data before sending it. The template automatically generates rows for each product, calculates subtotals, applies tax rates, and shows the final total.

How do I handle different currencies?

Your payment platform sends the currency with each transaction. Map the currency field to your template, and it will display the correct symbol. You can also use Make's Router module with conditional logic to apply different tax labels (VAT, GST, Sales Tax) based on region.

Can I send the invoice directly to the customer?

Yes. The scenario includes a Router module that splits into two branches: one sends the PDF as an email attachment via Gmail (or Outlook/SMTP), and the other saves a copy to Google Drive. The customer's email comes from the Stripe invoice object.

What about invoice numbering?

Use Make's built-in functions and text parser to generate sequential invoice numbers. Combine your payment platform's transaction ID with a prefix, or connect to a Google Sheet that tracks the last invoice number and increments it. See system variables for additional options.

What does automated invoicing cost?

TemplateFox offers 60 free PDFs per month. Paid plans start at $19/month for higher volume. Make has a free tier with 1,000 operations/month. View pricing.

Automate your PDF generation

Complete documentation, no-code integrations, and a powerful API to help you generate PDFs at scale. Let us handle the boring stuff.