Purpose of Tax Sync
Tax Sync exists to:- Remove the need to manually create or maintain Tax Codes in Pleo
- Reflect the current state of active tax codes from the Accounting System
- Enable accurate bookkeeping by ensuring expenses carry the correct tax codes before export
- Keep tax code data synchronised between systems
Core Concept
Tax Sync is based on a direct mapping between systems:| Accounting System | Pleo |
|---|---|
| Tax code entry | Tax Code |
| Tax code identifier | Tax Code code |
| Tax code name | Tax Code name |
| Tax rate | Tax Code rate |
| Reverse tax | Tax Code type: reverse |
| All other taxes | Tax Code type: inclusive |
How Tax Codes Are Used in Pleo
Tax Sync works alongside Chart of Accounts Sync as part of Level 3. Both must be in place for the full tax assignment flow to work: accounts are synced and mapped to categories, tax codes are synced, and the bookkeeper then sets a default tax code on each category in the Pleo Web App. From that point, when a spender selects a category on an expense, the default tax code is automatically applied. The full chain is:- Accounting System Tax Codes: the source of tax code data, synced into Pleo via Tax Sync
- Accounting System Chart of Accounts: accounts are synced into Pleo via Chart of Accounts Sync and mapped to categories by the bookkeeper
- Pleo Categories: the bookkeeper sets a default tax code on each category in the Pleo Web App
- Expenses: when a user selects a category, the default tax code is auto-selected; the bookkeeper confirms or overrides before export
- Export: the expense is exported to the Accounting System with the assigned tax code
What Happens in Pleo Once Synchronised
- Each active, relevant tax code from the Accounting System is reflected as a Tax Code in Pleo
- Tax Codes are available for bookkeepers to assign to expenses
- If a tax code’s name or rate changes in the Accounting System, it is updated in Pleo on the next sync
- Tax Codes no longer active in the Accounting System are archived in Pleo
System Guarantees
These are invariant rules that always hold true regardless of implementation or sync frequency.| Guarantee | Description |
|---|---|
| Source of Truth | The Accounting System is the authoritative source of all tax code data |
| Structural Mapping | Tax Codes map directly from the Accounting System into Pleo |
| Identity Model | Matching is performed using code, not tax code name |
| Non-Destructive Behaviour | Tax Codes are never deleted; they are only archived when no longer active in the Accounting System |
| Idempotency | Re-running a sync produces the same final state without duplication |
Responsibility Model
Integrator Responsibilities
The integration is responsible for all synchronisation logic and API interaction.| Area | Responsibility |
|---|---|
| Connection | Connect to the Accounting System |
| Data Retrieval | Retrieve active, relevant tax codes from the Accounting System |
| Filtering | Exclude tax codes not relevant to expense management (e.g. Sales VAT) and blocked or inactive codes |
| Sync Execution | Execute reconciliation operations in Pleo via the Tax Codes API |
| Scheduling | Define and execute sync schedule (including optional manual triggers) |
Pleo Responsibilities
Pleo provides storage, user experience, and downstream usage of tax codes.| Area | Responsibility |
|---|---|
| Data Storage | Store Tax Codes |
| User Interface | Display Tax Codes for assignment to expenses |
| Data Retention | Retain archived Tax Codes for historical consistency |
High-Level Process
Tax Sync runs as a single reconciliation process:- Fetch relevant active tax codes from the Accounting System (filtering out irrelevant or inactive codes)
- Fetch Tax Codes from Pleo (active and archived)
- Reconcile: match by
codeand apply create, update, unarchive, or archive operations
Operational Model
Sync Direction
Tax Sync is one-way only:- The Accounting System is the source of truth
- The integration synchronises data from the Accounting System into Pleo
- Pleo does not modify Accounting System data
Operational Constraints
| Constraint | Description |
|---|---|
| Scheduling Ownership | The integration is responsible for defining when sync runs occur, including optional manual triggers |
| Sync Execution | The integration is responsible for executing sync runs and applying all changes to Pleo via the API |
| Execution Model | Each sync run performs full reconciliation of Pleo against the Accounting System |
| Rate Limits | The integration must respect Accounting System API rate limits. See Pleo API rate limits. |
| Concurrency | Sync runs must not overlap; only one execution may run at a time |