
Uganda · URA EFRIS
Your sales, already in the shape EFRIS wants them
URA does not ask you for a total. EFRIS asks for the line: what you sold, how many, in what unit, at what price, under which tax treatment, and who bought it when the buyer wanted the invoice in their own name.
That is a record-keeping problem long before it is a tax problem. A shop whose account of the day is a till roll and a notebook has to rebuild that detail every period, from paper and from memory — and rebuilt numbers are exactly the ones that come apart when somebody checks them against your stock.
sell.ke captures the detail at the counter as a by-product of selling, because stock control and margin reporting need the same fields EFRIS does.
What you get
What you have by the time you go to file
Every line of every sale
Item, quantity, unit of measure, unit price, discount and tax treatment, recorded as the sale happens rather than reconstructed at month end. Nothing to retype, and nothing to remember.
Buyer details where they are needed
A walk-in buys and goes. A contractor, an NGO or a government buyer needs the invoice in their name — so the counter captures the name and TIN against that sale and only that sale.
One catalogue, with units and tax categories
EFRIS invoices against goods you have registered, in the units you registered them in. Keeping the shop's own catalogue in those same descriptions and units is what stops a crate being invoiced as a bottle.
Per-branch, per-period exports
Kampala and the upcountry shop file from their own numbers rather than from a pooled total somebody split by hand afterwards.
Step by step
Getting a Ugandan shop EFRIS-ready
Sort the URA side first
Your TIN, your VAT registration and your EFRIS access are between you and URA — through the EFRIS web portal, the mobile app, an EFD, or a system-to-system arrangement. Do that before you touch the shop's records, because it determines the descriptions and units everything else has to match.
Build the catalogue once, in EFRIS's vocabulary
Enter each product in sell.ke using the same description and the same unit of measure you registered on your EFRIS goods and services list. A soda registered in bottles and sold in crates is the single most common reason a filing and a stock figure refuse to agree.
Set the tax category per product
Standard-rated, zero-rated or exempt, set once on the product rather than decided at the counter. The day's totals then split themselves by tax treatment instead of being split by someone reading a till roll.
Sell normally, and capture the buyer when it matters
Cashiers sell the way they always have. The one extra step is attaching a customer — name and TIN — to the sales that need an invoice in a specific name, which takes seconds at the counter and is impossible to reconstruct a month later.
Export the period and raise the documents
At the end of the period, pull the sales and tax report for each branch. Every figure you need for the EFRIS side is already itemised, already in the right units and already attributed to the right buyer — the filing becomes a transfer of data you hold rather than an investigation into what happened.
What EFRIS asks of a seller
EFRIS — the Electronic Fiscal Receipting and Invoicing Solution — is how URA requires VAT-registered taxpayers to issue invoices and receipts. A document raised through it carries a Fiscal Document Number and a verification code the buyer can check, which is the point: the buyer's claim and the seller's declaration come from the same record.
There is more than one way in. Businesses integrate system-to-system, or use a fiscalised device, or key documents into the EFRIS web portal or the mobile app. The route you take changes the mechanics and changes nothing about the data: whichever door you go through, you are asked for the lines, not the total.
Two details catch people out. The first is that you invoice against goods and services you have registered, in the units you registered — so your shop's own product list and your EFRIS list have to be the same list, or somebody is translating between them every month. The second is that a credit note is not something you simply issue; it goes back to URA, which means a return or a correction has to be traceable to the original sale rather than scribbled over it.
- Line-level detail per sale — item, quantity, unit, unit price, tax treatment
- Buyer identification, including TIN, where the buyer needs a named invoice
- Goods invoiced in the units they were registered in
- Returns and corrections traceable to the original document
- A record that still agrees with your stock when somebody compares the two
Where it actually goes wrong in a shop
Almost nobody fails EFRIS on the filing. They fail on the gap between what the shop did and what the shop can prove it did.
A till roll records prices, not products — so a month later the sales you declare are a reconstruction, and a reconstruction cannot be cross-checked against what left your shelves. Units drift: you buy in cartons, sell in pieces, and the EFRIS list says one of those while the shop says the other. Credit customers pay in instalments and the invoice gets raised against the payment rather than the delivery. A second branch opens and the two sets of numbers are pooled before anyone has split them by tax treatment.
Each of those is a bookkeeping failure that shows up as a tax problem. Which is why the fix is not tax software — it is keeping the shop's own record at the level of detail the filing already assumes you have.
What sell.ke holds, and why it is already the right shape
A sale in sell.ke is a set of lines, not an amount. Each line names the product, the quantity, the unit, the price actually charged, the discount if there was one, and the tax category carried by that product. That is not a compliance feature — it is what stock control needs in order to take the right item off the shelf and what margin reporting needs in order to tell you what you made. EFRIS happens to want the same fields.
The catalogue carries a unit of measure and a tax category per product, so the shop stops translating between what it buys, what it sells and what it declares. Branches hold their own stock and produce their own totals. Discounts, voids and refunds sit behind a manager PIN and leave a named entry in the audit trail, so a correction is a traceable movement rather than a hole where a sale used to be.
And because the till is offline-first, a connection that drops upcountry does not cost you the record. Sales keep being taken at full detail and sync when the line comes back — the thing you can least afford to lose is the thing least dependent on the network.
- Unit of measure and tax category set on the product, not chosen at the counter
- Customer records with TIN, attached to the sales that need them
- Branch-level sales, stock and tax splits
- Manager-authorised voids, refunds and discounts, each with a name against them
- Sales and tax exports per period, per branch
Compare
Three ways Ugandan shops keep the record
Same filing obligation, three different amounts of work — and three different answers when somebody asks you to prove a figure.
| What you are comparing | Till roll + notebook | Spreadsheet at month end | sell.ke |
|---|---|---|---|
| Line detail per sale | Prices only | Whatever was remembered | Captured as the sale happens |
| Unit of measure | Implied | Translated by hand | Set on the product |
| Buyer TIN | On a separate pad | Chased afterwards | Attached to the sale |
| Agrees with your stock | No way to check | Only if both were right | Same record moves both |
| Second branch | A second notebook | A second tab | Its own totals, one catalogue |
| Preparing a period | Days | Hours | An export |
sell.ke does not submit documents to URA. What it removes is the reconstruction that happens before you submit them.
What sell.ke does not do here
sell.ke does not submit to EFRIS on your behalf, and it does not issue Fiscal Document Numbers. Kenya's KRA eTIMS is the one revenue-authority integration the platform ships today; in Uganda the platform is the record and the filing stays yours, raised through whichever EFRIS route you already use.
That is a deliberate line rather than a gap we are hiding. A POS that claimed to file for you and then did not would cost you penalties, not a subscription. If a URA integration ships, this page will say so in these words and on this URL — not by quietly dropping this section.
Questions
EFRIS and your POS (Uganda) — questions
Does sell.ke submit my invoices to EFRIS?
No. sell.ke does not transmit to URA and does not issue Fiscal Document Numbers. It holds every sale at the line detail an EFRIS document needs — item, quantity, unit, price, tax treatment, buyer TIN — and exports it per period and per branch, so raising the documents is a transfer of data you already have rather than a reconstruction of a month you half remember. KRA eTIMS in Kenya is currently the only revenue-authority integration the platform ships.
I already use the EFRIS portal and the mobile app. Does this replace them?
No, it feeds them. The portal and the app are where the document is raised; the question they cannot answer is what you actually sold. sell.ke is the shop's own record — the stock that moved, the price it moved at, the branch it moved from — which is the input to the filing and the thing an audit compares the filing against.
My EFRIS goods list and my shop's product names do not match. Is that a problem?
It is the most expensive small problem in the whole exercise, because every mismatch becomes a manual translation every single month and a discrepancy every time somebody checks. The fix is to enter the catalogue in sell.ke using the descriptions and units you registered with URA. Do it once, at setup, and the translation step disappears — Amina can build the catalogue from a photo of your price list or a supplier invoice, so matching descriptions is editing rather than typing.
What about credit notes and returns?
A return in sell.ke reverses the original sale rather than being entered as a new negative transaction, so the credit is traceable to the document it corrects — which is what URA's approval step for a credit note assumes. Refunds and voids sit behind a manager PIN and record who authorised them, so your correction has a name and a timestamp against it rather than being a gap in the sequence.
I am below the VAT threshold. Is any of this relevant?
The EFRIS obligation follows VAT registration, so if you are not registered the filing is not yours to do yet. The record-keeping still is: businesses cross that threshold on a rolling turnover, usually without noticing until later, and the ones who struggle are the ones with no itemised history to work from. Running the shop on a real record from the start means registration is a form, not a reconstruction project.
Does it handle both Kampala and an upcountry branch?
Yes. Branches share one catalogue — so the descriptions and units stay identical across them — but hold their own stock and produce their own sales and tax totals. You file from each branch's real numbers instead of splitting a pooled figure by hand, and a transfer between branches is a recorded movement rather than a stock count that has to be redone at both ends.
Can I use it for more than one shop?
Yes. Branches share one product catalogue but hold their own stock, so a transfer between them is a recorded movement rather than a re-count. Reports run per branch or across all of them, and staff permissions are set per branch — a Kisumu supervisor does not need to see Nairobi's margins.
Do I need internet?
Not to keep selling. Offline mode lets the till take sales, print receipts and reserve stock while the connection is down, then syncs everything when it returns. You do need connectivity for the parts that are inherently online: an M-Pesa STK push, an eTIMS submission and the online shop all need a live link.
How long does setup take?
A single-counter duka is usually selling the same day. The work is the product list, not the software: import a CSV or let Amina create products from a supplier invoice or a photo of your price list. A multi-branch business with thousands of SKUs, opening stock counts and an eTIMS enrolment should plan a week and run the old system in parallel for a fortnight.
What does it cost?
Plans run from USD 12/month for a single-location till to USD 115/month for unlimited scale, with the online store on your own domain included from USD 23/month. In Kenya the same plans are KES 1,499 to KES 14,999/month, billed in shillings. Every plan starts with a 14-day trial and no card, and there is no per-terminal licence and no commission on your sales. There is no hardware to buy either — sell.ke runs on a phone, tablet or laptop you already own.
The market page this sits under
Go deeper on a feature
Each one goes further than this page does.
Reports and real accounting
Double-entry books — trial balance, P&L, balance sheet — not a CSV export to somebody else's software.
Stock you can trust
Batch and expiry, serial numbers, reorder levels, stock takes and the formulas behind them.
Selling at the counter
Split payments, held orders, manager-gated discounts and a drawer count that reconciles.
Branches, staff and control
Shared catalogue, separate stock, transfers that are movements, and permissions per branch.
The problems behind this
What this actually fixes in a working shop, written from the problem rather than from the regulation.
Not knowing your profit
Takings are not profit. The gap between them is where most small shops quietly fail.
The drawer never balances
Cash, M-Pesa, MoMo and a notebook, reconciled by eye at 9pm. Here is the fix.
Stock takes that close the shop
Counting everything on a Sunday finds the loss months late. Count less, far more often.
EBM and your stock (Rwanda)
EBM asks what you bought, sold and still hold. Most shops can only answer one of the three.
EFD and VFD receipts (Tanzania)
Stop the fiscal receipt and the shop's own record from describing two different days.
MTN MoMo at the till
Every MoMo payment attached to the sale that earned it, instead of a statement you read at night.
Try it on your own products
Fourteen days, no card, no hardware to buy. Import your product list or let Amina build it from a photo of your price list, and run it alongside whatever you use now.