Many guides for this assume you own the store: you connect a sync app to the store's admin, grant it access, and let it push data into a sheet. That is a fine setup for your own shop, but it does nothing for a supplier's catalog, a competitor's prices or a client store you can't log into.

CatalogCSV works from the other side. It reads the catalog a store already shows publicly, in your own browser, and gives you a CSV that Google Sheets opens as-is. It works on any store whose products are publicly visible, including your own, with no account, no API key and nothing installed on the store.

Open it in Google Sheets

  1. In Google Sheets, open a spreadsheet and choose File > Import > Upload, then drop in the CSV.
  2. Under Import location, pick Insert new sheet(s) to keep what is already there, or Replace spreadsheet for a clean start.
  3. Under Separator type, leave Detect automatically or choose Comma. If you switched the extension to semicolons for European Excel, choose Custom and type ;, otherwise every row lands in one column.
  4. Click Import data.

The file is UTF-8, so accented product names and emoji arrive intact. Any cell that starts with =, +, - or @, such as a title, vendor or SKU, is written with a leading apostrophe so it can't run as a formula; depending on your import settings, you may see that apostrophe in the cell.

One import setting worth knowing: Convert text to numbers, dates, and formulas. Left on, prices become numbers you can sum and sort. If a store uses SKUs with leading zeros, such as 00412, untick it so the SKUs stay exactly as written.

Why IMPORTJSON on products.json gives you a mess

A common workaround is pointing an IMPORTJSON script at a store's /products.json. It usually ends with rows that don't line up, for three reasons:

  • Variants and images are nested inside each product. A product with six variants and four images has to become six rows, and generic JSON importers either spread those across extra columns or repeat values unevenly. The guide on flattening products.json variants into one row each shows what the right shape looks like.
  • It returns at most 250 products per page. Anything past that needs another request per page; see products.json limit 250: how to get all the pages.
  • IMPORTJSON is not built into Sheets. It is custom Apps Script, so the paging loop is code you write and maintain yourself.

The Variant rows CSV is already flat: one row per variant, 26 columns, and the extension pages through the catalog 250 products at a time for you. In testing it paged through a 6,498-product catalog to the end.

Useful next steps in Sheets

The columns always come in the same order, so formulas keep working from one export to the next. The ones used below:

ColumnFieldColumnField
AhandlePsku
BtitleQprice
CvendorRcompare_at_price
Dproduct_typeSavailable
Kvariant_idXimage_src
Lvariant_titleZimage_count
  • Freeze the header: View > Freeze > 1 row.
  • Slice by brand or category: create a filter view from the Data menu and filter on vendor (C) or product_type (D). Filter views don't change what anyone else sharing the sheet sees.
  • Thumbnails: in a new column, =IMAGE(X2) shows the product's main image from its link.
  • Sold-out variants: on a new tab,
=QUERY(Sheet1!A:Z, "select B, L, Q where S = false", 1)

lists title, variant and price for everything marked unavailable. If you imported with text conversion turned off, available is text, so use where S = 'false' instead. Replace Sheet1 with your tab's name.

If you added the product description when exporting, it comes after the 26 columns, in AA (and AB if you add it both as HTML and as plain text).

Updating it later

There is no live sync. Each export is a snapshot of what the store showed at the moment you clicked. To refresh it, export again and import the new file with Insert new sheet(s), naming the tab by date. Because variant_id (K) stays the same between exports, you can compare snapshots, for example the old price of each variant:

=XLOOKUP(K2, 'Oct 1'!K:K, 'Oct 1'!Q:Q, "new")

What it can't do

  • It can't read a store that is running a bot check, and a password-protected store needs its password entered first.
  • It exports image links, not the image files.
  • It gives you CSV, not a native Sheets file or XLSX, and it shows only public data: no sales figures, no inventory counts beyond in-stock or sold-out.

Free vs. Pro

FreePro
Products per exportFirst 100No limit
Formats and optionsAllAll
Price$0, no account$9/month or $79/year, one key for up to 3 browsers or computers

On a free export of a larger store, you get every variant of the first 100 products, so the sheet can have more than 100 rows. See pricing for details.