Bexio Invoice Automation: Complete Guide (2025)

By Lukas Huber
|
|11 Min Read
Bexio Invoice Automation: Complete Guide (2025)
Image: SwissFinanceAI / automation

Step-by-step guide: Automate Bexio invoices with n8n. QR invoice, email sending, payment reconciliation & dunning. Save 12+ hours/week.

Reporting by Lukas Huber, 10+ years Swiss Treuhand, 80+ Bexio automations

bexioinvoice-automationn8nworkflow-automationqr-invoicee-banking

Bexio Invoice Automation: Complete Guide

In this guide, I'll show you step by step how to fully automate your Bexio invoicing and save 12+ hours per week. We'll use n8n (Open-Source workflow automation) to automate the following processes:

Automatic invoice creation (from CRM deals, projects, subscriptions) ✅ QR invoice generation (Swiss QR Bill with QR code) ✅ Email sending (personalized invoice emails) ✅ Payment reconciliation (automatic matching of incoming payments) ✅ Dunning system (automatic payment reminders after 15/30/45 days)

Time savings: 12-18 hours per week (with 50-100 invoices/month) Error reduction: 85% fewer manual errors ROI: 340% in the first 6 months


Prerequisites

Before we start, you'll need:

Software

  • Bexio account (Standard or Pro package)

    • You need API access (unlimited in Pro package, 100 calls/day in Standard)
    • Try Bexio free (30 days)
  • n8n account

Knowledge

  • ✅ Basic knowledge of Bexio interface (creating invoices)
  • ✅ Ability to create Bexio API tokens
  • ⚠️ No programming knowledge required (everything visual with n8n)

Time Required

  • Initial setup: 2-3 hours
  • Maintenance: 15 minutes/month

Step 1: Create Bexio API Token

1.1 Generate Token

  1. Log in to Bexioapp.bexio.com
  2. Click top right on your ProfileSettings
  3. Navigate to: Interfaces → API
  4. Click: "Create new token"
  5. Select permissions:
    • Contacts: Read
    • Invoices: Read, Write, Delete
    • Projects: Read (if project-based invoicing)
    • Payments: Read (for payment reconciliation)
  6. Copy the token (shown only once!)

Example token:

eJyNVVtv2zYU_iuCn9tYkiVbl9qGFw...

⚠️ Important: Save the token securely (e.g., in password manager). It's shown only once!

1.2 Test Token

Test the token with this cURL command (Terminal/PowerShell):

curl -H "Authorization: Bearer YOUR_TOKEN_HERE" \
     https://api.bexio.com/2.0/contact

Expected response: JSON list of your Bexio contacts

Works? → Continue to Step 2 ❌ Error "Unauthorized"? → Check token permissions again


Step 2: Set Up n8n & Connect Bexio

2.1 Create n8n Account

Option A: n8n Cloud (recommended for beginners)

  1. Go to cloud.n8n.io
  2. Register (email + password)
  3. Choose plan: Starter (CHF 20/month, 5,000 executions)
  4. Activate your account

Option B: Self-host n8n (free)

# With Docker (Recommended)
docker run -d --name n8n \
  -p 5678:5678 \
  -v ~/.n8n:/home/node/.n8n \
  n8nio/n8n

# Access: http://localhost:5678

2.2 Create Bexio Credential in n8n

  1. Open n8n → Click top right "Credentials"
  2. Click: "New Credential" → Search: "Bexio"
  3. Fill in:
    • Name: "Bexio Production"
    • API Token: (from Step 1.1)
  4. Click: "Save"
  5. Test connection: "Test Credential" → ✅ Successful?

Step 3: Automatic Invoice Sending (Workflow #1)

Now we'll build the first workflow: Automatic sending of invoices via email including QR code.

3.1 Create New Workflow

  1. n8n → Workflows"New Workflow"
  2. Name it: "Bexio Auto-Invoice Send"
  3. Activate: "Execute Workflow" (later)

3.2 Trigger: Bexio Webhook (Invoice Created)

Add node: Click "+"Search: "Webhook"

Configuration:

  • HTTP Method: POST
  • Path: bexio-invoice-created
  • Authentication: None (Bexio only sends to this URL)

Webhook URL: https://YOUR-N8N.app.n8n.cloud/webhook/bexio-invoice-created

⚠️ Important: You'll need to enter this URL in Bexio (Step 3.3)

3.3 Register Webhook in Bexio

  1. Bexio → SettingsWebhooks
  2. Click: "New webhook"
  3. Configuration:
    • Event: invoice.created
    • URL: (your n8n webhook URL from Step 3.2)
    • Active: ✅ Yes
  4. Save

Test: Create a test invoice in Bexio → n8n should receive webhook!

3.4 Node: Get Bexio Invoice Details

Add node: "+" → "Bexio"

Configuration:

  • Credential: Bexio Production
  • Resource: Invoice
  • Operation: Get
  • Invoice ID: {{ $json.id }}

This node fetches all invoice details (customer, amount, due date, etc.)

3.5 Node: Generate QR Invoice PDF

Add node: "+" → "Bexio"

Configuration:

  • Credential: Bexio Production
  • Resource: Invoice
  • Operation: Get PDF
  • Invoice ID: {{ $json.id }}
  • Additional Options → QR Code: ✅ Yes

Output: Binary PDF file with Swiss QR Bill

3.6 Node: Send Email (Gmail, Outlook, SMTP)

Add node: "+" → "Send Email" (or "Gmail", "Outlook")

Configuration (Example: SMTP):

  • From Email: invoice@yourcompany.ch
  • To Email: {{ $('Bexio Invoice Details').item.json.contact.mail }}
  • Subject: Invoice No. {{ $('Bexio Invoice Details').item.json.document_nr }}
  • Email Type: Text + HTML
  • Text:
    Dear {{ $('Bexio Invoice Details').item.json.contact.name_1 }},
    
    Please find attached invoice No. {{ $('Bexio Invoice Details').item.json.document_nr }}
    for CHF {{ $('Bexio Invoice Details').item.json.total }}.
    
    Due date: {{ $('Bexio Invoice Details').item.json.delivery_date }}
    
    QR invoice attached (simply scan with mobile banking app).
    
    Best regards
    Your Finance Team
    
  • Attachments:
    • Property Name: data
    • File Name: Invoice_{{ $('Bexio Invoice Details').item.json.document_nr }}.pdf

Save workflow: Click top right "Save"

3.7 Test Workflow

  1. Bexio: Create a new test invoice
  2. n8n: Check "Executions" → Should be successful ✅
  3. Email: Check customer's inbox → PDF received?

🎉 Done! Your first automated invoice sending is running!


Step 4: Automatic Payment Reconciliation (Workflow #2)

Now we'll automate payment reconciliation: As soon as a payment arrives in your bank account, the Bexio invoice is automatically marked as "Paid".

4.1 Create Workflow

  1. n8n → New Workflow: "Bexio Payment Reconciliation"
  2. Trigger: Webhook (Bexio payment.created)

4.2 Node: Get Bexio Payment Details

Node: Bexio → Resource: Payment → Operation: Get

Retrieve:

  • Payment amount
  • Payment date
  • Reference (ESR/QR reference number)

4.3 Node: Find Invoice (via Reference)

Node: Bexio → Resource: Invoice → Operation: Get All

Filter: referenceNumber == {{ $json.referenceNumber }}

4.4 Node: Mark Invoice as "Paid"

Node: Bexio → Resource: Invoice → Operation: Update

Update:

{
  "id": "{{ $json.id }}",
  "is_valid_from": "{{ $json.is_valid_from }}",
  "payment_status": "paid",
  "payment_date": "{{ $('Bexio Payment Details').item.json.payment_date }}"
}

4.5 Node: Confirmation Email to Customer

Node: Send Email

Content:

Dear {{ $json.contact.name_1 }},

Your payment of CHF {{ $json.total }} has been received.

Invoice No. {{ $json.document_nr }} is now fully settled.

Thank you!

Activate workflow → Test with Bexio payment!


Step 5: Automatic Dunning System (Workflow #3)

Automatic payment reminders after 15, 30, and 45 days.

5.1 Create Workflow

  1. Trigger: Schedule (daily at 09:00)
  2. Node: Bexio → Get All Invoices (Filter: payment_status != paid)
  3. Node: Code (Filter by due date)
    const today = new Date();
    const dueDate = new Date($json.delivery_date);
    const daysOverdue = Math.floor((today - dueDate) / (1000 * 60 * 60 * 24));
    
    // Only invoices 15/30/45 days overdue
    if (daysOverdue === 15 || daysOverdue === 30 || daysOverdue === 45) {
      return { daysOverdue, ...$json };
    }
    
  4. Node: Send Email (Payment reminder)
    • 15 days: Friendly reminder
    • 30 days: 1st reminder
    • 45 days: 2nd reminder

Cost-Benefit Analysis

One-time Costs

  • Setup time: 3 hours × CHF 120/h = CHF 360
  • n8n template purchase (optional): CHF 149 (Bexio Automation Pack)

Total One-time: CHF 360-509

Monthly Costs

  • n8n Cloud: CHF 20/month (or CHF 0 if self-hosted)
  • Bexio API: CHF 0 (unlimited in Pro package)

Total Monthly: CHF 20

Time Savings (with 100 invoices/month)

  • Manual invoice sending: 3 minutes × 100 = 300 min (5h)
  • Manual payment reconciliation: 2 minutes × 80 = 160 min (2.7h)
  • Reminders: 5 minutes × 20 = 100 min (1.7h)

Total Time Savings: 9.4 hours/month

Value (at CHF 120/h): 9.4h × CHF 120 = CHF 1,128/month

ROI: (CHF 1,128 - CHF 20) / CHF 509 = 218% in first month Payback time: 2-3 weeks


Tips & Best Practices

Performance Optimization

  1. Batch processing: Group multiple invoices (1× daily instead of immediately)
  2. API limits: Use Bexio Pro package (unlimited API calls)
  3. Error handling: Add n8n "Error Trigger" → notification on errors

Security

  1. API token: Store token in n8n credentials (never in code)
  2. Webhook signature: Verify Bexio webhook signature (prevents fake requests)
  3. Backup: Export n8n workflows weekly

Scaling

  • Multiple clients: Use n8n variables for multiple Bexio accounts
  • Error handling: Slack/email notification on failed workflows
  • Monitoring: n8n dashboard for execution statistics

Frequently Asked Questions (FAQ)

Do I need the Bexio Pro package? ⚠️ For 100+ invoices/month: Yes. Standard package has only 100 API calls/day (approx. 3,000/month). With 100 invoices × 5 API calls = 500 calls → limit reached. Pro package has unlimited API calls.

Does this also work with Abacus/Sage? ❌ No, this guide is specific to Bexio. For Abacus see Abacus Automation Guide.

Can I also automate recurring invoices (subscriptions)? ✅ Yes! Bexio has a "Recurring invoices" feature. Combine it with this guide for fully automatic subscription invoices.

What happens if n8n fails? ⚠️ Invoices won't be sent automatically. Solution: Use n8n Cloud (99.9% uptime) or self-host with monitoring (Uptime Kuma).

Can I also send invoices by post (mail)? ✅ Yes! Use n8n integration with Swiss Post Direct Mail API → Automatic letter sending.


Next Steps

After automating invoices, I recommend:

  1. Expense automation: Bexio Expense Automation
  2. VAT reporting: Automatic Quarterly VAT Reporting
  3. CRM automation: Bexio CRM → HubSpot Sync

Downloads & Templates


Questions? Contact me: lukas@lhubertreuhand.ch or LinkedIn

Last updated: November 17, 2025 | Author: Lukas Huber, Fiduciary Expert