ml-connector
XeroRippling

Xero and Rippling integration

Xero runs your books. Rippling runs your payroll and HR. Connecting the two keeps your general ledger and your workforce synchronized. Employee data from Rippling flows into Xero contact records and custom tracking categories, and payroll cost allocations land on the correct GL accounts without manual re-entry. Departments, cost centers, and job codes in Rippling map to Xero's accounts and tracking categories so every payroll journal posted into Xero reflects the right business dimensions.

How Xero works

Xero is a cloud accounting platform that exposes contacts, invoices, purchase orders, accounts, manual journals, credit notes, and payments through the Xero Accounting API, a REST service returning JSON or XML. All requests require an OAuth2 bearer token with a 30-minute lifetime and a Xero-tenant-id header to identify the target organization. Xero supports webhooks for invoice, contact, payment, and manual journal events, though webhook payloads contain metadata only and require a follow-up API call to fetch the full record. For polling workflows, Xero's If-Modified-Since header enables delta sync. Rate limits are 5 concurrent calls, 60 per minute per tenant, and 5000 per day per tenant.

How Rippling works

Rippling is a workforce management platform covering employees, payroll, benefits, leave, departments, teams, compensation, and accounting dimensions. The REST API is available in two versions: platform v1 (https://api.rippling.com/platform/api) and v2 (https://rest.ripplingapis.com). Authentication is OAuth2 Authorization Code for App Shop integrations or a bearer API key for direct server-to-server calls. App Shop integrations receive webhooks for employee lifecycle events (created, updated, terminated, department_changed), while direct API key integrations require polling. Key limitation: Rippling has no native invoice, PO, or vendor management objects, and the API is employee-read-only unless the OAuth token includes employees:write scope.

What moves between them

Employee records and payroll dimensions flow from Rippling into Xero. When employees are created, updated, terminated, or rehired in Rippling, their records sync into Xero's contact list. Departments, cost centers, and job codes from Rippling map to Xero's tracking categories and custom accounts so payroll GL allocations carry the correct dimensions. Payroll runs and compensation data are read from Rippling on a schedule aligned to your payroll calendar, then translated into manual journal entries in Xero. The flow is primarily one-way: Rippling to Xero, with reference dimensions aligned bidirectionally.

How ml-connector handles it

ml-connector uses OAuth2 on both sides: an authorization code flow for Xero (storing the refresh token securely) and either OAuth2 or an API key for Rippling depending on the integration type. For webhook-based Rippling instances, employee lifecycle events trigger a pull of the full employee record from the Rippling API. For API-key integrations without webhook support, ml-connector polls Rippling's employee and activity endpoints using the updated_at filter or the company activity log. On the Xero side, it constructs manual journal entries from payroll data and posts them with the appropriate GL account and tracking category codes. Because Xero rate-limits at 5 concurrent calls and 60 per minute per tenant, ml-connector queues requests and backs off on 429 responses. Deleted employees in Rippling are soft-deleted in Xero by toggling the contact status. Every record carries audit trail metadata so failed posts can be replayed.

A real-world example

A mid-market services firm uses Xero for accounting and Rippling for payroll across three offices. Before integration, payroll was processed in Rippling monthly, then the finance team manually entered labor cost journals and headcount changes into Xero, taking days to reconcile. With Rippling and Xero connected, each payroll run automatically posts journal entries to Xero allocated to the cost center for each office, and employee changes in Rippling immediately update the corresponding Xero contact records. Month-end close starts with labor accounts already balanced and headcount aligned.

What you can do

  • Sync employee records from Rippling into Xero contacts and maintain name, email, department, and job title in lockstep.
  • Map Rippling departments and cost centers to Xero tracking categories so payroll allocations land on the correct GL accounts.
  • Post payroll GL entries from Rippling into Xero's general ledger on a schedule tied to your payroll calendar.
  • Authenticate Rippling via OAuth2 or API key and Xero via OAuth2 refresh token, refreshing both credential sets automatically.
  • Poll Rippling for employee lifecycle changes via webhooks or activity logs, with retries and full audit trail on every sync.

Questions

Does ml-connector receive Rippling webhooks or poll the API?
If your Rippling integration is an App Shop application with webhook permissions, ml-connector listens for employee lifecycle events and pulls the full record on demand. If you use a direct API key integration without webhook support, ml-connector polls the Rippling employee and activity endpoints on a schedule you define, using the updated_at filter or company activity log.
How are Rippling departments and cost centers mapped to Xero accounts?
You define a mapping during setup that links Rippling departments, teams, and job codes to Xero's tracking categories and GL accounts. When a payroll journal is posted, ml-connector looks up the employee's department and applies the matching account code. If a mapping is missing, the sync halts and logs the discrepancy so you can add it without data loss.
What happens if the Xero rate limit is hit or a manual journal post fails?
ml-connector queues outbound requests and backs off on HTTP 429 rate-limit responses, respecting the 60-per-minute limit. If a journal post fails due to an invalid GL account or tracking category code, the job is retried up to three times with exponential backoff; if it still fails, the record is logged as failed in the audit trail and can be replayed once you fix the underlying issue.

Related integrations

Connect Xero and Rippling

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started