Of every data type a WooCommerce store holds, customers and orders are
the ones merchants worry about most. Products can be re-imported from a
spreadsheet if something goes wrong; customer purchase history and order
records cannot be reconstructed. This guide covers exactly how Graftport
reads WooCommerce customer and order data, what the WooCommerce REST API
exposes and what it withholds, and how to verify the results on a staging
store before go-live.
What Graftport reads from WooCommerce
Graftport connects to WooCommerce via the WooCommerce REST API — no
plugin installs, no FTP access, no WordPress admin login. Everything goes
through a read-only consumer key you generate in
WooCommerce → Settings → Advanced → REST API.
For customers and orders specifically, the REST API exposes:
| Data type | What Graftport reads |
|---|
| Customer accounts | Profile (name, email), billing address, shipping address, customer notes, account creation date |
| Order history | All orders — line items, quantities, prices, tax lines, shipping lines, payment method, fulfillment status |
| Coupons applied | Coupon codes associated with each order |
| Refunds | Full or partial refund records on an order |
What the WooCommerce REST API does not expose: newsletter
subscription status. If your WooCommerce store uses a dedicated email
marketing plugin (Mailchimp for WooCommerce, Klaviyo, Mailjet), that
consent data lives in the plugin's own storage — outside the WooCommerce
REST API. Graftport creates migrated customer accounts in Shopify with
email marketing consent set to off by default. If you have a
customer list with consent status from your email platform, the right
place to re-apply that is inside the email marketing platform, not via
a Graftport mapping override.
Which customers migrate
WooCommerce stores every customer as a WordPress user with the
customer role. Graftport migrates accounts with that role only.
WordPress users with other roles — editors, authors, administrators,
contributors — are not migrated. This is the expected behaviour: those
are WordPress site roles, not e-commerce customers, and they have no
equivalent in Shopify.
If a customer also has an admin or editor role on the WordPress site (a
common setup for store owners who gave a customer an elevated role by
mistake), they will be skipped by Graftport's filter. Flag any such
accounts before migration and either demote them to the customer role
on WooCommerce, or create them manually on the destination Shopify store.
Setting up the credentials
Create a dedicated REST API key for Graftport in
WooCommerce → Settings → Advanced → REST API:
- Click Add key.
- Set Description to something like
Graftport migration — read access.
- Set User to any admin-role user on the WordPress site.
- Set Permissions to Read.
- Click Generate API key.
- Copy the Consumer key and Consumer secret immediately — they
are shown only once.
Paste both values into Graftport's credential form alongside your
WordPress site URL (https://example.com, no trailing slash).
The order migration in practice
Orders are the most faithful record of what actually happened in a store.
Graftport reads every order — open, completed, refunded, cancelled — and
writes it to Shopify with the same structure:
- Line items with SKU, quantity, and per-item price.
- Tax lines preserving the tax description and amount.
- Shipping lines with the shipping method name and charge.
- Order totals matching the WooCommerce record.
- Fulfillment status mapped to Shopify's equivalent
(fulfilled, unfulfilled, partially fulfilled).
- Payment method stored as a note — Shopify does not replicate
external payment provider transactions, but the record of which
method was used lands on the order.
Refunds are migrated as refund records on the Shopify order. Coupon
codes that were applied to an order are stored on the line item or
order notes, depending on the coupon type — Graftport stores them rather
than trying to recreate the discount logic on the destination, because
the destination's discount engine is separate from historical order data.
Gift card balances
If your WooCommerce store uses a WooCommerce gift card plugin (the most
common being WooCommerce Gift Cards by WooThemes or a compatible
alternative), Graftport reads outstanding gift card balances via the
REST API and migrates them as Shopify gift cards. The Shopify gift card
is created with the same code and remaining balance.
Which plugins are supported depends on whether the plugin exposes its
gift card data through the WooCommerce REST API extension points.
Contact us before migration if your store uses a bespoke gift card setup;
we can check compatibility before you invest time in the migration setup.
Verifying customer and order data on staging
Run the WooCommerce migration against a staging Shopify store — a
development store under your Shopify Partner account works well — and
run these checks before touching production:
Customer count. Compare the total customer count on the WooCommerce
store (in WooCommerce → Customers) with the count on the staging
Shopify store (Shopify Admin → Customers). A mismatch by a small
number usually means a handful of WooCommerce accounts had corrupted
data (missing email address, duplicate email). Open the run item in
Graftport and read the per-row errors to find them.
Order count. Compare the order count in WooCommerce with the count
on the staging Shopify store. Cancelled orders are included. The counts
may differ by a small number if WooCommerce has test or spam orders that
don't have a real customer attached — Graftport skips orders with no
customer record.
Spot-check individual orders. Pick five orders at random — ideally
including one refunded order and one with a coupon applied — and open
them on both WooCommerce and the staging Shopify store. Confirm line
items, totals, and shipping lines match.
Check customer address books. Open three or four customer profiles
on the staging Shopify store and confirm billing and shipping addresses
landed correctly, including country codes. WooCommerce stores countries
as two-letter codes; Shopify expects the same format, so this usually
passes cleanly, but verify.
Check email marketing consent. Confirm that migrated customers show
email marketing consent as not subscribed. This is expected —
re-subscription is handled via your email marketing platform's
re-engagement flow after launch.
Password resets after migration
WooCommerce customer passwords cannot be migrated to Shopify — Shopify's
authentication system stores hashed passwords in its own format, and
there is no portable exchange. Every customer who migrates needs to
complete a password reset on the Shopify store.
The practical approach most merchants use: send a launch email to the
migrated customer list announcing the new store and prompting a password
reset. Shopify's New account email template, triggered when a
customer account is created, can be customised to read as a "welcome to
our new store" message. Send it to the migrated segment on launch day.
Syncing orders placed between rehearsal and launch
Graftport's idempotency model means you can re-run the migration on
go-live night to pick up orders placed since the staging rehearsal. Any
customer account already loaded on the destination is skipped (no
duplicate); any new order since the last extract is first-loaded.
The standard sequence: run an extract the morning of go-live, run a full
load in the hours before DNS flip, flip DNS, and run one final extract +
load after DNS flip to capture any orders placed during the DNS
propagation window. Each re-run charges only for the records that are
genuinely new — the rest are skipped at zero cost.
Coupons and discount codes
WooCommerce coupons migrate as Shopify discount codes where the coupon
logic is compatible. WooCommerce's coupon model is close to Shopify's
discount code model for percentage and fixed-amount discounts.
More complex WooCommerce coupon rules — cart conditions, user
restrictions, product exclusions — may not have a direct Shopify
equivalent. Where a coupon cannot be faithfully recreated, Graftport
flags it in the run output and stores the coupon details on the order as
a note so nothing is lost.
Related reading
Ready to migrate? Sign up at
app.graftport.com and connect your
WooCommerce store — the wizard guides you through credential setup and
you can run a dry-run extract to see your customer and order counts
before writing a single record to Shopify.