Fiscalise QuickBooks invoices to URA EFRIS, automatically
Raise the invoice in QuickBooks as you already do. It is submitted to EFRIS, and the fiscal document number, verification code and QR code come back — ready to print on the document your customer receives. Nobody re-keys anything into the URA portal.
Online and Desktop connect differently
Worth settling first, because it changes what the work involves. Both end up in the same place; they get there by different routes.
QuickBooks Online
Connects over Intuit's REST API. You authorise once through Intuit's consent screen and the connection refreshes itself from then on — no password is stored and nothing is installed on your machines. New invoices are picked up as they are raised.
This is the quicker of the two, and it keeps working when your accountant is on a different laptop.
QuickBooks Desktop
The company file lives on your own machine or server, so a connector runs alongside it and reads invoices as they are saved. It needs the machine hosting the file to be reachable and switched on when invoices are raised.
Common in Ugandan businesses running older QuickBooks versions. It works well; it simply has more moving parts than the Online route.
What comes across
EFRIS needs more than the invoice itself. These are read from QuickBooks and kept in step.
Invoices
Fiscalised to EFRIS, with the fiscal document number, verification code and QR code returned for printing.
Credit notes
Raised against the original invoice, which URA requires — a credit note detached from its invoice is rejected.
Products and services
Registered with URA through the API as part of the integration, carrying their unit of measure and tax treatment. Nothing is keyed in by hand.
Stock movements
For goods: opening stock and subsequent movements, which URA requires before those goods can be invoiced. Services carry no stock.
Customers
Buyer type and TIN where the sale is business-to-business, which changes what EFRIS requires on the document.
Tax treatment
Standard-rated, zero-rated, exempt and deemed VAT, plus excise duty where it applies.
Where QuickBooks and EFRIS disagree
The connection is not the difficult part. Reconciling how the two systems think about a sale is, and it is where in-house attempts usually stall.
Discounts are a separate line, not a field
QuickBooks treats a discount as a property of the line it reduces. EFRIS will not accept that — it must follow as its own negative line, flagged as the discount and carrying no quantity at all. A quantity there is rejected outright.
An item valid in QuickBooks can still be unknown to URA
A product has to exist in the EFRIS catalogue before an invoice can mention it, and its unit of measure must come from URA’s own list rather than whatever QuickBooks calls it. Registration happens through the API — it is one of the first calls an integration makes — so this is handled, not typed in somewhere.
Goods need stock recorded before they can be sold
URA rejects an invoice for goods it holds no stock against, so opening stock and subsequent movements have to be reported. Services are not stocked and need none of this, which is a distinction QuickBooks does not draw for you.
Excise pulls the totals in opposite directions
Where excise duty applies, it is included in the EFRIS tax total and excluded from the gross total. Getting either the wrong way round is rejected with a number and no explanation of which figure was wrong.
Invoice numbers must be unique across everything
EFRIS enforces uniqueness of the seller reference per taxpayer, across every till and every integration on that TIN. Two branches numbering invoices independently will collide, and the rejection looks like a duplicate submission.
Each of these is a rejection code we have already worked through. The error-code reference documents them, free to read, whether or not you ever work with us.
Two ways to do this
Most businesses want the first. Software companies and teams with their own developers usually want the second.
We set up the environment and everything your business needs to start issuing fiscalised invoices. You keep working in QuickBooks exactly as before.
Talk to usSend invoices to our API as ordinary JSON and it handles the EFRIS protocol, the signing and the tax reconciliation. Or licence the whole platform as source and run it on your own infrastructure.
efrisgateway.comQuickBooks and EFRIS — common questions
Can QuickBooks connect to URA EFRIS?
Do I have to change how I raise invoices in QuickBooks?
Does it work with QuickBooks Desktop, or only Online?
What happens when URA rejects an invoice?
How long does setting this up take?
Do I need to be a URA-accredited integrator to use this?
Running something else?
The EFRIS side is identical whatever you run. What changes is how the invoice leaves your system, so each has its own notes.
Tally
TallyPrime and Tally.ERP 9
Sage
Pastel, Evolution, 300, X3
Odoo
Online, Odoo.sh, self-hosted
Zoho Books
Cloud, over the Zoho API
A custom ERP, an in-house system or a POS nobody has heard of is not a problem either — if it can produce an invoice, it can be connected. Tell us what you run.
