ml-connector
SYSPROProcurify

SYSPRO and Procurify integration

SYSPRO runs your ERP for manufacturing, distribution, and finance. Procurify manages your procurement and spend. Connecting them keeps your purchasing and accounts payable in sync without manual re-entry. Purchase orders created in Procurify flow into SYSPRO as PO headers and line items, bills from Procurify post into SYSPRO AP invoices, and vendor records stay aligned across both systems. ml-connector handles the different authentication models and API shapes on each side and runs the sync on your schedule.

How SYSPRO works

SYSPRO Adaptive ERP exposes purchase orders, AP invoices, suppliers, AP postings, and GL accounts through three API layers: e.net Business Objects (REST and SOAP, read-write), OData (REST GET only, read-only), and Workflow Service (REST and SOAP, limited). The cloud product authenticates with a session token obtained by logging on to the Utilities.Logon endpoint with your operator credentials, then passing the UserId GUID on all subsequent calls. On-premise sites use the same e.net framework but on a customer-specific hostname. SYSPRO has no outbound webhooks, so records are read by polling timestamp fields such as InvoiceDate or PostDate. OData supports $filter syntax for time-range queries, while e.net uses XML request envelopes.

How Procurify works

Procurify exposes purchase orders, purchase requests, bills, vendor payment methods, vendors, and account codes through REST JSON endpoints over HTTPS, with each customer on a subdomain such as acme.procurify.com. Every call requires OAuth 2.0 client credentials (grant_type=client_credentials), obtained from a POST to the customer's /oauth/token endpoint, with a 24-hour token lifetime. The API does not support webhooks or push notifications, so records are read by polling date-range filters on properties like last_modified and po_created_date. Procurify purchase orders are generated from approved requisitions and cannot be created directly; order items are read-only. Payments are read-only from the API.

What moves between them

The main flow runs from Procurify into SYSPRO. ml-connector polls Procurify for new and updated purchase orders and bills on a schedule you set, typically every 5 to 15 minutes. Each Procurify purchase order becomes a SYSPRO purchase order with line items and pricing, and each Procurify bill becomes an SYSPRO AP invoice for matching and payment. Vendor master data flows from Procurify into SYSPRO suppliers, and account codes are mapped to SYSPRO GL accounts. Reference data such as departments and currencies is aligned bidirectionally so POs land on valid GL codes. Because SYSPRO OData is read-only, ml-connector writes POs and invoices using the e.net Business Objects API and audits all writes.

How ml-connector handles it

ml-connector stores both credential sets encrypted and uses your SYSPRO e.net operator credentials to obtain a session token via the Utilities.Logon endpoint, then passes the UserId GUID on every subsequent call to push POs and invoices. On the Procurify side it exchanges client credentials for an OAuth 2.0 bearer token, which expires after 24 hours, so ml-connector refreshes the token before each poll cycle. Procurify purchase orders come as requisitions and must be approved in Procurify before ml-connector can read them, so the sync captures orders that are ready to send to your ERP. Vendor codes and account codes are mapped first so every PO line references a valid SYSPRO supplier and GL account. Because SYSPRO does not support push webhooks, ml-connector polls Procurify on your specified schedule and tracks the timestamp of the last successful read, then queries for records modified since that point. Retries use exponential backoff, and every record carries a full audit trail showing when it was synced, by which run, and what was written to SYSPRO.

A real-world example

A mid-sized distributor uses SYSPRO for inventory, purchasing, and finance, and switched to Procurify for spend management and vendor enablement across multiple procurement teams. Before the integration, procurement teams created orders in Procurify, then the operations team manually transcribed them into SYSPRO POs every morning, leading to data entry errors and a delay in PO visibility to warehouse and receiving staff. With SYSPRO and Procurify connected, orders approved in Procurify automatically flow into SYSPRO within minutes of approval, so POs are live in the warehouse system immediately and accounts payable can match bills to the original order without rework.

What you can do

  • Poll Procurify purchase orders and bills on a schedule, and push them into SYSPRO as POs and AP invoices with vendor and account mapping.
  • Authenticate Procurify with OAuth 2.0 client credentials and SYSPRO with e.net Business Objects session tokens, handling token expiry and refresh.
  • Map Procurify vendors to SYSPRO suppliers and Procurify account codes to SYSPRO GL accounts so PO lines land on valid codes.
  • Track which purchase orders and bills have been synced, skip duplicates, and audit every read and write with timestamps and job IDs.
  • Retry failed pushes with exponential backoff and surface errors to your audit log for investigation.

Questions

Which direction does data move between SYSPRO and Procurify?
The main flow is Procurify to SYSPRO. Purchase orders and bills created in Procurify flow into SYSPRO as POs and AP invoices, and vendor records are aligned in both directions. SYSPRO is primarily read via polling, and writes go through the e.net Business Objects API to create POs and invoices. Because Procurify purchases orders cannot be created directly via API (they are generated from approved requisitions), the sync pulls completed orders only.
How does ml-connector handle the different authentication models?
ml-connector stores your SYSPRO e.net operator credentials encrypted and obtains a session token by calling Utilities.Logon, then passes the UserId GUID on every write. On the Procurify side it exchanges your OAuth 2.0 client credentials for a bearer token, which expires after 24 hours, so ml-connector refreshes the token at the start of each poll cycle. Both credentials are stored in your Railway cell with envelope encryption and never logged or exposed.
Why does ml-connector poll instead of using webhooks?
SYSPRO does not offer outbound webhooks for cloud instances, and Procurify's API does not support push notifications, so the most reliable approach is time-based polling on both sides. ml-connector polls Procurify on a schedule you control (typically every 5 to 15 minutes for POs and bills) and queries for records modified since the last successful read, so the sync captures only new and changed data.

Related integrations

Connect SYSPRO and Procurify

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

Get started