ml-connector
Sage 100Marketo

Sage 100 and Marketo integration

Sage 100 runs your on-premises finance and operations. Marketo runs your B2B marketing campaigns. Connecting the two brings your customer master from Sage 100 into Marketo so your marketing team can target and track leads against the actual sales orders and invoices your ERP has already recorded. Customer contact data and sales order line items flow into Marketo with no re-entry, keeping your marketing database clean and in sync with your source of truth.

How Sage 100 works

Sage 100 is an on-premises ERP without a native cloud API. The eBusiness Web Services surface at https://<customer-server>/ebusinesswebservices/masservice.svc exposes Customers and Sales Orders via SOAP, but requires a username and password per call with no token refresh. Full access to AP invoices, GL accounts, vendors, and purchase orders requires a local Windows agent wrapping the BOI COM layer on the customer's server. Sage 100 has no webhooks or event stream, so all data is fetched by polling; the API requires the company code (a three-character identifier) on every call. GL account segments are multi-part and vary by customer configuration.

How Marketo works

Marketo is a cloud-hosted B2B marketing automation platform accessed via REST API at https://<munchkin-id>.mktorest.com/rest/v1. Authentication uses OAuth2 Client Credentials, where the customer provides a Munchkin ID, Client ID, and Client Secret to obtain a Bearer token with a 3600 second expiry. Key entities are Leads, Companies, Opportunities, Activities, and Custom Objects. Marketo has no inbound event API; instead, connectors poll the REST endpoints using filterType=updatedAt on leads or the Bulk Activity Extract API. Batch size is limited to 300 records per request.

What moves between them

Customer records and contact details move from Sage 100 into Marketo as Leads and Companies every 15 to 30 minutes. Sales order data is pulled from Sage 100 as Opportunities and synced into Marketo to track pipeline and closed business against the orders in the ERP. Contact names, email addresses, and phone numbers from Sage 100's Customer Contact entity populate Marketo Lead fields, and company-level attributes like industry and billing address populate Marketo Companies. Because Marketo is primarily read for deal tracking unless custom objects are enabled, most data flows inbound from Sage 100.

How ml-connector handles it

ml-connector runs on the customer's network and connects to the local Sage 100 BOI agent using Windows service account authentication plus the customer's supplied API credentials. It polls Sage 100 every 15 to 30 minutes for new or updated customers and sales orders by checking the DateLastUpdated field. On the Marketo side, ml-connector exchanges the customer's Client ID and Client Secret for an OAuth2 Bearer token at the start of each cycle and uses it to upsert Leads and Companies into Marketo via the REST API. Company code is prepended to every Sage 100 query to ensure the correct entity scope. Sage 100's COM layer has concurrency limits due to record locking, so ml-connector backs off and retries on lock conflicts. If a Lead or Company upsert fails in Marketo (due to 429 rate limit or temporary unavailability), the record is logged for replay. Contact lookups in Marketo use email as the deduplication key, while company lookups use the Sage 100 customer number mapped to a custom field.

A real-world example

A B2B software distributor with 50 sales reps runs Sage 100 for order fulfillment and invoicing. Every month, the marketing team exports an CSV of new customers from Sage 100 and imports it into Marketo to launch welcome campaigns, then manually updates company information as deals close. With Sage 100 and Marketo connected, new customers appear in Marketo within 30 minutes of their first sales order, campaigns can start automatically, and the company profile stays current as invoices post. The sales team can now see which leads were originally sourced by which campaign, tying marketing credit to orders in the ERP.

What you can do

  • Sync customer names, contacts, email, and phone numbers from Sage 100 into Marketo Leads every 15 to 30 minutes.
  • Populate Marketo Companies with Sage 100 customer master data including billing address and customer number.
  • Map Sage 100 sales orders into Marketo Opportunities to track pipeline against actual ERP orders.
  • Authenticate Sage 100 via the local BOI Windows agent and Marketo via OAuth2 Client Credentials with automatic token refresh.
  • Poll Sage 100 using DateLastUpdated to capture changes and handle COM lock conflicts with exponential backoff and audit replay.

Questions

How does ml-connector authenticate to Sage 100 if it has no cloud API?
ml-connector runs on the customer's network and communicates with the local Sage 100 BOI agent using a Windows service account plus an API key or mTLS certificate. The agent wraps the Sage 100 COM layer and exposes it to ml-connector over a secured connection on the customer's LAN. The customer must enable Web Services in Sage 100 admin and provide the agent credentials.
What happens if a customer record fails to sync into Marketo?
ml-connector logs the failed record with the Marketo error (rate limit, validation, or timeout) and stores it in the audit trail for manual replay. If a Lead or Company upsert returns a 429 (too many requests), ml-connector backs off, sleeps, and retries the batch. Critical fields like email are deduplication keys, so Marketo rejects duplicate Leads automatically; the connector detects this and moves on.
Can data flow from Marketo back into Sage 100?
Marketo is primarily a read platform for deal tracking in this integration; Opportunities and Custom Objects may be read-only if a CRM sync (SFDC or Microsoft Dynamics) is enabled on the Marketo instance. The main flow is inbound from Sage 100 to keep the marketing database fresh. If two-way sync is needed later, a separate flow can be designed to write updates back to Sage 100 customer records.

Related integrations

Connect Sage 100 and Marketo

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

Get started