---
title: "SYSPRO to Acumatica Migration: A Technical Guide"
slug: syspro-to-acumatica-migration-technical-guide
date: 2026-10-26
author: Roopendra Talekar
categories: [Migration Guide, SYSPRO, Acumatica]
excerpt: "A technical guide to migrating data from SYSPRO to Acumatica. Covers SQL extraction, entity mapping, REST API constraints, and validation."
tldr: "SYSPRO to Acumatica migration means a one-off, read-only extract from the SYSPRO SQL Server company database, a transformation to Acumatica's contract-based REST API entities, and a load that respects the API limits set by your Acumatica licence."
canonical: https://clonepartner.com/blog/syspro-to-acumatica-migration-technical-guide
---

# SYSPRO to Acumatica Migration: A Technical Guide


# SYSPRO to Acumatica Migration: A Technical Guide

Migrating from SYSPRO to Acumatica is a structural data translation problem, not a file import. SYSPRO 8 stores data in Microsoft SQL Server with module-prefixed tables (`ArCustomer`, `InvMaster`, `SorMaster`) in one database per company ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)). Acumatica exposes entities like `Customer`, `Vendor`, `StockItem` and `SalesOrder` through a versioned, contract-based REST API ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=1a9d6f7e-8546-426b-b1ff-d712fbcfbc7b)). Every record must be extracted from SYSPRO, transformed, and loaded into Acumatica through that API or through import scenarios.

For a side-by-side comparison of the two platforms, see [SYSPRO vs Acumatica](https://clonepartner.com/blog/blog/syspro-vs-acumatica-2026-comparison). For the object-by-object mapping and how we run the move, see the [SYSPRO to Acumatica migration](https://clonepartner.com/blog/migrate/syspro-to-acumatica) page.

> [!WARNING]
> **SYSPRO licensing deadline.** SYSPRO is ending its Initial and Annual Licence Fee model. Existing licences expire on **31 October 2026** for customers outside the US and **31 December 2026** for US customers. After your expiry date, SYSPRO's formal notice states "you will no longer be able to access Syspro" without a new subscription agreement. The notice confirms "you have the right to export your data" on cessation of your licence, and asks customers to raise the export "with your account manager ahead of" the expiry date ([syspro.com](https://www.syspro.com/formal-notice-change-to-syspro-licensing/)). Raise the export with SYSPRO now, whichever date applies to you.

## Why Are Companies Moving from SYSPRO to Acumatica?

Two patterns drive this migration:

1. **The licensing reset.** SYSPRO is moving to a named-user subscription only, announced in a formal notice dated 15 July 2026 ([syspro.com](https://www.syspro.com/formal-notice-change-to-syspro-licensing/)). Customers who do not sign a new subscription must move before their expiry date. The notice does not publish the subscription price.
2. **Pricing model fit.** Acumatica states that it "does not charge by user"; its SaaS consumption level is based on the load you put on the system at peak times ([acumatica.com](https://www.acumatica.com/faq/)). That difference matters for manufacturers with large shop-floor or warehouse teams who need ERP access.

## How Do SYSPRO and Acumatica Differ Architecturally?

SYSPRO keeps each company's data in its own SQL Server database, plus one system-wide database. SYSPRO's database guide says "Each SYSPRO 8 company database contains approximately 1000 tables" and that the system-wide database "contains over 100 tables" ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)). Custom form data is stored in "plus tables". For example, custom fields on the customer record live in `[ArCustomer+]` ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/syspro-8-database-architecture-technical-guide.pdf)). A multi-company SYSPRO site has several company databases next to one shared system-wide database. Intercompany transactions recorded in one company database have no automatic counterpart in Acumatica and must be mapped explicitly.

Acumatica's integration surface is its **contract-based REST API**. An endpoint is identified by its URL, which carries the endpoint name and version, for example `/entity/Default/26.200.001`. The version of an endpoint defines the entities, fields and actions you can work with through it ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=1a9d6f7e-8546-426b-b1ff-d712fbcfbc7b)). You send records through the API rather than writing to tables, and the API returns validation errors on the fields it rejects ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=6397c034-d191-4302-8f9d-0a0aec5b5ba8)).

The key structural differences that affect migration:

- **Customers and vendors.** SYSPRO's `ArCustomer` is an AR construct and `ApSupplier` an AP construct. They map to Acumatica's `Customer` and `Vendor` entities.
- **Inventory.** SYSPRO splits stock codes (`InvMaster`) from warehouse-level data (`InvWarehouse`). In Acumatica both are loaded as part of the stock item record.
- **Orders.** SYSPRO uses header/detail pairs (`SorMaster`/`SorDetail`, `PorMasterHdr`/`PorMasterDetail`). Acumatica's `SalesOrder` and `PurchaseOrder` take the lines nested in one payload per document.
- **GL.** SYSPRO's `GenMaster` and `GenTransaction` map to Acumatica's GL accounts and journal transactions, but account structures often differ and need remapping.
- **Custom fields.** SYSPRO's plus tables store custom form data. In Acumatica, "a user-defined field is an attribute that has been associated with a data entry form", and the attribute must be defined on the Attributes (CS205000) form first ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=96dd287d-b37f-4f23-b401-b3122cf8a0a1)). Through the REST API, the field name of a user-defined field is `Attribute<AttributeID>` ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=bd0d8a36-b00b-44c8-bdcd-b2b4e4c86fd0)).
- **Multi-company.** Each SYSPRO company database must be migrated separately and mapped to the correct Acumatica company or branch.

## Data Model Mapping: SYSPRO to Acumatica

This table maps the core SYSPRO entities to their Acumatica equivalents. Every SYSPRO table listed below is verified in SYSPRO's documentation.

| SYSPRO Table | What It Holds | Acumatica Target | Notes |
|---|---|---|---|
| `ArCustomer` | Customers (AR) | `Customer` | Map customer class, terms, currency |
| `[ArCustomer+]` | Custom form fields on customers | `Customer` user-defined fields | Create attributes and user-defined fields in Acumatica first |
| `ApSupplier` | Suppliers (AP) | `Vendor` | Remap payment terms, tax zones |
| `InvMaster` | Stock codes (items) | `StockItem` | Map item class, UOM, valuation method |
| `InvWarehouse` | Warehouse-level inventory | `StockItem` warehouse details | Load with the item |
| `SorMaster` / `SorDetail` | Sales order headers and lines | `SalesOrder` with nested lines | One PUT per order |
| `PorMasterHdr` / `PorMasterDetail` | Purchase order headers and lines | `PurchaseOrder` with nested lines | Check PO types |
| `GenMaster` | GL accounts | GL accounts | Account structure may differ |
| `GenTransaction` | GL transactions | Journal transactions | Balanced debit/credit entries |
| `ArInvoice` | Customer invoices | AR invoices | Map to correct AR document type |
| `ApInvoice` | Supplier invoices | AP bills | Watch for multi-currency conversion |
| `BomOperations` | Bill of materials operations (routing steps) | Manufacturing routing operations | Requires Acumatica's manufacturing features; map work centres first |
| `BomWorkCentre` | Work centres | Work centres | Load as reference data |
| `WipMaster` | Work-in-progress jobs | Production orders | In-progress jobs need cost-to-date balances |
| `WipJobAllMat` / `WipJobAllLab` | Materials and labour allocated to a job | Production order materials and operations | Open jobs only; archive the rest |
| `TblCurrency` / `TblCurrDatedRates` | Currencies and dated exchange rates | Currencies and currency rates | Load before any multi-currency transactions |
| `InvSerialHead` | Serial numbers | Serial-tracked items | Configure serial tracking first |
| `LotDetail` | Lot detail for lot traceable items | Lot-tracked items | Configure lot tracking first |

SYSPRO table names are from SYSPRO's database guide and release notes ([help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/i-installation/sys-8-sql-updates-by-release/sys-8-sql-updates-by-release.htm)).

> [!NOTE]
> **Archived data warning.** SYSPRO's archiving copies purged sales orders, jobs and ECC bills of materials to XML files named `Xyynnnnn.XML`, where X is the company id and yy the archive type (SO, JB or BO), per SYSPRO 7 Update 1 help ([help.syspro.com](https://help.syspro.com/syspro-7-update-1/impbam.htm)). Archived sales orders cannot be queried through the `SORQRY` business object ([help.syspro.com](https://help.syspro.com/business-object-library/G_Objects/sor/sorqry/sorqry.htm)). If you extract only the live SQL tables and ignore the archive files, you lose the history SYSPRO previously purged. For what to keep outside Acumatica, see [how to archive SYSPRO history before switching ERP](https://clonepartner.com/blog/blog/how-to-archive-syspro-history-before-switching-erp).

## How to Get Data Out of SYSPRO

For a one-off migration, a **read-only SQL extract of the SYSPRO company database** gives you the widest reach: every table, including plus tables. SYSPRO's best-practice guide warns that "Connecting to the SYSPRO databases directly using SQL drivers is not advised" ([help.syspro.com](https://help.syspro.com/syspro-8-2023/resources/pdfs/2023-release/technical/syspro-8-best-practices-for-connecting-to-syspro.pdf)). That warning is about live integrations. For a migration, run the extract once, with a read-only login, ideally against a restored copy of the database.

Other extraction methods and their constraints:

- **Business Activity Queries (BAQs).** SQL views created in the company database. "Any SQL user with db_datareader permissions can retrieve data using the views" ([help.syspro.com](https://help.syspro.com/syspro-8-2024/resources/pdfs/2022-release/topics/syspro-8-business-activity-queries-reference-guide.pdf)). Good for pre-joined datasets.
- **OData Service.** Read-only. Use it where SQL access is not possible. SYSPRO says it "is the only mechanism available when applications need access to SYSPRO data in the Syspro Cloud ERP environment" ([help.syspro.com](https://help.syspro.com/syspro-8-2025/topics/insights-and-reporting/syspro-odata/syspro-odata.htm)). SYSPRO's 2021 R2 help limits it to 5,000 rows, paged with `$top` and `$skip` ([help.syspro.com](https://help.syspro.com/syspro-8-2021-r2/topics/insights-and-reporting/syspro-odata/syspro-odata.htm)).
- **e.net business objects.** Query objects like `ARSQRY`, `INVQRY` and `SORQRY` return XML for one record or a filtered set. They suit integration, not bulk extraction, and `SORQRY` cannot return archived orders.
- **REST binding.** SYSPRO 8's e.net Communications Load Balancer hosts a REST binding next to its other bindings ([help.syspro.com](https://help.syspro.com/syspro-8-2026-r1/topics/syspro-services/syspro-8-enet-communications-load-balancer/syspro-8-enet-communications-load-balancer.htm)). It carries e.net calls, so it is suited to record-level work, not full-table dumps.

For a deeper comparison, see [SYSPRO e.net business objects vs direct SQL](https://clonepartner.com/blog/blog/syspro-enet-business-objects-or-direct-sql-extraction) and [how to export data from SYSPRO](https://clonepartner.com/blog/blog/how-to-export-data-from-syspro-methods-api-limits-portability).

## How to Load Data into Acumatica

Acumatica gives you two main load paths: the contract-based REST API and import scenarios.

### Contract-Based REST API

The main integration surface for bulk migration. Request URLs follow the pattern `/entity/<Endpoint name>/<Endpoint version>/<Entity>`, for example `/entity/Default/26.200.001/SalesOrder` ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=6397c034-d191-4302-8f9d-0a0aec5b5ba8)). Check which endpoint versions your instance offers before you build against one. Applications open an API session by signing in through the REST API or through OAuth 2.0 ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=7a796856-3dec-4a4f-abf8-171324c9642b)).

Key constraints for migration, all from Acumatica's documentation on licence restrictions ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=7a796856-3dec-4a4f-abf8-171324c9642b)):

- **Limits are set by your licence.** "Each Acumatica ERP license includes the limits on the number of web services API sessions, the number of concurrent API requests, and the number of web services API requests per minute." You can see the values on the License Monitoring Console (SM604000). Read them before you size the load.
- **Requests queue, then get declined.** Requests above the concurrency limit wait in an internal queue. Once the past minute's requests reach 50% of the per-minute limit, new requests are delayed. A request "will be declined only if the number of requests in the internal queue is greater than 20, or the request remains in the queue for more than 10 minutes." Acumatica returns HTTP 429 when the number of requests exceeds the licence limit ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=6397c034-d191-4302-8f9d-0a0aec5b5ba8)). Build retry logic that backs off on declined requests.
- **Session management.** Sign-in fails once the number of API sessions exceeds the licence limit. An application that "does not sign out from Acumatica ERP in each session" can prevent other applications from signing in. Always sign out when a run finishes.

A PUT request "normally either creates a new record or updates an existing one". Add the `If-None-Match: *` header if you only want to create ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=6397c034-d191-4302-8f9d-0a0aec5b5ba8)). The field names below are illustrative; take the exact names from your endpoint's schema.

```http
PUT /entity/Default/26.200.001/Customer
Accept: application/json
Content-Type: application/json
Authorization: Bearer {token}

{
  "CustomerID":    {"value": "CUST001"},
  "CustomerName":  {"value": "Acme Manufacturing"},
  "CustomerClass": {"value": "DEFAULT"},
  "Terms":         {"value": "NET30"}
}
```

When a value fails validation, Acumatica returns HTTP 422 with the error on the field, for example `"'Customer' cannot be found in the system."` ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=6397c034-d191-4302-8f9d-0a0aec5b5ba8)). That is the signature of a transaction loaded before its master data.

### Import Scenarios

You create an import scenario on the Import Scenarios (SM206025) form. Each scenario "is created for a specific provider", which you set up on the Data Providers (SM206015) form ([help.acumatica.com](https://help.acumatica.com/Wiki/ShowWiki.aspx?pageid=254e8347-6bac-469d-8f14-dbe383740475)). This path needs no code. Each row goes through the form's own processing, so it suits low-volume reference data better than large transactional loads.

**Recommendation:** Use the REST API for master data and transactional imports at scale. Use import scenarios for reference data (chart of accounts, tax codes, payment terms) where record counts are low.

## Step-by-Step Migration Process

### 1. Extract from SYSPRO

Restore a copy of the SYSPRO company database and extract from the restored copy with a read-only login, not from production. Extract each entity into JSON or CSV, including the plus tables for custom fields. Join each plus table to its primary table, for example `[ArCustomer+]` to `ArCustomer`. Confirm the key and custom column names in your own database before you write the query, because they vary by site.

Check for purged lot history before extraction. SYSPRO's lot Purge and Archive program copies lot transactions to an archive file, and "only the lot transactions are deleted and archived" while the header record stays in the lot master table ([help.syspro.com](https://help.syspro.com/syspro-8-2024/g_programs/lot/lotp01/lotp01.htm)). A Serial File Purge program can also delete serial numbers or serial transactions ([help.syspro.com](https://help.syspro.com/syspro-8-2024/g_programs/lot/lotp01/lotp01.htm)). If you need purged sales orders or jobs, extract them from the `Xyynnnnn.XML` archive files, not just the live tables. For multi-company sites, repeat the extraction for each company database.

### 2. Transform

Transformation handles the structural differences between the two systems:

- **Remap GL accounts.** Build an explicit mapping from each SYSPRO account code to the account structure configured in Acumatica before writing transformation code.
- **Convert UOM codes.** Confirm Acumatica's unit codes match SYSPRO's exactly, or create a substitution map. Mismatched UOM codes cause line-level rejections on orders.
- **Normalise picklist values.** Customer terms, tax zones and payment methods need exact-match values in Acumatica. Extract all distinct values from SYSPRO first, then confirm each has a corresponding Acumatica code.
- **Convert data types.** Send dates as ISO 8601 strings (`2024-03-15T00:00:00`).
- **Build parent-child relationships.** Every invoice needs an existing customer and every order line an existing item. Load master data before transactions.

Map the extract to Acumatica's JSON shape, where each field is wrapped as `{"value": ...}`. In this sketch, the `header` and `line` properties are the column aliases from your own extract query, not SYSPRO column names:

```javascript
// Transform one extracted sales order into an Acumatica payload
function transformSalesOrder(header, lines) {
  return {
    "OrderType":     { "value": "SO" },
    "CustomerID":    { "value": header.customerCode },
    "CustomerOrder": { "value": header.customerPo },
    "RequestedOn":   { "value": new Date(header.orderDate).toISOString() },
    "Details": lines.map(line => ({
      "InventoryID": { "value": line.stockCode },
      "Quantity":    { "value": Number(line.quantity) },
      "UOM":         { "value": uomMap[line.uom] || line.uom },
      "UnitPrice":   { "value": Number(line.price) },
      "WarehouseID": { "value": warehouseMap[line.warehouse] || line.warehouse }
    }))
  };
}
```

### 3. Create Target Structures in Acumatica

Before loading any data, set up the chart of accounts, currencies, exchange rates, tax codes, item classes, customer classes, attributes and user-defined fields in Acumatica. User-defined fields must exist on the target form before data referencing them can be loaded. For multi-company migrations, set up the Acumatica companies and branches that match SYSPRO's company databases before loading any entity.

### 4. Load in Dependency Order

Load via the REST API in this sequence. Loading out of order produces referential integrity failures that are slow to diagnose:

1. **Reference data:** chart of accounts, currencies, exchange rates, tax codes, UOMs, work centres (for manufacturing)
2. **Master data:** customers, vendors, stock items (with warehouse details), BOMs and routings
3. **Opening balances:** GL journal entries, AR/AP open items, inventory quantities on hand
4. **Transactional history:** sales orders, purchase orders, invoices (if required)
5. **Attachments and notes**

Throttle to the limits on your licence and back off on HTTP 429 or declined requests. Log every failed request with its payload so failed records can be reprocessed without re-running the full dataset.

### 5. Validate

Never assume a successful HTTP 200 response means the data is correct.

- **Record-count parity.** The number of extracted SYSPRO records should match the number of Acumatica records created, by entity type.
- **Field-level validation.** Sample records and compare critical fields (credit limits, item costs, open order totals, UOM assignments) between both systems.
- **GL trial balance reconciliation.** Reconcile trial balances period by period between SYSPRO and Acumatica. Unexplained differences point to missing journal transactions or misapplied exchange rates.
- **Referential integrity.** Confirm that relationships (customer → invoice → order line → inventory item) are intact.
- **Routing and BOM integrity.** For manufacturing migrations, verify that each BOM component resolves to a valid stock item and each routing operation to a valid work centre.
- **UAT.** Have your finance and warehouse teams sign off on the sample migration data inside Acumatica before the final cutover. Run as many sample migrations as you need before the full run.

### 6. Cut Over and Go Live on a Monday

Go live on a Monday, never on a Friday. Run the bulk load in the days before go-live while SYSPRO stays live. Freeze SYSPRO before Monday's working day starts. Then run the final delta, which covers changed records only (open orders, recent invoices, master data edits) and takes about 30 minutes. Confirm validation checks pass, then switch users to Acumatica.

## Common Migration Failure Taxonomy

| Failure Type | Root Cause | Detection Point | Resolution |
|---|---|---|---|
| **Missing archived records** | Extracting only live SQL tables; ignoring `Xyynnnnn.XML` archive files | Post-cutover when users query history | Extract from the XML archives before go-live |
| **Orphaned open orders** | Master data (customer or item) loaded after transactions | HTTP 422 during order load | Enforce load order; check references before each PUT |
| **Currency/rate rejection** | Foreign-currency transactions loaded before exchange rates | Validation error on invoice PUT | Load currencies and rates with reference data |
| **UOM mismatch** | SYSPRO UOM code has no matching Acumatica code | Line-level validation error on order | Build an explicit UOM substitution map |
| **Lot/serial history gaps** | Purged lot transactions missing from live tables | Discrepancy in traceability reports | Check lot archive files before extraction |
| **GL imbalance** | Missing debit/credit pairs; account remapping errors | Trial balance reconciliation | Check every journal entry balances; reconcile by period |
| **HTTP 200 with wrong data** | Record accepted with default values where mapping was missing | Field-level validation sampling | Compare a sample of critical fields between systems |
| **API session exhaustion** | Sessions not signed out after each run | Sign-in refused on later runs | Always sign out at the end of a run |
| **BOM routing failures** | Work centres not created before BOM load | Production order errors after go-live | Load work centres with reference data |
| **Duplicate customer records** | SYSPRO has customers under similar but distinct codes | Duplicates found in validation | De-duplicate before loading; define merge rules |

## Edge Cases That Break Migrations

- **Multi-currency.** Load currencies and dated exchange rates (`TblCurrency`, `TblCurrDatedRates`) before any foreign-currency transactions ([help.syspro.com](https://help.syspro.com/syspro-8-2024/topics/dated-exchange-rates/dated-exchange-rates-ovr.htm)).
- **Lot and serial traceability.** The lot header stays in SYSPRO, but transaction detail may already be gone from live tables. Check archive files before extraction, not after.
- **Archived sales orders.** Archived orders live in the XML archive files, not in `SorMaster`. If you need that history in Acumatica, parse the XML separately and load it as closed orders or historical invoices.
- **Custom fields across both systems.** SYSPRO plus tables can hold arbitrary data. Not every plus-table field will have a natural home in Acumatica. Document unmappable fields explicitly and decide whether to discard them or store them as notes.
- **API throttling on large datasets.** Size the load against the per-minute and concurrency limits on your licence, not against a guess. Log every declined request with its payload.
- **Multi-company SYSPRO sites.** Each company database is extracted and migrated separately. Intercompany balances that SYSPRO held across separate databases do not transfer automatically.
- **BOM routing operation times.** Check the time units SYSPRO uses for each operation against the units Acumatica expects, and convert explicitly during transformation.

## Migration Approaches Compared

| Approach | Best For | Complexity | Key Risk |
|---|---|---|---|
| **SQL extract → REST API load** | Full migrations with engineering capacity | High | Rate-limit management; error handling; retry logic |
| **SQL extract → import scenarios (CSV)** | Small datasets, reference data | Medium | Slow for large volumes; manual mapping |
| **iPaaS / middleware** | Ongoing sync after the initial migration | Medium–High | Connector gaps; subscription cost |
| **Managed migration service** | Any scale; limited internal bandwidth | Low (for you) | Vendor selection; scope definition |

For a one-time migration with large customer, item and transaction volumes, the SQL extract → REST API path is the most reliable. It demands engineering time: extraction queries, a transformation layer, an API client with retry logic, and a validation framework.

## Automation Script Outline

If you build an internal pipeline, structure it around these stages:

1. **Initialize.** Read configuration, connect to the restored SYSPRO database with read-only credentials, and sign in to the Acumatica REST API.
2. **Extract.** Run paged `SELECT` statements (`OFFSET`/`FETCH NEXT`) against the restored company database. Join plus tables to capture custom fields. Parse XML archive files for purged records.
3. **Transform.** Map rows to Acumatica JSON payloads. Apply the UOM substitution map, GL account remapping, ISO 8601 dates and parent-child resolution.
4. **Load.** Send `PUT` requests in dependency order. Throttle to your licence limits and back off on HTTP 429 and declined requests.
5. **Log.** Write successes and errors to a local database or structured log, with the full request payload, for retry processing.
6. **Retry.** Re-process failed records after root-cause analysis. Most 422 errors point to a missing parent entity or an invalid picklist value. Fix the data, not the code.
7. **Clean up.** Sign out of Acumatica to release the API session.

## Pre-Migration Checklist

- [ ] Confirm your SYSPRO licence expiry date: 31 October 2026 outside the US, 31 December 2026 in the US
- [ ] Raise the data export with your SYSPRO account manager before your expiry date
- [ ] Take a full SQL Server backup of every SYSPRO company database
- [ ] Audit data: identify inactive customers, obsolete items and orphaned records
- [ ] Check for archived sales orders, jobs and BOMs in XML files (`Xyynnnnn.XML`)
- [ ] Check for purged lot/serial history in archive files before extraction
- [ ] Map SYSPRO GL account codes to Acumatica's account structure
- [ ] Build a UOM substitution map between SYSPRO and Acumatica codes
- [ ] Decide which history to migrate and which to archive
- [ ] Create attributes and user-defined fields in Acumatica before loading any data
- [ ] For multi-company SYSPRO: set up Acumatica companies and branches first
- [ ] Read your Acumatica API limits on the License Monitoring Console (SM604000)
- [ ] Provision read-only SQL credentials for the extract
- [ ] Run sample migrations on a subset of each entity and validate before the full run
- [ ] Plan go-live for a Monday, with the bulk load beforehand and the final delta before Monday's working day starts

For the full 10-point plan, see [The Ultimate ERP Data Migration Checklist](https://clonepartner.com/blog/blog/the-ultimate-erp-data-migration-checklist-10-point-plan).

## Post-Migration Tasks

- **Rebuild automations.** SYSPRO workflows, report schedules and EDI configurations do not transfer. Rebuild them in Acumatica. SYSPRO operator security does not map to Acumatica's roles, so rebuild access roles from scratch.
- **User training.** Acumatica's browser-based UI works differently from SYSPRO. Budget time for user adoption, particularly for warehouse and shop-floor staff.
- **Monitor data.** Watch for inconsistencies in the first two weeks: missed exchange rates, broken item cross-references and orphaned open orders.
- **Staging data.** ClonePartner purges staging data within 30 days of project close.

## What This Migration Comes Down To

SYSPRO to Acumatica is a solvable problem, but it is not a simple file import. Header/detail tables become nested API entities, plus tables become user-defined fields, and archived history sits outside the live tables. Every migration needs a transformation layer. The failure taxonomy above shows where gaps hide: in archived XML files, in API limits, in UOM mismatches and in load-order violations.

Acumatica's REST API is well documented, but your licence limits its throughput, so large datasets need throttling, retry logic and disciplined session management. Get the extraction right, get the mapping right, validate at the field level, and the migration is a short, bounded project. Get it wrong, and you find the gaps after go-live.

---

ClonePartner handles SYSPRO-to-Acumatica migrations for one fixed price per project, starting at $500 ([clonepartner.com](https://clonepartner.com/pricing)). We extract from the SYSPRO SQL Server database, including plus tables and archived data, transform to Acumatica's entity model, and load through the REST API with retry logic. Every project includes record-count parity checks, field-level validation and reconciliation reports. We are not a reseller or implementation partner for either system. We move the data, and your Acumatica implementation partner configures the system. For how those two workstreams differ, see [ERP Data Migration vs Implementation](https://clonepartner.com/blog/blog/erp-data-migration-vs-implementation-whats-the-difference).

> [!NOTE]
> **Two clocks.** ClonePartner's data migration typically completes within 1–5 business days, depending on data volume, complexity and API rate limits. Your Acumatica implementation, meaning selecting, configuring and rolling out the new ERP, is a separate project measured in months, run by your implementation partner.

> Planning a SYSPRO to Acumatica migration? Book a scoping call and get a fixed-price proposal, with no hourly billing.
>
> [Talk to us](https://clonepartner.com/talk-to-us?duration=30&utm_source=blog&utm_medium=button&utm_campaign=demo_bookings&utm_content=cta_click&utm_term=demo_button_click)

## Frequently asked questions

### How long does a SYSPRO to Acumatica data migration take?

The data migration itself typically completes within 1–5 business days, depending on data volume, complexity, and Acumatica API rate limits. Small datasets under 10,000 records can finish in under 24 hours. This is separate from the Acumatica implementation project, which takes months and is handled by your implementation partner.

### Can I migrate SYSPRO custom form fields (plus tables) to Acumatica?

Yes, but it requires preparation. SYSPRO stores custom form data in plus tables (e.g., [ArCustomer+]). In Acumatica, a user-defined field is an attribute associated with a data entry form, so you define the attribute and add the field to the form before loading data. Through the REST API the field name is Attribute followed by the attribute ID. Not every plus-table field will have a natural home in Acumatica.

### What are Acumatica's API rate limits for data migration?

Each Acumatica licence sets three limits, on the number of API sessions, concurrent API requests and API requests per minute. You can see the values for your licence on the License Monitoring Console (SM604000). A request is declined if more than 20 requests are queued or it waits in the queue for more than 10 minutes, so build retry logic with backoff for large datasets.

### What happens to my SYSPRO data after my licence expires in 2026?

SYSPRO's formal notice confirms you have the right to export your data on cessation of your licence. It does not describe a read-only mode or specify how long the export process stays available. Raise the export with your account manager before your expiry date, which is 31 October 2026 for customers outside the US and 31 December 2026 for US customers.

### How much does a managed SYSPRO to Acumatica migration cost?

ClonePartner prices SYSPRO to Acumatica migrations as one fixed price per project, starting at $500, with no hourly billing or per-record metering. The price scales with data volume, custom fields, attachment size and the platforms involved.
