Skip to content

Recurring Invoices: Automate Your Billing with Ease

Managing repeat payments manually can be time-consuming and error-prone. The Recurring Invoice feature solves this by automatically generating invoices at fixed intervals—so you get paid on time, every time, without repetitive work.

A recurring invoice is an invoice that is generated automatically based on a predefined schedule such as daily, weekly, monthly, or yearly. It’s ideal for subscriptions, retainers, maintenance contracts, and any service billed repeatedly.


  • Select an existing client or add a new one instantly.
  • Optionally link the invoice to a project for better tracking.
  • Choose the currency and associated bank account.
  • Set billing cycles as Daily, Weekly, Monthly, or Custom.
  • Define a Start Date or enable Immediate Start to generate invoices right away.
  • Control how many times the invoice should repeat—or set it to infinite cycles.

The system clearly shows:

  • When the first invoice will be generated
  • The next invoice date
  • How often the client will be charged

This transparency helps avoid confusion for both admins and clients.

Enable “Client can stop recurring” to give customers the flexibility to pause future invoices—perfect for subscription-based services.


  • Add products directly to the recurring invoice.
  • Define quantity, unit price, taxes, and discounts.
  • Automatic amount calculation ensures accuracy every cycle.

  • Optional shipping address
  • Tax calculation before or after discount
  • Attach files or add detailed item descriptions

✅ Saves time by eliminating manual invoice creation
✅ Ensures consistent and predictable cash flow
✅ Reduces missed or late payments
✅ Perfect for SaaS, memberships, rentals, and retainers


  • Monthly service retainers
  • Subscription-based products
  • Daily or weekly billing services
  • Long-term maintenance contracts

The Recurring Invoice module simplifies repeat billing by automating invoice creation, giving you full control over schedules, pricing, and client permissions—all from a single, intuitive screen. Set it once, and let the system handle the rest.

If you want, I can also:

  • Rewrite this for marketing pages
  • Make it shorter for release notes
  • Convert it into a step-by-step user guide

document.querySelectorAll(‘.portal-attachment-thumbnail-img’).forEach(function(img) { img.addEventListener(‘error’, function () { attachment_error_image(this); }); }); const attachment_error_image = (attachment) => { const parentElement = attachment.parentElement; const defaultIcon = <span class="icon-file-empty"></span><span class="fw-attachment-ext">${escapeHtml(attachment.dataset.extension)}</span>; parentElement.innerHTML = defaultIcon; };