Sage 100 and Salesforce integration
Sage 100 runs your on-premises finance, purchasing, and fulfillment. Salesforce runs your sales pipeline, customer accounts, and deal management. Connecting them keeps your customer records and order history aligned between ERP and CRM. New customers and sales orders from Sage 100 appear in Salesforce as Accounts and Orders without re-entry, and your sales team sees order fulfillment status pulled directly from the on-premises system. ml-connector bridges the gap between Sage 100's on-premises SOAP and BOI interfaces and Salesforce's cloud REST API, handling the different authentication methods and poll schedules each system requires.
What moves between them
The main flow runs from Sage 100 into Salesforce. ml-connector polls Sage 100 for new and updated Customers and Sales Orders (via SOAP if only AR data is needed, or via the BOI agent if AP Invoices are also required), then creates or updates matching Salesforce Accounts and Orders. AP Invoices from Sage 100 can be synced as Salesforce Invoices or as custom records, depending on your Salesforce edition. Customer contacts are pulled from Sage 100 Customer Contact records and added to Salesforce Contacts linked to the parent Account. The poll frequency is typically 15 minutes for Sales Orders and AP Invoices, hourly for Vendors, and daily for GL Accounts (if needed for revenue recognition). Since Salesforce is readable by any user with the right permissions, ml-connector never pushes back into Sage 100 to avoid write conflicts on the on-premises system.
How ml-connector handles it
ml-connector stores Sage 100 credentials encrypted and presents username and password on each SOAP call. If AP Invoices are included, it connects to the local agent running on the Sage 100 server and provides the agent-layer credentials (API key or mTLS). On the Salesforce side it stores the Consumer Key and Secret encrypted, uses them to request an OAuth2 token at startup and whenever a call returns a 401 Unauthorized, and refreshes the token before it expires (default 2 hours). ml-connector maintains a mapping of Sage 100 Customer IDs to Salesforce Account IDs so it can match existing records and avoid duplicates. Sales Orders become Salesforce Orders linked to the matching Account, and Sales Order Lines become Order Items. AP Invoices are synced as Salesforce Invoices if your org has Revenue Cloud, or as custom Invoice records otherwise. Since Sage 100 has no idempotency keys, ml-connector checks for existing records before creating new ones and uses Sage 100's next-number helpers to avoid collisions. Company code (the 3-character Sage 100 company identifier) is stored with every Salesforce record so records from multiple Sage 100 companies can coexist. The poll schedule is customizable and tied to your financial period (e.g., before month-end close, after payroll runs, or every 15 minutes for near-real-time sync). Every record carries a full audit trail, timestamps, and a dedup key, so ml-connector can replay a failed sync without duplication.
A real-world example
A mid-market B2B distributor runs Sage 100 on-premises for order management and accounting, and uses Salesforce for its sales team's pipeline and account management. Before the integration, order status lived only in Sage 100; sales reps had to log into both systems to see where a customer's orders stood in fulfillment. When an order shipped, the warehouse sent a note to the sales team to close the Salesforce Opportunity, and those handoffs were often missed. With Sage 100 and Salesforce connected, new sales orders from Sage 100 appear as Salesforce Orders within 15 minutes, and the sales team can see order items, quantities, and expected ship dates on the Opportunity record without switching systems. When fulfillment happens, the order status updates in both systems without manual re-entry, and the rep can close the Opportunity with confidence that the financial record is complete and accurate.
What you can do
- Sync Sage 100 Customers and Sales Orders into Salesforce as Accounts and Orders, keeping customer and order records aligned without re-entry.
- Pull AP Invoices from Sage 100 (via local agent or SOAP) and create Salesforce Invoices or custom records linked to the originating Opportunity or Order.
- Map Sage 100 GL Accounts and cost dimensions to Salesforce custom fields for reporting and revenue recognition workflows.
- Handle Sage 100's on-premises SOAP and BOI authentication, and refresh Salesforce OAuth2 tokens automatically on expiry or 401 response.
- Poll Sage 100 on a schedule tied to your financial period or order cadence, with retries, deduplication, and a full audit trail on every record.
Questions
- How does the integration handle Sage 100's on-premises architecture and lack of webhooks?
- ml-connector runs polling on a schedule you define (typically every 15 minutes for Sales Orders and AP Invoices), pulling records based on their DateLastUpdated or DateCreated timestamps. For SOAP access it connects directly to the Sage 100 Web Services endpoint. For full AP and GL access it communicates with the local Windows agent you run on the Sage 100 server, which wraps the BOI COM layer. Since Sage 100 has no webhooks or event stream, polling is the only option.
- Does the Salesforce side require Revenue Cloud to sync AP Invoices?
- Revenue Cloud or Order Management (Salesforce API v48.0+) is required if you want to use Salesforce's native Invoice object. If your org has only Sales Cloud or Service Cloud, ml-connector can create invoices as custom records instead, linked to Orders and Opportunities. You choose the approach based on your Salesforce edition and licensing.
- What happens if the local Sage 100 agent is offline or the SOAP endpoint is unreachable?
- ml-connector will retry the poll request with exponential backoff and jitter up to a configurable limit (default 3 retries). If the agent remains offline, ml-connector surfaces the error in its audit log and alert queue, and you can investigate the Sage 100 server connectivity. Once the agent or SOAP service is back online, the next scheduled poll will succeed, and the dedup keys ensure no records are duplicated in Salesforce if the poll partially succeeds.
Related integrations
More Sage 100 integrations
Other systems that connect to Salesforce
Connect Sage 100 and Salesforce
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started