Fiscalise Tally invoices to URA EFRIS, automatically
Raise the sales voucher in Tally as you already do. It is submitted to EFRIS, and the fiscal document number, verification code and QR code come back onto the voucher — ready to print on the invoice your customer receives. Nobody re-keys anything into the URA portal.
Tally is reached on your own network, not over the internet
Tally keeps its company data on your machine or your server, so there is no cloud account to authorise. Something has to run where the data is. Two ways of doing that, and they can be combined.
Tally's own XML interface
Both TallyPrime and Tally.ERP 9 will act as an HTTP server on your network and answer XML requests — the same mechanism Tally's own import and export uses. A connector on the LAN reads new sales vouchers through it and writes the EFRIS result back.
Nothing is changed inside Tally itself, which is the lighter option and the one to prefer where the installation is already customised.
A TDL customisation inside Tally
Tally's own extension language can carry the fiscal document number, verification code and QR code on the voucher as fields, and put them on the printed invoice format your customers already recognise. Fiscalisation can be triggered as the voucher is accepted rather than a moment later.
This is what makes the printed document look right without anyone having to learn a second screen.
Either way, the machine holding the company data has to be running when invoices are raised. On a multi-user Tally licence that is the server, which is usually on anyway; on a single-user installation it is the accountant's own computer, and that is worth settling before it becomes a surprise.
What comes across
EFRIS needs more than the invoice itself. These are read from Tally and kept in step.
Sales vouchers
Fiscalised to EFRIS, with the fiscal document number, verification code and QR code returned and held against the voucher for printing.
Credit notes
Raised against the original invoice, which URA requires — a credit note detached from its invoice is rejected.
Stock items and service ledgers
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.
Party ledgers
Buyer type and TIN where the sale is business-to-business, read from the party master, which changes what EFRIS requires on the document.
Tax treatment
Standard-rated, zero-rated, exempt and deemed VAT, plus excise duty where it applies — resolved per line rather than taken from the voucher total.
Where Tally and EFRIS disagree
Reaching Tally is not the difficult part. Reconciling how the two systems think about a sale is, and it is where in-house attempts usually stall.
A voucher can be altered after it is saved. A fiscal document cannot
Tally lets you reopen a saved voucher and change the amount, or delete it outright. EFRIS has no equivalent — once a document is issued it exists at URA, and the only correction is a credit note against it. The integration has to notice the alteration and treat it as a correction, rather than quietly submitting a second version of the same sale.
Not every sale in Tally names a stock item
An invoice raised as an accounting voucher moves money between ledgers and names no item at all, which is ordinary practice in Tally and unusable to EFRIS — every line URA receives has to name something that exists in the catalogue. Those sales need a mapping decided once, not improvised per invoice.
An item valid in Tally 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 the stock item calls it — Nos, Pcs and Units are Tally conventions, not URA ones. Registration happens through the API, one of the first calls an integration makes, so this is handled rather than typed in somewhere.
Discounts are a separate line, not a column
Tally puts a discount percentage on the line it reduces. EFRIS will not accept that — the discount must follow as its own negative line, flagged as the discount and carrying no quantity at all. A quantity there is rejected outright.
Voucher numbers collide across companies and branches
EFRIS enforces uniqueness of the seller reference per taxpayer, across every till and every integration on that TIN. Tally numbers vouchers per company and per voucher type, so two branches each running their own company file will produce the same number twice, and the rejection reads as a duplicate submission rather than as a numbering problem.
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, Tally partners 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 Tally 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 — your side stays a TDL or XML exercise. Or licence the whole platform as source and run it on your own infrastructure.
efrisgateway.comTally and EFRIS — common questions
Can Tally connect to URA EFRIS?
Does it work with Tally.ERP 9, or only TallyPrime?
Do I have to change how I raise invoices in Tally?
Does Tally have to be connected to the internet?
What happens if someone edits or deletes a voucher after it has been fiscalised?
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.
QuickBooks
Online and Desktop
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.
