Migration
A migration is the top-level workspace — one per merchant move. It holds:
- A source platform + credentials (Magento or Shopify-as-source).
- A destination (always Shopify) + an Admin API token.
- A set of enabled resources (products, customers, …) and the mapping pinned to each.
- The full run history for this merchant.
Lifecycle
A migration moves through three statuses:
| Status | Meaning |
|---|---|
Draft | Just created. Free to edit credentials, resources, mappings. Safe scratch space. |
Active | In production. Runs are billable. Credential and resource changes are still allowed. |
Archived | Migration is done or abandoned. Read-only. New runs are blocked but existing data and history remain inspectable. |
Promote Draft → Active from the migration’s Status controls once
you’ve validated an extract and a dry-run transform.
Editing vs versioning
You can change the merchant’s display name, swap credentials when they rotate, or enable a new resource without rebuilding history. But every run is a frozen record of what happened: once a run shows that it transformed row X with mapping version V, that pairing never changes.
This is intentional. It means you can answer “what did we send to Shopify on March 14?” by reading the run’s history, not by replaying logic in your head.
Slug and URL
Each migration has a slug derived from its name on creation. The slug
appears in the URL (/migrations/<slug>) and in shareable links. Slug
edits are allowed but break previously shared links — change with
care.