Xero and Anaplan integration
Xero runs the accounting ledger. Anaplan runs the budgets and forecasts. Connecting the two means planners build on real actuals instead of stale exports. ml-connector reads invoices, bills, payments, and the chart of accounts from Xero and imports them into the right Anaplan model, then sends approved budget and forecast figures back into Xero as journals. It reconciles the very different APIs on each side and moves the data on a schedule you control.
What moves between them
The main flow runs from Xero into Anaplan. ml-connector reads Xero invoices, bills, payments, and the chart of accounts, formats them as the file an Anaplan import action expects, uploads the chunks, and runs that import so actuals land in the planning model. Reference data such as Xero account codes and tracking category options is aligned to the matching Anaplan lists and dimensions so every figure maps to a valid member. On the return path, approved Anaplan budget and forecast values are read through an export action and written back into Xero as manual journals or held as budget reference. Cadence is set by you, typically a daily or post close pull from Xero and a periodic export from Anaplan, since neither side pushes events.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the Xero side it refreshes the 30 minute access token before expiry, sends the Xero-tenant-id header on every call, and uses If-Modified-Since with page based paging to pull only changed invoices, payments, and accounts while staying under the 60 calls per minute and 5000 calls per day limits. Because Anaplan exposes no objects to write directly, the connector discovers the workspace and model IDs, finds the named import and export action IDs at runtime, uploads data in chunks, starts the task, and polls the taskId until it reports complete. It respects model locking by serializing actions against the same model so a write and a read never collide, and it backs off with jitter on the Anaplan 600 requests per minute limit and on a Xero 429 with Retry-After. Xero account codes and tracking categories are mapped first so each imported line references an Anaplan list member that already exists. Real gotchas handled include the Anaplan workspace and model ID case rule, where the workspace ID is lowercase hex and the model ID is uppercase hex, the Anaplan device grant being disabled when tenant SSO is on, and Xero webhook payloads carrying only an ID. Every record carries a full audit trail and can be replayed if a downstream call fails.
A real-world example
A 200 person professional services firm keeps its books in Xero across two trading entities and runs its annual budget and rolling forecast in Anaplan. Before the integration, a finance analyst exported the trial balance and invoice detail from Xero to spreadsheets every month and re-keyed the totals into the Anaplan model, which meant the forecast was always a week behind and account codes drifted out of step between the two systems. With Xero and Anaplan connected, actuals flow from Xero into the planning model automatically and approved forecast figures post back to Xero as journals. The forecast updates against current numbers, the account and department mappings stay aligned, and the monthly re-keying step is gone.
What you can do
- Import Xero invoices, bills, payments, and chart of accounts into the matching Anaplan model after each pull.
- Push approved Anaplan budget and forecast values back into Xero as manual journals or budget reference.
- Map Xero account codes and tracking categories to Anaplan lists and dimensions so every figure lands on a valid member.
- Authenticate Xero with OAuth 2.0 and a tenant header, and Anaplan with basic auth or OAuth, refreshing both tokens.
- Poll Anaplan import and export tasks to completion, serializing actions around model locking, with retries and a full audit trail.
Questions
- Which direction does data move between Xero and Anaplan?
- The main flow is Xero into Anaplan. Invoices, bills, payments, and the chart of accounts are read from Xero and imported into the planning model so forecasts use real actuals. Approved Anaplan budget and forecast values are sent back into Xero as manual journals, while reference data such as account codes is aligned so both sides match.
- How does the integration work if Anaplan has no webhooks and no invoice objects?
- Anaplan is a planning platform, so it has no invoice or account object and no outbound webhooks. ml-connector maps Xero data into the lists and modules a model builder has set up and writes it through a named Anaplan import action. Because Anaplan only supports pull, the connector starts each import or export task, polls its taskId until complete, and runs on a schedule rather than waiting for a push.
- What happens with token expiry and rate limits on each side?
- ml-connector refreshes the Xero access token, which lasts 30 minutes, before it expires and renews the Anaplan auth token, which lasts 35 minutes, well before its TTL. It stays within Xero's 60 calls per minute and 5000 calls per day limits using delta sync, and backs off with jitter on Anaplan's 600 requests per minute limit and on any Xero 429, retrying after the Retry-After delay.
Related integrations
More Xero integrations
Other systems that connect to Anaplan
Connect Xero and Anaplan
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started