Scrape a product catalog to CSV for a shop or ERP import

In short: To scrape a product catalog to CSV, first check for a built-in export or supplier feed. If the data only exists as web pages and you have permission, extract each category page, map the columns to your importer's template, clean prices and image URLs, put one variant per row, and save as UTF-8 CSV.
Moving to a new shop platform, loading a supplier's range into your ERP, and rebuilding an old store all start with the same file: a CSV with one row per product. Sometimes that file is one click away. Sometimes the data only lives on web pages. This guide covers both, with the formulas to make the file import cleanly.
Do you need to scrape the catalog at all?
Often you do not. Check these routes first:
- Your own store. Most shop platforms can export products to CSV from the admin panel, with SKUs and variants included. That export is more complete than anything you can read from the storefront.
- A supplier with a feed or API. Ask for it. A feed stays up to date, and it carries fields the website never shows, such as cost price or barcodes.
- A supplier without either. Ask for a spreadsheet. Many will send one.
Scraping makes sense when the catalog only exists as web pages: an old site with no export, or a supplier's public catalog that the supplier has allowed you to copy.
| Source | Best route | Why |
|---|---|---|
| Your store's admin | Built-in export | Full data, variants |
| Supplier with a feed | Use the feed | Stays current |
| Supplier site, with permission | Scrape to CSV | Fast one-off copy |
| Site whose terms forbid it | Do not scrape | Terms prohibit it |
Get permission in writing. A catalog is more than prices. Product descriptions and photos can be protected by copyright, and in the EU a catalog can also be protected as a database when its maker made a substantial investment in obtaining, verifying, or presenting its contents, which restricts extracting or reusing the whole or a substantial part of it (Directive 96/9/EC, Article 7). Before you copy a supplier's catalog, get written permission that also covers reusing their text and images. Read each site's terms of use, stay on public pages, and never get around logins, CAPTCHAs, or blocks. This is general information, not legal advice; see our guide Is web scraping legal? for more.
Step 1: Which fields does your importer need?
Start from the end. Download the sample CSV or import template from your shop platform or ERP, and copy its exact headers into row 1 of a new sheet. Then note where each value will come from. A typical product import asks for:
- SKU: a unique code per product or per variant.
- Name and description.
- Price and, if there is one, the sale price.
- Category, often as a path such as
Home > Kitchen. - Image URL: one or more public links to the product photos.
- Variant options, such as size and color.
- Barcode (GTIN or EAN), if your channel needs it.
Category pages usually show the name, price, link, and main image. SKUs, descriptions, and variants often appear only on each product page, or not at all. Knowing this up front tells you whether a category scrape is enough or whether you need the supplier's help.

Step 2: How to do it with ScrapeSheet
ScrapeSheet is a Chrome extension that reads the page you have open and exports what it finds. Our scrape product listings page covers the use case in detail.
- Install ScrapeSheet from the Chrome Web Store and pin it.
- Open one category page of the catalog.
- Click the ScrapeSheet icon to open the side panel, then click Extract this page. It detects the tables and lists on the page on its own. On product grids, each product becomes a row, and its link and image URL get their own columns.
- Export to CSV or Excel.
- Repeat for each category, and add a Category column so you know where every row came from.
- Compare your row count with the number of products the category page shows. If they differ, check for a missed page or for the 20-row limit of the free plan.
Know the limits. The free plan exports up to 20 rows per export and one page per run, which is enough to test your template. ScrapeSheet Pro (€12.99 per month) removes the 20-row limit and follows pagination and infinite scroll, up to 200 pages or 5,000 rows per run, so one run can usually capture a whole category; see how to scrape multiple pages. For unusual layouts, Pro adds AI extraction with your own Claude or OpenAI key: you type the fields you want, such as name, price, and link. ScrapeSheet saves image URLs, not the image files themselves.
You do not always need an extension. If the catalog is a plain HTML table, Excel can read it directly; see Excel Get Data from Web. And if the supplier can send a spreadsheet, that beats any scrape.
Step 3: Clean prices, image URLs, and handles
Scraped values look right on screen but often fail on import. Fix them with helper columns, then paste the results as values into your template. In the examples below, column A holds the name, B the price, C the image URL, and D the SKU.
Turn price text into a number
A price such as $1,249.00 is text, and most importers reject it. This works in Excel and Google Sheets for prices written in US format, when your spreadsheet uses a US locale:
=VALUE(SUBSTITUTE(SUBSTITUTE(B2, "$", ""), ",", ""))
The result is 1249. If your source writes decimals with a comma, as in 1.249,00, swap the separators first or use a locale-aware import.
Make image URLs absolute
Some sites write image links as /img/p1.jpg or //cdn.example.com/p1.jpg. An importer needs the full address. Replace shop.example.com with the site's domain:
=IF(LEFT(C2, 2)="//", "https:"&C2, IF(LEFT(C2, 1)="/", "https://shop.example.com"&C2, C2))
Build a URL handle (Google Sheets)
Many platforms use a lowercase, hyphenated handle per product. This Google Sheets formula turns Linen Shirt (Blue) into linen-shirt-blue:
=LOWER(REGEXREPLACE(REGEXREPLACE(TRIM(A2), "[^A-Za-z0-9]+", "-"), "^-+|-+$", ""))
Flag duplicate SKUs
Duplicate SKUs make imports overwrite products or fail. This returns TRUE for every SKU that appears more than once:
=COUNTIF($D$2:$D$1000, D2)>1
Put one variant per row
Most importers expect each size or color on its own row, linked to the parent product. Shopify's product CSV, for example, repeats the same Handle on every variant row. If variants only appear in a drop-down on each product page, a category scrape will not capture them. Ask the supplier for a variant list, or add those rows by hand.
Step 4: Save a CSV that imports cleanly
- Use UTF-8. In Excel, choose File > Save As and pick CSV UTF-8 (Comma delimited). In Google Sheets, choose File > Download > Comma-separated values (.csv). This keeps accents and symbols such as € intact.
- Let the app handle quoting. Descriptions often contain commas and quotation marks. The CSV format puts such fields in double quotes and doubles any quotation mark inside them (RFC 4180). Excel and Google Sheets do this for you when they save, so do not add quotes by hand.
- Protect codes and barcodes. If you double-click a CSV to open it, Excel may drop leading zeros and show long barcodes in scientific notation. Open it with Data > From Text/CSV instead, click Transform Data, and set the SKU and barcode columns to Text; when Excel asks, choose Replace current so the original values are kept.
- Check image links. Paste a few image URLs into a browser. They must open without a login, or the importer cannot fetch them.
- Test with five rows. Import a small file first, check one product with variants, and then import the rest.
More step-by-step guides are on the ScrapeSheet blog.
FAQ
How do I export a product catalog to CSV?
If it is your own store, use the product export in your platform's admin panel; it includes SKUs and variants. If it is a supplier's catalog, ask for a feed or a spreadsheet first. Scrape the category pages only when the data exists solely as web pages and you have permission.
Can I scrape product images along with the data?
You can collect the image URLs; ScrapeSheet puts each product's image link in its own column but does not download the files. Product photos are usually protected by copyright, so only reuse them with the owner's permission, for example from a supplier who lets you use their images.
Is it legal to scrape a supplier's product catalog?
It depends on the site's terms, on copyright in the texts and photos, and, in the EU, on database rights over the catalog. The safest route is written permission from the supplier that covers reusing their content. This is general information, not legal advice.
How do I import product variants from a CSV?
Put each variant on its own row, with its own SKU, price, and option values such as size or color. Link the rows to the parent product in the way your platform's template asks, for example by repeating the same handle. Test with a few rows before importing the full file.
Sources
- RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files
- Directive 96/9/EC on the legal protection of databases (EUR-Lex)
General information, not legal advice. Always check the website's terms and the data-protection rules that apply to you.