Five per cent sounds like the simplest tax in the world. Multiply the price by 1.05, done. Then you build a marketplace where some sellers are registered and some aren't, where the platform takes a commission, where a client asks for a refund three weeks later, and the 5% turns out to touch the price screen, the checkout, the receipt, the invoice, the refund and the report your accountant needs every quarter.
The rules themselves are short. According to the Federal Tax Authority, the standard rate is 5%. Registration is mandatory once a business's taxable supplies and imports pass AED 375,000 over the previous 12 months, or are expected to within the next 30 days, and voluntary from AED 187,500. A registered business gets a Tax Registration Number, which appears on its tax invoices.
What the rules don't tell you is how to build an app around them. When Trainr, the UAE fitness marketplace we built, asked for VAT, we didn't start with code. We listed the decisions the business had to make first. This post is that list, grown into a checklist, with our commentary on each item.
One note before it. We build software; we are not tax advisers. Which of your supplies are taxable, zero-rated or exempt, and who owes what, is your accountant's call. Our job is to build the product so the rate, the display and the invoices follow that call, and can change when it does.
1. Pick inclusive or exclusive, then store three numbers
This is the decision users notice, so make it first.
Inclusive prices show the final amount. A package listed at AED 525 is what the client pays, with AED 25 of VAT inside it. Consumers generally find that clearer and nobody gets a surprise at checkout. Exclusive prices show the amount before VAT and add it at the end, which business buyers are used to.
Either way, store the net price, the rate and the VAT amount as separate values, and record the rate used on each sale. A product that stores only a final figure can't produce a correct tax invoice, and can't change a rate without someone editing every price by hand. We keep amounts as whole numbers in fils, the smallest unit of the dirham, the way Trainr's payments are created, so the arithmetic never drifts by a fils. The glossary explains minor units if that's unfamiliar.
2. Name the seller of record for every kind of sale
This is where a marketplace stops being a simple app. In Trainr, money moves between three parties: the client, the trainer and the platform. Who is selling the training session to the client, the trainer or the platform? The answer changes who charges VAT on what, and it's a question for your accountant, not your developer.
Write the answer down for each kind of sale. Packages, single sessions, subscriptions and anything the platform sells in its own name may not all land the same way. Our marketplace app development page covers how commission and the seller's share are built; the glossary has the basics of commission and two-sided marketplaces.
3. Know each provider's VAT status, and when it changed
Some trainers will be registered for VAT and some won't, depending on their own income against the AED 375,000 threshold. The product needs to know which is which. The usual approach is to collect a TRN during onboarding if the provider has one, and treat its absence as "not registered".
The harder case is change. A provider who crosses the threshold becomes registered from a date. New sales from that date need the new treatment; past sales must stay exactly as they were invoiced. So status is a dated record, not a checkbox you overwrite.
4. Collect the TRN once, where it's needed
Two groups need a TRN field: business customers who want tax invoices in their own name, and registered providers on a marketplace. Ask at sign-up or onboarding, validate the format, let people update it, and keep a record of when it changed.
Do this before launch. Our UAE page lists TRN capture among the early decisions for a reason: adding a required field to an onboarding flow that already has users means chasing every one of them for it.
5. Keep VAT on its own line, away from commission
A marketplace already tracks what the client paid, what the platform keeps and what each provider is owed. VAT is at least one more line, and it must never be blended into the others. Commission and the VAT on commission sit apart from the provider's share and any VAT on that.
The test is simple: can every figure on a report be rebuilt from stored entries? If someone has to adjust a spreadsheet by hand, a line is missing. The glossary entries on a ledger and reconciliation explain the vocabulary your accountant will use.
6. Make invoice numbers run without gaps
This is the item that catches teams out, and it caught us on our own product. Storafleet, our multi-cloud storage platform, issues Indian GST invoices, and the same gapless rule applies. A payment audit found three problems at once: the first invoice of every financial year was numbered 00000; a number was reserved before the invoice was validated, so a failed validation burned it and left a gap; and the financial year was worked out in server-local time.
The fix was one counter per financial year, reserved only after validation, with the year computed in UTC and credit notes on their own series. Different country, different tax, same mistakes available. If you're building UAE invoices, test the first invoice of a year, a failed validation and a midnight on the boundary. More in our entry on invoice number series, and the full story on the Storafleet case study.
Beyond numbering, an invoice system should show the supplier's name, address and TRN, the customer's details and TRN where they're a registered business, each line's price, rate and VAT amount, and the totals in dirhams. The FTA sets out the full list; your accountant will confirm it for your business.
7. Let the server set the amount
The payment provider collects the total. It doesn't decide the tax. Trainr's card payments are created on the server in dirhams through Stripe, and the VAT logic lives in the product, not the gateway. That means the charged amount, VAT included, is worked out on the server and never trusted from the app or browser. Our Stripe payments integration page describes how we set this up.
8. Make refunds undo everything, including the VAT
A refund goes back against the original payment, reverses each line in proportion, VAT included, and produces a credit note linked to the original invoice. A partial refund on a package reverses a part of each line, not just the provider's share. See refund for the general mechanics.
9. Decide early if subscriptions or in-app purchase are involved
A subscription renews, so the rate and display must apply to every renewal, and a rate or status change applies from a date onwards. Mid-cycle upgrades and downgrades create partial charges and refunds, each with its own VAT line. A free trial that converts creates the first taxable charge at conversion, not at sign-up.
If digital subscriptions are sold through Apple's or Google's in-app purchase, the store collects the payment and may handle tax itself in many cases. Which rules apply is, again, an accountant's question, and the answer can decide whether you sell inside the app, on the web, or both. The glossary on subscription billing covers the moving parts.
10. Build the reports before anyone asks
Once the business is registered, someone prepares VAT returns from the product's data every period. Make that a report, not a project. For a marketplace, that means sales by period with net, VAT and total split by rate; commission income and its VAT, separate from providers' sales; refunds and credit notes linked to their invoices; a reconciliation between the ledger, the payment provider's settlements and the bank; and an export your accountant's tools can read.
Test them on a month of realistic data before launch. A report that has only ever run on three test orders hasn't been tested.
11. Remember VAT isn't the only UAE rule
Personal data falls under the UAE's federal data protection law, which affects consent, retention and what users can ask you to delete. It's a separate piece of work, and it is easy to copy a privacy policy and retention wording from another market without noticing. Our guide to the UAE PDPL for apps covers the data side, and the marketplace launch checklist covers the rest of a marketplace going live.
The short version for your accountant
If you only have an hour with your accountant before design starts, take items 1 to 4. Inclusive or exclusive; seller of record for each sale; how providers above and below the threshold are treated; and where TRNs are collected and printed. Everything else on this list is our job once those are answered.
We build from Bengaluru, not Dubai, and we say so first. A remote build works when these decisions are made early and written down, and a Discovery Sprint is where we settle them with you before the payments code exists.
