Accounting sync (Xero, Sage, FreshBooks, Zoho & QuickBooks)
CleverOps stays the operational system where customers, subscriptions and invoices are managed; your accounting package stays the financial source of truth. The accounting sync keeps the two in step automatically — no re-typing, no double capture.
Xero, Sage, FreshBooks, Zoho Books and QuickBooks Online are all live. A VCR links one accounting package at a time.
Sage comes in two editions, and they are different products on different APIs:
- Sage (South Africa) — Sage Accounting / Sage One (sageone.co.za), the edition South African companies run. It connects with your Sage username and password (there is no sign-in redirect). This is almost certainly the one you want.
- Sage (Global) — Sage Business Cloud Accounting for the UK, Ireland, US, Canada, France, Spain and Germany. It connects with a sign-in redirect, exactly like Xero.
FreshBooks connects with a sign-in redirect, exactly like Xero. It has no South African edition — its books are US, Canada and UK-centric — so for a South African company, Sage (South Africa) or Xero is the better fit; FreshBooks is here for operators who already run it.
Zoho Books connects with a sign-in redirect, exactly like Xero, and does support South Africa (including SA VAT), so it is a valid choice for a South African company as well as for operators who already run Zoho.
QuickBooks Online connects with a sign-in redirect, exactly like Xero, and does support South Africa (including SA VAT), so it too is a genuine option for a South African company as well as for operators already on QuickBooks. (This is QuickBooks Online — the desktop products use a different API and are not connected here.)
Everything lives under Billing → Config → Accounting sync. You need the Manage billing permission to connect or change settings; other users see the status read-only.
Most of this page is written in Xero terms; the Sage (South Africa), Sage (Global), FreshBooks, Zoho Books and QuickBooks Online sections below cover what is the same and what differs.
Compare packages
Not sure which to connect? Billing → Config → Compare packages shows a side-by-side matrix of exactly what each method supports, with the same recommendation below.
We recommend Xero
Xero is the only package with a true two-way sync — it is the one method where invoices and quotes flow both ways. Raise an invoice or quote in CleverOps and it lands in Xero; raise one in Xero and it appears here too (flagged "Received from Xero"). Every other cloud package only pushes invoices up — nothing comes back down.
On top of that, Xero is the only method that also:
- attaches the branded invoice PDF to the Xero invoice,
- posts departments as Xero tracking categories for a segmented P&L,
- pushes approved supplier bills captured in CleverOps up to Xero as purchase bills (see Supplier bills and purchasing),
- retries foreign-currency invoices automatically once the currency is added, and
- offers a one-click Import older backfill for history from before you connected.
The other cloud packages (Sage, QuickBooks, Zoho, FreshBooks) are fully supported for pushing invoices up and settling payments both ways — a great fit if your books already live there. Sage Pastel and Omni Accounts are a one-way file hand-off for desktop packages with no live API.
What each method supports
| Method | Type | Customers | Invoices out | Invoices in | Payments | Credit notes | Inventory | Quotes | Supplier bills |
|---|---|---|---|---|---|---|---|---|---|
| Xero ⭐ | Cloud, every 15 min | Two-way | Two-way | Two-way | Two-way | Two-way | Two-way | Two-way | Two-way |
| Sage (South Africa) | Cloud, every 15 min | Two-way | → Out | — | Two-way | Limited | Limited | Limited | ← In |
| Sage (Global) | Cloud, every 15 min | Two-way | → Out | — | Two-way | Limited | Limited | Limited | ← In |
| Sage Intacct (on request) | Cloud, every 15 min | Two-way | → Out | ← In | Two-way | Limited | Two-way | Limited | ← In |
| QuickBooks Online | Cloud, every 15 min | Two-way | → Out | — | Two-way | Limited | Limited | Limited | ← In |
| Zoho Books | Cloud, every 15 min | Two-way | → Out | — | Two-way | Limited | Limited | Limited | ← In |
| FreshBooks | Cloud, every 15 min | Two-way | → Out | — | Two-way | Limited | — | — | ← In |
| Sage Pastel | Desktop, CSV file | → Out | → Out | — | — | — | → Out | — | — |
| Omni Accounts | Desktop, CSV file | → Out | → Out | — | — | — | → Out | — | — |
Two-way = created or changed on either side, reflected on the other. → Out = one-way send from CleverOps. ← In = one-way pull into CleverOps. Limited = best-effort; flagged in the sync log if the package's API can't complete it. — = not supported.
Notes: inventory syncs two-way by SKU but quantity on hand is read from the package only (never overwritten); FreshBooks records credit notes at customer level and has no inventory or quotes; Sage Intacct is Sage's mid-market cloud ERP for multi-entity groups (a different product from Sage Accounting) and is enabled on request — no connector is live yet, and its row shows what the Intacct API supports: AR invoices and payments read and write, credit notes as AR adjustments, an item master linked by item ID, AP bills pulled in, and Department and Location dimensions on every line (so CleverOps departments would post as dimensions, the way they post as Xero tracking categories, and each billing entity would link to its own Intacct entity; quotes need Intacct's Order Entry module); the desktop exports are set up under Import / Export, which is also where you bring existing customers and stock into CleverOps at onboarding.
What syncs
| Data | Direction | How it works |
|---|---|---|
| Customers | Two-way | Matched by account number (the Xero accounting reference) only — see Connecting. If two of your customers resolve to the same contact in the accounting package (near-duplicate names, say), only one can own it — the other is flagged under Needs attention naming both, so you can merge them here or rename them there. Xero allows one contact per name, so CleverOps never creates a contact under a name another customer's contact already carries: Xero would not refuse it, it would overwrite that customer's contact with the duplicate's details. Customers that exist in the accounting organisation but not here are created here — customers, not every contact: in Xero a supplier is a contact too, and so is any payee typed while reconciling the bank (Bank fees, a vehicle-finance reference, a staff member paid by EFT). Xero marks a contact as a customer once it has a sales invoice, so a contact it does not mark that way is not imported — it is still linked if its account number matches a customer here, and it is imported the moment a sales invoice, quote, credit note or held overpayment for it comes in from Xero. The sync log says which contacts a run left out, by name, in one skipped line. A brand-new customer typed into Xero before anything has been invoiced is therefore not here yet — capture new customers in CleverOps, or expect them once they are first invoiced. In the other direction a contact is created in the organisation when something of that entity's first needs it — an invoice, credit note or quote about to be pushed — rather than the whole customer book being copied across on day one, so an organisation only ever holds the customers it actually bills. Contact details stay in step — the newest edit wins, and only filled-in fields are copied (a blank field never wipes the other side). A difference in formatting alone is not an edit and is not copied either way — an address typed on separate lines versus separated by commas, or a phone number written 079… versus +2779…. In Xero the billing address is the contact's Postal address: its parts fill address lines 1–4 in order, a trailing four-digit postal code goes in Postal code, and City and Region are left empty; the billing phone is sent whole as the number, with no separate area or country code. Closing a customer archives its Xero contact, but only after its invoices are settled, voided or credited — Xero cannot edit an archived contact's documents, so archiving waits for the money side. |
| Inventory items | Two-way | The equipment catalog links to Xero Products & services by SKU ↔ item code. Names, descriptions and prices sync both ways. Quantities follow the Stock quantities setting: with the CleverOps Stock ledger in charge (default) Xero quantities are ignored; in the legacy Xero tracked inventory mode a tracked item's quantity on hand pulls from Xero (Xero's API does not allow quantity writes in either mode). Items without a SKU are skipped (the log tells you). |
| Invoices | Push to Xero | Invoices raised after the connection was made push to Xero with their line items, VAT and ledger codes — as Approved or Draft, your choice. Each pushed invoice also carries the branded PDF as a Xero attachment, and lines tagged with a department carry a "Department" tracking category for a segmented P&L. Voiding an invoice here voids it in Xero (unless it already has payments — then the log flags it for review). If Xero rejects an invoice, fix the cause and save the invoice again — the push retries automatically. An invoice in a currency your Xero organisation isn't set up for is held back with a plain-language note (not a hard failure) and syncs itself the moment you add that currency in Xero. Older invoices are left alone unless you Import older. Invoices raised in Xero can flow back too — see Invoices & quotes created in Xero. |
| Quotes | Push to Xero | Quotes created after the connection push to Xero once they are Sent — drafts stay local until then (ex-VAT lines, discounts included). From there the lifecycle follows automatically: accepted quotes mark ACCEPTED in Xero, declined ones DECLINED. Editing a sent quote creates a new revision — the sync removes the old Xero copy and pushes the revision once it is sent, so Xero always shows only the active version. Requires a Xero app plan that allows quote access; if Xero refuses, the log says so once and everything else syncs normally. |
| Payments | Both ways | Payments captured or bank-reconciled in Xero flow back and settle the matching invoice here — including overpayment and prepayment allocations. A payment on a Xero-raised invoice that only imports later is picked up together with that invoice, so it settles here the moment the invoice does. An overpayment or prepayment Xero has not yet allocated to an invoice counts too: what Xero still holds unallocated shows here as account credit on the customer's statement and follows Xero as it is allocated, refunded or voided, so the customer's balance matches Xero before anyone allocates it. That credit is allocated in Xero, not here — see Account credit held in Xero. Payments captured in CleverOps are recorded in Xero against the synced invoice. A payment follows its invoice: an open invoice syncs at its full amount however old it is, so a part-payment captured on it before you connected is recorded in Xero too — otherwise Xero would show the customer still owing what they have paid. (Payments on settled invoices that stayed behind as history stay behind with them.) If the same payment exists on both sides it is matched by invoice and amount — never duplicated. |
| Credit notes | Two-way | Credit notes raised here push to Xero (and allocate to the linked invoice). Xero credit notes against synced customers import here, and each Xero allocation is recorded against the invoice it credits — including a credit note split across several invoices, or allocated for only part of its value. It does not matter which side arrives first: a credit note that lands before the invoice it settles is applied the moment that invoice is imported or linked, so an invoice raised and credited in Xero on the same day never sits here as paid with its balance still open. The credit shows on the statement once, as the credit note itself; the allocation is what settles the invoice, not a second payment. A credit note voided or deleted in Xero stops crediting the account here too, and any invoice it was settling re-opens. |
| Supplier bills | Two-way (Xero) | Xero purchase invoices (bills) are pulled in with their lines and appear read-only under Billing → Invoices → Supplier bills and on Inventory → Purchasing → Bills. Bills captured in CleverOps and approved there are pushed up to Xero as purchase bills once Push approved bills to Xero is on — into the books of the entity that bought the goods. See Supplier bills and purchasing below. |
Each of these has its own on/off switch in the sync settings, so you can run a narrower sync (for example invoices and payments only).
Every record CleverOps sends to Xero carries a unique idempotency key, which Xero honours for 24 hours. If a request times out after Xero has already recorded it, or a run is cut short between Xero's answer and CleverOps noting it, the retry re-sends the same key and Xero hands back the record it already made instead of creating a second one. A retry can therefore never post an invoice, payment, credit note or contact twice — the older number-must-be-unique check in Xero is now the second line of defence, not the only one.
Connecting
- Go to Billing → Config → Accounting sync and click Connect Xero.
- Sign in on Xero's own login page and choose the organisation to link. CleverOps never sees or stores your Xero password. If your Xero sign-in can reach several organisations and it isn't provable which one you just authorised, you land back here on a Which Xero organisation? picker — choose the one whose books this connection is for and click Link this organisation. (Until you do, the card reads Almost there — choose the Xero organisation.) One organisation can only be linked once: an organisation already connected to another billing entity or control room shows as already linked to … and cannot be chosen — connect a different organisation, or disconnect it there first.
- You land back on this screen and the initial sync starts automatically:
- Customers are matched by account number only (the Xero accounting reference against the CleverOps account number, exact). A match only links the two records — it moves no details in either direction, so an existing Xero contact is never renamed or rewritten by the first import; only edits made after linking sync across. Xero contacts with no matching account number are imported as new customers here if Xero marks them as customers (suppliers and bank-reconciliation payees are contacts too, and stay out — see the Customers row above), and a CleverOps customer with no match gets a Xero contact created only once one of its documents syncs up.
- Catalog items link up by SKU.
- Invoices carry across by relevance, not just by date: any open invoice (pending, sent or overdue) syncs no matter when it was raised, because an unpaid invoice is still live money. Completed invoices (paid or voided) are the history that stays behind — those sync forward-only from the moment you connected, so your Xero isn't flooded with settled documents. Drafts never sync until you finalise them.
Each VCR connects its own Xero organisation — a multi-VCR company can run a separate set of books per VCR.
A long-established organisation can carry thousands of contacts, catalog items and open invoices — far more than one run can process in a single go. It does not need babysitting: the sync works in chunks, banks exactly where it got to, and immediately starts the next chunk, repeating until the backlog is clear. A first import of a few thousand records typically finishes in a handful of minutes.
While that is happening the connection card shows Sync running… and names what it is working on (Customers, Invoices, and so on), and the activity log fills in as each chunk lands. Messages like "Large customers pull — paused after 2000 records, continuing next run" are the expected progress notes, not errors. Nothing is missed and nothing is imported twice — if a chunk is interrupted, the next one resumes from the same point rather than starting over.
Invoice PDFs during a bulk import. Normally each invoice pushed to Xero carries your branded PDF as an attachment. When more than 50 invoices are queued at once — which is what a first import looks like — they push without the attachment so the import can finish, and the log says so once. The invoices themselves are complete: numbers, lines, VAT, ledger codes and the customer are all there. Invoices raised from then on carry their PDF as usual.
If your control room issues from more than one legal entity (see Billing entities), each entity connects its own accounting organisation — its own Xero company, or even a different package altogether. Pick the entity with the scope switcher above the Billing tabs first; the connection card names whose books it is managing, and each connection only ever carries that entity's invoices and quotes. Customers are one shared list in CleverOps, but each organisation only receives the ones it bills: a contact is created in an entity's organisation the first time one of that entity's invoices, credit notes or quotes needs it — the client who has a subscription with one entity and ad-hoc work from the other ends up in both sets of books, a customer who only ever deals with one stays out of the other's. If you would rather your own customers exist in every organisation from the moment they are captured — so a client taken on for one entity is already there when the other bills them — switch on Customers in every organisation in each connection's sync settings (it is only offered once the control room has more than one entity). That copies the customers that are yours — captured in CleverOps, or holding a site — and still leaves contacts that only came in from another organisation's books (suppliers, one-off payees) to wait for a document, so neither organisation becomes a copy of the other's contact list. Catalog items are shared and sync to every connected organisation. The same organisation can never be linked to two entities — each entity needs its own.
An entity is fixed once its connection is made: to point an organisation at a different entity, disconnect it, clear its sync links, and reconnect under the right entity. That protects the documents already pushed into those books.
Sync settings
Open Sync settings on the connection card:
- Default sales account — the Xero revenue account invoice lines post to. Plans with their own ledger account (set on the plan form) keep it; everything else uses this default. Invoice push waits until this is set.
- Default payments account — where payments captured in CleverOps are recorded in Xero, for any method that doesn't have its own account set below. Payment push waits until this (or at least one per-method account) is set. The picker lists Xero bank accounts and accounts with payments enabled.
- Per-method accounts (optional) — override the account per payment method (EFT, Card, Cash, Debit order). See Where each payment method posts below. Leave a method blank to use the default.
- VAT tax rate — the Xero tax type used for VAT-carrying lines (South African organisations: VAT on income, 15%). Zero-VAT lines use No VAT / Tax exempt.
- Push invoices as — Approved (awaiting payment) or Draft. Draft is a good first-week setting while you verify the account mapping in Xero before anything hits the ledger.
- Stock quantities — who owns on-hand counts. CleverOps stock ledger (default, recommended): quantities live in the Stock movement ledger and Xero's figures are ignored — keep the items untracked in Xero. Xero tracked inventory: the legacy mode where a tracked item's Xero quantity overwrites the local figure on every sync; don't combine it with the ledger, the two counts will fight.
- Automatic sync — the master cadence switch. Off means only Sync now runs. On, the scheduler checks every 15 minutes, but each connection runs at its own pace: CleverOps measures what a run costs against the accounting package's daily API allowance (Xero allows a fixed number of calls per organisation per day) and spaces the runs so that allowance is never used up — a cheap run keeps to every 15 minutes, a heavy one stretches to 20, 45 or more. The card's Cadence line shows the current interval, what the last run cost, and how much of today's allowance is left. (With Xero webhooks configured, changes in Xero also trigger a sync within seconds and the scheduled run stretches to hourly, as a reconciliation.)
- Per-object switches — one toggle per row of the table above, plus Attach the invoice PDF in Xero and Departments as Xero tracking. On a Xero connection a Supplier bills block follows — see Supplier bills and purchasing.
Where each payment method posts (clearing accounts)
When you record a payment in CleverOps it flows up to the accounting package as a payment against the invoice — the invoice shows paid, and the money lands in the account you nominated. That payment lands unreconciled: it's waiting for a real bank-statement line to be matched against it during bank reconciliation. Which account you send it to decides whether that reconciliation is clean or a mess.
The rule of thumb: a method needs a clearing account only when the money is pooled, delayed, or netted before it reaches your bank. If it arrives one-to-one, send it straight to the bank.
| Method | How the money reaches your bank | Recommended account |
|---|---|---|
| EFT / bank transfer | 1:1, exact amount, no fee | Your bank (current account) — no clearing needed |
| Card (Yoco) | batched, net of fees, a day or two later | A clearing account (e.g. Yoco Clearing) |
| Debit order (Netcash, or a provider such as Corporate Collect) | batched, net of fees, on a settlement cycle | A clearing account (e.g. Netcash Clearing, or a Xero bank account named for the provider's wallet) |
| Cash | held, then banked later as a lump deposit | An undeposited-funds / cash-on-hand account |
Why card and debit order need a clearing account. Yoco and Netcash don't deposit each payment separately — they settle a batch of transactions as one lump sum, minus their processing fees, on their own cycle. So the single bank line ("Yoco R4,832.15") never matches the individual gross amounts CleverOps recorded, and it can't auto-reconcile. Sending those payments to a clearing account instead means your accountant reconciles the one net settlement line against the clearing account (and books the fees) — the account nets to roughly zero and your real bank stays reconcilable. Give each settlement source its own clearing account (Yoco and Netcash settle separately, on different days).
Every business that takes card has this "gateway settles net, in batches" step — it's routine bookkeeping. CleverOps' job is to hand over clean, correctly-filed payments; the bank reconciliation and fee entries stay with your accountant (CleverOps never sees your bank feed).
Account credit (a credit-note or on-account allocation) is not a bank receipt, so it is never pushed as a payment and can't be routed to an account.
A Xero bank account without a code works too. Xero lets a bank account exist with only a bank account number and no ledger code — common for a clearing account set up as a bank account so a statement can be imported into it. Those appear in the account pickers by name and number (Debit order collections · L3100255) and are addressed by Xero's own id for the account.
Only methods with an account are pushed. If you set an account for debit orders and nothing else, debit-order payments go up and EFT, card and cash payments stay in CleverOps — useful when your bookkeeper already captures EFTs from the bank feed in Xero.
When a pushed payment bounces
A payment CleverOps pushed and that is later marked Rejected here — a returned debit order, a bounced EFT — is removed from Xero on the next sync, so the invoice re-opens there as it has here. If Xero refuses because the payment is already reconciled, the sync says so in the activity log: unreconcile it in Xero and the next sync removes it. Restoring the payment here pushes it again.
This only ever touches payments CleverOps itself pushed. A payment your bookkeeper entered in Xero is theirs: rejecting its copy here does not delete it there.
Department tracking in Xero
If you use departments / cost-centres, the sync creates a Xero tracking category called Department with one option per active department. Invoice lines tagged with a department carry it into Xero automatically, so the bookkeeper can run a P&L per division (armed response vs installations vs monitoring) with zero extra capture. Xero allows at most two active tracking categories per organisation — if both slots are taken, the sync logs it and pushes invoices without tracking until a slot is free.
The account and tax pickers are loaded live from your Xero chart of accounts.
Invoices & quotes created in Xero
The sync is push by default: CleverOps is where invoices and quotes are raised, and they flow up to Xero. But sometimes a document is raised in Xero — by your accountant, say. You can have those flow back into CleverOps so nothing is invisible, without giving up the one-way workflow.
Turn on Invoices from Xero (pull) and/or Quotes from Xero (pull) in Sync settings (both off by default). From then on, any invoice or quote created in Xero appears in CleverOps as a normal record, with two guarantees:
- It is flagged "Received from Xero" — a notice on the invoice or quote itself, and a From Xero badge in the list. It keeps its Xero number.
- It is inbound-only: CleverOps never pushes edits to it back to Xero. Every document is maintained in exactly one place — the ones you raise in CleverOps are maintained here; the ones raised in Xero are maintained in Xero.
We strongly recommend creating and editing invoices and quotes in CleverOps. Leave anything raised in Xero to your accountant on the Xero side — the "Received from Xero" notice is there so everyone can tell which is which at a glance.
Pulled invoices keep their Xero number and are given a private internal sequence, so they never touch or advance your CleverOps invoice numbering. An entity whose only invoices so far came from Xero still starts its own CleverOps series at 00001 under its prefix — it does not carry on from the Xero numbers. Pulled records are also silent — they don't fire customer automations or follow-up tickets.
When the Xero number already exists here
Invoice numbers are unique per control room, so a pulled invoice whose number is already in use is resolved rather than imported blindly. In order:
- It is already here. If a local invoice already carries that Xero invoice (an earlier import was cut off before it recorded the link), the sync links the two and moves on — it never imports the same Xero invoice twice.
- It is the same document, captured on both sides. If an invoice with the same number exists in the same billing entity, made out to the same customer for the same total, and is not yet tied to any Xero invoice, the sync links it to the Xero copy instead of creating a twin. The log shows it as linked.
- Another entity's books hold the number. Two Xero organisations under one control room can share a numbering series. The invoice is imported with an entity suffix (for example
INA49887-E68) so both documents keep their history; the log notes the clash once. - The same entity holds the number, but it is a different document — a different customer, or a different total. The invoice is not imported. The log records it once under Needs attention, naming the local invoice it clashed with, and the sync does not try again on later runs. Fix whichever side is wrong; editing the invoice in Xero (or re-saving it) makes the sync re-check it on the next pull, and the attention row clears by itself once the local invoice is linked to that Xero invoice.
Supplier bills and purchasing
Two systems meet at the supplier's invoice, so it is worth being clear which one owns what.
- Pulled bills come down from the accounting package with their header — supplier, number, dates, totals, status and amount owed — and are shown read-only under Billing → Invoices → Supplier bills and on Inventory → Purchasing → Bills. From Xero they also bring their lines, copied once and never rewritten by a later pull (so a match somebody has made is never undone); a line whose Xero item code matches a SKU is linked to that catalog item. A pulled bill belongs to the books of the entity whose connection pulled it. Bills from the other packages arrive header-only.
- Bills captured in CleverOps — at the door from a receipt, or on the Bills tab — are matched there to the order's price and the receipt's quantity, and approved by someone with the Approve purchase orders permission. With Push approved bills to Xero on, each approved bill goes up once on the next run; from then on its status and payments flow back down like any pulled bill, and it reads In Xero. See Purchasing → Approved bills go to Xero.
- The entity rule. A control room can hold one Xero connection per billing entity. A captured bill names the entity that bought the goods (Bought by), and only that entity's connection pushes it — a bill goes to the organisation of the entity that bought the goods, and a bill with no entity is held with a visible reason rather than guessed at, because a cost posted into the wrong books cannot be retracted from here.
- Purchase orders never sync. An order is CleverOps' own document; the books only ever see the supplier's bill — money, never quantities. Inventory items still sync as described above, and stock quantities follow the CleverOps ledger unless you choose the legacy mode.
The Supplier bills block at the bottom of Sync settings (Xero connections only) holds the switches:
- Push approved bills to Xero (off by default) — a pushed bill is a cost in your books, so nothing goes up until you turn this on. Each bill goes up once.
- Push as — Draft (bookkeeper approves in Xero) or Approved (awaiting payment). Draft lets the bookkeeper check the coding before it posts.
- Stock purchases are booked — Straight to purchases / cost of sales (the periodic model: every line posts to the purchases account, and stock is valued at month end from the ledger — Purchasing → Month end gives the figures) or To the inventory asset account (the perpetual model: lines matched to a stock receipt post to the inventory asset account; lines marked not-stock still go to purchases).
- Purchases / cost of sales account — where bill lines post unless the line carries its own account code. Required for bill push.
- Inventory asset account — where stock-matched lines post under the perpetual model; required for it.
- VAT on purchases — the Xero tax type used on bill lines carrying VAT. Blank mirrors your sales rate on its purchases side (VAT on income → VAT on expenses).
- Attach the photographed invoice (on by default) — the delivery note or invoice photographed at the door is pinned to the Xero bill.
- Suppliers as Xero contacts (on demand) (on by default) — a supplier becomes a Xero contact only when one of its bills is pushed, matched to an existing contact by name first and never copied wholesale. Off, bills for suppliers without a Xero contact are held.
A bill that cannot be pushed — no supplier, no lines, a supplier with no Xero contact, a currency the organisation is not set up for, a line with no account code and no default account — is held: the sync log says why, the bill's sheet shows Push failed with the reason, and it retries every run until it is fixed or reopened. A bill that already reached Xero is re-linked, never posted twice.
Import older records
The regular sync is forward-only for completed history — settled invoices, quotes and other closed documents dated before you connected stay behind, so your ledger isn't flooded. (Open invoices are the exception: an unpaid invoice syncs on its own regardless of age.) When you do want to reach back for the settled history too, use Import older on the connection card.
Pick a from date and a direction:
- Send CleverOps → Xero — push invoices and quotes you raised before connecting up to Xero.
- Bring Xero → CleverOps — pull invoices and quotes created in Xero down (flagged "Received from Xero"; needs the two pull switches on).
- Both ways — do both.
Preview shows how many records will be sent up before you commit. Already-synced records are skipped, so an import is safe to re-run. It runs in the background, and each record appears in the activity log as it crosses.
Sage (South Africa)
Sage (South Africa) — Sage Accounting / Sage One at sageone.co.za — does not use a sign-in redirect. You connect it with a credential form instead.
- Go to Billing → Config → Accounting sync and click Connect Sage (South Africa).
- Enter your Sage username (email) and password. These are the same credentials you use to sign in at sageone.co.za.
- If the login has access to more than one company, a company picker appears — choose the company to link, then click Connect again.
- The initial sync starts automatically, forward-only from the moment you connect.
Your Sage password is stored securely for the sync (service-side, never shown again) and CleverCam staff cannot read it. Link a trial company first if you want to verify the account mapping before going live.
Sage (South Africa) needs a platform developer API key enabled by CleverCam once (it is shared across all control rooms). Until that is in place the connect form reports that Sage South Africa is not configured yet. If you see that, contact CleverCam.
What syncs is the same set as the table above — customers (two-way, matched by name then email), invoices (push, as a Tax Invoice), payments (both ways), credit notes (push as a Customer Return, plus import), supplier bills (pull, from Supplier Invoices) and, where your Sage plan allows, quotes and inventory items. A few Xero-only extras do not apply:
| Feature | On Sage (South Africa) |
|---|---|
| Attach the branded invoice PDF | Not offered — the invoice pushes without the PDF attachment. |
| Departments as a tracking category | Not offered — lines push without a department tag. |
| Push invoices as Draft / Approved | Not offered — Sage posts the invoice when it is created. |
| Inventory quantity on hand | Not pulled — names, prices and codes still sync. |
| Payments from Sage | Settled from each invoice's outstanding balance — a Sage receipt (or credit-note allocation) that reduces an invoice's balance settles the matching invoice here. |
Sync settings for Sage (South Africa) use the same three pickers, loaded live from your Sage company:
- Default sales account — the Sage ledger account invoice lines post to.
- Default payments account — the Sage bank account receipts are recorded against, plus optional per-method accounts.
- VAT tax rate — the Sage tax type for VAT-carrying lines. Pick your standard-rated VAT (for example 15%). Every Sage invoice line needs a tax type, so if an invoice has zero-rated lines and no zero-rated type has been set, that invoice is held back (the log tells you) rather than posting the wrong VAT.
Sage (Global)
Connecting Sage (Global) works exactly like Xero: click Connect Sage (Global), sign in on Sage's own login page, and the business you authorise is linked. CleverOps never sees your Sage password, the initial sync starts automatically, and everything runs forward-only from the moment you connect.
This is the global Sage Business Cloud Accounting API (United Kingdom, Ireland, United States, Canada, France, Spain, Germany). South African companies should use Sage (South Africa) above — the global sign-in will not reach a Sage One South Africa company.
What syncs and the Xero-only exceptions are the same as the Sage (South Africa) table above. Sync settings use the same pickers (default sales ledger account, default payments account plus optional per-method accounts, VAT tax rate), loaded live from your Sage business.
FreshBooks
Connecting FreshBooks works like Xero: click Connect FreshBooks, sign in on FreshBooks' own page and authorise, and the business you authorise is linked. CleverOps never sees your FreshBooks password, the initial sync starts automatically, and everything runs forward-only from the moment you connect. If your FreshBooks login spans several businesses, the first one is linked — disconnect and reconnect to pick another.
FreshBooks is US, Canada and UK-centric and has no South Africa edition. South African companies should use Sage (South Africa) or Xero — the FreshBooks connector is here for operators who already run it.
What syncs is the same core set — customers (two-way, matched by name then email), invoices (push, with lines and VAT), payments (both ways) and supplier bills (pull). Several things differ from Xero and Sage:
| Feature | On FreshBooks |
|---|---|
| Default sales account / Payments bank account | Not used. FreshBooks invoice lines carry no ledger code and its payments need no bank account, so those two pickers are hidden and invoice/payment push is never held up waiting for them. |
| VAT | A per-line name and percentage. Sync settings need only the VAT label FreshBooks shows on VAT lines (for example VAT) — each line carries its own percentage, so nothing is ever held back for a missing tax rate. |
| Supplier bills | Pulled from FreshBooks Expenses (an expense is a single amount) and shown read-only under Billing → Invoices → Supplier bills. |
| Credit notes | Pushed and pulled as client-level credits. A FreshBooks credit reduces the client's balance rather than allocating to one invoice, so it is not applied to a specific invoice here. |
| Inventory items | Best-effort by SKU — names and prices sync; FreshBooks tax references are left as they are. |
| Quotes / estimates | Not synced. |
| Attach the branded invoice PDF | Not offered — the invoice pushes without the PDF attachment. |
| Departments as a tracking category | Not offered — lines push without a department tag. |
| Push invoices as Draft / Approved | Not offered — each invoice is created and then marked sent automatically (no email is sent to the customer). |
Zoho Books
Connecting Zoho Books works like Xero: click Connect Zoho Books, sign in on Zoho's own page and grant access, and the organisation you authorise is linked. CleverOps never sees your Zoho password, the initial sync starts automatically, and everything runs forward-only from the moment you connect. If your Zoho login spans several organisations, the default one is linked — disconnect and reconnect to pick another.
Zoho Books works internationally, including South Africa (it supports South African VAT), so it is a genuine option for a South African company as well as for operators who already run Zoho elsewhere. Zoho runs regional data centres (.com, .eu, .in, .com.au, .jp); the connector detects the right one for your login automatically from the sign-in.
What syncs is the same core set — customers (two-way, matched by name then email), invoices (push, with lines, VAT and ledger accounts), payments (both ways), credit notes (two-way) and supplier bills (pull). A few things differ from Xero:
| Feature | On Zoho Books |
|---|---|
| Customers matched by | Name, then email — Zoho contacts have no account-reference field. |
| VAT | Choose your Zoho tax rate in Sync settings. A VAT-carrying line with no rate set holds that invoice back (the log tells you) rather than posting the wrong VAT; a zero-rated line simply carries no tax (Zoho treats it as non-taxable), so nothing is held back for it. |
| Invoice numbers & status | Your own invoice numbers are kept, and each invoice is created and then marked sent automatically (no email is sent to the customer). |
| Credit notes | Pushed and applied to the linked invoice in Zoho; Zoho credit notes against synced customers import here and each application is recorded against the invoice it credits, settling it. The credit shows on the statement once, as the credit note itself. |
| Quotes / estimates | Pushed as Zoho estimates (best-effort) and moved through sent → accepted / declined to match the status here. |
| Supplier bills | Pulled from Zoho Bills and shown read-only under Billing → Invoices → Supplier bills. |
| Inventory items | Two-way by SKU — names and prices sync; stock on hand pulls from Zoho only. |
| Attach the branded invoice PDF | Not offered — the invoice pushes without the PDF attachment. |
| Departments as a tracking category | Not offered — lines push without a department tag. |
Sync settings for Zoho Books use the same three pickers, loaded live from your Zoho organisation:
- Default sales account — the Zoho income account invoice lines post to.
- Default payments account — the Zoho bank / cash account payments are deposited to, plus optional per-method accounts.
- VAT tax rate — the Zoho tax rate for VAT-carrying lines. Pick your standard-rated VAT (for example 15%).
QuickBooks Online
Connecting QuickBooks Online works like Xero: click Connect QuickBooks Online, sign in on Intuit's own page and choose the company to authorise, and that company is linked. CleverOps never sees your QuickBooks password, the initial sync starts automatically, and everything runs forward-only from the moment you connect. One connection links one company; to link a different company, disconnect and reconnect.
QuickBooks Online works internationally, including South Africa (it supports South African VAT), so it is a genuine option for a South African company as well as for operators who already run QuickBooks. This is the Online product — QuickBooks Desktop / Enterprise use a different API and are not connected here.
What syncs is the same core set — customers (two-way, matched by name then email), invoices (push, with lines and VAT), payments (both ways) and supplier bills (pull). A few things differ from Xero:
| Feature | On QuickBooks Online |
|---|---|
| Customers matched by | Name, then email — QuickBooks customers have no account-reference field. |
| VAT | Choose your QuickBooks tax code in Sync settings (the VAT tax rate picker lists your QuickBooks tax codes). A VAT-carrying line with no code set holds that invoice back (the log tells you) rather than posting the wrong VAT; a zero-rated line uses your zero code if set, else carries none. |
| Invoice / credit-note / estimate lines | QuickBooks requires every sales line to reference an item, so the connector creates one "CleverOps Sales" service item on your chosen sales account and uses it for every line, with the real line text in the description. You will see that item appear in QuickBooks Products & services — that is expected. |
| Invoice numbers | Your own invoice numbers are kept (QuickBooks document number). |
| Credit notes | Pushed as QuickBooks credit memos; QuickBooks applies open credits to invoices itself (per your company's automatically apply credits setting). QuickBooks credit memos against synced customers also import here. |
| Quotes / estimates | Pushed as QuickBooks estimates (best-effort), created with the matching status (pending / accepted / rejected). |
| Payments | Pushed as QuickBooks payments linked to the invoice; QuickBooks payments on synced invoices flow back and settle the invoice here — matched by invoice and amount, never duplicated. |
| Supplier bills | Pulled from QuickBooks Bills and shown read-only under Billing → Invoices → Supplier bills. |
| Inventory items | Best-effort by SKU — names and prices sync; stock on hand pulls from QuickBooks only. |
| Attach the branded invoice PDF | Not offered — the invoice pushes without the PDF attachment. |
| Departments as a tracking category | Not offered — lines push without a department tag. |
Sync settings for QuickBooks Online use the same three pickers, loaded live from your QuickBooks company:
- Default sales account — the QuickBooks income account invoice lines post to.
- Default payments account — the QuickBooks bank account payments are deposited to, plus optional per-method accounts.
- VAT tax rate — the QuickBooks tax code for VAT-carrying lines. Pick your standard-rated VAT (for example 15%).
QuickBooks Online needs platform developer-app credentials enabled by CleverCam once (they are shared across all control rooms). Until they are in place the connect button reports that QuickBooks is not configured yet. If you see that, contact CleverCam.
Day to day
- The connection card shows what is linked — an organisation (Xero or Zoho Books), a company (Sage South Africa or QuickBooks Online) or a business (Sage Global or FreshBooks) — the last sync time and a one-line result, plus how many customers, items, invoices, payments and credit notes are linked.
- Sync now runs a sync immediately; progress lands in the activity log as it happens. On a large backlog it kicks off the chunked import described above rather than doing everything in one pass.
- Paused — daily API limit reached: the accounting package allows a fixed number of API calls per organisation per day (Xero's is per organisation, and not every organisation gets the same allowance). When today's are spent the card says so and gives the time the sync resumes on its own — nothing is lost and nothing needs doing; the scheduled runs simply skip that organisation until then, and the connection's cadence is slowed so it does not happen again tomorrow. Sync now during the pause fails fast with the same message.
- No completed sync since …: automatic sync is on, yet no run has finished in the last couple of hours. Open the activity log to see what each run is hitting; Sync now lets you run one while you watch.
- Paused — the accounting package refused the connection: if the package refuses CleverOps outright three runs in a row (the organisation disconnected the app, the authorising user left, a Xero Demo Company was reset), the sync pauses itself rather than keep trying, and the card says so. A billing manager reconnects it; nothing syncs until then.
- Who is told: when a sync pauses itself, parks on the daily limit, has not completed a run in six hours, or has sat paused for a day, CleverOps tells the people who own the connection — whoever connected it and the company's owners — by push notification and by email, at most once a day per problem. The activity log records who was told.
- Sync activity lists everything that crossed between the systems — every created, linked, updated or skipped record, in plain language. The Needs attention filter shows only items that require a human decision (for example an invoice number that already exists in Xero with a different total, or a payment Xero refused because the invoice was already settled there). Nothing happens silently. A problem the sync keeps meeting run after run is one item, not one per run — a ×N badge shows how many runs have reported it, and the row's dates read first seen → last seen. Each flagged item has Retry (re-attempt it now) and Dismiss (mark it handled). A problem the sync stops meeting drops off the list by itself at the end of the next run, once its record has synced cleanly; a problem the sync meets again stays as the one row and its ×N grows — being re-reported is never taken as healed. Two customers clashing over one account number (see below) is only ever cleared by the data — merge them or renumber one — or by Dismiss.
- Sync issues (Config → Integrations → Sync issues) is the one list to work through: every open problem from every accounting connection of the control room, grouped by record type (customers first — a duplicate customer is what most document problems hang off), each with the organisation it came from, ×N and first → last, an Open … link to the record it names and the same Retry / Dismiss. The sub-tab label carries the open count. The per-connection Sync activity log above shows one organisation's history; when a control room runs two organisations, the same duplicate customer is reported by both, and this list is where you see that once.
- "… is B00016 in Xero, but "Name" (#id, prospect) already holds that number here — kept TX4208": the accounting package says a contact's account number is one that a different CleverOps customer already carries (account numbers are unique per control room). The sync keeps the local number and applies the rest of the contact; the row names the other customer and links to both. Fix it on one side — merge the two customers here, or give one of them a different number in the package — and the row clears itself once the numbers no longer clash. The same message, starting "Created … without its account number", means a contact was imported as a new customer without its number because another customer already held it.
- "… resolves to the same Xero contact as …": two customers here carry the name of one contact in that organisation — usually a customer captured by hand beside one the sync had already linked. The second is never sent to Xero, and its invoices and quotes stay out of that organisation until you merge the two customers here or give one of them a different name. It is reported on every run until then.
- A pulled document CleverOps won't save — a payment, credit note, invoice or quote coming in from the accounting package — is logged as an error for that document, with the reason (for example Could not import credit note CN-0042: …), and the rest of the run carries on. Pulled documents land on this control room's own customers: the contact's linked customer, or the customer of the invoice a payment settles. A document naming another control room's customer is refused like any other save.
- Invoices pushed to Xero show a Xero badge next to their number in the invoice list; invoices and quotes created in Xero show a From Xero badge instead.
Disconnecting
Disconnect stops the sync and forgets the stored access tokens. Nothing is deleted on either side, and the record links are kept — reconnecting later (to the same provider) resumes exactly where it left off, and the original connect date is preserved so the forward-only window never moves. Reconnecting to a different organisation or business is refused while sync history exists — the links belong to the original organisation; clear them first if you genuinely mean to switch. If the provider revokes the connection (for example the authorising user leaves the organisation), the sync pauses itself after three refused runs, the status changes to Needs attention, the owners are told, and a billing manager can reconnect.
When the same record was edited on both sides between syncs, the newest edit wins — and the sync log records which side won, so nothing is ever overwritten invisibly.