ml-connector
SAP Business OneAnaplan

SAP Business One and Anaplan integration

SAP Business One runs financials, purchasing, sales, and inventory for small and midsize businesses. Anaplan runs budgeting, forecasting, and workforce planning. Connecting the two sends posted actuals, the chart of accounts, and cost centers from SAP Business One into the Anaplan model that planners build against, and returns the approved budget to SAP Business One as draft journal entries. ml-connector handles the very different APIs on each side and moves the data on a schedule you control. Because Anaplan has no native ledger or invoice objects, the system of record stays in SAP Business One.

How SAP Business One works

SAP Business One exposes its data through the SAP Business One Service Layer, an OData v4 REST API served per customer at a base URL such as https://erp.customer.com:50000/b1s/v2 that the customer must provide, since there is no shared cloud hostname. Authentication is a session login that posts the company database, username, and password and returns a B1SESSION cookie carried on every later call; the session times out after 30 minutes of inactivity and returns error code -5002, at which point the connector re-logs in. Key entities include Business Partners, Invoices, Purchase Invoices, Journal Entries, Chart of Accounts, Profit Centers, and Dimensions, with cost centers applied to journal lines through CostingCode fields. Webhooks exist only from version 10.0 FP 2602 and require server-side admin setup, so finance records are normally read by polling with OData filters on the update date.

How Anaplan works

Anaplan is a cloud connected planning platform, not an accounting system, so it has no invoice, vendor, or general ledger object. Its data lives inside a Workspace and Model hierarchy of lists, modules, and line items, and almost every call to the Integration API v2.0 at https://api.anaplan.com/2/0/ requires a lowercase workspace ID and an uppercase model ID. Authentication uses basic, certificate, or OAuth2 device or authorization-code grants and yields a token that expires in about 35 minutes. ERP data reaches Anaplan through bulk import actions that a model builder has pre-created, and planned figures leave through export actions; both are asynchronous, return a task ID to poll, and lock the model while they run. Anaplan does not push outbound webhooks, so the connector polls.

What moves between them

The primary flow runs from SAP Business One into Anaplan. ml-connector reads posted journal entries, the chart of accounts, and profit centers from SAP Business One and loads them into the matching Anaplan lists and modules, so planners forecast against current actuals, accounts, and cost centers. The return flow runs from Anaplan into SAP Business One: once a budget is approved, ml-connector runs the Anaplan export action and posts the approved figures into SAP Business One as draft journal entries on the right accounts and cost centers for finance to review. Cadence is scheduled, typically a daily or per-close actuals load into Anaplan and a budget return after each planning cycle. Anaplan holds no ledger, so it stays the planning layer and SAP Business One stays the system of record.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the SAP Business One side it accepts the full Service Layer base URL per customer, posts the company database, username, and password once to obtain the B1SESSION cookie, reuses that cookie across calls rather than logging in per request, and on error code -5002 it re-authenticates and replays the failed call. On the Anaplan side it requests a token, refreshes it before the 35-minute expiry, and addresses every call with the lowercase workspace ID and uppercase model ID, since wrong case returns a 404. Because neither system pushes reliably, both directions poll: SAP Business One actuals are read with OData filters on the update date and paged with $top and $skip, while Anaplan work is asynchronous, so the connector starts an import or export action, polls the returned task ID until it reports COMPLETE, and downloads export file chunks. Accounts and cost centers are mapped first, so each value loaded into Anaplan resolves to a real list member, and each budget figure returned lands on a valid SAP Business One account and CostingCode. Anaplan locks the model during a task and allows 600 requests per minute tenant-wide, so the connector serializes actions against one model and backs off with jitter on an HTTP 429. SAP Business One has no idempotency key, so before posting a journal entry it checks the DocNum to avoid a duplicate, and a BullMQ jobId dedupes a re-read import. Imports must target named actions a model builder has created, which the connector discovers by ID at runtime. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A roughly 300-person specialty food manufacturer runs SAP Business One for finance, purchasing, and inventory, and builds its annual budget and monthly reforecast in Anaplan. Before the integration, an analyst exported the trial balance and cost center actuals from SAP Business One to spreadsheets each month and hand-loaded them into the Anaplan model, then re-keyed the approved budget back into SAP Business One as journal entries. The manual hops meant the forecast ran a week behind actuals and the budget in the ledger never quite matched the approved plan. With SAP Business One and Anaplan connected, posted actuals and the current chart of accounts load into the planning model on a daily schedule, and the approved budget returns to SAP Business One as draft journal entries on the right accounts and cost centers. Reforecasts start from current numbers and the ledger reflects the plan that was signed off.

What you can do

  • Load posted SAP Business One journal entries, accounts, and profit centers into the matching Anaplan lists and modules.
  • Return approved Anaplan budget figures to SAP Business One as draft journal entries on the right accounts and cost centers.
  • Map cost centers and accounts on both sides so every loaded value and returned figure lands on a valid member.
  • Bridge the SAP Business One B1SESSION cookie login and the Anaplan token, refreshing each before it expires.
  • Poll both pull-only systems on a schedule, run Anaplan actions to completion, and keep a full audit trail on every record.

Questions

Which direction does data move between SAP Business One and Anaplan?
The primary flow is SAP Business One into Anaplan. Posted journal entries, the chart of accounts, and profit centers move from SAP Business One into Anaplan lists and modules so planners work from current actuals. Once a budget is approved in Anaplan, the approved figures return to SAP Business One as draft journal entries, and because Anaplan holds no ledger, SAP Business One stays the system of record.
How does the integration load actuals into Anaplan when Anaplan has no GL object?
Anaplan has no native ledger or invoice object, so actuals are loaded into lists and modules through a named import action that a model builder pre-created in the workspace. ml-connector discovers the action ID at runtime, uploads the SAP Business One data, starts the import, and polls the returned task ID until it reports COMPLETE. Accounts and cost centers are mapped to Anaplan list members first so every loaded value resolves correctly.
Does either system push events, or does ml-connector poll?
Both sides are polled. Anaplan supports no outbound webhooks at all, and SAP Business One webhooks exist only from version 10.0 FP 2602 and require server-side admin setup, so they are not assumed. ml-connector reads SAP Business One actuals with OData update-date filters on a schedule and runs Anaplan import and export actions asynchronously, polling each task to completion.

Related integrations

Connect SAP Business One and Anaplan

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

Get started