Docs/Migration guides
◆ Migration guides

Ingesting from legacy systems.

We've moved dealerships off DockMaster, IDS Astra, Lightspeed EVO, custom WordPress stacks, and a surprising number of Access databases. These guides are the mappings, the API calls, and the playbook — the boring, necessary parts that keep a migration from corrupting your history.

  • Four fully-mapped systems · more on request
  • Parallel run + checksum validation · no cutover surprises
  • Preserves legacy IDs for downstream integrations
  • Rollback tested before every production cutover
Book a migration call Migration API reference
Source systems

Four systems, fully mapped.

Each card shows the eight most load-bearing field mappings. Full guides carry every field, every transformer, and every edge case we've hit.

DockMaster → BoaterOS

Sybase IQ export + nightly delta sync

Open guide →
SourceBoaterOS
Customer.Phone Contact.phone_numbers[0]
Customer.Email Contact.email
Customer.Address1 Contact.address.line1
Inventory.HIN Hull.hin
Inventory.Make Hull.make
Inventory.Year Hull.year
Deal.SalesPrice Deal.price_usd
Deal.CloseDate Deal.funded_at

IDS Astra → BoaterOS

SQL Server views + ODBC bridge

Open guide →
SourceBoaterOS
CustTable.LastName Contact.last_name
CustTable.CellPhone Contact.phone_numbers[0]
UnitTable.SerialNo Hull.hin
UnitTable.MSRP Hull.price_usd
DealHdr.StockNo Hull.stock_number
DealHdr.Status Deal.status
RO.Complaint ServiceOrder.complaint
Invoice.Total Payment.amount_usd

Lightspeed EVO → BoaterOS

Lightspeed REST API bridge + replay

Open guide →
SourceBoaterOS
customer.primary_phone Contact.phone_numbers[0]
customer.email_address Contact.email
inventory.serial Hull.hin
inventory.model_year Hull.year
work_order.hours_billed ServiceOrder.labor_hours
work_order.parts_total ServiceOrder.parts_total_usd
transaction.payment_method Payment.method
transaction.amount Payment.amount_usd

WordPress + CSV → BoaterOS

Gravity Forms + Contact Form 7 + CSV drop

Open guide →
SourceBoaterOS
gf_entry_meta[phone] Contact.phone_numbers[0]
wpcf7_contact[email] Contact.email
csv:hin_number Hull.hin
csv:year_built Hull.year
csv:asking_price Hull.price_usd
csv:photo_urls[] Hull.photos
csv:lead_source Lead.source
csv:form_timestamp Lead.created_at
Migration principles

Five rules, every time.

These are non-negotiable. Every migration we've done that violated one of these ended up in a painful reconciliation six months later.

01

Parallel run for 30+ days

Write to both systems while reconciling nightly. Legacy stays the source of truth until checksums match.

02

Preserve legacy IDs

Every imported record gets a metadata.legacy_id. Your downstream integrations keep working without rewrites.

03

Checksum validation

Row counts, sum-of-price, sum-of-amounts, and hash-of-concatenated-HINs per batch. Mismatch = abort and alert.

04

Tested rollback plan

Every migration is replayable and reversible. Production cutover includes a 24h snapshot for emergency revert.

05

Audit trail for 13 months

Every migrated row keeps its transform log: source field, target field, transformer, validator, timestamp.

Migration API

Three endpoints. That's the API.

You don't need much. A start call, a status poll, a cancel hatch. Everything else is the mapping and validation you'd be doing anyway.

POST
/v1/migrations

Start a migration. Body carries source, target, mapping, and validation rules. Returns a migration_id.

GET
/v1/migrations/:id

Poll status. Returns progress, records processed, errors, and checksum results per batch.

DELETE
/v1/migrations/:id

Cancel in-flight. Rolls back partial writes if the migration hasn't crossed its commit point.

Scheduling

Office hours, pre-call, playbook week.

The API is the easy part. The scheduling and the communication are what make a migration go calmly.

Office hours

Tuesdays 1–3pm ET. Drop in with schema questions or dry-run results. No appointment needed.

Pre-migration call

90 minutes, two weeks out. Walk through mappings, validators, rollback. Nothing surprises us on the day.

Migration week

Shared Slack channel. Daily 15-min standup. Engineer on call through cutover. Runbook in hand.