ml-connector
Sage 100Anaplan

Sage 100 and Anaplan integration

Sage 100 holds the books: general ledger, accounts payable, vendors, and inventory. Anaplan holds the plan: budgets, forecasts, and workforce models. Connecting the two means the actual numbers in Sage 100 feed the planning models in Anaplan without anyone exporting spreadsheets by hand, and approved budget values can flow back into Sage 100 as journal entries. ml-connector handles the very different surfaces on each side, because Sage 100 is on-premises and Anaplan is a cloud platform, and moves the data on a schedule you control.

How Sage 100 works

Sage 100 is an on-premises ERP with no native cloud API. Its full breadth, accounts payable, general ledger, purchase orders, vendors, and inventory, is reached through the Business Object Interface, a COM layer that only runs on the customer's own Windows server, so a local agent wraps it and exposes an HTTPS REST endpoint our connector can call. A narrower eBusiness Web Services SOAP surface covers only sales orders and customers. Authentication is a Sage 100 username and password or an agent API key, passed per request with no token to refresh. Sage 100 has no webhooks, so records are read by polling the DateLastUpdated fields on each table.

How Anaplan works

Anaplan is a cloud planning platform, not an ERP, so it has no native invoice, vendor, or GL account objects. Its data lives inside a workspace and model hierarchy as lists, modules, and line items, all reached through the REST Integration API v2.0 over HTTPS. Bulk loads run named Import and Export actions that a model builder created in advance, and they are asynchronous: a POST returns a task id that must be polled until the task is complete. Authentication is a 35-minute basic-auth token or an OAuth2 device or authorization-code grant, since client credentials are not supported. Anaplan has no webhooks, so the connector polls.

What moves between them

The main flow runs from Sage 100 into Anaplan. ml-connector reads Sage 100 actuals, GL account balances, AP invoice totals, vendor records, and cost center segments, formats them as CSV, uploads the file in chunks, and runs the matching Anaplan import action so each planning model is loaded with current figures. The return flow runs from Anaplan into Sage 100: approved budget and forecast values are exported from a saved Anaplan view and posted into Sage 100 as general ledger journal entries through the local agent. Cost centers and the chart of accounts are aligned in both directions so every imported actual and every exported budget line references a dimension that exists on both sides. Cadence follows your close and planning calendar, typically a scheduled pull each day or each period.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the Sage 100 side it calls the local agent over HTTPS with the agent API key, and supports configurable TLS verification because the agent's certificate is often self-signed; the company code travels with every request. On the Anaplan side it requests a token, reuses it for the session, and refreshes before the 35-minute expiry rather than per call. Both systems are pull-only, so there are no webhooks to verify; the connector polls Sage 100 on the DateLastUpdated fields and runs Anaplan actions on a schedule. Anaplan bulk loads are asynchronous and lock the model during execution, so the connector starts the import, polls the task id until it reports complete, and serializes actions against the same model rather than running them in parallel. Sage 100 has no idempotency key, so before posting a journal entry the connector checks for the natural key first, and on a returned record-lock error it retries with backoff. Anaplan returns HTTP 429 when the shared 600-request-per-minute tenant limit is hit, which also triggers backoff. The connector maps cost centers and GL accounts before any data moves, parsing Sage 100's segmented account keys defensively because segment counts vary by company. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized distribution company with about three hundred employees runs Sage 100 for accounts payable, general ledger, and inventory, and adopted Anaplan for annual budgeting and monthly reforecasts. Before the integration, a financial analyst exported trial balances and AP detail from Sage 100 each month and re-keyed them into the Anaplan actuals module, a slow step that delayed every reforecast and introduced typos that the FP&A team then had to chase. With Sage 100 and Anaplan connected, the prior period's GL balances and AP totals load into the Anaplan models automatically on a schedule, mapped to the right cost centers, and once a budget is approved its values post back into Sage 100 as journal entries. The reforecast starts from clean actuals and the manual export step is gone.

What you can do

  • Load Sage 100 GL account balances, AP invoice totals, and vendor records into Anaplan planning models on a schedule.
  • Push approved Anaplan budget and forecast values back into Sage 100 as general ledger journal entries.
  • Map Sage 100 cost center segments and chart of accounts to Anaplan lists so figures land on valid dimensions on both sides.
  • Bridge the Sage 100 local agent key and Anaplan's 35-minute token, with encrypted storage and configurable TLS for self-signed agents.
  • Run Anaplan import and export actions asynchronously, serialized to respect model locking, with retries and a full audit trail.

Questions

Which direction does data move between Sage 100 and Anaplan?
The main flow is Sage 100 into Anaplan: GL balances, AP totals, vendors, and cost centers load into the planning models as actuals. The return flow is Anaplan into Sage 100, where approved budget values post as general ledger journal entries. Reference data such as cost centers and accounts is aligned in both directions so every line references a dimension that exists on both sides.
How does ml-connector reach Sage 100 if it is on-premises with no cloud API?
Sage 100's full accounts payable and general ledger breadth is only available through the Business Object Interface, a COM layer that runs on the customer's own server and cannot be called over the internet directly. A lightweight local agent on that server wraps the interface and exposes an HTTPS REST endpoint, and ml-connector calls the agent with an API key. It supports configurable TLS verification because the agent certificate is often self-signed.
Does Anaplan store the invoices and accounts that come from Sage 100?
Not as native objects. Anaplan is a planning platform with no invoice, vendor, or GL account resource of its own, so finance data lands inside lists and modules that a model builder configured in advance. ml-connector formats the Sage 100 actuals as CSV and runs the named Anaplan import action, which is asynchronous, so it polls the task until it reports complete before treating the load as done.

Related integrations

Connect Sage 100 and Anaplan

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

Get started