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:

  1. Resolves the recipient: the client's billing contact first, then the client's email, then an assigned user
  2. Renders the PDF fresh — every send re-generates it, so the attachment always carries the current design and the current numbers
  3. Builds the notification email using your Email Designer template (if configured) or the default template
  4. Attaches the PDF to the email
  5. Sends, updates invoice status from Draft → Sent, and records the send in the activity log

The recipient opens the email and can:

  • Open the PDF attachment for their records
  • Click Pay Now — it opens the invoice with the payment drawer ready, no portal login needed. See Payment Links.

When there's no billing email

If the client has no billing contact, no client email, and no assigned users, the send doesn't fail with a shrug — it asks you for an address on the spot, with a "Save as this client's billing email" checkbox so you're asked once, not on every send. The address is only saved after the email actually goes out.

Why the fresh render matters

The attachment used to be whatever PDF was last stored — which could be an older design, or worse, older numbers if the invoice had been edited since. Rendering at send time closes both gaps. Invoices using an uploaded PDF are exempt: your uploaded file attaches exactly as-is, always.

Sending an Invoice

Two paths from the dashboard:

From the create modal

  1. Open Create Invoice
  2. Fill in all fields
  3. Click Save and Send instead of Save as Draft
  4. Invoice is created and sent in one operation

From the single-invoice view

  1. Open a Draft invoice
  2. Click the Send button in the toolbar
  3. Confirm the send
  4. 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 Pay Now CTA button — a payment link that opens the invoice and its payment drawer without a login
  • An "Other ways to pay" section, when the invoice has payment terms or you've set offline payment instructions
  • The invoice PDF as an attachment, freshly rendered
  • 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 typeWhen sent
New InvoiceWhen invoice is sent (Draft → Sent)
Payment ReceivedWhen payment is confirmed (any → Paid)
Overdue ReminderWhen overdue cron runs (Sent → Overdue)

If no custom template is configured, ClientCove uses the built-in defaults — branded banner header, your logo, a no-login Pay Now button, and the payment-instructions section. A payment_instructions variable is available in the designer for custom templates: it renders the invoice's payment terms plus your offline payment instructions, or nothing at all when both are empty.

Custom templates you've edited are never modified by theme updates; only the stock templates, untouched since install, pick up new defaults.

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:

  1. In the invoice editor, switch PDF Method to Upload PDF
  2. The Upload PDF field appears
  3. Click to browse or drag-drop a PDF file
  4. The file is uploaded to the WordPress media library
  5. 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:

  1. Open the single-invoice view
  2. Click the Resend button in the toolbar
  3. 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:

  1. ClientCove detects the first view
  2. Stamps the first_viewed_at field with the current timestamp
  3. If the invoice is in Sent status, flips it to Viewed
  4. 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:

  1. Iterates through all Sent / Viewed invoices
  2. For each, compares due_date against today
  3. If past due, flips status to Overdue
  4. 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).

Was this page helpful?