A New Zealand payroll layer for Odoo that produces IR-ready payday filing returns, PAYE and KiwiSaver calculations, NZ leave entitlements, payslips and bank files. Built to order by ECOSIRE for your Odoo 17, 18 or 19 database. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $499.00 USD; request a quote for a scoped proposal.
Illustrative previewA New Zealand payroll layer for Odoo that produces IR-ready payday filing returns,
PAYE and KiwiSaver calculations, NZ leave entitlements, payslips and bank files. Built to order by
ECOSIRE for your Odoo 17, 18 or 19 database.
No DIY setup — a working app, built, installed and supported by ECOSIRE.
Start with a one-time build price. We scope it with you at kickoff.
ECOSIRE builds, configures and installs it on your Odoo.
You go live in about 2–4 weeks, with a post-launch support window.
New Zealand employers must file employment information with Inland Revenue within two working days of every payday, not once a month. If your payroll sits in a separate silo from your ERP, that deadline turns into a recurring export-reconcile-upload chore, and every mid-cycle change (a new starter, a KiwiSaver opt-out, a corrected pay run) becomes a second reconciliation between two systems. Odoo's core payroll gives you contracts, salary structures and payslip runs, but it ships no NZ localisation: no PAYE tables, no KiwiSaver employee and employer contribution logic, no ESCT tiers, no Holidays Act leave rules, and nothing that emits an Employment Information return in the shape IR expects. Community has no payroll app at all — hr_payroll is Enterprise — so the ground floor differs depending on your edition, and we scope for the one you actually run.
We build a dedicated NZ payroll localisation module that sits on top of the standard payroll spine rather than forking it. Salary rules are defined as data so PAYE thresholds, ACC earner levy rates, student loan repayment thresholds and KiwiSaver percentages are versioned records with effective-from dates, not constants buried in Python — when IR changes a rate at the start of a tax year, you load a new rate set and historical pay runs stay reproducible. New models carry the NZ-specific fields Odoo lacks: IRD number with checksum validation, tax code (M, ME, SB, S, SH, ST, SA and their SL variants), KiwiSaver status and contribution rate, savings suspension dates, ESCT rate derived from prior-year earnings, and payday-filing submission state. Computed fields use @api.depends so a change to a contract or a mid-period tax-code switch recalculates the affected payslip lines rather than silently leaving stale amounts.
On the filing side, each pay run produces a payday filing document: a persisted record with its own state machine (draft, generated, submitted, amended), the exact file payload, a submission reference, and a chatter trail of who generated and lodged it. That record is the audit artefact, so an amendment is a new versioned document linked to the original rather than an overwrite. Employee details returns for new and departing staff are generated from the same data. Where you want lodgement automated, we integrate against IR's gateway services with credentials held in system parameters and a scheduled action driving the queue with retry and error capture; where you prefer to keep a human in the loop, the same record produces the file for manual upload to myIR.
Payslips and remittance advices are QWeb reports you can rebrand, and bank files are generated to the format your bank accepts (ANZ, ASB, BNZ, Westpac and Kiwibank direct credit layouts are all straightforward to target). Year-end summaries and reconciliation reports read from the same posted data, so what you file, what you pay and what hits the general ledger agree by construction. Access is enforced through ir.model.access.csv plus record rules that keep payroll officers inside their own company and keep employees off other people's records — payroll data is the most sensitive table in the database and we treat it that way. Views are standard XML with OWL components only where an interaction genuinely needs them, so the module survives upgrades. Everything is also reachable over XML-RPC and JSON-RPC if you drive pay runs or pull filing status from another system.
This is a build-to-order product, not a download. We start with a scoping call to confirm your Odoo version and edition, pay frequencies, entities and payroll headcount, which leave types you operate under the Holidays Act, whether you want automated IR lodgement or file generation for myIR, and which bank format you need. From that we write a fixed scope and a fixed quote. Typical delivery is two to four weeks from confirmed scope, longer only if you want multi-entity consolidation or an integration with an existing time and attendance system. We build against your target version, deliver to a staging database first, run UAT with your payroll officer on a parallel pay cycle so you can compare results against your current process before you cut over, then install to production with a documented rollback. You get the full source, a git repository handover, and a post-go-live support window during which we fix defects against the agreed scope.
Already runs Odoo for accounting, sales and inventory, and is paying for a separate payroll product plus the monthly reconciliation between the two. Wants payroll and the general ledger to agree without a spreadsheet in the middle, and wants payday filing to be a button rather than an export.
Personally accountable for filing employment information within two working days of every payday and for correcting errors afterwards. Needs a visible submission state, a reliable amendment path, and payslips and leave balances that stand up to an employee query.
Driving a project to retire point solutions. Needs the NZ payroll layer to be a proper module they can read, version, test and upgrade, not a pile of studio customisations, and needs API access so time and attendance can feed pay runs.
Repeatedly hits the same gap — Odoo has no NZ payroll localisation — and would rather deploy a maintained module with source handover than rebuild PAYE and KiwiSaver logic for each client.
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| NZ payday filing to IR | Built in: per-pay-run filing record, amendments, optional automated gateway lodgement | Achievable, but you are researching the IR spec and building the state machine from zero | Rare — most listed payroll modules target other countries and skip NZ entirely | Not present; Odoo ships no NZ payroll localisation |
| PAYE, KiwiSaver and ESCT logic | Effective-dated rate records with tax codes, contribution tiers and ESCT derivation | Depends entirely on how well your developer reads IR guidance; rates often hardcoded | Usually generic salary rules you must configure and maintain yourself | Salary rule engine exists (Enterprise) but no NZ rates or rules supplied |
| Holidays Act leave handling | Annual, sick, bereavement, family violence and public holiday entitlements wired to time-off | Commonly the piece that gets deferred and then bites at year end | Generic leave accrual, not NZ statutory entitlements | Generic time-off with manual allocation policies |
| Bank direct credit files | Generated to your bank's layout from posted pay run data | Buildable, but the layout quirks are only found in production | Often SEPA or a non-NZ format your bank rejects | No NZ bank payroll file format included |
| Rate changes at tax year | Load a new effective-dated rate set using the handover runbook; history stays reproducible | Usually a code change and a redeploy every year | Depends on the publisher's release cadence and whether they still maintain it | Not applicable — nothing to update |
| Security and data access | `ir.model.access.csv` plus record rules scoping payroll by company and role | Frequently under-specified; payroll data ends up readable too widely | Varies by author; often default groups without record rules | Standard payroll groups, no NZ-specific segregation |
| Ownership and upgrade path | Full source, private git repo handover, documented extension points and upgrade notes | You own it, but usually with the original developer as the only person who understands it | Licensed source; upgrades depend on the publisher continuing to publish | Core code upgraded by Odoo, but the NZ gap remains at every version |
| Support model | Post-go-live support window, then an optional agreement; no lock-in because you hold the code | Whoever built it, if they are still available | Ticket queue, response times vary widely with the publisher | Odoo Enterprise support covers core payroll only, not a NZ localisation |
This is build-to-order, not an instant download. Typical delivery is two to four weeks from confirmed scope. The clock starts once we have agreed the scope in writing after the scoping call, and it covers development, staging deployment, UAT with a parallel pay cycle and production install. Multi-entity consolidation or an integration with an existing time and attendance system can extend that, and we tell you before you commit rather than after.
We build for Odoo 17.0, 18.0 and 19.0, on-premise, Odoo.sh or a supported hosted environment. Note that Odoo's payroll app (`hr_payroll`) is Enterprise-only, so on Community the scope includes the payroll spine we build alongside the NZ layer, which changes effort and cost. We confirm your edition on the scoping call and quote accordingly.
Rates live in effective-dated records, not in code, so a normal tax-year change is a data load your team can perform using the rate-update runbook we hand over. Historical pay runs keep the rates that applied at the time. If IR changes the filing format or introduces a new requirement, that is a change to the module and we quote it as an update; existing clients get first call on that work.
Every build includes a post-go-live support window during which we fix defects against the agreed scope at no extra cost, including the first live payday filing cycle. After that you can continue on a support agreement, or take the code and maintain it yourself — you get the full git repository, so you are never locked in. Upgrades to a newer Odoo release are quoted separately because they are real work.
Both are supported and it is your call. We can integrate with IR's gateway services so a scheduled action lodges submissions automatically with retry and error logging, or we can simply generate the file for your payroll officer to upload through myIR. Many clients start with file generation, watch it for a couple of cycles, then switch on automated lodgement. Either way the filing record, its payload and its audit trail live in Odoo.
Yes. Odoo's multi-company model carries through, and record rules scope payroll officers to their own company so one entity's payroll is not visible to another's. Weekly, fortnightly and monthly cycles can run in the same database, each producing its own filing per payday. Tell us the entity and frequency mix on the scoping call so we size it correctly.
For most NZ SMEs, yes — calculation, payslips, leave, bank files and payday filing all move into Odoo. Where it does not is when you have unusual award-style arrangements, complex shift loadings, or an existing time and attendance product you want to keep. In those cases we usually keep that system as the input and treat the module as the calculation and filing engine, connected over XML-RPC or JSON-RPC. We are direct about which side of that line you fall on before you buy.

A build-to-order Odoo localization that loads Algeria's full wilaya and commune hierarchy with bilingual French and Arabic names, wired into partner addresses and reporting. ECOSIRE builds, installs, and supports it after your quotation.



A build-to-order Odoo module that lets you render any accounting report — P&L, Balance Sheet, aged reports, journals, trial balance — in a currency of your choice, with automatic conversion at the rate you define. ECOSIRE scopes, builds, installs and supports it for your Odoo 17/18/19 environment.
A New Zealand payroll layer for Odoo that produces IR-ready payday filing returns, PAYE and KiwiSaver calculations, NZ leave entitlements, payslips and bank files. Built to order by ECOSIRE for your Odoo 17, 18 or 19 database.