Shopify destination
Shopify is the only destination Graftport writes to today. The destination is configured per migration in step 2 of the wizard.
What you need
A custom app installed on the destination Shopify store, with an
Admin API access token (shpat_…).
To create one in Shopify admin:
- Open Settings → Apps and sales channels → Develop apps.
- Create an app, name it
Graftport Migration. - Configure Admin API scopes (table below).
- Install the app on the store.
- Copy the Admin API access token. This is the value you paste into Graftport.
The token is shown once at install time. If you lose it, you must uninstall and reinstall the app to get a new one. Save it in the merchant’s password manager before closing the tab.
Required scopes
The token needs read + write for every enabled resource. Don’t grant more than the migration uses — narrow scopes are easier to audit and the merchant feels better about it.
Always required
read_locations — Graftport queries the store’s locations on every
migration so inventory can be assigned to the right location GID. The
Resync locations button (and the automatic sync that runs when
credentials change) both call this endpoint. Without it, the load run
fails the moment it touches inventory.
Per resource
| Resource | Scopes |
|---|---|
| Product | write_products, write_inventory |
| Collection | write_products (collections live under products scope) |
| Customer | write_customers |
| Order | write_orders, plus write_assigned_fulfillment_orders if shipments are migrated |
| Discount code | write_discounts, write_price_rules |
| Gift card | write_gift_cards |
| Blog | write_content |
| Market | write_markets |
| Redirect | write_online_store_pages |
Locations
Graftport needs to know the destination store’s location GIDs before inventory can be loaded. The sync runs automatically when credentials are saved, and you can re-run it at any time from the Resync locations button under destination settings on the migration page.
Both paths call the Shopify Admin API locations query, so the
token must include read_locations (see Required scopes
above). If the resync errors out with a 401/403, missing scope is
almost always the cause.
The default mapping assigns all inventory to the first active location. To split inventory across locations, fork the products mapping and emit per-location quantities.
Before migrating orders
Shopify sends a staff order notification email every time the store receives an order — including orders Graftport loads. Migrating historical orders can mean hundreds or thousands of these emails landing in your team’s inboxes within minutes.
Turn the notifications off for the duration of the order migration:
- In Shopify admin, open Settings → Notifications.
- Under Staff notifications, note the current recipients, then remove them (or remove the New order notification).
- Run the order load.
- Once the run finishes, re-add the recipients / notification so the merchant keeps getting alerts for real orders.
Do this before the first load run that includes orders. Once the emails have been sent there’s no way to recall them. The run modal also reminds you whenever a load run includes the order resource.
Idempotency
Once a record is loaded, Graftport remembers its Shopify identity. The next load that targets the same record either:
- Updates in place if the payload changed, or
- Skips if the payload is unchanged.
This is what makes re-running a load on the same migration safe — Graftport won’t duplicate records.
Conflict strategy
When a record already exists on Shopify and the new payload differs, the conflict strategy decides what happens. See Runs → Conflict strategy.