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.
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
More Xero integrations
Other systems that connect to Procurify
Connect Xero and Procurify
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started