ml-connector
XeroProcurify

Xero and Procurify integration

Xero runs accounting and financial close. Procurify runs procurement and spend management. Connecting the two keeps your purchase orders, invoices, and vendor records aligned without manual re-entry. Purchase orders and requisitions approved in Procurify post as bills into Xero automatically, and vendors created in either system sync to the other. ml-connector manages the authentication handshake for both platforms and moves the data on a schedule you control.

How Xero works

Procurify exposes vendors, purchase orders, requisitions, bills, payments, and account codes through REST APIs that require OAuth2 client credentials and an X-Procurify-Client header to identify the API consumer. Procurify hosts each customer on a branded subdomain (e.g., acme.procurify.com) and provides v3 and v2 endpoint variants. The platform does not support webhooks or push notifications, so records are read by polling with time-based filters on fields like last_modified and po_created_date. Order items and payments are read-only, and purchase orders are generated from approved requisitions rather than created directly via API.

How Procurify works

Xero exposes invoices, purchase orders, purchase bills, contacts, accounts, manual journals, and bank transactions through REST APIs at a shared base URL, protected by OAuth2 with access tokens that refresh every 30 minutes. Every request requires the Xero-tenant-id header to target a specific organization. Xero publishes webhook events for invoices, bills, purchases, and payments, containing metadata only; full records are fetched via GET. Page-based pagination returns 100 records per page, and deleted records are excluded by default. Rate limits are 5 concurrent calls and 60 per minute per tenant.

What moves between them

Purchase orders and bills created in Procurify flow into Xero as purchase invoices or bills after approval. Line items map to Xero GL accounts and cost codes. Vendors are synced bidirectionally so new vendors created in Procurify appear in Xero, and vendors edited in Xero propagate back to Procurify so procurement and accounting see the same master vendor list. Account codes from Procurify are matched to Xero GL accounts for correct general ledger posting. The main cadence is pull from Procurify on a schedule you set, matched to your procurement approval cycle.

How ml-connector handles it

ml-connector obtains OAuth2 access tokens for both Procurify (via client credentials grant) and Xero (via authorization code flow with offline_access scope) and stores both encrypted. Xero tokens refresh automatically when the 30-minute lifetime expires; Procurify tokens refresh at 24 hours. Because Procurify offers no webhooks, ml-connector polls purchase orders and bills using the last_modified and po_created_date filters to read only new and changed records since the last run. It matches Procurify vendor records to Xero contacts by email or name and maps Procurify account codes to Xero GL accounts via a lookup table you configure. Purchase orders marked approved in Procurify are posted to Xero as draft bills with line items on the correct GL accounts. Procurify's read-only payments and order items endpoints mean ml-connector reads payment status but does not attempt to post them back to Procurify. Xero's 60-per-minute rate limit is respected by batching and backing off on 429 responses. Every record carries a full audit trail.

A real-world example

A mid-sized manufacturing distributor runs Procurify to manage purchase requests, purchase orders, and spend across three warehouses, and Xero as their main accounting system. Before the integration, buyers approved purchase orders in Procurify, and accounting staff manually entered those orders as bills into Xero every morning. Bill entry was error-prone (wrong vendor, wrong account code, wrong line amounts), and month-end close required reconciliation between Procurify PO history and Xero AP aging. With Procurify and Xero connected, approved purchase orders flow into Xero within minutes of approval, posted to the correct GL accounts and cost codes. Vendors are synced automatically, so new suppliers approved in Procurify appear in Xero's contact list without manual setup. Accounting now starts the close with AP already current and accurate.

What you can do

  • Post approved Procurify purchase orders into Xero as draft purchase bills with correct GL accounts and cost codes.
  • Sync vendors bidirectionally so new vendors in Procurify appear in Xero and vendor edits in Xero flow back to Procurify.
  • Map Procurify account codes and line items to Xero GL accounts and tracking categories for accurate general ledger posting.
  • Authenticate Procurify via OAuth2 client credentials and Xero via user-authorized OAuth2 with tenant-specific requests.
  • Poll Procurify on a schedule tied to your procurement approval cycle, with automatic token refresh, batch requests, and a full audit trail.

Questions

Which direction does data move between Procurify and Xero?
Purchase orders and bills move from Procurify into Xero. Vendors are synced bidirectionally so changes in either system propagate to the other. Procurify payments and order items are read-only in the API, so ml-connector reads payment status for reference but does not post payments back to Procurify.
How does ml-connector handle Procurify's lack of webhooks?
Procurify does not publish webhooks, so ml-connector polls purchase orders and bills using time-based filters (last_modified, po_created_date) on a schedule tied to your procurement approval cycle. This approach is safe and reliable because purchase orders rarely change after approval, and polling intervals are typically daily or per shift.
What happens if a vendor or GL account code does not exist in Xero when a bill is posted?
ml-connector validates vendor and account code mappings before posting. If a vendor or code is missing, the record is held in audit with an error message, and the integration pauses the batch so you can add the missing vendor or code in Xero, then re-run the sync. This prevents orphan bills and keeps your GL clean.

Related integrations

Connect Xero and Procurify

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

Get started