Sending Invoices & PDF Generation
After an invoice is created, sending it is a single click — ClientCove generates a branded PDF, packages it with a notification email, and delivers it to the client's billing contact. This page covers the email mechanics and the PDF output.
How Sending Works
When you send an invoice, ClientCove:
- Generates the PDF (if not already generated) using the configured method
- Builds the notification email using your Email Designer template (if configured) or the default template
- Attaches the PDF to the email
- Sends to the client's billing contact (designated in the Client Workspace Settings tab)
- Updates invoice status from Draft → Sent
- Records the send in the invoice activity log
- Returns to the dashboard with a success toast
The billing contact opens the email, reads the inline summary, and can either:
- Click the included PDF attachment to download
- Click the "View Invoice" CTA to open the invoice in the portal (where they can pay if Stripe is configured)
Sending an Invoice
Two paths from the dashboard:
From the create modal
- Open Create Invoice
- Fill in all fields
- Click Save and Send instead of Save as Draft
- Invoice is created and sent in one operation
From the single-invoice view
- Open a Draft invoice
- Click the Send button in the toolbar
- Confirm the send
- Email goes out, status flips to Sent
Resending
For invoices already in Sent status, the button changes to Resend — same mechanics, useful for nudging clients who haven't paid.
The Notification Email
The default invoice notification email contains:
Subject line
Invoice #INV-2026-0042 from
<your company name>
Body
- Greeting with the recipient's name
- Brief summary: invoice number, total amount, due date
- A View Invoice CTA button linking to the portal
- The invoice PDF as an attachment
- Footer with your company name and email
Email Designer integration
If you've set up custom email templates in the Email Designer, ClientCove uses the template designated for invoices. The notification picks up:
- Your portal logo
- Your color theme
- Custom header/footer content
- Custom button styling
To configure templates, go to Settings → Email Designer and create or edit the New Invoice template. Three template types apply to invoices:
| Template type | When sent |
|---|---|
| New Invoice | When invoice is sent (Draft → Sent) |
| Payment Received | When payment is confirmed (any → Paid) |
| Overdue Reminder | When overdue cron runs (Sent → Overdue) |
If no custom template is configured, ClientCove uses a built-in default that's clean and functional.
PDF Generation
The invoice PDF is generated server-side and stored as a media library attachment. It uses your branding:
- Your company logo (from Settings → Design)
- Your company name and email (from Settings → Company Info)
- Your color theme
The PDF includes:
- Header with logo, company info, and "INVOICE" label
- Invoice number, issue date, due date
- "Bill To" — client name and address
- Line items table with description, details, quantity, unit price, total
- Subtotal, tax, discount, total summary
- Payment instructions with payment email
- Notes from the invoice
- Footer with company contact info
The PDF is downloadable from the single-invoice view via a secure URL with a one-time nonce.
PDF Generation Method
ClientCove offers two PDF generation methods, configurable per-invoice via the PDF Method field:
Auto-generate (default)
- ClientCove renders the invoice HTML to PDF on the server
- No external service required
- PDF stays in sync with invoice data — if you regenerate, the latest data is used
Upload PDF
- For invoices where you want to provide a custom-designed PDF
- Upload your own PDF file
- That file is used as the attachment instead of the auto-generated one
- Useful for special clients with unique formatting requirements
The default for all new invoices is auto-generate. Switch to Upload PDF only when you have a specific reason.
PDF Layout & Branding
The default PDF layout follows a standard professional invoice format:
Top section
- Left: Company logo + company name + company email
- Right: "INVOICE" label + invoice number + dates
Bill-To section
- Client name
- Client address (from the client's Settings tab)
- Client billing contact name and email
Line items table
- Description column (with details on a separate line below if provided)
- Quantity, Unit Price, Total columns
- Currency formatted with appropriate symbol
Totals section
- Subtotal
- Tax (with rate %) — only shown if > 0
- Discount — only shown if > 0
- Total in larger, bold text
- Balance Due if any payments have been made
Payment section
- Payment terms text
- Payment email (where to send wire / ACH details)
- "Pay online" link with portal URL
Footer
- Company name and email
- Generated date
Customization
The default layout is hard-coded in clientcove_get_invoice_pdf_html(). For deeper customization (custom layouts, logos in different positions, additional sections), the function can be overridden via a child theme or filter.
Uploaded PDFs
If you choose Upload PDF as the generation method:
- In the invoice editor, switch PDF Method to Upload PDF
- The Upload PDF field appears
- Click to browse or drag-drop a PDF file
- The file is uploaded to the WordPress media library
- Save the invoice
The uploaded PDF replaces the auto-generated one wherever a PDF is needed:
- The download button serves the uploaded file
- The notification email attaches the uploaded file
- The single-invoice page shows a "Custom PDF" indicator
You can switch back to auto-generate later — the uploaded file stays in the media library but isn't referenced.
Resending
For invoices in Sent / Viewed / Overdue status:
- Open the single-invoice view
- Click the Resend button in the toolbar
- Confirm
The same email goes out to the same billing contact:
- The PDF is regenerated (if auto-generate) to pick up any data changes
- The send is logged in the activity log
- A toast confirms
Use Resend for:
- Reminding a client about an unpaid invoice
- Re-sending after the client says they didn't get the original
- Sending an updated PDF after status or notes changes
Auto-Detection of Views
When the client clicks the link in the email and lands on the portal invoice page:
- ClientCove detects the first view
- Stamps the
first_viewed_atfield with the current timestamp - If the invoice is in Sent status, flips it to Viewed
- Logs the view event
The status change is silent — no notification to you, no email. But the dashboard reflects it immediately, so you can see at a glance which invoices have been opened vs ignored.
Subsequent views don't flip the status further (it stays Viewed) but each view is logged.
Overdue Reminders
A daily WordPress cron job checks for overdue invoices:
- Iterates through all Sent / Viewed invoices
- For each, compares
due_dateagainst today - If past due, flips status to Overdue
- Optionally sends an overdue reminder email (if configured)
Configuring overdue reminders
In Settings → Invoices:
- Toggle "Send overdue reminders" on/off
- Set how many days after due date to send the first reminder (default: 1)
- Set reminder cadence (one-time / weekly / every 3 days)
The reminder email uses the Overdue Reminder Email Designer template if configured, or the default template otherwise. It includes:
- Days overdue count
- Original invoice info (number, date, amount)
- Pay Now CTA
- Updated PDF attachment
Cron health
Overdue detection requires WordPress cron to fire reliably. For low-traffic portals, configure system cron to hit wp-cron.php regularly:
* * * * * curl -s https://yourportal.com/wp-cron.php?doing_wp_cron > /dev/null
Without external triggering, overdue status changes may be late on quiet days.
Payment Confirmation Emails
When an invoice is marked Paid (either via Stripe webhook or manual mark-as-paid), ClientCove sends a payment confirmation email:
- To the billing contact
- Subject: "Payment received for Invoice #INV-2026-0042"
- Body: Confirmation message with payment amount, date, method
- Updated PDF attached (showing the Paid status)
Uses the Payment Received Email Designer template if configured.
The same email goes out for both Stripe-initiated payments (automatic via webhook) and manual marks (e.g. when you mark an invoice paid because the client paid by check).
All invoice emails go to the billing contact, not all client users. The billing contact is designated in Client Workspace → Settings → Billing Contact — see Contacts & Billing. If no billing contact is set, invoices won't send and you'll see a warning. To send a copy to multiple recipients, configure that in your Email Designer template's BCC field, or designate a billing contact whose email forwards to multiple people.