Quotes & Invoices
Invoices
CoPortal handles the full invoice lifecycle — from creating a draft to getting paid — with PDF generation, email delivery, payment tracking, overdue alerts, and partial payment recording.
Invoice statuses
Creating an invoice
Go to Invoices and click New invoice. Select the client, add line items, and CoPortal calculates subtotal, tax, and total automatically.
Each line item needs a description, quantity, and unit price. Tax is applied at your workspace's domestic rate (15% VAT in SA, 20% VAT in UK, 10% GST in AU/NZ at 15%, etc.) when you bill clients in your own country. For cross-border invoices to a tax-registered client in a different country, the smart default is 0% (zero-rated export). Click Mark exempt to override and set tax to 0% manually.
The invoice currency follows the client's country by default — billing a SA client from a UK workspace produces a ZAR invoice. You can override the currency from the editor at any time.
Sending an invoice
Click Preview & send to see exactly what the client will receive before sending. The preview shows the full invoice layout with your branding.
Once sent, the invoice status moves to Sent and the client receives a branded email with a PDF download link. If Paystack is configured, the client can also pay online directly from their portal.
PDF download
Every invoice has a Download PDF button. The PDF includes your logo, business address, tax registration number (VAT for SA/UK/UAE, GST for AU/NZ/SG), bank details, and payment terms — all from your settings. UK VAT-registered businesses get the HMRC-required "VAT Invoice" header automatically. Share, print, or attach to your own emails.
View tracking
When a client opens or downloads the invoice PDF from their portal, CoPortal records the first view, the last view, and a running view count. In your invoice list, a blue eye icon shows the invoice has been seen — grey means it hasn't been opened yet. Hover the eye to see the details.
Inside the invoice editor, you'll see “Viewed [count]× last [date]” below the invoice number. This is useful when a payment is overdue: you can tell the difference between “they haven't seen it yet” and “they've opened it three times and still not paid” — two very different follow-up situations.
Partial payments
If a client pays in instalments, use the Payments received panel on the invoice detail page to record each payment:
- •Click Record payment on any Sent invoice
- •Enter the amount, date, payment method (EFT, Paystack, cash, cheque), and an optional reference
- •The panel shows total paid, balance remaining, and a payment history
- •When total payments equal the invoice total, the invoice is automatically marked as Paid
Manually marking as paid
Click Mark as paid on any Sent invoice to mark the full amount as received. Use this for EFT payments or when payment has been confirmed outside of Paystack. This records today's date as the paid date.
Overdue dashboard
The Overdue tab on the invoices page shows all invoices past their due date, grouped by how overdue they are:
The top of the Overdue tab shows a count card for each bucket so you can see at a glance how many invoices are in each stage.
Send reminder
On any Sent invoice, click Send reminder to manually trigger a reminder email to the client. The tone of the reminder email automatically adjusts based on how overdue the invoice is — see Email notifications.
Recurring invoices
Make any draft invoice recurring before sending. Enable the Recurring invoice toggle and set:
- •Frequency — Weekly, Monthly, or Quarterly
- •First invoice date — when the first auto-generated invoice should be created
- •End date — optional stop date
CoPortal auto-generates the next invoice as a draft on the scheduled date. Review and send it manually.
Invoices from quotes
Four ways to bill an accepted quote:
- •Set up payment plan — creates a deposit + balance pair in one step. Deposit goes out now (or saves as draft), balance is held as a draft and auto-released when the project is marked complete. Recommended for most service work.
- •Convert to invoice — single full invoice with all line items copied across. Pair with the Hold balance until project complete toggle on the invoice editor for a deposit-required model where one invoice covers the whole engagement.
- •Deposit only — creates a partial invoice for your configured deposit % without setting up the balance side. Useful when you want manual control over the balance later.
- •Milestone invoice — creates a custom partial invoice for a specific amount + label. For multi-stage projects (deposit + mid-point + final).
See Quotes → Deposits and balance for a side-by-side of the three deposit models.
Hold balance until project complete
For the single-invoice deposit-required model: a sent invoice attached to a project gets a Hold balance until project complete toggle. With it on:
- •The unpaid balance is not flagged as overdue, regardless of due date
- •Auto-reminders are paused (your workspace cron skips this invoice)
- •The invoice shows the “On hold · project in progress” pill in the list and on the editor
- •The Overdue tab and overdue analytics exclude it
When the parent project is later marked complete, the hold lifts automatically — reminders re-enable and the invoice rejoins the normal dunning flow if the balance is still outstanding.
Invoices from time & expenses
In the project Time panel, select billable time entries and click Add to invoice or Create invoice from selected. This pre-fills the invoice with line items calculated from your time entries — description, hours, hourly rate, and totals.
End-to-end with your accounting software
Each connected accounting integration (QuickBooks, Xero, Sage) shows a one-click Sync button on the invoice editor and a per-integration Auto-sync toggle on the Integrations page. The flow is the same across all three:
- 1You create or update an invoice in CoPortal.
- 2On Sync (or auto-sync after Send), CoPortal pushes the invoice to the accounting backend. The client is matched by external ID first, then by email; if neither matches a customer record is created.
- 3Line items, tax/VAT, due date, and your invoice number are all carried over. Subsequent syncs update the same record — no duplicates.
- 4Marking the invoice paid in CoPortal does NOT automatically reconcile in your accounting software — record the payment there separately.
QuickBooks Online
QB has the deepest two-way story. In addition to outbound sync, you can import invoices from QB into CoPortal — useful when you've been billing from QB historically and want to bring that history into the client portal. The importer:
- •Shows a preview of every QB invoice tagged new, already imported, no CoPortal client, or number conflict before any writes happen
- •Preserves the original QB DocNumber as the CoPortal invoice number — falls back to
QB-<DocNumber>if it collides with one you've already issued - •Mirrors partial payments: any QB invoice with
TotalAmt − Balance > 0lands as a CoPortal invoice with the already-paid amount recorded as a payment row, so the outstanding balance is correct from day one - •Has an optional auto-send toggle so you can re-email unpaid invoices via CoPortal at import time (off by default — clients usually got the QB email already)
Xero
Xero supports outbound sync (CoPortal → Xero) plus contact import from Settings → Integrations. Each contact preview is tagged new, duplicate email, or linked. Per-integration toggles for auto-sync and sync-as-draft mean you can push invoices straight to Xero as drafts for a final review, or as Awaiting Payment to skip the review step. Tax codes follow the rate set on the CoPortal invoice (15% for ZA workspaces by default).
Sage Business Cloud Accounting
Sage is the most-used accounting platform in South Africa. The integration covers outbound invoice sync + contact import with the same preview flow as Xero/QB. VAT is applied at 15% using your Sage tax-rate IDs, looked up automatically from your Sage tax settings on first sync.
What syncs vs. what doesn't
Full setup details, including OAuth flows and per-provider gotchas, are in Integrations.