ml-connector
SAP Business OneProcurify

SAP Business One and Procurify integration

Procurify runs your cloud procurement and spend management. SAP Business One runs your on-premise financials and operations. Connecting the two moves approved purchase orders and vendor invoices from Procurify directly into SAP Business One as purchase orders and accounts payable documents, so your procurement team works in Procurify while your finance team sees the records in the ledger without re-keying. ml-connector bridges the cloud-to-on-premise gap and handles the very different authentication schemes each platform uses.

How SAP Business One works

SAP Business One is deployed on-premise or partner-hosted, with each customer running their own Service Layer instance at a customer-specific base URL on port 50000 (HTTP) or 50001 (HTTPS). It exposes purchase orders, invoices, vendors, accounts payable, chart of accounts, and profit centers through OData v4 REST. Authentication is session-based: a POST /Login call returns a B1SESSION cookie (valid for 30 minutes of inactivity), and the session must be reused across calls since opening a new session takes about 5 seconds. SAP Business One v10.0 FP 2602+ supports webhooks for Create/Update/Delete events if the Webhook Messenger Service is activated, but polling with UpdateDate filters is the safer default since webhooks require SAP administrator setup and IP allowlisting.

How Procurify works

Procurify is a cloud procurement and spend management platform accessed at https://<customer-domain>.procurify.com. It exposes purchase orders, requisitions, bills, vendors, account codes, departments, locations, and catalog items through REST API v3 (v2 still active). Authentication is OAuth 2.0 client credentials (machine-to-machine), with tokens valid for 24 hours. Every request requires an Authorization Bearer token and X-Procurify-Client header. Procurify API supports time-based polling with date-range filters (last_modified, po_created_date, dateModified) but does not publish webhooks or push events. Some endpoints are read-only: order items and payments cannot be created via API, and POs are generated from approved requisitions rather than created directly.

What moves between them

Purchase orders, requisitions, and bills flow from Procurify into SAP Business One. After a requisition is approved in Procurify, ml-connector reads the order items and posts them into SAP Business One as a purchase order tied to the corresponding vendor master record. When Procurify bills arrive, they are synced into SAP as incoming payment records. Vendor master records are updated in both directions: new vendors created in Procurify flow into SAP Business One, and SAP vendor changes (such as payment terms or tax status) flow back into Procurify so procurement sees the current master data. The sync runs on a time-based schedule using Procurify's date filters to pull only new or modified records since the last poll.

How ml-connector handles it

ml-connector obtains an OAuth access token from Procurify (24-hour lifetime) and uses it on every Procurify API call, obtaining a fresh token when the current one expires. On the SAP Business One side, ml-connector logs into each customer's on-premise Service Layer instance using the /Login endpoint, receives a B1SESSION cookie, and reuses that session across all subsequent calls for that run (never opening a new session per request, since session startup takes 5 seconds and consumes SAP resources). The session times out after 30 minutes of inactivity, so ml-connector checks the response status for error code -5002 (session expired) and re-authenticates if needed. Purchase orders flow from Procurify to SAP: each Procurify requisition maps to an SAP Business One PurchaseOrder record, with line items mapped to the order_items table and account codes from Procurify mapped to SAP profit centers. Bills from Procurify become PurchaseInvoices in SAP, keyed to the matching purchase order. Vendors are matched on name and tax ID to find or create BusinessPartner records in SAP. The integration polls Procurify on a schedule you set (daily, twice-daily, or per-shift) to check for new or modified requisitions, bills, and vendors, and posts them into SAP's database via OData. If a Procurify record is modified after sync, the next poll detects the change via dateModified and re-posts the updated record into SAP. Every record carries an audit trail showing the source ID, timestamp, and sync status.

A real-world example

A mid-market distributor with 80 employees operates SAP Business One on-premise for inventory, purchasing, and general ledger, and uses Procurify for spend management and vendor collaboration across three regional offices. Before the integration, the procurement team approved purchase orders in Procurify and emailed them to the finance team, who manually created matching POs in SAP Business One and had to keep track of two separate vendor lists. When bills arrived in Procurify, they had to be re-entered into SAP, and vendor master changes made in Procurify (new payment terms, tax ID updates) had to be phoned in to the SAP user. With Procurify and SAP Business One connected, each approved requisition becomes a purchase order in SAP automatically, bills flow from Procurify into accounts payable, and vendor master changes sync both ways. Month-end close is faster because the purchasing ledger already matches Procurify, and the finance team focuses on variance analysis instead of data entry.

What you can do

  • Sync approved Procurify requisitions into SAP Business One as purchase orders, with line items mapped to order lines and account codes mapped to profit centers.
  • Post Procurify bills into SAP Business One as purchase invoices tied to the matching purchase order and vendor.
  • Maintain vendor master data in both directions: new vendors from Procurify flow into SAP, and SAP vendor changes sync back to Procurify.
  • Authenticate SAP Business One with session login using each customer's on-premise Service Layer URL and port, and Procurify with OAuth 2.0 client credentials.
  • Poll Procurify on a schedule you control using date filters to sync only new or modified records, with full audit trail and error replay on every record.

Questions

How does ml-connector reach SAP Business One if it is on-premise?
The customer must expose their SAP Business One Service Layer port (50000 or 50001) to the internet or to ml-connector's network via VPN or firewall rule. ml-connector makes REST calls to https://<customer-server>:<port>/b1s/v2/ and authenticates with the SAP Business One session token. Alternatively, a proxy or API gateway can mediate access to the on-premise instance.
What happens if the SAP Business One session expires during a sync run?
SAP Business One B1SESSION cookies expire after 30 minutes of inactivity. If ml-connector detects error code -5002 (session timeout) on any call, it immediately re-authenticates using /Login, obtains a fresh B1SESSION cookie, and retries the failed record. The audit trail notes the re-auth event and the retry status.
Can Procurify purchase orders be created directly via the API, or does ml-connector work with requisitions instead?
Procurify API does not expose a direct create purchase order endpoint. Purchase orders are generated from approved requisitions. ml-connector reads Procurify requisitions (which contain order items and vendor info), maps them to SAP Business One PurchaseOrder records, and syncs the SAP records on your schedule. Procurify bills and order items are read-only via API, so ml-connector pulls them for reference but does not attempt to modify them.

Related integrations

Connect SAP Business One and Procurify

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

Get started