A build-to-order ERPNext app that runs New Zealand payroll end to end — PAYE, KiwiSaver, ESCT and student loan deductions — and produces IR-ready payday filing submissions on every pay run. ECOSIRE scopes, builds, installs and supports it for your ERPNext v15 or v16 instance. Built to order by ECOSIRE for ERPNext v15, v16 — indicative price from $499.00 USD; request a quote for a scoped proposal.
Illustrative previewA build-to-order ERPNext app that runs New Zealand payroll end to end
— PAYE, KiwiSaver, ESCT and student loan deductions — and produces IR-ready payday filing submissions on every pay run.
ECOSIRE scopes, builds, installs and supports it for your ERPNext v15 or v16 instance.
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 ERPNext.
You go live in about 2–4 weeks, with a post-launch support window.
New Zealand payroll is not a formatting problem, it is a per-pay-cycle filing obligation. Since payday filing became mandatory, every employer must lodge employment information within two working days of each pay day, plus employee details filings when someone starts or leaves. ERPNext core ships a competent generic Payroll module — Salary Structure, Salary Slip, Payroll Entry, Salary Component — but it knows nothing about IRD numbers, tax codes such as M, ME, SB, S, SH, ST and SA, secondary tax rates, the four-weekly and fortnightly PAYE tables, KiwiSaver employee contribution rates of 3, 4, 6, 8 or 10 percent, compulsory employer contributions, ESCT threshold bands, student loan repayments with SLCIR and SLBOR adjustments, or the file layout Inland Revenue expects. In practice teams end up running a separate payroll silo, then re-keying journals back into ERPNext, which breaks the general ledger link between labour cost and the cost centre or project that consumed it.
We build a proper Frappe app — its own repository, its own module, installed with bench get-app and bench --site <site> install-app — rather than a pile of customisations sprayed across your production site. The app introduces NZ-specific DocTypes: an NZ Payroll Settings single for IRD number, PAYE intermediary details, ESCT thresholds and filing endpoints; NZ Tax Code and NZ PAYE Rate Table so rates are data you can update, not hardcoded Python; NZ Employee Payroll Detail carrying IRD number, tax code, KiwiSaver status and rate, ESCT rate, student loan flags and any special tax code certificate; and NZ Payday Filing Batch, which holds one filing run, its line items, its generated file and its submission state. Calculation logic lives in server-side controller methods and is bound to the pay run through hooks.py document events — a validate hook on Salary Slip that recomputes PAYE, KiwiSaver, ESCT and student loan from the employee's tax code and pay period, and an on_submit hook on Payroll Entry that assembles the filing batch. Where a value must be checked before save, a client script on the Employee and Salary Slip forms validates IRD number check digits and warns on tax code and KiwiSaver combinations Inland Revenue will reject.
Filing and outputs are deliberately separated so a submission failure never blocks payroll. Generation produces the employment information payload for the batch; transmission is a whitelisted method wrapped in a background job, so a slow or unavailable gateway does not time out a user request. The response, error codes and correlation identifiers are written back onto the NZ Payday Filing Batch and visible in its timeline. A scheduler event registered under scheduler_events in hooks.py checks for batches that are generated but unsubmitted, or submitted but unacknowledged, and raises them so nobody discovers a missed two-working-day deadline at month end. Payslips render through a Frappe Print Format showing gross, PAYE, KiwiSaver employee and employer, ESCT, student loan, holiday pay and net. Bank files come from a template-driven exporter, so ANZ, ASB, BNZ, Westpac and Kiwibank direct-credit layouts are configuration rather than code. Leave maps ERPNext Leave Type and Leave Policy onto Holidays Act concepts — annual holidays accruing in weeks and paid at the greater of ordinary weekly pay or average weekly earnings, sick leave, bereavement, family violence leave and alternative holidays — with the comparison exposed on the leave record so a payroll officer can see how a figure was reached. Everything is reachable over the Frappe REST API and through whitelisted methods, and every new DocType ships with permission rules and a Payroll Officer role profile so filing data is not readable by the whole company.
Because this is a build-to-order engagement, nothing is downloaded and nothing is guessed. We start with a scoping call, confirm your ERPNext version, pay cycles, entity structure and bank, and write that into a scope document you approve. Typical delivery is two to four weeks from confirmed scope, depending on how many pay groups and bank formats are in play. We build against Frappe and ERPNext v15 and v16, deliver to a staging site first for UAT with your own employee data, and only then schedule the production cutover — with a rollback plan agreed in advance and a first live pay run we sit through with you. You receive the installable source code for your version and a git repository handover, so the app is yours to keep, read and extend. Compliance rates and thresholds change; we state plainly what the support window covers and what a future rate or format update looks like, rather than implying permanent free maintenance.
Runs the fortnightly or monthly cycle and personally owns the two-working-day filing deadline. Needs deductions computed correctly from the employee's tax code without a spreadsheet, needs to see why a leave payment was calculated the way it was, and needs an unmistakable warning when a filing has been generated but not yet acknowledged by Inland Revenue.
Wants labour cost to land in the general ledger against the right cost centre, project and department on submission, not re-keyed from a separate payroll system a week later. Cares about the audit trail on every filing, ESCT and KiwiSaver liability accuracy, and reconciling the PAYE payable account to what was actually filed.
Manages starters and leavers, tax code declarations, KiwiSaver opt-outs and savings suspensions, and Holidays Act entitlements. Needs employee details filings to happen as a by-product of onboarding and offboarding in ERPNext, and needs leave balances that stand up when an employee questions them.
Will maintain the system after handover. Wants a real Frappe app with a readable module structure, doc events rather than monkey patches, rates held as DocType data instead of constants, and permissions and whitelisted methods they can review before it touches the production site.
| Criterion | ECOSIRE | Custom Build | Competitor | ERPNext Native |
|---|---|---|---|---|
| NZ payday filing output | Filing batch DocType generating employment information plus starter and leaver filings, with a submission audit trail | Achievable, but the file layout and edge cases must be researched from scratch by your developer | Rarely covered — most marketplace payroll apps target India, UAE or generic payroll | Not present; ERPNext core has no concept of IR filing |
| PAYE, KiwiSaver, ESCT and student loan logic | Computed on Salary Slip `validate` from configurable rate tables and the employee tax code | Built to your spec, but correctness rests entirely on the developer's NZ payroll knowledge | Generic deduction components you configure by hand; no NZ tax code or ESCT band awareness | Generic Salary Component formulas only — every rate and band is your responsibility |
| Rate and threshold maintenance | Rates held as DocType records, so annual changes are a data edit rather than a deploy | Often hardcoded in the first build; every April becomes a developer ticket | Depends on the vendor's release cadence and whether NZ is a priority market for them | Manual — someone edits salary component formulas each year |
| Holidays Act leave handling | Leave Type and Leave Policy mapped to NZ entitlements, with the ordinary-weekly-pay versus average-weekly-earnings comparison shown | Possible, but the payment-rate comparison is the part most DIY builds skip | Generic day-based accrual; typically no weeks-based annual holidays or rate comparison | Generic day-based leave allocation with no NZ payment-rate rules |
| Ledger and cost-centre integration | Rides the standard Payroll Entry journal, so labour cost posts to the right cost centre and project | Depends on whether the build stays inside ERPNext payroll or bolts on beside it | Usually integrated, but component-to-account mapping is left to you | Fully integrated — this is the part ERPNext already does well |
| Architecture and maintainability | Standalone Frappe app with `hooks.py` doc events, scheduler events, permissions and a role profile | Frequently server scripts and custom fields on the live site, hard to version and migrate | Varies widely; source may be minified, licence-gated or undocumented | Nothing to maintain, because nothing NZ-specific exists |
| Delivery model and timeline | Build-to-order: scoping call, approved scope, typically two to four weeks, staging UAT then cutover | Weeks to months depending on hiring, backlog and the payroll domain learning curve | Installs in minutes — then weeks of configuration to discover what it does not cover | Available immediately, with the NZ compliance gap left open |
| Ownership and support | Source plus git repository handover, technical docs, training session and a stated post-go-live support window | You own it entirely, and you carry all future maintenance | Vendor-controlled release cycle; support quality and NZ expertise vary | Community support only, for the generic payroll module |
No — this is build-to-order, not an instant download. There is no ready-made archive sitting on a marketplace. After the scoping call we write a scope document you approve, and typical delivery is two to four weeks from confirmed scope. The range depends on how many pay groups, entities and bank file formats are in play, and on how quickly you can supply sample data for UAT. If your requirements are unusually broad we say so in the quotation rather than compress the estimate.
We build and test against Frappe and ERPNext v15 and v16. You tell us your exact version on the scoping call and we deliver code built for that version — we do not ship one archive and hope it installs. If you are on a self-hosted bench, Frappe Cloud, or a managed instance, mention it at scoping so the install path and any bench access requirements are agreed up front.
Rates, thresholds and tax codes are stored as DocType records — `NZ PAYE Rate Table`, `NZ Tax Code` and `NZ Payroll Settings` — specifically so an annual rate change is a data edit your team can make, not a code deployment. A change to the filing file layout or the submission interface itself is a code change. Your quotation states the length of the post-go-live support window and exactly what it covers; beyond that window, format and schema updates are quoted as a small change request. We do not promise indefinite free compliance maintenance.
It sits on top of it. You keep Salary Structure, Salary Structure Assignment, Payroll Entry, Salary Slip and the accounting integration you already have. Our app adds NZ-specific salary components and calculation logic bound through `hooks.py` document events, plus the filing DocTypes. Labour cost still posts to your general ledger through the standard ERPNext journal entry, against the cost centre and project on the salary structure assignment — so you do not end up with a payroll silo and a re-keying job.
Generation and transmission are deliberately separate. The pay run creates an `NZ Payday Filing Batch` holding the employment information payload; transmission is a whitelisted method executed as a background job, so a slow or unavailable gateway cannot time out a user request or block payroll. The response, any error codes and the correlation identifier are written back onto the batch and visible in its timeline, and a failed batch can be corrected and resubmitted. A scheduler event flags batches that are generated but unsubmitted, or submitted but unacknowledged, before the two-working-day deadline passes. Where your filing route requires specific credentials, an intermediary or a particular gateway, that is confirmed at scoping.
You own it. Deliverables include the installable source for your version and a git repository handover, so your own team or any Frappe developer can read, audit and extend it. It is a conventional Frappe app with a documented module structure, doc events and whitelisted methods — not obfuscated, not licence-key gated. The technical documentation exists precisely so someone other than us can maintain it.
Yes, and this is the main driver of scope. Multi-company setups use ERPNext's existing company dimension with per-company payroll settings and IRD numbers. Weekly, fortnightly, four-weekly and monthly cycles are supported through the rate tables. Bank files are template-driven so ANZ, ASB, BNZ, Westpac and Kiwibank direct-credit layouts are configuration rather than new code — but each additional format still has to be specified and tested, so bring the full list to the scoping call and it will be reflected in the quotation.

A build-to-order 2Checkout (Verifone) payment integration for ERPNext, giving global digital-goods sellers card acceptance, 45+ local payment methods, multi-currency checkout, and reconciled invoices. ECOSIRE scopes, builds, installs, and supports it on your ERPNext v15/v16 instance.

A build-to-order ERPNext application for anonymous 360-degree reviews — configurable peer, manager, report and self rater groups, weighted competency scoring, and aggregated gap-analysis and heatmap reports. ECOSIRE scopes, builds, installs and supports it on your Frappe/ERPNext v15/v16 instance.

A build-to-order ERPNext app that detects abandoned webshop and POS carts, then runs multi-channel WhatsApp, email, and SMS recovery and win-back sequences with dynamic cart content and coupon injection. ECOSIRE scopes, builds, installs, and supports it for your v15/v16 instance.

A build-to-order ERPNext app for running B2B account-based campaigns: define target-account lists, sequence outreach calls, auto-distribute them to agents, and score account engagement across every contact. ECOSIRE designs, builds, installs and supports it after you confirm scope.
A build-to-order ERPNext app that runs New Zealand payroll end to end — PAYE, KiwiSaver, ESCT and student loan deductions — and produces IR-ready payday filing submissions on every pay run. ECOSIRE scopes, builds, installs and supports it for your ERPNext v15 or v16 instance.