ml-connector
Sage 100Ramp

Sage 100 and Ramp integration

Sage 100 manages your accounts payable, accounts receivable, and general ledger on-premises. Ramp manages corporate spend across cards, bills, and expenses. Connecting the two keeps your vendor master and GL accounts in agreement between systems. Bills entered in Ramp post automatically to Sage 100's AP ledger without re-keying, and new vendors created in either system stay synchronized. ml-connector handles the very different APIs on each side and moves the data on a schedule you control.

How Sage 100 works

Sage 100 is an on-premises ERP covering AP, AR, and GL. Data access goes through SOAP Web Services (eBusiness Web Services at https://<customer-server>/ebusinesswebservices/masservice.svc for customers and sales orders) or a local Windows agent that wraps the BOI COM layer to expose AP invoices, vendors, GL accounts, and purchase orders. Both methods require username and password per call with no tokens or OAuth. Sage 100 has no webhooks or event stream, so records are read by polling DateLastUpdated or DateCreated fields. The system requires a three-character company code on every call, and GL accounts use a multi-segment format that varies by customer configuration. Concurrent write operations against COM are subject to record-locking, so retries with backoff are necessary for high-frequency syncs.

How Ramp works

Ramp is a corporate spend management platform with a REST API at https://api.ramp.com/developer/v1. The API exposes bills, vendors, transactions, GL accounts, purchase orders, and accounting dimensions. Authentication uses OAuth 2.0 with Client Credentials flow (recommended for ERP integrations), with access tokens valid for 10 days. Ramp supports webhooks for real-time push events on bills, transactions, vendors, and reimbursements, with HMAC-SHA256 signature verification. Vendors cannot be created directly via the API; they are created implicitly when a bill references them. GL accounts and custom fields require explicit accounting:read and accounting:write scopes. Bills are the primary AP mechanism in Ramp and can be patched for updates but not created via the direct CREATE endpoint.

What moves between them

The main flow is from Ramp into Sage 100. Bills created or updated in Ramp are pushed via webhook to ml-connector, which posts them into Sage 100's AP ledger allocated to the GL accounts and vendors already synchronized. Vendor master records flow bidirectionally: new vendors created in Ramp are polled and written to Sage 100, and vendors in Sage 100 are polled and available for reference in Ramp. GL accounts are polled from Sage 100 and used to validate bill line-item allocations in Ramp. The sync runs on a schedule you set for poll operations (recommended: vendors every hour, GL accounts every four hours) and consumes Ramp webhooks in real time for bills and transactions.

How ml-connector handles it

ml-connector stores SOAP and OAuth credentials encrypted. On the Sage 100 side, it passes company code and username/password on every SOAP call or connects to the local agent and manages COM record-locking retries when a write contention occurs. On the Ramp side, it refreshes the OAuth 2.0 bearer token every 9 days to stay ahead of the 10-day expiry and validates bill line items against the GL account list polled from Sage 100. When a bill is received via Ramp webhook, ml-connector first checks Sage 100's AP invoices to ensure the bill has not already been posted, then creates or updates it in the ledger. Vendors are fetched from both systems on schedule to fill any gaps: Sage 100 vendors appear in Ramp's reference tables, and Ramp vendors that reference new Sage 100 GL accounts are written to Sage 100 on the same poll. Because Sage 100 COM operations are subject to record-locking contention on multi-user sites, ml-connector backs off and retries writes after a lock-conflict error. Every record carries a full audit trail and can be replayed if a vendor or GL sync fails.

A real-world example

A mid-market professional services firm runs Sage 100 on-premises for accounting and uses Ramp for corporate spend management across multiple offices and project teams. Before the integration, the finance team manually exported bills from Ramp once per day and entered them into Sage 100's AP ledger by hand, matching them to vendor codes and GL cost codes. Vendor master maintenance was spread between the two systems, and bills were sometimes lost in the transition. With Sage 100 and Ramp connected, bills enter the AP ledger automatically as they are approved in Ramp, allocated to the correct GL codes and vendors, and the export-and-rekey step is gone. Month-end close starts with AP already posted and reconciled.

What you can do

  • Post Ramp bills into Sage 100's AP ledger in real time when approved, allocated to the correct GL accounts and vendors.
  • Keep vendor master records synchronized between Ramp and Sage 100 so new vendors in either system are available in both.
  • Validate bill line-item GL allocations against Sage 100's GL account master before posting to prevent posting errors.
  • Authenticate Sage 100 via SOAP username and password and Ramp via OAuth 2.0, with automatic token refresh and COM record-locking retry logic.
  • Poll vendors and GL accounts on a schedule you set, with retries and a full audit trail on every record.

Questions

Which direction do bills and vendors move between Sage 100 and Ramp?
The main flow is Ramp into Sage 100. Bills created or updated in Ramp are pushed via webhook and posted to Sage 100's AP ledger. Vendors flow bidirectionally: vendors created in Ramp are polled and written to Sage 100, and Sage 100 vendors are polled to keep Ramp's vendor reference tables current.
How does ml-connector handle Sage 100's requirement for a company code and its COM record-locking limits?
ml-connector passes the three-character company code on every SOAP call to Sage 100. When COM record-locking contention occurs on multi-user sites, ml-connector detects the lock-conflict error, backs off, and retries the write automatically, so high-frequency bill posts do not fail.
Does the Sage 100 to Ramp integration work with on-premises Sage 100 servers?
Yes. ml-connector can connect to Sage 100 SOAP Web Services at a customer-hosted URL, or to a local Windows agent that wraps the COM layer. Both require network access to the on-premises server and the appropriate credentials (SOAP username and password, or agent API key and mTLS certificate).

Related integrations

Connect Sage 100 and Ramp

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

Get started