ml-connector
Sage X3Anaplan

Sage X3 and Anaplan integration

Sage X3 runs your mid-market manufacturing, distribution, or services finance. Anaplan runs your financial planning, budgeting, and forecasting. Connecting the two keeps your planning models fed with actual GL data from your ERP, so your budget variances are grounded in real numbers. Sage X3 GL entries and cost center records flow into Anaplan on a schedule you control, mapped to the budget categories and dimensions already set up in your planning models. No manual export-and-import cycle, no stale actuals, and your close-cycle data in Anaplan stays in sync with your general ledger.

How Sage X3 works

Sage X3 exposes GL accounts, GL entries, cost centers, suppliers, purchase orders, and inventory through REST and GraphQL APIs published at customer-specific URLs (no shared tenant hostname). Authentication uses OAuth2 client credentials, with access tokens valid for five minutes and refresh tokens good for thirty days. Sage X3 does not support outbound webhooks or event notifications, so GL and cost center changes are detected by polling the updatedDate or modifiedDateTime fields on each record to find deltas since the last read. On-premise is the dominant deployment; cloud SaaS is available through Sage-managed hosting. Analytical dimensions on GL entries vary per customer configuration, so the structure must be validated against the specific X3 instance.

How Anaplan works

Anaplan is a cloud planning platform accessed entirely through REST APIs at https://api.anaplan.com/2/0/. It holds financial models as collections of lists (dimensions), modules (tables), and line items, and any integration must map ERP data into those planning objects via bulk import or export operations. Authentication supports basic username-and-password, client certificate pairs, or OAuth2. All Anaplan requests run under a tenant-wide rate limit of 600 requests per minute, and bulk import-export must be initiated as named Actions pre-created in the model; the API cannot create new actions dynamically. Anaplan has no native finance objects like invoices or GL accounts, so all ERP data must be mapped onto workspace, model, list, and module names. Model locking during concurrent imports prevents simultaneous reads, and workspace Admin role is required for transactional APIs.

What moves between them

GL entries and cost center master records flow from Sage X3 into Anaplan on a monthly or close-cycle schedule. ml-connector polls Sage X3 for GL entries updated since the last run, transforms them into a CSV or JSON import file with mapped list items and module line items, posts the file to an Anaplan import action, and monitors the job until completion. Cost centers are synced as list items so they already exist in the model when GL entries arrive, preventing mapping errors. The flow is unidirectional: Anaplan planning models are read-only from the integration side; writes to Anaplan are import operations only, never field updates via the API.

How ml-connector handles it

ml-connector stores Sage X3 OAuth2 credentials and Anaplan auth details (basic, cert, or OAuth2) encrypted per customer. It uses the customer-provided Sage X3 server URL and port to reach the REST or GraphQL endpoint, validates tokens expiry before each call, and refreshes them on 401 response. On the Sage X3 side, it queries GL entries with a where clause filtering for records modified since the last sync, extracts the GL account, cost center, and amount, and batches them into a staging file. On the Anaplan side, it checks the 600-request-per-minute rate limit header and backs off if approaching saturation, posts the import file to the pre-named Action in the target model, starts the import job by submitting the Action, polls GET task status until COMPLETE, and handles CANCELLED status with a full error record for replay. Sage X3 GL dimensions vary by customer, so mappings are defined per workspace: which X3 GL account maps to which Anaplan list item, and which X3 cost center maps to which Anaplan dimension. Token expiry is tracked so a renewal does not cause an outage mid-import. Every record imported carries the source GL entry ID, timestamp, and Sage X3 account code for audit and replay.

A real-world example

A mid-market discrete manufacturer runs Sage X3 for ERP and Anaplan for financial planning and monthly budgeting. The planning team receives actual GL data from Sage X3 at month-end and must manually download P&L and balance sheet extracts, rekey them into Anaplan, and run budget variance analysis. This manual process takes two to three days post-close and creates a window of stale actuals. With Sage X3 and Anaplan connected, GL entries post automatically into Anaplan's financial model at close cycle, cost centers are pre-aligned so all allocations land on valid dimensions, and the variance report runs on current data the same morning as close. The planning team can start forecasting and variance analysis immediately instead of waiting for manual data entry.

What you can do

  • Post Sage X3 GL entries and cost center records into Anaplan financial planning models on a monthly or close-cycle schedule.
  • Map Sage X3 GL accounts and cost centers to Anaplan lists and dimensions so cost allocations land on valid budget categories.
  • Authenticate both Sage X3 with OAuth2 bearer tokens and Anaplan with basic auth, certificates, or OAuth2, managing token expiry and refresh.
  • Poll Sage X3 for GL and cost center changes using the updatedDate field, and batch them into Anaplan import jobs with full monitoring and retry on failure.
  • Respect Anaplan's 600-request-per-minute tenant-wide rate limit and Sage X3's five-minute token expiry, with backoff, exponential retry, and a complete audit trail on every import.

Questions

What ERP records sync to Anaplan, and in which direction?
GL entries, cost centers, and GL accounts flow from Sage X3 into Anaplan on a schedule tied to your close cycle. Anaplan planning models are read-only from the integration side; ml-connector never writes back into your budget models or planning assumptions. Cost center and GL account lists are synced first so they already exist in Anaplan when GL entries arrive, preventing mapping errors.
How does ml-connector handle Sage X3's customer-specific server URLs and lack of webhooks?
ml-connector accepts the full Sage X3 server URL, port, and folder name from your instance configuration, since Sage X3 publishes no shared base address. Because Sage X3 does not support outbound webhooks, ml-connector polls GL and cost center records on a monthly schedule, using the updatedDate or modifiedDateTime fields to detect changes since the last sync and avoid redundant re-imports.
Does the integration handle Anaplan's rate limits and model locking?
Yes. ml-connector tracks Anaplan's 600-request-per-minute tenant-wide limit and backs off if it approaches saturation, preventing 429 errors. It also sequences cost center imports before GL entries to avoid model locking conflicts, and it monitors the Anaplan import action status until COMPLETE, retrying with exponential backoff if the job fails or is CANCELLED.

Related integrations

Connect Sage X3 and Anaplan

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

Get started