CoPortalDocs

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

DraftBeing built. Not sent yet. Editable.
SentEmailed to the client. Visible in their portal. Generates reminders if overdue.
Awaiting confirmationClient used the "I've paid via EFT" button. Reference + optional proof attached. You confirm or dispute from the invoice editor.
PaidFully paid. Either marked manually, auto-marked when partial payments total the full amount, or auto-flipped after a successful Paystack charge or confirmed EFT report.
CancelledVoided. Stays in history but is excluded from revenue reports.

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.

Tip: Set your invoice prefix and starting number in Settings → Invoice & Tax (e.g. INV → INV-001). Each new invoice auto-increments from your last number.

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:

1–3 daysYellow — recent, likely just needs a nudge
4–7 daysAmber — send a firm reminder
8–14 daysOrange — escalate the conversation
14+ daysRed — urgent action needed

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.

Note: Recurring invoices are different from retainers. Use recurring invoices for fixed-fee engagements. Use Retainers for ongoing hourly engagements where you track hours used per cycle.

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:

  1. 1You create or update an invoice in CoPortal.
  2. 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.
  3. 3Line items, tax/VAT, due date, and your invoice number are all carried over. Subsequent syncs update the same record — no duplicates.
  4. 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 > 0 lands 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.

Note: Each accounting integration has its own sync-as-draft toggle. Turn it on if you want a final pair of eyes on invoices in your accounting software before they go to the customer there. Turn it off if you trust CoPortal as the source of truth and want straight-through processing.

What syncs vs. what doesn't

Invoice numberYes — preserved as the reference / DocNumber
Line itemsYes — description, qty, unit price
Tax / VATYes — applied at the rate on the CoPortal invoice
Due dateYes
CurrencyYes (Xero, QB) — Sage uses the workspace default currency
NotesYes — pushed as the invoice memo / note field
Partial paymentsNo outbound — record those in your accounting software directly. Inbound from QB only.
Status changes after syncNo — marking paid in CoPortal doesn't reconcile in the accounting backend. Do that there separately.

Full setup details, including OAuth flows and per-provider gotchas, are in Integrations.