- Home
- Apps
- SaaS Tools
- Kenya eTIMS / KRA Compliance
Illustrative previewReal-time eTIMS transmission to KRA plus withholding VAT and income tax on one bill
— built, installed and supported by ECOSIRE.
What is Kenya eTIMS / KRA Compliance?
Real-time eTIMS transmission to KRA plus withholding VAT and income tax on one bill — built, installed and supported by ECOSIRE. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
Kenya's eTIMS (electronic Tax Invoice Management System) mandate means every invoice your business issues must be transmitted to the Kenya Revenue Authority (KRA) in real time, stamped with a control unit invoice number and a scannable QR code — and any withholding VAT or withholding income tax you deduct has to reconcile cleanly against the same bill. Doing that by hand, or bolting a spreadsheet onto Odoo, is exactly how businesses fall out of compliance and lose input-VAT claims.
This is a BUILD-TO-ORDER module. It is not an existing apps.odoo.com download and there is no instant-download link. ECOSIRE designs, builds, installs and supports a Kenya eTIMS / KRA compliance module tailored to your chart of accounts, service catalogue and OSCU/VSCU setup, then hands it over running on your instance. Typical lead time is one working week from signed scope to go-live, depending on KRA sandbox onboarding and the number of company/branch tax registrations involved.
Under the hood it is a proper Odoo application. A dedicated __manifest__.py declares dependencies on account, l10n_ke and base; new models.Model classes extend account.move and account.move.line with the fields KRA requires (control unit invoice number, receipt signature, item classification code, tax-point date). Withholding amounts are derived with @api.depends computed fields so a 2% WHT-VAT deduction or a 3–30% withholding income tax rate is calculated the moment the service line is priced — never keyed twice. Transmission to the eTIMS OSCU/VSCU device API runs through a queued service layer with retry and idempotency, so a slow KRA endpoint never blocks your invoicing. Every access path is locked down with ir.model.access.csv plus record rules so only authorised finance users can re-transmit or void; QWeb reports render a KRA-compliant tax invoice with the returned control number and QR; and automated actions flag any invoice that failed to reach KRA for follow-up. The module exposes its transmission status over Odoo's XML-RPC/JSON-RPC API so your POS, e-commerce or external billing tools can trigger and confirm eTIMS submission programmatically. It targets Odoo 17, 18 and 19 on both Community and Enterprise.
The result: you invoice inside Odoo exactly as you do today, the KRA submission happens in the background, and your withholding taxes land on the correct control accounts ready for the monthly return — with ECOSIRE on the hook to keep it aligned as KRA revises the eTIMS specification.
What you get
- The complete, installable Odoo module source (addon directory with __manifest__.py, Python models, views, security CSV/record rules, QWeb reports and data files) delivered to your repository or instance.
- Installation and configuration on your Odoo 17/18/19 environment, including connection to the KRA eTIMS sandbox, test transmissions, and cut-over to production credentials.
- KRA-compliant tax invoice and WHT certificate QWeb report templates matched to your branding.
- A configured withholding-tax rate table (2% WHT-VAT and 3–30% income-tax bands) mapped to your service and product categories, plus the control accounts posted to your chart of accounts.
- Written handover documentation: configuration guide, transmission/retry runbook, error-code reference and a monthly-return reconciliation checklist.
- A live training session for your finance team covering invoicing, re-transmission, WHT reconciliation and reading the compliance dashboard, with a recording.
- A defined post-go-live support and updates window (bug fixes plus alignment with KRA eTIMS specification changes) under an SLA agreed in scope.
- Source-controlled release tags for each supported Odoo version so upgrades are clean and traceable.
Who this is for
Kenyan SME finance manager
Runs invoicing and the monthly VAT return inside Odoo and needs every invoice to reach KRA in real time without adding manual steps, so input-VAT claims and WHT deductions stay defensible at audit.
East-Africa Odoo implementation partner
Delivers Odoo to multiple Kenyan clients and wants a maintained eTIMS/KRA compliance layer they can resell and deploy per client rather than rebuilding OSCU integration and withholding logic on every project.
CFO or group controller of a multi-branch business
Oversees several KRA-registered branches or companies and needs per-branch device credentials, consolidated WHT control accounts and a dashboard that surfaces any failed transmission before it becomes a compliance gap.
Professional-services firm billing withholding-taxable fees
Issues consultancy, management-fee, rent or royalty invoices that attract 3–30% withholding income tax and 2% WHT-VAT, and needs the correct rate applied per service type and a printable WHT certificate for each client.
How Kenya eTIMS / KRA Compliance Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Real-time eTIMS transmission to KRA with control unit number & QR | Included | Partial support | Partial support | Not included |
| Withholding VAT (2%) auto-deduction to a control account | Included | Partial support | Partial support | Not included |
| Withholding income tax by service type (3–30%) | Included | Partial support | Not included | Not included |
| Idempotent queued transmission with retry & failure dashboard | Included | Not included | Partial support | Not included |
| Tailored to your chart of accounts, service catalogue & branches | Included | Included | Not included | Not included |
| Ongoing alignment with KRA eTIMS spec changes under SLA | Included | Not included | Partial support | Not included |
| XML-RPC/JSON-RPC hooks for POS / e-commerce submission | Included | Partial support | Not included | Not included |
| Role-based access & audit trail on tax re-transmission | Included | Partial support | Partial support | Partial support |
| Supported across Odoo 17, 18 & 19 (Community & Enterprise) | Included | Partial support | Partial support | Included |
Frequently Asked Questions about Kenya eTIMS / KRA Compliance
How long does delivery take and what is the lead time?
This is a build-to-order module, not an instant download. Typical lead time is one working week from a signed scope to go-live on your instance. The main variables are KRA eTIMS sandbox onboarding, the number of KRA PINs/branches to register, and how much your chart of accounts and service catalogue need mapping. We agree the exact timeline in writing before we start and keep you updated through sandbox testing and production cut-over.
What support and updates do I get after go-live?
Every engagement includes a defined post-go-live support and updates window under an SLA set in your scope. That covers bug fixes, help with re-transmissions and reconciliation questions, and — critically — alignment with KRA eTIMS specification changes, since KRA revises the API and payload requirements over time. We ship updates as tagged releases per Odoo version so upgrades stay clean. Extended or ongoing support can be arranged as an annual agreement.
Which Odoo versions and editions does this work with?
We build and test against Odoo 17, 18 and 19, on both Community and Enterprise. The module layers on top of the standard Kenyan localisation (l10n_ke) and extends account.move, so it fits your existing accounting flow. We target the specific version and edition you run in production.
How does it handle both withholding VAT and withholding income tax on the same bill?
Withholding amounts are computed with @api.depends fields on the bill lines. WHT-VAT is deducted at 2% on qualifying supplies, and withholding income tax is applied at the correct statutory band (3–30%) based on the service type mapped to each product/service category. Both post to dedicated control accounts and generate the data for a printable WHT certificate, so a single bill can carry both deductions and still reconcile against your monthly return.
What happens if the KRA eTIMS endpoint is slow or unavailable when I post an invoice?
Transmission runs through an idempotent, queued service layer with automatic retry and back-off, so a slow or down KRA endpoint never blocks your invoicing or creates duplicate submissions. Any invoice that fails to reach KRA is flagged on the compliance dashboard with the raw eTIMS error, and an authorised user can re-transmit with one click once the endpoint recovers.
Can external systems like our POS or e-commerce store trigger eTIMS submission?
Yes. The module exposes transmission and status over Odoo's XML-RPC/JSON-RPC API, so a connected POS, e-commerce checkout or third-party billing system can trigger an eTIMS submission and confirm the returned control unit number programmatically. We scope those integration points with you during the build.
Is my access to tax data and re-transmission controlled?
Yes. Security is enforced with ir.model.access.csv plus record rules. Only members of the eTIMS Officer group can re-transmit, void or edit KRA tax metadata; everyone else invoices normally without touching the compliance layer. Every submission and re-transmission is logged in the record's chatter for a full audit trail.
Related Modules

Journal Restriction For Users
A build-to-order Odoo accounting-security module that limits which journals each user can post, view, and reconcile — so sales, purchase, bank, and cash entries stay walled off by role. ECOSIRE scopes, builds, installs, and supports it on your Odoo 17, 18, or 19.

Klarna BNPL Gateway for Odoo (Europe)
Build-to-order Odoo payment provider bringing Klarna pay-in-3, pay-later and financing to your European checkout — built, installed and supported by ECOSIRE.

Klaviyo Integration for Odoo
Sync Odoo eCommerce customers, orders, carts and browse events into Klaviyo for advanced email/SMS automation. Built to order.
Kenya eTIMS / KRA Compliance
Real-time eTIMS transmission to KRA plus withholding VAT and income tax on one bill — built, installed and supported by ECOSIRE.
- Direct integration with the KRA eTIMS OSCU/VSCU device API, including sandbox onboarding and production key exchange, so every invoice is authenticated against your KRA PIN and branch registration.
- Real-time invoice transmission on posting: when an account.move is validated, the module submits it to eTIMS and writes back the control unit invoice number, receipt signature and tax-point timestamp.
- Control unit invoice number plus scannable QR code rendered on the customer tax invoice via a KRA-compliant QWeb report, so printed and PDF invoices carry the mandated fields.
- Automatic withholding VAT (2%) deduction computed with an @api.depends field on qualifying supplier bills, posting the WHT-VAT to a dedicated control account for the monthly return.
