HasData
Back to all posts

How to Easily Copy Data from Any Shopify Store to Your Own

Copying products from a website built on Shopify comes up in two situations that look different and use the same tools. Dropshippers copy products from a supplier’s store into their own. Store owners move their own catalog, to a new store, a new domain, or a backup file that isn’t hosted by Shopify. Both cases end at the same place, a CSV file that Shopify’s admin can import, and this guide covers every route to that file. Shopify’s built-in export, the public /products.json endpoint, migration apps, and a no-code scraper each produce one that works on stores you don’t own.

Four Ways to Move Shopify Products

Each transfer method covers a different combination of access and effort. The table sums up what each one moves and where it stops:

MethodWorks onWhat you getWhere it stops
Built-in CSV exportyour own storefull product CSV, import-readyproduct images travel as URLs, variant metafields stay behind
/products.jsonany store that hasn’t closed itraw JSON, 250 products per pageno inventory counts, no metafields, needs conversion before import
No-code Shopify scraperany storeCSV, JSON, XLSX, or an import-ready Shopify CSVproducts only, 1 credit per row
Matrixify or Duplifyyour own storebulk import, export, migration, and for Duplify themes and pages tooboth install into an admin, so neither reads a store you don’t control

Both of those are what Google’s AI Overview suggests when you ask it how to copy a Shopify store, and both hit the same wall. They install into an admin, so the store has to be yours. Duplify covers themes, pages and metafields as well as products, which the public endpoint below never sees.

The built-in export is in the admin under Products. Shopify’s own export documentation names three tasks for it, creating a backup, moving products to a new store, and editing them in bulk in a spreadsheet. Two of its behaviors surprise people mid-migration. Exporting the current page or a selected set downloads the CSV in the browser, unless one of those products has more than 100 variants, in which case it arrives by email. Every other option, including All products, is emailed either way, and images are referenced by URL rather than embedded, so they only survive the import while the old store keeps serving them.

What the Public Products Endpoint Gives You

Every Shopify website publishes its catalog as JSON. Adding /products.json to the store’s address returns products with titles, descriptions, images, tags, and variants with prices and SKUs. It shows a store’s raw catalog without any tooling, and it stops well short of a transfer. On a run against a live store today, the endpoint returned at most 250 products per request. Asking for more with limit=400 still returned 250, and deeper pages come from a page parameter instead.

The variant records carry an available flag and nothing about stock levels, metafields don’t appear at all, and the output is plain JSON rather than a CSV the Shopify admin can import, so everything still needs mapping into import columns by hand. Some stores close the endpoint entirely. One large store answered it with a 403 during the same check. Treat /products.json as a way to inspect a catalog, and use one of the other routes when the goal is products landing in your own store.

Exporting Data from Another Shopify Store

The Shopify no-code scraper reads any store’s public catalog and hands back a file ready for import, which makes it the route for catalogs you don’t own. Sign up or log in to HasData. A new account starts with 1,000 free credits, and the scraper bills 1 credit per product row, so the free balance covers a catalog of up to a thousand products.

In the dashboard, open No-Code Scrapers and pick Shopify under E-Commerce.

The No-Code Scrapers category tabs with E-Commerce selected, showing AliExpress and Shopify, and the Shopify card outlined

Shopify under the E-Commerce tab of No-Code Scrapers

The scraper takes two inputs, the store URL and a three-letter currency code for the prices. Click Run Scraper and the job appears in the History pane while the results table fills on the right. The results pane shows every extracted row with the product id, name, handle, description, and the rest of the 16 columns before anything gets downloaded.

For scale, the run behind the screenshot below read a 70-product store, took 8 seconds, and cost 70 credits.

To take the data out, use the download button above the results table and pick a format. CSV, JSON, and XLSX suit review and editing. The SHOPIFY option is the one built for this guide’s job:

Download menu of the Shopify scraper results with four formats, the SHOPIFY option highlighted

The finished run, with the export menu open on the Shopify format

The SHOPIFY download is Shopify’s own product import schema, with Handle, Title, Body (HTML), Vendor, variant columns, image URLs, and Status. On that run, 70 products became 315 CSV rows, because Shopify’s format gives each variant and each extra image its own row. That’s normal, and the admin reassembles them into products on import.

Importing the CSV into Your Own Store

The file from the previous step imports into any Shopify store, new or existing. If the store doesn’t exist yet, shopify.com walks you through a short questionnaire (business type, sales channel, country) and generates the admin in a few minutes. A new store starts hidden from the public until you open access and connect a domain, which leaves room to import and tidy the catalog first.

In the admin, open the Products section and click Import:

The Products page of the Shopify admin with the Import button in the header

Import products

Drag in the downloaded CSV and click “Upload and preview”:

The import dialog with the CSV dropped in and the Upload and preview button ready

Upload and preview data

Shopify parses the file and shows a preview with the product count, images, and names, so a mapping problem surfaces here rather than in the catalog:

The import preview showing the product count and the first products with their images and names

Import preview

Confirm the preview and the upload continues in the background, so the window can be closed while products land:

The progress notice saying the import continues in the background and the window can be closed

Wait while products are processing

Imported products appear on the Products page, sometimes gradually when the upload runs in the background:

The Products page after the import, with the imported products filling the list

Products list

One import option matters for repeat runs. The import dialog offers “Overwrite products with matching handles”, which updates existing products instead of duplicating them, and that’s what makes a repeat run a sync rather than a second pile of products.

Migrating Your Own Store

The same CSV pipeline covers the migration questions store owners actually search for, and the admin export already holds the fields the scraper has to rebuild.

The admin’s export produces the full product CSV, and product metafields are included once they’re defined, per Shopify’s import/export documentation. Variant metafields don’t travel in the CSV, and the file stores image URLs rather than the images themselves, so a CSV alone doesn’t preserve pictures once the store that hosts them goes down. For a backup that survives the store’s closure, save the image files separately.

Moving to a new domain is usually a settings change, since a domain connects to the existing store in the admin’s domain settings. Data moves when the destination is a genuinely new store. Export from the old admin, import into the new one, and point the domain at the new store once the catalog checks out.

Shopify Partners build in client transfer stores, which take only free and partner-friendly apps while they stay in the partner organization, and don’t process real transactions until they’re handed over to the client. The catalog reaches one of those through the same CSV import as any other store.

Exporting Data from Amazon to Your Shopify Store

Stocking a Shopify store from Amazon instead of another Shopify shop uses two scrapers from the same dashboard.

The Amazon Search scraper collects products from search results. It takes keywords or Amazon URLs plus a results-per-keyword count, and returns whatever the search surfaces, which suits filling a category from scratch:

Amazon Search no-code scraper config with fields for keywords or URLs and results per keyword

The Amazon Search scraper

For known products, the Amazon Product scraper takes ASINs or product URLs directly and returns the full listing details for each:

Amazon Product no-code scraper config with a field for ASINs or URLs

The Amazon Product scraper

Both hand back CSV, JSON or XLSX, so an Amazon result set still needs mapping into Shopify’s import columns before the admin will take it, and the selection stays as narrow or wide as the keyword list you feed in.

Conclusion and Takeaways

The route depends on whose store holds the products. Your own store exports from the admin, and the only traps are image URLs that stop resolving once the old store closes and variant metafields that never enter the CSV. Someone else’s store offers /products.json for a look and the no-code scraper for a transfer, at 1 credit per product row with an import-ready file at the end. Either way the last mile is identical, one CSV through the admin’s import dialog, with overwrite-by-handle keeping repeat imports in place.

Valentina Skakun
Valentina Skakun
Valentina is a software engineer who builds data extraction tools before writing about them. With a strong background in Python, she also leverages her experience in JavaScript, PHP, R, and Ruby to reverse-engineer complex web architectures.If data renders in a browser, she will find a way to script its extraction.
Articles

Might Be Interesting