Clear Cutover Get a quote

Data migration

SyteLine data migration: extract, cleanse, map and validate before every load

Applies to: Projects migrating data into SyteLine from another system, or out of SyteLine to a new ERP. SQL examples assume on-premises SQL Server access

Short answer

Treat data migration as a repeatable process, not a one-time export. Extract from a read-only copy, cleanse at the source where you can, map every field in a workbook that the business signs off, validate each load file with scripted checks before it goes anywhere near the target, and reconcile counts and values after every load. Run it as several rehearsal cycles, each cleaner than the last, so the final cutover load is the fourth or fifth time the process has run, not the first.

Decide what to move

Not everything should migrate. Agree this early with the business:

Data Usually migrated Notes
Items, BOMs, routings Yes The foundation. Most cleansing effort goes here
Customers, ship-tos, vendors Yes, active ones Inactive records stay in an archive
Open customer orders and POs Yes Only open lines and quantities
On-hand inventory Yes, at cutover Loaded last, from a count or a frozen snapshot
Open AR and AP Yes, as open items Balances must tie to the GL
GL balances Opening balances, often by period Agree the level of detail with finance
Transaction history Usually not Keep the old system or a reporting archive for lookups

Moving years of history is expensive and rarely used. A read-only archive is usually the better answer.

Step 1: Extract from a copy

Extract from a restored copy of production, never the live database, using read-only SQL. In SyteLine, read the _mst tables and filter on site_ref. See the SQL table cheat sheet. Keep the extract scripts under version control, because you'll run them every cycle.

Step 2: Cleanse at the source

Fix data in the source system where possible, so it stays fixed for the next extract. The checks that matter most:

  • Items: obsolete items with no stock, no demand and no use in BOMs, duplicate descriptions, missing unit of measure, product code or cost.
  • BOMs: components that are obsolete or missing, circular references, quantities of zero.
  • Customers and vendors: duplicates under slightly different names, missing addresses, tax and payment terms, inactive records with open balances.
  • Open orders: lines open for years, orders for customers or items that won't migrate.
  • Units of measure: conversions that don't exist in the target.

A read-only exception report for each check, with an owner per record, keeps the cleanup moving. The data health check covers the same ground.

Step 3: Map every field

Build one mapping workbook, one sheet per object:

Source table.column Target field Rule Default Owner
item_mst.item Item number Trim, uppercase — Engineering
item_mst.u_m Unit of measure Map via UoM table EA Engineering
customer_mst.terms_code Payment terms Map via terms table NET30 Finance

Every transformation is written down, every default is agreed, and every sheet has a business owner who signs it off. This workbook becomes the specification for the load files and the evidence for auditors.

Step 4: Validate every load file before loading

This is the step that saves cutover weekends. Run scripted checks on each load file before it's loaded, and fix the source or the mapping, not the file by hand:

  • Required fields are present and not blank.
  • Keys are unique within the file.
  • References exist: every BOM component exists in the item file, every order's customer exists in the customer file, every ship-to's customer exists.
  • Values are valid in the target: units of measure, warehouses, sites, terms codes, tax codes.
  • Lengths and types fit: text not longer than the target field, numbers and dates parse.
  • No hidden characters: leading and trailing spaces, tabs and non-printing characters.
  • Load order works: parents before children (customers before ship-tos and orders, items before BOMs and order lines).

Write each check as SQL or a script that outputs a list of failures with file, row and reason. Hand that list to the record owner. Repeat until it's empty.

Step 5: Reconcile after every load

Check How
Record counts Source extract vs loaded, per object and site
Totals Open order value, on-hand quantity and value, AR and AP open balances
Samples A handful of records checked field by field, including awkward ones
Financial tie-out Subledgers tie to the GL opening balances

Finance signs off the financial reconciliation, and operations signs off items, BOMs and open orders.

Load through SyteLine, not around it

However the data is loaded, it should go through SyteLine's own import tools, IDOs or the IDO REST API, so validations and business logic run, never straight into the _mst tables with SQL. For single-field corrections after a load, such as a product code on a few hundred items, use the form's Replace Value in Collection rather than an UPDATE. See Connecting external systems with the IDO REST API and Mass update records in SyteLine without SQL.

Step 6: Rehearse, then cut over

Run the whole process, extract to reconciliation, as rehearsal cycles in a test environment. Time each step. By the final cycle the checks should pass first time and the timing should fit the cutover window. Then follow the go-live and cutover checklist.

From experience

On a SyteLine-to-M3 migration I worked on, the data workstream extracted, cleansed, mapped and validated items, BOMs, customers, suppliers, warehouses and orders, with SQL validation scripts run before each load cycle. The business went live with manufacturing and order fulfilment uninterrupted.

FAQ

What data should be migrated from SyteLine?

Usually master data (items, BOMs, routings, active customers and vendors), open orders, open AR and AP, inventory at cutover and GL opening balances. Most transaction history stays in an archive.

How do you validate data before loading it into an ERP?

Run scripted checks on each load file for required fields, unique keys, valid references and values, field lengths and hidden characters, and fix the source until the checks pass.

How many migration rehearsals do you need?

Usually three to five full cycles, so the final load is a repeat of a process that has already worked.

Should we clean data before or after migration?

Before, and at the source where possible, so the fix survives every extract.

Systems I work on