The Multi-Country Problem
Multi-country payroll is not payroll multiplied by the number of countries. It is a fundamentally different problem that introduces structural challenges absent in single-country payroll:
- Each country has its own statutory framework. Germany’s income tax (PAP algorithm) has no structural similarity to the UK’s PAYE or Spain’s IRPF. Social security systems differ in structure, not just rates.
- Regulatory calendars differ. Germany updates tax parameters on January 1. The UK changes NIC thresholds in April. Spain revises IRPF annually but adjusts social security bases via BOE orders.
- Reporting requirements are country-specific. Germany requires LStAnmeldung and BeitragsNachweis. France requires DSN. The UK requires RTI submissions. These are different formats with different schemas and different deadlines.
- Cross-country questions exist. “What is our total employer cost across DACH?” “How do social security contributions compare between Benelux countries?” These questions require aggregation across different statutory structures.
Most organizations solve this with multiple vendors: one payroll provider per country, one consolidation layer (often Excel) on top. PayrollEx solves it with one engine and country-specific regulation packages.
Architecture: One Engine, Isolated Regulations
The Payroll Engine is a single calculation framework that runs all country regulations. It handles the universal concerns: tenant management, period logic, case value history, retro corrections, result storage, and the scripting runtime. It does not contain any statutory logic.
Each country regulation is a separate package deployed onto the engine. The packages are completely independent:
| Country | Regulation | Key statutory components |
|---|---|---|
| Germany | DE.Entgeltabrechnung | PAP (LSt), SolZ, KiSt, KV/PV/RV/AV, UV, Umlagen |
| Austria | AT.Lohnabrechnung | Lohnsteuer, SV, DB/DZ, Kommunalsteuer |
| Switzerland | CH.Lohnabrechnung | Quellensteuer, AHV/IV/EO/ALV, BVG, KTG/UVG |
| Belgium | BE.Bedrijfsvoorheffing | Bedrijfsvoorheffing, RSZ, Bijzondere Bijdrage |
| Netherlands | NL.Loonheffing | Loonbelasting, ZVW, WW/WIA/WAO, ABP/PfV |
| Luxembourg | LU.Retenue | Retenue d’impôt, CNS/CCSS cotisations |
| France | FR.Salaire | PAS (prélèvement à la source), cotisations sociales |
| Spain | ES.Nomina | IRPF, Seguridad Social, Convenios |
| Portugal | PT.Vencimento | IRS, Segurança Social (TSU) |
| United Kingdom | UK.Payroll | PAYE, National Insurance, Pension, Student Loan |
| United States | US.Payroll | Federal/State Income Tax, FICA, SUI/SDI |
An update to the German PAP algorithm does not touch the UK PAYE regulation. A new data satellite for Spanish IRPF does not affect the Dutch loonbelasting. The regulations are isolated by design — they share the engine, but not each other’s logic.
This is described in detail in the article on the composable regulation model.
Unified Data Model, Country-Specific Content
While the statutory logic differs per country, the structure of the data model is consistent. Every country regulation uses the same building blocks:
- Cases and CaseFields — the employee and company data model (salary, tax identifiers, social security status)
- Wage types — the calculations (from gross pay through deductions to net pay and employer costs)
- Collectors — aggregation points that accumulate values from multiple wage types
- Lookups and data satellites — statutory values (tax tables, contribution rates, thresholds) versioned by year
- Integration tests — verified payrun scenarios with documented expected results
A German wage type and a Spanish wage type are structurally identical objects. They have a number, a name, a calculation (No-Code or scripted), and collector memberships. The content is entirely different — the German wage type calculates Solidaritätszuschlag, the Spanish one calculates IRPF — but the structure is the same. This means the same API, the same tooling, and the same development patterns work across all countries.
For providers operating in multiple countries, this eliminates the “learn a new system per country” problem. The REST API is the same. The MCP Server tools are the same. The reporting infrastructure is the same. Only the regulatory content changes.
Consolidation: One Query Across Countries
The most common cross-country question is simple: “What is our total employer cost?” Answering it across multiple countries with different statutory structures and different currencies requires a structured consolidation interface.
PayrollEx solves this with a dedicated consolidation layer. Every country regulation exposes a set of consolidation wage types (WT 7000–7030) that map country-specific results to a uniform interface:
| WT | Consolidation field | What it maps |
|---|---|---|
| 7000 | Gross pay | Bruttolohn (DE), Salario Bruto (ES), Gross Pay (UK), … |
| 7010 | Tax withholding | LSt+SolZ+KiSt (DE), IRPF (ES), PAYE (UK), … |
| 7020 | Social security (employee) | KV/PV/RV/AV-AN (DE), Seguridad Social AN (ES), NI EE (UK), … |
| 7025 | Social security (employer) | KV/PV/RV/AV-AG (DE), Seguridad Social AG (ES), NI ER (UK), … |
| 7030 | Total employer cost | Gross + employer SS + employer contributions per country |
This means a single API query can return employer costs across all countries. A report can aggregate DACH (Germany, Austria, Switzerland) with multi-currency handling (EUR + CHF). A dashboard can compare social security burdens across Benelux countries. The consolidation interface is the same regardless of the underlying statutory complexity.
Regional consolidation
Three regional consolidation packages extend this to multi-tenant cross-country queries:
- DACH Consolidation — Germany, Austria, Switzerland (EUR + CHF)
- Benelux Consolidation — Belgium, Netherlands, Luxembourg (EUR)
- Iberia Consolidation — Spain, Portugal (EUR)
Each regional consolidation runs as a separate tenant that aggregates data across the individual country tenants. This is not a reporting overlay — it is a structured regulation layer with its own wage types, scripts, and result storage.
Annual Compliance Cycles
One of the operational challenges of multi-country payroll is managing the annual regulatory update cycle. Each country publishes new statutory parameters at different times, with different effective dates, through different channels.
PayrollEx handles this through data regulation satellites. Each country’s annual parameters — tax tables, contribution rates, ceilings, thresholds — are stored in versioned JSON files with validFrom dates. When Germany publishes its 2027 PAP parameters, a new Data.LSt.2027 satellite is created. When the UK announces April 2027 NIC rates, a Data.NI.2027 satellite is created.
The engine automatically resolves the correct satellite for each payroll period. A January 2027 payrun in Germany uses the 2027 parameters. A March 2027 payrun in the UK still uses the 2026/27 tax year parameters until the April changeover.
For the operator, the annual update is a package deployment, not a development project. The provider operations article describes this cycle in detail.
How Alternatives Handle Multi-Country
Different categories of payroll solutions approach the multi-country problem differently:
| Approach | Examples | How it works | Tradeoff |
|---|---|---|---|
| Partner network | Deel, Remote, Papaya Global | In-country payroll partners handle each country. Platform aggregates results. | Broad coverage (100+ countries) but variable depth and no unified engine |
| Single-country API | Check, Gusto, Salsa, Zeal | Deep coverage of one country (US). No multi-country option. | Excellent for US, not applicable for cross-border |
| Traditional multi-country vendor | ADP GlobalView, SAP HCM | Enterprise software with country modules. Large implementation projects. | Comprehensive but high cost, long implementation, limited flexibility |
| Unified engine | PayrollEx | One open-source engine, country-specific regulation packages, consolidation layer. | 11 countries with full statutory depth, but fewer countries than partner networks |
No approach is universally superior. A company expanding to Thailand, Nigeria, and Chile simultaneously needs a partner network — no single engine covers those jurisdictions yet. A company deepening its European operations across DACH and Benelux with unified reporting needs a structured engine approach.
Cross-Cutting Payroll Problems
Multi-country payroll introduces problems that don’t exist in single-country contexts. PayrollEx addresses these structurally:
Retro corrections across countries
A salary change backdated to three months ago must be recalculated in every country where the employee was on payroll. The retro correction engine handles this per country — each country recalculates according to its own statutory rules (cash principle for tax in some countries, accrual for social security in others). The consolidation layer aggregates the corrected results.
Mid-month changes with country-specific rules
A salary change on the 15th of the month is handled differently in each country. Some countries prorate by calendar days, others by working days, others don’t prorate at all for tax purposes. The engine’s time-splitting mechanics handle this per-country according to the regulation’s configuration.
Cross-border employment
An employee working 80% in Luxembourg and 20% in Germany triggers split payroll obligations. The cross-border article describes how this works — A1 certificates, telework thresholds, and split social security obligations.
One-time payments across tax regimes
A bonus paid to employees in five countries is taxed differently in each: annualized in some, flat-rated in others, attributed to prior months in yet others. The one-time payments article covers how seven countries handle the same bonus differently.
Current Scope and Roadmap
As of mid-2026, PayrollEx covers eleven countries:
- DACH: Germany, Austria, Switzerland
- Benelux: Belgium, Netherlands, Luxembourg
- Iberia: Spain, Portugal
- France
- United Kingdom
- United States
These eleven countries represent the core European and North American payroll jurisdictions that global employers most frequently operate in. The coverage matrix shows which business domains (standard employment, mini-job, part-time, car allowance, pension, garnishment, etc.) are covered per country.
Across all countries, the platform includes 803 wage types, 454 custom actions, 208 cases, and 694 integration tests — with three regional consolidation packages (DACH, Benelux, Iberia) and five HR platform adapters (AFAS, Personio, Sage, Silae, CSV).
Explore coverage by country
See the full coverage matrix — which business domains are supported in each country, which regulations are available, and how consolidation works across regions.
Coverage Matrix →