This is the walkthrough we run new accounts through on their first
call. It maps every screen in the New migration wizard at
app.graftport.com to
what is happening server-side and what you need to decide. If you
prefer reading to clicking, this is the article for you.
Prerequisites
Before you start, you need:
- A Graftport account. Sign up at
app.graftport.com/signup.
Free to set up; the platform fee starts billing the month you
ship your first migration.
- A source store you have access to. One of the live source
platforms (see below).
- A fresh Shopify store to migrate into. Either a new dev store
under your Shopify Partner account, or an existing destination
store you control. Graftport never writes to a store unless you
provide its credentials, by design.
Live source platforms
As of this writing, the New migration wizard supports three live
source platforms:
| Source | Status | Auth |
|---|
| Magento | Live (2.3, 2.4) | Admin user with read permissions |
| Shopify | Live (source) | Admin API access token |
| WooCommerce | Live | REST API consumer key + secret |
| BigCommerce | Coming soon | — |
If your source is not in the list, reach out — we add platforms in
the order our pipeline can model their data cleanly.
Step 1 — Basics
Once you click New migration, the wizard's first step is Basics.
Three areas:
- Migration name. Use the merchant's brand name. This is what
you will see in the migration list and in any internal
references. Examples:
Northwind Home Goods, Acme EU,
Helmer Shop.
- Slug. Auto-derived from the name (
northwind-home-goods).
Used in URLs and internal references. You can override it. The
validator allows lowercase letters, digits, and hyphens.
- Source platform. Click one of the available tiles. The
credential fields below the picker reshape to match the source
schema.
- Source credentials. What gets asked for depends on the
source you picked:
For Magento:
- Magento store URL — your live admin URL
- Admin username — a user with read permissions
- Admin password
For Shopify (source):
- Shop domain —
<store>.myshopify.com
- Admin API access token — from a custom app on the source store
For WooCommerce:
- WordPress site URL — full URL including
https://, no trailing slash
- Consumer key — generate in WooCommerce → Settings → Advanced →
REST API. Read permission is enough.
- Consumer secret
The credential schema is loaded live from the database
(app.platform_credential_schema), so adding a new source platform
is a server-side schema update — no app deploy.
Step 2 — Connect destination
Step 2 collects the Shopify store you are migrating into. Two
fields:
- Shopify shop domain. The
.myshopify.com host. Paste it
exactly: northwind-home-goods.myshopify.com. Graftport will
sync your destination store's locations automatically the moment
the migration is created — that data feeds inventory mapping.
- Destination credentials. A Shopify admin API access token
with the scopes the platform needs (read/write Products,
Customers, Orders, Inventory, Online Store, plus Files for
product images). The exact scope list is shown next to the
field.
A common pattern: create a dedicated custom app in the
destination Shopify store called Graftport Migration. Paste the
Admin API access token into Graftport. The custom app is your
audit log; you can revoke it the moment migration is done.
Step 3 — Choose resources
Step 3 lists the resource types Graftport ships templates for, for
the source platform you picked. You decide which ones to seed.
For Magento, the default seed includes: products, collections,
customers, orders, redirects, blogs, pages. You can deselect any of
them — every deselected resource simply does not get a mapping
seeded, and you can add it back later from the migration's resources
tab.
The templates are versioned. The wizard shows you the current
default template for each resource. Once your migration is created
the templates become mappings under your migration — copies you
can edit without touching the upstream template. Re-running a
migration after the upstream template updates does not retroactively
change your mappings; you decide when to bump.
After the wizard: what gets created
When you click Create migration on Step 3, three things happen
at once:
- A row in
app.migration is created, owned by your tenant,
status = 'draft'.
- For each resource type you selected, a
app.mapping row is
forked from the chosen template version. The mapping is editable
from this moment.
- A background job hits the Shopify destination's locations
endpoint and stores the location mappings on the migration. This
is what enables inventory-by-location to land correctly later.
The wizard redirects you to /migrations/<id> — your migration's
home screen.
The migration home screen
The migration page has three tabs:
- Resources. Each resource you seeded shows up here as a row.
Click a row to open the mapping editor.
- Runs. Empty until you ship your first run. Each run records
what happened, what loaded, what failed, with click-through
detail per record.
- Data. A read-only browser of source vs. destination records
for any run. Useful for spot-checking after a dry-run.
Above the tabs you have the migration name, status, and the
Start a run button.
First dry-run
Before pushing anything to Shopify, do a dry-run on the
extract phase. From the migration home screen:
- Click Start a run.
- In the run modal, choose Mode: Extract only. This pulls
from the source and stops before transforming or loading.
- Toggle Dry-run on. Dry-run keeps the run on the read side
only — no destination writes.
- Click Start. The run page opens with a live progress view.
Once the extract finishes, open the Data tab and pick the run.
You will see the raw records pulled from the source, normalised
into Graftport's intermediate shape. Skim through products and
customers; confirm the field shape matches what you expected. If
something is missing, the issue is on the source side or in the
source-side mapping — fix the mapping and re-run extract.
First load run
When you are happy with the extract:
- Click Start a run again.
- Choose Mode: Full (extract → transform → load).
- Leave Dry-run on for the first try. A dry-run with full
mode does extract, transform, and validates the load shape, but
does not actually push to Shopify. Useful to catch validation
errors before you commit.
- Once dry-run is green, repeat with Dry-run off. This
actually loads to Shopify.
Records are tracked by their source identity, so anything already
loaded is skipped on subsequent runs. Re-running the same migration
on go-live night picks up only what changed since the last run.
Where to go from here
- Edit a mapping. Click any resource in the Resources tab. The
editor is split: source schema on the left, destination Shopify
fields on the right, with the per-field mapping in the middle.
Changes are versioned.
- See costs. The pricing dashboard shows per-run usage against
your monthly included allowance and projects the bill.
- Add a new resource type. Use the Add resource button on
the Resources tab. Pick a resource type, pick a template (or
start blank).
Common questions
Do I need a Shopify Partner account to create a destination
store? Yes for development stores. For production stores, the
destination just needs to be a Shopify store you have admin
access to.
What happens if I run the same migration twice? Records
already loaded are skipped. New records are loaded. Updated
records are re-synced (charged at the cheaper sync rate). Deleted
records are not touched on the destination — Graftport never
deletes destination records you did not ask it to.
Can I migrate one source store into multiple Shopify stores?
Create one Graftport migration per (source, destination) pair.
Your mappings can differ between them — for instance, splitting a
Magento multi-store into separate Shopify stores per region.
My source is not on the list. BigCommerce is in active
development. PrestaShop and Salesforce Commerce Cloud are on the
roadmap. Email us if you have a specific need; we prioritise
based on signal.
One Magento store, want it handled end-to-end? Move to
Shopify is our sister product:
fixed-price service, €129 charged only when you accept the
result. Same pipeline, run for you.
Related reading
Ready to set yours up? Sign up at
app.graftport.com and start
your first migration.