Recurring Invoices & Management
For ongoing client relationships, you don't want to manually create the same invoice every month. ClientCove's recurring invoice system handles the schedule for you — set it up once, and the next invoice is generated and (optionally) sent automatically.
Recurring Invoices
A recurring invoice generates copies of itself on a schedule:
- Monthly retainers
- Quarterly subscription fees
- Annual maintenance contracts
- Per-billing-cycle service charges
The schedule is set on a parent invoice; ClientCove creates each occurrence automatically when its time comes.
How Recurrence Works
- You create an invoice and toggle This is a recurring invoice on
- Set the frequency (monthly / quarterly / annual) and optional end date
- Set whether new occurrences should auto-send or stay as drafts
- Save the invoice
- A WordPress cron job runs daily, checking for recurring invoices whose next occurrence is due
- When due:
- ClientCove duplicates the invoice (line items, tax, discount, notes — all preserved)
- Updates the invoice number to the next sequential number
- Updates issue date to today and due date to today + payment terms
- Either saves as draft or sends, based on the auto-send setting
- Logs the recurrence event on both the parent and the new child invoice
This continues indefinitely, or until the end date is reached, whichever comes first.
Setting Up a Recurring Schedule
In the Create Invoice modal (or the edit form for an existing Draft):
1. Toggle "This is a recurring invoice"
A new section reveals with recurring-specific fields.
2. Set the frequency
Pick from the dropdown:
| Frequency | Next occurrence advances by |
|---|---|
| Monthly | +1 month |
| Quarterly | +3 months |
| Annual | +1 year |
3. Set the start date
Defaults to the issue date of this invoice. The first occurrence is this invoice; subsequent occurrences are generated from this start date forward.
4. Set an optional end date
Leave blank for indefinite recurrence (until you stop it manually). Set a date for time-bounded contracts (e.g. "12 monthly invoices for the year").
5. Toggle "Auto-send new occurrences"
- On: New occurrences are auto-sent to the client (status: Sent immediately)
- Off: New occurrences land as Drafts; admin reviews and sends manually
6. Save
Save the invoice. The first occurrence is this invoice you just created. Subsequent occurrences will appear in the dashboard automatically based on the schedule.
Auto-Send vs Auto-Create-Draft
The auto-send toggle is the most important recurring decision:
Auto-Send
- Pros: Truly hands-off — set up the recurring schedule and forget it
- Cons: If line items / amounts ever need to change for a specific cycle, you have to catch it before the cron runs
- Best for: Stable retainers where the amount never varies
Auto-Create-Draft
- Pros: Each cycle creates a draft you review before sending — easy to adjust per-month variances (extra hours, expense reimbursements)
- Cons: Requires a recurring task to remind you to review and send
- Best for: Time-tracked retainers where actual hours might vary cycle to cycle
Most ClientCove portals use a mix — flat-fee retainers auto-send; time-tracked or variable retainers auto-draft.
Stopping a Recurring Series
To end a recurring schedule:
Method 1 — Set an end date
- Open the parent recurring invoice
- Edit
- Set the End Date to today (or the last cycle date)
- Save
The cron stops creating new occurrences past the end date.
Method 2 — Toggle off recurring
- Open the parent recurring invoice
- Edit
- Toggle This is a recurring invoice off
- Save
Removes the recurring flag entirely. No more occurrences will generate.
What happens to existing occurrences?
Already-generated occurrences stay in the dashboard with their status (Sent / Paid / etc.). Stopping recurrence only affects future occurrences.
Cancelling an Invoice
For invoices sent in error or no longer collectible:
- Open the invoice (admin/editor)
- Click the Cancel Invoice action in the menu
- Confirm
Cancellation:
- Flips status to Cancelled
- Sends an optional cancellation notice to the billing contact (configurable)
- Stops overdue reminders for this invoice
- Logs the action with reason (if provided)
The invoice stays in the database (the record is preserved) but it's filtered out of "outstanding" and "overdue" views.
To uncancel: edit the invoice and change the status back to Sent. Note that this is unusual — typically you'd create a new invoice rather than reviving a cancelled one.
Editing After Sending
Once an invoice is in Sent / Viewed / Paid / Overdue status, editing is restricted:
| Field | Editable after Sent? |
|---|---|
| Notes | Yes |
| Payment Terms text | Yes |
| Status (manual changes) | Yes (Cancel, Mark Paid) |
| Line items | No — locked |
| Quantities, prices, totals | No — locked |
| Tax rate, discount | No — locked |
| Issue date | No — locked |
| Due date | Yes (admin only) |
| Client | No — locked |
| Currency | No — locked |
The lock preserves the integrity of what was sent. To make substantive changes:
- Cancel the original invoice
- Create a new invoice with the corrected info
- Note the cancellation in the new invoice's notes ("Replaces cancelled INV-2026-0042")
- Send the new invoice
Bulk Actions
The invoice list table supports bulk operations:
- Tick checkboxes on multiple rows (or the header checkbox to select all)
- The bulk actions bar appears
- Pick an action
Available bulk actions:
- Send — send all selected Draft invoices
- Mark as Paid — manually mark all selected as paid
- Cancel — cancel all selected
- Export Selected to CSV — export only the selected rows
Bulk actions are admin/editor only. Each action confirms with a toast showing the count affected.
CSV Export
The Export CSV button (top toolbar) downloads the current filtered invoice list as a CSV file with these columns:
- Invoice Number
- Client Name
- Status
- Issue Date
- Due Date
- Subtotal
- Tax
- Discount
- Total
- Balance Due
- Currency
- Payment Date (if paid)
- Notes
The export respects all active filters — search, status, client, date range — so you can export "all paid invoices for Acme in Q2" by setting the filters first, then exporting.
Useful for:
- Importing into accounting software (QuickBooks, Xero, FreshBooks)
- Tax preparation
- Custom reporting
- Backup before bulk operations
The Activity Log
Every invoice has an activity log accessible from its detail view:
| Event | Logged when |
|---|---|
| Created | Invoice is created |
| Sent | Email is sent to billing contact |
| Viewed | Client opens the invoice page |
| Payment Initiated | Client clicks Pay (Stripe payment intent created) |
| Payment Succeeded | Stripe webhook confirms payment |
| Payment Failed | Stripe webhook reports a failure |
| Manually Marked Paid | Admin marks paid via the manual flow |
| Status Changed | Any status change (with old → new) |
| Edited | Field changes after sending (with field name) |
| PDF Regenerated | PDF is regenerated |
| Resent | Notification email is resent |
| Cancelled | Invoice is cancelled |
| Refund Processed | Stripe webhook confirms a refund |
| Recurrence Generated | A new occurrence is created from a recurring parent |
Each entry captures: who (user ID, or "Stripe webhook" for system events), when, and metadata (payment amount, IP for client actions, etc.).
The log is append-only — entries can't be edited or deleted. It's the source of truth for billing audits.
Capability Matrix
Final reference for who can do what:
| Action | Roles |
|---|---|
| View Invoices dashboard | Administrator, Editor, Representative (with config) |
| Create invoices | Administrator, Editor (publish_invoices capability) |
| Edit Draft invoices | Administrator, Editor (edit_invoices capability) |
| Edit Sent invoices (limited) | Administrator, Editor |
| Send invoices | Administrator, Editor |
| Mark as Paid manually | Administrator, Editor |
| Cancel invoice | Administrator, Editor |
| Bulk operations | Administrator, Editor |
| CSV Export | Administrator, Editor |
| Configure Stripe | Administrator only |
| Configure invoice settings (numbering, etc.) | Administrator only |
| Set up recurring schedule | Administrator, Editor |
| View invoice as client | Client users with client_billing role OR designated billing contact |
| Pay invoice | Any client user with view access |
| View activity log | Administrator, Editor (full); client (limited to their own actions) |
Subscriber-level users have no invoice access. Client users see only their own client's invoices.
Recurring is set up on the parent — kept off the child invoices. When ClientCove generates a new occurrence from a recurring parent, the new child invoice itself is NOT marked as recurring. This prevents double-recurrence (where a child would also generate occurrences). The series flows from one parent → many children, not parent → child → grandchild.