Skip to Content
DestinationShopify

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:

  1. Open Settings → Apps and sales channels → Develop apps.
  2. Create an app, name it Graftport Migration.
  3. Configure Admin API scopes (table below).
  4. Install the app on the store.
  5. 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

ResourceScopes
Productwrite_products, write_inventory
Collectionwrite_products (collections live under products scope)
Customerwrite_customers
Orderwrite_orders, plus write_assigned_fulfillment_orders if shipments are migrated
Discount codewrite_discounts, write_price_rules
Gift cardwrite_gift_cards
Blogwrite_content
Marketwrite_markets
Redirectwrite_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:

  1. In Shopify admin, open Settings → Notifications.
  2. Under Staff notifications, note the current recipients, then remove them (or remove the New order notification).
  3. Run the order load.
  4. 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.

Last updated on