Advanced: Recurring Invoices
For users who already know the basics β this guide covers frequency planning, auto-send vs. manual review, owner reminders and client renewal notices, Stripe auto-charge, handling missed generations, the :period placeholder, and template duplication for similar clients.
Frequency Planning
Choose the frequency that matches the actual service period being billed:
| Frequency | Best for |
|---|---|
| Monthly | Retainers, SaaS licenses, monthly service contracts, hosting |
| Quarterly | Software maintenance, quarterly reporting services, seasonal contracts |
| Semi-annual | Bi-annual inspections, semi-annual support plans |
| Annual | Annual software licenses, yearly maintenance agreements, membership fees |
Align the start date to a cycle boundary. If a client starts a monthly retainer on the 15th of the month, set start_date to the 15th β the system will generate on the 15th of each subsequent month. Starting mid-cycle and trying to pro-rate the first invoice manually is error-prone; consider issuing a one-off invoice for the first partial period and starting the recurring template from the first clean cycle.
Frequency is fixed after creation. You cannot change a template from monthly to quarterly mid-stream. If the billing frequency changes (client upgrades or downgrades a contract), end the old template and create a new one with the new frequency. The old template's generated invoices remain intact for history.
Auto-Send vs. Manual Review
Every template has an auto-send toggle that controls what happens immediately after generation:
| Setting | What happens at generation |
|---|---|
| Auto-send on | Invoice is created and immediately emailed to the client. No human review step. |
| Auto-send off | Invoice is created as a draft. Admin must review and send manually. |
Use auto-send for: Flat-fee recurring invoices where the amount and items never change β hosting, software licenses, fixed retainers. The invoice is identical every cycle; no review adds value.
Avoid auto-send for: Templates where you sometimes adjust items or amounts before sending (e.g., a retainer where you occasionally add ad-hoc work), or for high-value invoices where a human double-check is warranted.
Auto-send failures are silent to the client. If the client's email address is invalid or the email server rejects delivery, the invoice is still created and marked sent β you'll need to check the notification log for bounce notifications. Review the client's email address before enabling auto-send.
Owner Reminders and Client Renewal Notices
Two distinct notification flows run before each generation:
Owner Reminder
Set owner reminder days (e.g., 3) on the template. Three days before the next generation date, the admin who owns the template receives a notification: "Invoice for [Client] will be generated in 3 days."
Use this as a prompt to check whether the template still has the right items and amounts before generation runs. If something needs changing, you have the window to edit the template before the generation fires.
Owner reminders reset each cycle. After each successful generation, the "reminder sent" flag clears and the countdown restarts for the next cycle. You'll receive the reminder before every generation, not just the first.
Client Renewal Notice
Set renewal notice days (e.g., 7) on the template. Seven days before the next generation, the client receives an email informing them that their service will renew and they'll receive an invoice shortly.
This is a courtesy notice, not the invoice itself. It's particularly valuable for annual contracts where the client may have forgotten the renewal is upcoming. It also reduces payment delays because the client is expecting the invoice when it arrives.
Renewal notices are sent to the client's email address on the invoice template, not the contact who last received an invoice. Verify the client email is current before enabling this feature.
Stripe Auto-Charge
When a client has a payment method on file (Stripe customer ID linked to the client record), you can enable auto-charge on the template. After generation, the system attempts to charge the card immediately.
What happens on a failed charge:
- The charge attempt fails (card declined, expired card, etc.).
- The invoice is still created and sent to the client.
- The invoice status is
sent, notpaidβ it enters your normal collection workflow. - A notification is sent to the admin about the failed charge.
- There is no automatic retry. You'll need to chase the client for updated payment details and charge manually, or wait for them to pay the invoice by other means.
Watch the run log. After every generation cycle, check Recurring Invoices β Run Log for entries with failed charge status. A pattern of failures usually means the card has expired β follow up with the client promptly.
Stripe auto-charge and auto-send work together. If both are enabled, the flow is: generate invoice β send email β attempt charge. The email always fires before the charge attempt.
Handling Missed Generations
If the daily generation job is delayed or the server has an outage, the system catches up on the next run by processing all templates where next_invoice_date <= today. This means:
- A single missed day: one invoice generated per template on the catch-up run. No issue.
- Multiple missed days where a monthly template missed exactly one cycle: one invoice generated. No issue.
- Multiple missed days where a monthly template missed two full cycles: two invoices generated in the same catch-up run, one for each missed cycle.
The run log captures every generation with timestamps and status. After any outage or server maintenance window, check Recurring Invoices β Run Log and confirm the expected invoices were generated and no duplicates exist.
If a double-generation occurs: Void the duplicate invoice immediately before it's sent or auto-charged. Voiding is reversible (it does not permanently delete the invoice data) but act quickly β once an auto-send fires you'll need to issue a credit note.
Skip Next as a proactive tool: If you know a generation cycle should be skipped (client on hold, no service delivered that month), use Skip Next before the generation date. This advances next_invoice_date by one cycle without creating an invoice.
The :period Placeholder
The :period placeholder is the only template-specific placeholder available in recurring invoices. It's replaced at generation time with the service period covered by that invoice.
Where it works: Only in the invoice title (subject line). Not in line-item descriptions, not in the intro text, not in the greeting.
What it resolves to: The period dates in the client's language locale. For a monthly template covering April 2026, :period resolves to "April 2026" (in German: "April 2026", in French: "avril 2026").
Best practice title format:
Hosting-Paket β :period
Results in: Hosting-Paket β April 2026, Hosting-Paket β May 2026, etc.
Using a static title without :period means every generated invoice has the identical title. This is not wrong, but it makes the invoice history harder to scan and confuses clients who receive multiple invoices per year.
Template Duplication for Similar Clients
If you have multiple clients on the same recurring plan (e.g., ten clients all on the same CHF 499/month hosting plan), maintaining ten separate templates is cumbersome. The Duplicate action on any template copies all settings and items to a new template with the same structure β you only need to change the client.
Duplication workflow:
- Build and perfect one template for your first client.
- Recurring Invoice β {template} β Duplicate.
- On the new duplicate, change the client and adjust the start date and any client-specific text.
- Save and activate.
Keep template items generic. Don't put the client's name in the line-item descriptions if you plan to duplicate β use the :client_name placeholder in the intro text instead. Line-item descriptions from duplicated templates need to be edited on each copy if they contain client-specific text.
After a major plan change (price increase, new items), update one template, then duplicate it over your other similar-plan templates, replacing the old ones. End the old template with a suitable end date before activating the new duplicate.
Related Guides
- Modules-WiederkehrendeRechnungen β basic setup and daily workflow
- Advanced: Rechnungsstellung β the invoice lifecycle that every generated invoice feeds into
Was this article helpful?
Still need help?
Contact support