Sample client report

Every record accounted for, to the cent.

A migration is finished when every product, customer and order is proven to have arrived, not when the import stops running. Every migration we deliver ends with a final report like this one: a reconciliation ledger for each phase, what we cleaned up, what was preserved, how it was verified, and the decisions only you can make. It is based on a real engagement; every figure is as delivered.

The certificate, in full

The certificate is the summary. This is the proof.

The Certificate of Migration Audit on our site condenses this report into six numbers. The report is what stands behind them: for every phase, the rows that came out of the old platform, each one that was merged, repaired or excluded and why, and the live count in Shopify at the end. A migration tool reports a completion percentage. This is written so an owner can read it and a developer can check it. This one comes from a BigCommerce to Shopify migration for a home-decor retailer with sixteen years of trading history.

Reconciliation ledgers

For every phase: source rows in, each exclusion itemized with its reason, live records out. Nothing is left unexplained.

Products and pricing

Every product, option and image checked against the source, with option prices verified against the live storefront rather than the export.

Customers and consent

Accounts, addresses and marketing opt-in carried over exactly, duplicates merged, and records that could not be imported listed rather than dropped.

Order history

Original order numbers and dates, payments, refunds, store credit and split shipments, with every order total reconciled against the source.

301 redirects

Every address the old store published, mapped and tested: products, collections, blog posts, content pages and platform system URLs, with the full map delivered as a spreadsheet.

Decisions for the owner

What only the business can settle, such as tax-exempt accounts or store-credit balances, set out as clear choices instead of assumed.

The headline numbers

What moved, and what proves it.

Download the PDF
745products, built into 2,505 variants
5,720customer accounts, every one of 5,728 source rows explained
6,277orders, totals reconciled to the cent
1,455permanent 301 redirects, tested live
ruby digital
Sample report · based on a real engagement
BigCommerce → Shopify · final report
BigCommerce → Shopify migration · Final report

Data Migration — Final Report

Sixteen years of catalog, customers and order history have been migrated from BigCommerce to Shopify, verified record-for-record against the source data, and every old web address redirected to its new home. This report accounts for everything that moved.

Sample report. Based on a real migration delivered to a US home-décor retailer trading since 2010, with a 745-product catalog and 6,277 orders of history; every figure is as delivered.

At a glance

745products migrated — the entire catalog
2,505color, size & option variants built
5,720customer accounts, consent preserved
6,277orders imported, spanning 2010–2026
1,455permanent 301 redirects live
1,681product images transferred
PhaseScopeStatus
1 · Products745 products, 2,505 variants, 54 collections, 1,681 imagesComplete & verified
2 · Customers5,720 accounts, 3,634 addresses, marketing consentComplete & verified
3 · Orders6,277 orders, payments, refunds, 1,541 tracking numbersComplete & verified
4 · Catalog restructure745 listings consolidated to 192 shopper-facing productsComplete & verified
5 · Redirects1,455 old web addresses mapped to their new pagesComplete & verified

1 · Products

The complete catalog was migrated and checked item-for-item against BigCommerce. Products hidden on the old store arrived as drafts — nothing hidden went live, and nothing live went missing.

713 active & visible
713 active — live on the storefront32 draft — hidden, exactly as in BigCommerce

Catalog status in Shopify, mirroring the source store exactly.

How 745 products became 2,505 variants

StepCount
Products with a single version (no options)325
Products with options (color, size, insert, …)420
Option combinations those produce2,508
Combinations discontinued in BigCommerce — excluded−3
Purchasable variants live in Shopify2,505
  • Option pricing preserved. Per-color and per-size price adjustments are baked into each variant’s price — shoppers pay exactly what they did before. 144 products on sale kept their sale price with the original shown struck through.
  • Largest product intact: a sampler product carrying all 729 type-and-color combinations imported without loss.
  • 55 products with custom fields (measurements, personalization) had those fields carried across as structured data, ready to be shown on the new product pages.
  • Store structure rebuilt: all 54 BigCommerce categories — three levels deep — exist as Shopify collections with 1,267 product placements, matching the old category assignments one-for-one.
  • 1,681 images transferred: 1,388 gallery photos plus 293 color-swatch photos attached to the matching color variant, so picking a color changes the photo.

2 · Customers

5,720customer accounts live in Shopify
4,641opted-in email subscribers, consent preserved
3,634saved addresses, duplicates removed
4,935phone numbers in checkout-ready format

Email marketing consent. 81.1% of customers had said yes to marketing email on BigCommerce. Their opt-in carried over exactly — nobody was subscribed who didn’t ask to be, and nobody who opted in was lost.

4,641 subscribed
1,079 not
Subscribed — will receive marketing emailNot subscribed — transactional email only

Where every record went

The export contained 5,728 rows. This is the full reconciliation down to the 5,720 live accounts — nothing is unaccounted for.

StepChangeRunning total
Rows in the BigCommerce customer export5,728
BigCommerce’s built-in demo account removed (not a real customer)−15,727
Duplicate rows merged (4 customers appeared twice; profiles and addresses combined)−45,723
Same-person email variants merged (one account existed with and without a stray space)−15,722
Invalid email addresses — cannot be imported−25,720
Customer accounts live in Shopify5,720

Data cleaned up along the way

Fifteen years of store history accumulates noise. Rather than copy problems into the new store, we repaired what was safely fixable and filtered out what wasn’t.

Phone numbersCount
Valid numbers migrated4,935
Shared / duplicate numbers392
Incomplete fragments178
Failed Shopify validation22

Shopify requires each phone number to belong to only one customer. Notably, 217 accounts shared a single placeholder number — a telltale sign of bot signups, common on older stores. Excluded numbers are logged and recoverable if ever needed.

  • Addresses de-duplicated — 3,763 entries reduced to 3,634 unique ones (129 exact repeats removed, so no customer sees the same address twice at checkout).
  • 3 accounts repaired and recovered — two email addresses with typos and one profile with spam text injected into the name, all fixed and imported.
  • International addresses normalized — 39 countries represented, including military APO addresses and US territories, all mapped to Shopify’s format so tax and shipping calculate correctly.
  • History preserved — every profile carries its original BigCommerce customer ID and join date (the earliest customers date to March 2010), which is what lets order history link to the right customer and makes “customer since” segments possible.

3 · Order history

6,277orders imported, 2010–2026
6,277order totals reconciled against the source
1,541tracking numbers carried over intact
0customer emails sent — imports are silent

Every order kept its original number, its original date, its payment and refund state, and its link to the customer who placed it. Past invoices and customer conversations still make sense.

What was importedCount
Orders paid6,197
Orders with a fulfillment record5,875
Refunds reproduced (full and partial)270
Canceled orders329
Declined / voided payments59
Orders left awaiting payment (accurate — payment never completed)21
Guest checkouts (no account)760
Orders carrying a discount or coupon317
Orders imported6,277
  • Totals reconcile. 6,270 orders match BigCommerce to the cent. The remaining 7 differ only by the store credit applied at the time, which BigCommerce nets out of its own total — those are recorded in Shopify as a second payment, so the order reads correctly and nothing is left showing an unpaid balance.
  • Line items: 4,049 order lines matched to live products and variants. A further 4,021 lines are for products deleted from the catalog over sixteen years — those are preserved on the order by name, SKU and price-at-time-of-sale, so the order history stays complete and accurate.
  • Discounts recovered. BigCommerce does not export order discounts at all. We derived the exact discount on each order arithmetically (line totals + shipping + tax against the recorded order total, net of store credit and gift certificates) and applied it — 317 orders, all reconciling to the cent.
  • Tracking preserved per parcel. Split shipments were imported as separate fulfillments, so an order that shipped in three boxes shows all three tracking numbers, exactly as the carrier recorded them.
  • Silent by design. No confirmation emails, no shipping notifications, and no impact on live inventory. One order in sixteen years was marked “partially shipped” with no surviving record of which items shipped; it was imported as paid-but-unfulfilled rather than guessed at.

Verified scenario by scenario before the full run

Before importing 6,277 orders, we imported a deliberately difficult sample — one of every order type in the store’s history — and audited each against the source.

Scenario testedYearResult
The store’s very first order2010Paid, fulfilled, tracked
Most recent shipped order2026Paid, fulfilled, tracked
Multi-item order with tracking2020Paid, fulfilled, tracked
Order with product options2011Paid, fulfilled, tracked
Guest checkout (no account)2020Paid, fulfilled, tracked
Early-era order (before tracking records)2010Paid, fulfilled
Fully refunded order2010Shows refunded
Partially refunded order2017Shows partially refunded
Canceled order2010Shows canceled
Declined payment2014Shows voided
Open order awaiting fulfillment2010Paid, awaiting fulfillment
Order paid partly with store credit2012Both payments recorded
Order with a coupon code2010Total correct, coupon noted
Order with sales tax2015Tax itemized, total exact
Order for a since-deleted product2010Item preserved by name & price
Largest order (7+ products)2010Every line item correct

4 · Catalog restructure

With the migration verified, the catalog was restructured so that shoppers browse products rather than colors. 605 separate color listings became variants of 52 combined products, each with a color picker. The old listings are archived — hidden from shoppers, order history fully preserved, and every one redirected.

745 → 192products shoppers now browse
52combined products carrying 1,133 variants
411prices corrected during verification
0price or option mismatches on final check
What happened to the 745 listingsCount
Color listings combined into 52 products (photo, price, SKU and stock kept per color)605
Already set up with color variants — untouched25
One-of-a-kind products — no change97
Kept as-is by design (made-to-measure items and the sampler)18
A pricing problem found — and fixed. BigCommerce hides some option pricing from every export and every data feed it offers; those rules are only applied on the live store itself. A listing would export as “$55 with or without the upgrade” while the live store correctly charged $70. We therefore priced every variant directly from the live storefront, the way a shopper’s browser sees it — correcting 409 option prices and catching 2 listings whose base price in the export didn’t match what the store actually charged. All 1,133 variants were then re-checked: zero mismatches.

5 · 301 redirects

Every web address the old store ever published now lands on the right page in Shopify — BigCommerce-era paths, Shopify-era product handles, category pages, blog posts and the platform’s own system URLs. Search rankings and any link anyone has ever shared are protected.

Redirect typeCount
Product pages1,351
  — of which land with the right color pre-selected1,176
Collection / category pages59
Blog and journal posts28
Content pages (about, contact, policies)10
Legacy platform system URLs (cart, login, account, search)7
Permanent redirects live1,455
  • Old links keep working, with the color already chosen. A shopper or a search result following an old color-specific link lands on the combined product with that color selected and its photo showing — not on a generic page they have to navigate again.
  • Second-level category paths included. Migration tools routinely redirect child categories under a flat address that the old store never actually served, which leaves those pages 404ing while the totals still appear to balance. Each redirect here was built from the address the old store genuinely published, then tested against the live domain.
  • Tested, not just created. Redirects were confirmed in Shopify and spot-checked in a real browser: old links land on the new page, with the right color and photo.
  • Delivered as a spreadsheet too — the full old-address to new-address map is handed over as a CSV for the client’s own records and for their SEO team.

What was preserved

Order numbersOrder #14 on BigCommerce is order #14 in Shopify. Invoices and past conversations still match.
Order datesOrders show their true 2010–2026 dates, not the date of the import.
Web addressesProducts kept their original address slugs; page titles and meta descriptions moved with them.
Source IDsEvery product, customer and order carries its original BigCommerce ID as structured data — the thread that ties the three phases together and makes later reconciliation possible.
Customer consentMarketing opt-in state migrated exactly, with the opt-in method recorded. No one was subscribed who hadn’t asked.
Product historyOriginal creation and modification dates carried over, so “new arrivals” logic and catalog reporting work from day one.

How this was verified

  • A full offline dry run before the live import. Every order was built exactly as the importer would build it, without writing anything, and validated: totals reconciliation, variant matching, shipment matching, country mapping, email validity, date parsing, status coverage. Issues were fixed and the dry run re-run until only source-data facts remained.
  • A signed-off sample before scale. Twenty deliberately awkward records per phase — refunded, canceled, guest, multi-parcel, foreign currency, taxed, coupon, store-credit, deleted-product — imported and audited first.
  • Query-back verification. After every import, records were read back out of Shopify and diffed against the source values: totals to the cent, tracking sets, consent states, outstanding balances.
  • The live storefront as the source of truth for money. Where a platform’s own APIs and exports disagree with what its storefront actually charges, we take the storefront’s figure. This is what surfaced the hidden option pricing above.
  • A reconciliation ledger for every phase — source rows in, exclusions itemized, live records out. Nothing is left unexplained.

Items for the client’s decision

A migration surfaces things only the business owner can settle. These are deliberately left undecided and presented as clear choices — a typical set is below.

Tax-exempt trade accounts — several trade customers were flagged tax-exempt on the old platform. Tax exemption affects real tax calculation at checkout, so the client confirms the certificates are still valid before we enable it.
Store-credit balances — outstanding credit is recorded on the migrated profiles as a note rather than silently funded as spendable credit; the client decides.
Made-to-order stock levels — placeholder stock numbers (the 99,999 convention) were carried over as-is. Shopify has a cleaner option: real counts plus “continue selling when out of stock”.
Weight unit confirmation — the export doesn’t state its unit; weights were imported as pounds. If the old admin was set differently, shipping rates would calculate incorrectly.
Per-product shipping charges — the old platform allowed a flat rate on an individual product. Shopify handles this with shipping profiles instead; we set that up or fold it into the price.
Payment-card details in customer notes — old notes occasionally contain a card number typed in years ago. Storing them that way breaches card-industry rules (PCI); we flag them for scrubbing rather than deleting data unasked.
Nothing was deleted. Replaced listings are archived rather than removed, so every past order keeps its product link and every change is reversible.
Ruby Digital Agency · rubydigitalagency.com · Shopify Plus Partner
Data migration · final report

How it fits the engagement

One standard, before, during and after the move.

Every migration ships with three documents. The pre-migration audit tells you what you have before anything moves. This report proves every product, customer and order arrived, to the cent. The SEO and growth evaluation closes the loop after go-live, once Google has re-crawled the new store. All three are included in the fixed price.

Included with every migration.

Start with the migration survey. Ten minutes of your time, one business day of ours, and you will know whether to migrate, what it will cost, and how every record will be accounted for.