
How This Shopify Store Made $200K From Web Push Alone in 80 Days With PushOwl


A Shopify migration goes live.
Within ninety minutes, the merchant realises three things in sequence.
Historical orders look wrong. Checkout is accepting payments but the order confirmation email is missing. And Google Search Console starts flagging 404 errors on the product URLs that used to rank.
By the end of the day, the agency is on a conference call explaining what happened. By the end of the week, somebody has calculated how much revenue was lost.
We've been on the receiving end of a call like that.
We've also been on the delivery side, where none of it happens.
The difference is almost never talent.
It is a checklist.
A Shopify migration is not a data import.
That framing is where most things go wrong. The merchant and the agency both assume the hard work is moving products across. Everything else is treated as a smaller problem that can be sorted on launch day.
It cannot.
A real Shopify migration touches:
Skip any of those and the migration looks fine the day it ships. The cost shows up in week two.
A structured checklist is what prevents that cost.
This is the one we run. If your team is planning a Shopify move, use it. If an agency is quoting you, ask whether their process covers each phase below.
If the honest answer is anything less than "yes", get a second quote. Our platform migration services page lists the full scope we deliver on every engagement.
Before anything moves, the current store gets audited.
The audit is boring. It is also the single highest-leverage hour of the entire project.
What we document before touching Shopify.
Alongside the audit, a full backup gets taken. Of everything.
Not "most of it". Everything.
Then we make a decision.
What should migrate. What should not.
Not every product in a catalogue needs to come across. Discontinued SKUs, dead collections, broken blog drafts, stale discount codes — all of these are reasons to prune. A migration is a rare chance to leave the junk behind.
The audit tells you where the junk is.
If you're trying to decide whether to migrate at all, our Replatform or Optimize decision framework walks through the scoring we run before we quote migration work.
Data moves across in a defined order.
Products first (so collections have something to collect). Collections next. Customers. Orders. Then everything that depends on those.
The migration itself is the easy part.
Validation is the hard part.
What most teams do: compare record counts. 10,000 products in. 10,000 products out. Tick. Next.
What actually needs to happen: compare the content of records. Not just how many came across, but whether the data inside each record is right.
For every migrated entity, we validate:
If 100 products migrated with wrong pricing, record-count validation says the migration passed. Real validation catches it before launch.
Every theme change happens on a duplicate theme.
Not the live theme. Not even for small things.
The workflow we run.
Why this matters.
A live theme is being read by customers in real time. Any edit to the live theme is a change customers see immediately, including the ones that break. A duplicate theme workflow lets the team iterate without putting customer experience at risk.
What we QA on the staging theme before it goes live.
If any surface fails QA on the staging theme, the final theme publish is held.
Theme performance work overlaps with everything shipped at performance optimization. If the current theme is already slow, migration is a good moment to fix that.
The SEO migration is where migrations go wrong most often, and where the damage is hardest to recover from.
A missed redirect does not look like a problem on launch day. It looks like a problem three weeks later when organic traffic has quietly dropped 20 percent and nobody can tell why.
What a complete SEO migration includes.
One. Export every URL from the current site before the migration starts.
Every indexed URL. Products, collections, pages, blog posts, filters, international variants, anything that ranked.
Two. Map old URLs to new Shopify URLs.
Every URL gets a destination. If a URL does not have a direct equivalent, it gets mapped to the closest parent collection or category.
Three. Implement 301 redirects for every mapping.
Not a sample. Every URL. Shopify's native redirect tool handles up to 100,000 redirects. For larger stores, redirect apps or Cloudflare rules fill the gap.
Four. Preserve the URL structure where possible.
A product that lived at /products/[slug] on the source platform should ideally live at /products/[slug] on Shopify. Shopify does enforce /products/ and /collections/ prefixes, which sometimes forces changes. When it does, the redirect catches the change.
Five. Migrate meta titles and meta descriptions.
Every page's existing meta title and description comes across. Writing fresh metadata post-launch is a project. Preserving what already ranks is cheaper.
Six. Check canonical tags.
Shopify generates canonicals automatically. Review them for international variants, product variants, and tag or filter pages.
Seven. Review sitemap and robots.txt.
Shopify auto-generates sitemap.xml. Review it before launch for inclusion of all the right page types. Robots.txt gets reviewed for crawl rules.
Eight. Verify Google Search Console on the new property.
Add the new Shopify domain to GSC before launch. Submit the new sitemap on day one. Monitor coverage.
Nine. Monitor 404 errors for 30 days post-launch.
Any 404 on a URL that previously ranked gets a redirect added immediately.
If the move is from Magento specifically, the URL and attribute mapping has its own set of considerations. We've written them up at Should you move from Magento to Shopify.
If the store sells into more than one country, Shopify Markets gets configured during migration.
The checklist for an international migration.
Local payment configuration can trip up a UAE migration specifically. See Tabby vs Tamara on Shopify UAE for the BNPL side of that work.
This is where test matrices earn their value.
The common mistake is to run one successful checkout, see the confirmation email, and assume the whole stack works.
It does not.
What actually gets tested, per market.
For a store with three enabled payment methods, two shipping zones, four tax jurisdictions and five discount codes, this test matrix runs to roughly 60 scenarios.
All of them get executed on staging before launch.
Every integration from the current stack gets audited.
For each one, two questions.
Does an equivalent exist on Shopify? If yes, which app or built-in feature.
What is the migration path for the data in that integration? CRM contacts. ERP sync. Inventory feeds. Email list members. Review history. Loyalty balances. Subscription customers.
What we configure and test before launch.
Every integration gets end-to-end tested. API calls. Webhooks. Data flowing both ways.
The Shopify Scripts to Functions migration also happens here if the store had custom checkout scripts. We cover that specifically at migrate Shopify Scripts to Functions.
Analytics has to work on day one.
A migration that goes live without tracking is a migration where you cannot measure whether it went live successfully.
What gets configured before launch.
If the current store had legacy customer account tracking, see our note on the legacy customer accounts migration because that affects what fires in GA4.
This is the step that gets skipped most often, and causes the worst damage when it does.
The problem.
A Shopify migration takes weeks. During those weeks, the current store keeps running. Customers keep placing orders. Inventory keeps changing. Products get added or deprecated. New customers register.
If the migrated data on Shopify is a snapshot from the start of the project, it is already stale by the time Shopify is ready to go live.
A final delta sync catches the gap.
What the final sync covers.
The delta sync runs as close to the DNS cutover as operationally possible. Usually within the hour before cutover.
Validated. Then the cutover happens.
The sequence we run on launch day.
Step one. The old store stays live. Right up to the moment of cutover.
Step two. Shopify staging has been fully QA'd by this point. Nothing new ships to staging on launch day.
Step three. Final delta sync runs. New orders, new customers, inventory updates all pulled across.
Step four. Final smoke test on Shopify staging after the delta sync. Checkout works. Order confirmation emails fire. Payments process. Inventory reads correctly.
Step five. DNS cutover. Domain switches from pointing at the source platform to pointing at Shopify.
Step six. Immediate live test on the Shopify domain. Place a real test order. Confirm it processes end-to-end. Confirm analytics fires. Confirm the order appears in Shopify admin.
Step seven. The old store is archived. Access is kept for 90 days in case something needs to be retrieved.
The whole launch flow in one line.
Old Store → Shopify Staging → Migration → QA → Final Sync → Domain Cutover → Shopify Live.
Done correctly, customer-facing downtime is zero. Nobody browsing the site sees an error. Nobody mid-checkout loses their cart (if the final sync is clean).
Done wrong, customers see outages, broken carts, missing products, or payment failures within the first hour of launch.
The difference is the final sync and the smoke test immediately after cutover.
Before the DNS cutover happens, the staging Shopify store passes a 20-item QA matrix.
If any item fails, launch is held.
| # | AREA | PASS CRITERIA |
|---|---|---|
| 1 | Products | Every SKU accessible, correct price, correct images |
| 2 | Customers | Customer login works, account history visible |
| 3 | Orders | Historical orders visible under customer accounts |
| 4 | Inventory | Stock levels match source platform |
| 5 | Pricing | Live prices match source, discounts apply correctly |
| 6 | Collections | Every collection renders the right products |
| 7 | Search | Native search returns relevant results |
| 8 | Filters | Filter and facet navigation works |
| 9 | Cart | Add to cart, update, remove, persist across sessions |
| 10 | Checkout | Checkout completes end-to-end on desktop and mobile |
| 11 | Payments | Every enabled payment method processes a real test order |
| 12 | Shipping | Every shipping rule returns the correct rate |
| 13 | Taxes | Every jurisdiction calculates correctly |
| 14 | Discounts | Every active code and automatic discount validates |
| 15 | Emails | Customer and merchant emails fire for every event |
| 16 | Mobile responsiveness | Every surface tested on at least iOS Safari and Android Chrome |
| 17 | Redirects | 301 redirects return correctly for every mapped URL |
| 18 | Analytics | GA4 fires correct ecommerce events |
| 19 | Pixels | Meta, TikTok, Pinterest, LinkedIn pixels fire where configured |
| 20 | International markets | Each market tested with a real test order in correct currency/language |
Every row is a hard gate. No "we'll fix it after launch".
The first 72 hours after launch are where issues surface.
What gets monitored actively.
Issues get triaged by impact and fixed in order.
A broken checkout gets fixed inside the hour. A missing meta description on a secondary collection page gets added to the backlog.
Patterns across the migrations we've either shipped or inherited from other agencies.
Every one of these is preventable. Every one of them has cost somebody serious money.
Most Shopify migrations come from Magento or WooCommerce. The attribute and feature mapping is specific.
| SOURCE CONCEPT (MAGENTO / WOO) | SHOPIFY EQUIVALENT |
|---|---|
| Categories | Collections |
| Attributes | Metafields |
| Configurable products | Shopify Variants |
| Store views | Shopify Markets / Shopify Languages |
| URL keys | Shopify Handles |
| Catalogue price rules | Shopify Discounts (automatic + code-based) |
| CMS pages | Shopify Pages |
| URL rewrites and SEO URLs | Shopify Redirects |
| Customer attributes | Customer Metafields |
| Layered navigation | Shopify Search & Discovery / third-party |
| Product reviews (Magento native) | Reviews app (Yotpo, Judge.me, Okendo) |
Each row is a mapping decision made before the first product is migrated, not during.
For the broader strategic question of whether a Magento-to-Shopify move is the right call, we walk through the full decision at Should you move from Magento to Shopify.
A Shopify migration is not about moving data.
It is about maintaining business continuity while a store swaps underneath it.
The customer buys the same product. The order reaches the warehouse the same way. The SEO ranking survives. The analytics keep measuring. The emails keep sending. The returns portal keeps working. The accountant does not file an angry ticket because historical orders disappeared.
Everything else is downstream of that.
A structured migration process, with proper validation, a final sync, and a disciplined zero-downtime go-live, is what makes the difference between a quiet successful launch and a conference call three days later.
If you're planning a Shopify move and want a second pair of eyes on the plan, book a migration review with our team.
Review our Shopify migration services →
For the broader development scope that often ships alongside a migration, see our Shopify Plus store development page.
A standard Shopify or Shopify Plus migration takes 8 to 16 weeks end to end. Discovery and audit take 2 to 3 weeks. Build and data migration take 4 to 8 weeks. QA, staging, final sync and go-live take 2 to 3 weeks. First-time replatformers should add 30 percent to any quote because SEO migration and integration work consistently get under-scoped.
A zero-downtime go-live is a launch sequence where the DNS cutover from the old store to Shopify happens after a final delta sync and smoke test, so customers never see an outage, a broken cart, or a missing product. The old store stays live right up to the cutover moment. The new store is already fully QA'd and populated with the latest data.
Most Shopify migrations that lose SEO traffic lose it because the URL redirect map was incomplete, meta titles and descriptions were not preserved, or 404 errors post-launch were not caught in the first 30 days. A disciplined SEO migration preserves URL structure where possible, implements 301 redirects for every mapped URL, migrates metadata, and monitors Google Search Console actively for 30 days.
Yes, usually. Historical orders are needed for customer support, returns, tax records, loyalty balances, and lifetime value reporting. Migrating orders is more complex than migrating products, which is why some agencies skip it. Not migrating historical orders is a decision that looks easy at launch and causes problems for years afterward.
Every indexed URL on the source platform needs a redirect. For a mid-size catalogue, that is usually between 500 and 10,000 redirects. For a large catalogue with blog archives, international variants, and faceted navigation URLs, it can run into tens or hundreds of thousands. Shopify's native redirect tool handles up to 100,000 redirects. Beyond that, redirect apps or Cloudflare rules fill the gap.
Always a staging theme. Shopify supports theme duplication. Every change happens on the duplicate. The duplicate gets QA'd across devices and surfaces. The final sync to the live theme is a single publish action, not a series of small edits. Making changes directly on the live theme risks customer-facing errors every time somebody saves a file.
A final delta sync is the catch-up data migration that runs immediately before the DNS cutover. It pulls across every customer, order, inventory change, and product update that happened on the source platform since the main migration snapshot. Without a final sync, launching Shopify means launching with stale data. The sync is usually scheduled within the hour before cutover.
404 errors in GSC and server logs, checkout failures, payment failures, inventory discrepancies, order confirmation email delivery, GA4 event firing rates versus the pre-launch baseline, revenue reconciliation between GA4 and Shopify admin, and app or integration errors. Any critical issue gets fixed inside the hour. Minor issues get queued.
Yes if the store sells into more than one country with localised pricing, language or shipping. Shopify Markets handles currency per market, market-specific pricing, language translation, domain or subfolder structure, and localised checkout. Set it up during migration rather than after. Retrofitting Markets onto a live Shopify store is more work than configuring it correctly during the build.
Categories become Collections. Attributes become Metafields. Configurable products become Shopify Variants. Store views become Shopify Markets or Shopify Languages. URL keys become Shopify Handles. Catalogue price rules become Shopify Discounts. CMS pages become Shopify Pages. URL rewrites become Shopify Redirects. Customer attributes become Customer Metafields. Each mapping decision gets made before the first product is migrated.
Yes. We run the full migration lifecycle: pre-migration audit, data migration and validation, staging theme build, SEO migration, international configuration, payment and shipping testing, app and integration configuration, analytics setup, final delta sync, zero-downtime go-live, and 72-hour post-launch monitoring. The full scope is on our platform migration services page.
A clean rollback plan is part of the launch sequence. The old store stays accessible for 90 days post-launch. DNS can be reverted if a critical issue surfaces inside the first few hours. In practice, a disciplined pre-launch QA matrix prevents the kind of failure that would require a rollback. Rollbacks are expensive and painful. Preventing the need for one is cheaper than planning for one.
Drop your details and we'll email the download link straight to your inbox.