Skip to content
DipanshuTechBuilding Digital. Driving Growth.
Programming & Engineering

Connecting Custom Software to Xero and QuickBooks in Singapore

How to plan a Xero integration in Singapore for custom software: what to sync, Xero and QuickBooks API limits, GST InvoiceNow rules and error handling.

DipanshuTech TeamEngineering & Strategy
Published
Updated
Reading time
6 min

Connecting custom software to Xero or QuickBooks Online in Singapore comes down to three decisions: which system owns each kind of record, how the sync stays within each API's limits, and how invoices meet IRAS's GST InvoiceNow rules. Get those right and the rest is careful engineering: queues, retries, logging and a daily reconciliation that tells finance the books match.

This guide is for owners and finance leads whose sales, operations or booking system already works, and who want invoices and payments to reach the accounting system without re-keying.

Decide what each system owns

Most integration problems start with two systems both believing they own the same record. Before any code, write down the owner and direction for each object:

  • Customers and suppliers: usually created in your business app and pushed to accounting, matched by a stored contact ID rather than by name.
  • Products and services: owned by your app if it holds pricing. Accounting needs only the item code, description, account and tax code.
  • Sales invoices and credit notes: created in whichever system issues them to the customer. If your app issues the invoice, push it to accounting once, with the same number.
  • Payments: recorded where the money is matched. If finance reconciles bank feeds in Xero, let payment status flow back to your app from there.
  • Chart of accounts and tax rates: owned by accounting. Your app reads and maps to them, and never creates them.

One owner per object, one direction per field, and a stored external ID on both sides. That rule prevents most duplicate customers and double-posted invoices.

How the APIs and their limits work

Xero and QuickBooks Online both use OAuth 2.0: an authorised user at your company connects the app once, and the app then holds tokens it must keep refreshing. Plan for a token expiring or a user disconnecting the app, and alert someone when it happens.

Limits shape the design. Xero's published rate limits are, for each connected organisation, five calls in progress at once, 60 calls a minute and 5,000 calls a day, plus an app-wide limit of 10,000 calls a minute. Going over returns HTTP 429 with a Retry-After header, and Xero suggests keeping batch requests to about 50 items to stay under its payload limit. Intuit's QuickBooks Online throttles allow 500 requests a minute and 10 requests a second for each company, with separate limits for batch requests, and also return 429 when exceeded.

For a business pushing a few hundred invoices a day, 5,000 Xero calls is enough only if the sync is efficient. Batch where the API supports it, fetch only records changed since the last sync, and use webhooks rather than constant polling to learn about changes.

Developer pricing has changed too. From 2 March 2026, Xero moved to developer tiers priced by the number of connected organisations and monthly data egress, with a free Starter tier for up to five connections. Intuit runs its own App Partner Program with tiered terms for API usage. Check the current terms for your case before designing a sync that reads large volumes.

GST and InvoiceNow: the Singapore part

IRAS's GST InvoiceNow Requirement requires GST-registered businesses to transmit invoice data to IRAS through InvoiceNow-Ready solutions, in phases. As of October 2026, the phases are:

  • From 1 November 2025: newly incorporated companies applying for voluntary GST registration.
  • From 1 April 2026: all businesses applying for new voluntary GST registration.
  • From 1 April 2028: new compulsory registrants, and existing GST-registered businesses with total annual supplies up to S$200,000.
  • From 1 April 2029: existing businesses with annual supplies up to S$1 million.
  • From 1 April 2030: existing businesses with annual supplies up to S$4 million.
  • From 1 April 2031: existing businesses with annual supplies above S$4 million.

Three design consequences follow. First, if your accounting system is InvoiceNow-Ready and handles transmission, your custom app's job is to deliver complete, correct invoices into it. Second, IRAS's FAQ on the requirement says the invoice number transmitted must be the one issued to your customer, not an internal reference from another system, so the integration must never renumber invoices. Third, GST treatment must be mapped explicitly: each line in your app needs a tax category that maps to the right tax rate in the accounting system, kept in a table finance can review rather than hard-coded.

Error handling and reconciliation

A sync that fails silently is worse than no sync, because finance trusts numbers that are wrong. Build these in from the start:

  • A queue. Each change becomes a job. If the accounting API is down, jobs wait instead of disappearing.
  • Idempotency. Store the accounting system's ID against each record and check it before creating anything, so a retry never creates a second invoice.
  • Backoff that respects limits. On a 429, wait as long as the Retry-After header says, then retry.
  • A failed-jobs list finance can see, with errors in plain language, such as "tax rate not mapped for item SKU-104" rather than a stack trace.
  • Daily reconciliation. Compare the previous day's invoice and payment counts and totals between systems, and email the differences.
  • An audit log of every push and pull, kept long enough to answer an auditor's questions.

Build, buy a connector, or use an automation tool

Choose an existing connector from the Xero App Store or Intuit's app marketplace when one already links your business software and its field mapping matches how you work. Choose an automation tool such as Zapier or Make for low volumes and simple flows, like creating a contact when a web form is submitted. Choose a custom integration when volumes approach the API limits, when mapping rules are complex, when you run several entities or currencies, or when invoice numbering and tax mapping must be exact for InvoiceNow.

As a planning range, a custom one-way sync of contacts, invoices and payments takes 4–8 weeks including testing. Xero's demo company and QuickBooks sandbox companies let you test without touching live books. Two-way syncs and multi-entity setups take longer.

Where this fits with your ERP

If invoices, stock and payments are spread across several tools, an integration may be patching a deeper problem. Sometimes the better move is one ERP that runs operations and sends finished invoices to Xero, so accounting stays in the tool your accountant knows. Our system integration work starts by mapping which system owns what, which tells you whether you need a connector or a consolidation.

DipanshuTech builds billing and ERP software from Greater Noida, India. AccVora, our GST billing, inventory and accounting software for Indian businesses, runs on web, Windows and Android, and ERPSetu covers ERP, CRM and HRM for 42 business types. Both were built around Indian GST, so Singapore GST and InvoiceNow handling would be scoped for your case, not assumed. Singapore is 2.5 hours ahead of India, so your working day overlaps with ours.

FAQs

Can one app sync with both Xero and QuickBooks?

Yes, with an adapter for each API behind a common internal model. It is worth it if you serve companies on different accounting tools; otherwise build for the one you use.

What happens if we hit Xero's daily limit?

Further calls return HTTP 429 until the limit resets. A queue holds the remaining jobs so nothing is lost, but the books lag until then. An efficient sync avoids it.

Do we need InvoiceNow if we already use Xero?

That depends on your GST status and phase date, not on your software. If you are in scope, confirm your accounting setup is InvoiceNow-Ready and that your app's invoice numbers flow through unchanged.

Should the sync be real time?

Rarely. A queue that runs a few minutes behind is enough for most finance staff and is much kinder to API limits.

Next step

If you want invoices and payments to reach Xero or QuickBooks without re-keying, start a conversation. After a short discovery call we will send a written scope and a fixed quote.

Key takeaways

  • Decide which system owns each record, such as contacts, items, invoices and payments, before writing code.
  • Xero allows 60 API calls a minute and 5,000 a day for each connected organisation.
  • Under InvoiceNow, the invoice number sent to IRAS must match the one your customer received.
  • Store every external ID and reconcile counts and totals daily, so a failed sync surfaces within a day.

Ready to put this into practice?

Let’s build the solution that gets you there.

Talk to Our Experts