Every step cited to the vendor’s own docs
How to migrate from BigCommerce to Shopify, step by step.
BigCommerce exports cleanly, which makes it easy to underestimate. The two things that decide how this migration goes are a single URL Structure setting and how heavily you use modifiers, both of which can turn a routine move into a rebuild. This is the whole sequence, cited throughout.
13 steps · Plan on 30-60 hours of your own time
13
steps, in the order they have to happen
20
hours of hands-on work for a mid-sized store
9
things that do not come with you
9
URL shapes that need a 301
Phase 01 · 1.5 h
Before you touch anything
- 1 hBigCommerce pricing
Freeze the catalogue and take a baseline
Record counts of products, variants, modifiers, customers, orders, coupons, blog posts, categories and live 301s: these are your reconciliation targets. Note the plan tier, since customer groups and price lists depend on it.
WhereProducts → View · Customers · Orders · Settings → 301 Redirect
The catch
Plan names changed to Core / Growth / Scale / Performance, but support articles still say Plus, Pro and Enterprise. Trust the pricing page over article prose.
- 15 minBigCommerce docs
Record the store’s URL Structure setting
BigCommerce URLs are a store-level setting, not a fixed shape: three presets plus a custom builder. Everything in your redirect map depends on which is active, so screenshot it before changing anything.
WhereSettings → URL Structure
The catch
If the store uses SEO Optimized (Long), products sit at /products/name, and Shopify refuses to create redirects from /products. This one setting decides whether your migration is routine or an SEO emergency.
Phase 02 · 7 h
Get your data out
- 20 minBigCommerce docs
Export the existing 301 map
BigCommerce auto-generates redirects whenever a URL changes, so an established store already holds a large legacy map you must carry forward.
WhereSettings → 301 Redirect → Export All
The catch
Dynamic rows export with an empty destination unless you tick “Export dynamic redirect URLs”. Without it you inherit a map of destinations that do not exist.
- 45 minBigCommerce docs
Export products, checking supported fields first
Export the catalogue as CSV. Check Settings → Export Templates to see whether you have the modern single-file exporter or the legacy template-based one, because the instructions differ.
WhereProducts → Export
The catch
BigCommerce states plainly that fields absent from the supported list (bulk pricing included) cannot be imported or exported at all. Modifiers are likewise absent, so a CSV export silently drops both.
- 5 hBigCommerce docs
Inventory every modifier and decide its fate
Open each product’s Customizations and sort modifiers into three buckets: choice modifiers with price adjusters that should become real variants, free-form inputs that become line-item properties, and product-list modifiers that become bundle or upsell apps. This is the largest manual workstream.
WhereProducts → View → [product] → Customizations · Products → Options
The catch
BigCommerce recommends modifiers as the escape hatch above its variant ceiling, so converting them to Shopify variants often blows the three-option limit long before the variant limit.
- 30 minBigCommerce docs
Export customers and their groups
Export via the bulk-edit template. Customer group is a first-class CSV column and comes out cleanly, which matters for rebuilding pricing later.
WhereCustomers → Export
The catch
BigCommerce can import passwords and Shopify cannot, so this is a one-way door. Build a custom template if you need customer id, date joined or tax-exempt code.
- 30 minBigCommerce docs
Export orders as an archive
Export historical orders as CSV or XML, using a custom template if you need transaction ids or order source. On the Shopify side these land as historical records that do not re-trigger fulfilment.
WhereOrders → Export Orders
The catch
Line-item modifier selections (engraving text, uploaded files) are the most commonly lost field, and they cannot be recovered afterwards.
Phase 03 · 8.5 h
Build in parallel
- 30 minShopify docs
Pick the import route
The real choices are Shopify’s CSV import, Matrixify via the BigCommerce API, or a migration service. The API route carries materially more than CSV: images inside HTML descriptions survive, and options are not silently merged.
WhereShopify admin → Apps
The catch
Shopify’s first-party Store Migration app does not list BigCommerce, and older guides describing a BigCommerce option inside it are out of date. Planning around it will lose you a day.
- 3 hShopify docs
Import products, then customers, then orders
Shopify requires this order so order line items bind to real products and customers. Disable order notifications before the historical order import, and pause any connected fulfilment webhooks too.
WhereProducts → Import · Customers → Import · Settings → Notifications
The catch
A blank cell overwrites the existing value as blank, while an omitted column preserves it. Imports cannot be cancelled once started, and there is no import history.
- 5 hShopify docs
Rebuild pricing as catalogs, not customer groups
Customer groups and price lists have no single Shopify counterpart. Wholesale pricing becomes companies, locations and catalogs; consumer group discounts become segments plus automatic discounts; tax exemption moves to a per-customer flag.
WhereCustomers → Companies · Markets → Catalogs
The catch
Shopify B2B is no longer Plus-only, but below Plus you get three active catalogs and cannot assign one directly to a company location: you route through markets instead.
Phase 04 · 2 h
Keep your rankings
- 2 hShopify docs
Load the redirect map and test against live 404s
Build a two-column CSV from the BigCommerce export plus any handles that changed, bulk-import it, then crawl the old sitemap and confirm each URL 301s before DNS moves.
WhereContent → Menus → URL redirects → Import
The catch
Redirects only fire on URLs that genuinely 404: a redirect whose source still resolves is silently inert, which is the most common “the redirect didn’t work” report.
Phase 05 · 45 min
Cut over
- 45 minShopify docs
Point DNS at Shopify
Set the apex A record and the www CNAME to Shopify’s values at a quiet hour, then verify TLS provisions and the storefront serves before removing the password page.
WhereRegistrar DNS · Shopify → Settings → Domains
The catch
Remove pre-existing A and AAAA records first: only one of each may point at Shopify. Propagation can take up to 48 hours.
Phase 06 · 30 min
After the switch
- 30 minBigCommerce pricing FAQ
Leave BigCommerce running, then cancel deliberately
Keep the old store live and paid for at least one full billing cycle after cutover so you can re-pull anything missed. Then cancel with the contract terms in front of you.
WhereBigCommerce → Account Settings
The catch
Core, Growth and Scale can be cancelled in-panel with billing stopping immediately, but Performance plans are contracted and BigCommerce does not offer refunds, so cancel a contracted plan only at renewal.
What does not come with you
Be wary of any guide that says everything moves. These are the things that do not, and what to do about each one.
Product modifiers
Modifiers change fulfilment without changing the SKU and cannot track inventory. Shopify has no modifier concept, and they are absent from BigCommerce’s exportable fields, so every CSV route drops them.
Instead: Rebuild as line-item properties (needs theme code) or a product-options app. File uploads need a third-party app.
Products with more than three options
BigCommerce caps SKUs per product but not the number of variant options; Shopify allows 2,048 variants but only three options.
Instead: Collapse two options into one concatenated option, or demote the least inventory-relevant one to a line-item property.
Customer passwords
BigCommerce can import passwords and Shopify cannot, so this is genuinely a one-way door.
Instead: Pre-announce it, and time a password-reset campaign to cutover. Note that Shopify B2B requires new customer accounts.
Bulk / tiered pricing on the base catalogue
BigCommerce states bulk pricing cannot be imported, exported or created in the CSV at all, and Shopify’s volume pricing is B2B-catalog only.
Instead: Re-enter through B2B catalogs for wholesale; a tiered-pricing app for direct-to-consumer.
Customer-group category visibility
BigCommerce can hide whole categories from a group, including guests. Shopify gates at product level and only for B2B companies.
Instead: An access-control app, or a dedicated B2B store gated to authenticated customers.
Quotes and RFQ
B2B Edition includes staff quoting with per-quote pricing and a buyer-facing quote history. Shopify has no native quote object.
Instead: Draft orders approximate it, but without versioning, expiry or a buyer-facing quote list. A quoting app is realistically required.
Shopper impersonation
BigCommerce lets staff log in as a customer natively; Shopify has no equivalent.
Instead: Reps create draft orders as themselves, or you install an impersonation app.
Nested company hierarchies
B2B Edition supports nested companies; Shopify’s model is strictly Company → Company Location.
Instead: Model the hierarchy with tags and metafields, and do reporting rollups outside Shopify.
Theme and storefront code
Stencil (Handlebars) and legacy Blueprint themes share nothing with Shopify Liquid.
Instead: A full rebuild. Budget it as new build work, not migration.
Your URLs, mapped.
BigCommerce and Shopify disagree about URL shapes, so every old address needs a 301 to its new home. This is the mapping.
| BigCommerce | Shopify | Note |
|---|---|---|
| /linen-throw | /products/linen-throw | SEO Optimized (Short): the common default, and the cleanest case. |
| /products/linen-throw | /products/linen-throw | SEO Optimized (Long). Shopify refuses redirects FROM /products, so match the handle exactly and no redirect is needed. |
| /bedding/linen-throw | /products/linen-throw | Category-path product URLs. Safe to redirect from. |
| /bedding | /collections/bedding | |
| /categories/bedding | /collections/bedding | /categories is not reserved on Shopify, so this source is safe. |
| /home/bedding/throws | /collections/throws | Shopify collections are flat: nested levels collapse, and handles can collide where two parents share a child name. |
| /brands/acme | /collections/acme | Shopify has no brand object; brands become collections automated on vendor. |
| /cart.php | /cart | Legacy Blueprint theme paths. The .php source is fine to redirect from. |
| /wishlist.php | (no equivalent) | Shopify has no wishlist page, so there is nowhere to send this. |
Your apps, matched.
- Native ratings & reviewsJudge.me / Yotpo
BigCommerce reviews are native and free on every plan; on Shopify you will need an app for storefront reviews.
- Faceted search (Scale plan)Shopify Search & Discovery
Native filters are free but cap at 25 per store and stop working on collections over 5,000 products.
- Rebillia / subscription appsShopify Subscriptions
An improvement (BigCommerce has no native subscriptions), but Shopify subscriptions do not work alongside B2B.
- ShipperHQShipperHQ for Shopify
Live carrier rates need third-party carrier-calculated shipping: Advanced and Plus only, extra fee on Grow, unavailable on Basic.
- Yotpo LoyaltySmile.io / LoyaltyLion
Point balances are the problem, not the program: assume manual reconciliation of existing points.
- Klaviyo / OmnisendSame tool, Shopify app
Lowest-risk item on the list; flows referencing customer groups or modifier values need rewriting.
- Shogun / Page BuilderShogun, PageFly or theme sections
Vendor carryover, but pages do not transfer between the BigCommerce and Shopify versions, so rebuild.
- B2B EditionShopify B2B (native)
Most of it maps and gets cheaper, but quoting and shopper impersonation do not exist on Shopify.
- Native wishlistPaid app or custom build
Free and native on every BigCommerce plan; Shopify has no native wishlist at all.
- Rewind BackupsRewind for Shopify
Shopify has no native store backup: worth reinstating on day one.
What goes wrong.
What catches people on a BigCommerce move, why each one happens, and how to get ahead of it.
Every product URL 404s and no redirect can be created
Why: The store used SEO Optimized (Long), so products live at /products/name, a path Shopify blocks as a redirect source.
Avoid it: Check Settings → URL Structure first. If it is Long, force Shopify handles to match the old slugs exactly so no redirect is needed.
Customers get confirmation emails for years-old orders
Why: Importing historical orders fires Shopify’s new-order notification once per order.
Avoid it: Disable order notifications and pause connected fulfilment or ERP webhooks before the import, then re-enable.
A re-run import wipes descriptions and tags across the catalogue
Why: With overwrite enabled, a blank cell overwrites the existing value; only an omitted column preserves it.
Avoid it: Never re-import a trimmed CSV with empty cells. Delete the whole column instead. Imports cannot be cancelled once started.
Engraving text, gift messages and uploads vanish
Why: Modifiers have no Shopify counterpart and are absent from BigCommerce’s exportable fields, so every CSV route drops them.
Avoid it: Inventory modifiers by hand before exporting and rebuild them deliberately; accept that historical orders lose the selections.
Variant counts do not reconcile and products arrive split
Why: CSV import routes split products above the variant ceiling and merge extra options into the third.
Avoid it: Use an API-based route with a dry run, and pre-collapse any product with more than three variant options by hand.
Wholesale customers see retail prices on day one
Why: Customer groups and price lists have no single Shopify equivalent, and bulk pricing is not exportable.
Avoid it: Rebuild pricing as B2B companies, locations and catalogs before cutover and test with a real wholesale login.
Live carrier rates disappear at checkout
Why: Third-party carrier-calculated shipping is Advanced and Plus only, and unavailable on Basic, while BigCommerce offers real-time rates much lower down its tiers.
Avoid it: Confirm the target Shopify plan supports carrier-calculated shipping before quoting; it can change the plan decision entirely.
The redirect CSV imports with blank destinations
Why: BigCommerce dynamic redirects export with an empty destination column unless the dynamic-URL option is ticked.
Avoid it: Always re-export with “Export dynamic redirect URLs” enabled, and remember Shopify redirects only fire on genuine 404s.
Or hand the whole list to someone who has done it.
Send your store URL and you get back a fixed price and a plan for your store specifically: SKU count, which apps have Shopify equivalents, the redirect plan, and the risks we can see.
Get my free migration plan