Skip to main content

How to Upload Products for Non-Shopify Using CSV

Written by Mikaela Lasig

Uploading products with CSV lets Non-Shopify merchants import a product catalog into Tolstoy without connecting a Shopify store. It helps merchants use products in shoppable Tolstoy experiences, tag media to products, and keep product data available for website widgets. This CSV import flow does not show a separate paid-plan gate or its own publish button, although any live widget that uses those products still needs the plan required for that widget type.

How to Set Up

  1. Go to Settings > Set up store.

  2. Click Set up store then click Upload your products from CSV

  3. Prepare your CSV file using the column names in CSV columns below.

  4. Make sure the required columns are included: id, title, url, imageUrl, and price.

  5. Choose how you want to import the catalog: Connect URL or Upload File.

  6. Use Connect URL if your CSV is hosted online and you want Tolstoy to be able to refresh it automatically.

  7. Use Upload File if you want to import a CSV directly from your computer as a one-time upload.

  8. If you chose Connect URL, paste the CSV file URL and click Connect.

  9. If you chose Upload File, click Choose CSV file and select the file from your computer.

  10. Wait for the import status to update. Tolstoy may show messages such as Product import requested, Product import in progress, or Product import completed.

  11. If Tolstoy shows a Default currency selector after the import is set up, choose the currency you want applied.

  12. If you connected a CSV URL and want ongoing updates, enable or keep the Automatically refresh every 24 hours option turned on.

  13. Open Settings > Product Catalog and confirm the imported products appear correctly.

CSV columns

Column names are matched loosely — capitals, spaces, underscores and hyphens are ignored, so Image_Link, image link and imagelink all work.

Required. A row missing any of these is skipped.

  • id — your unique product or variant ID. If two rows share an id, the last one in the file wins.

  • title — product name.

  • url (also accepted as link) — link to the product page on your site.

  • imageUrl (also accepted as image_link) — main product image.

  • price — current price, for example 37.95.

Optional.

  • inventory (also accepted as availability) — whether the product can be bought. See Stock and availability below.

  • descriptionHtml (also accepted as description) — product description, plain text or HTML.

  • images — additional images, separated by commas.

  • compareAtPrice (also accepted as sale_price) — the higher “was” price, shown struck through.

  • currencyCode — for example USD or ILS. Falls back to your default currency.

  • currencySymbol — for example $. Worked out from the currency code when left empty.

  • brand — shown as the product’s vendor.

  • item_group_id (also accepted as itemGroupId) — groups rows into one product with several variants. Rows sharing an item_group_id become variants of it, and each row’s id becomes that variant’s ID.

  • metafield_<name> — any extra detail to keep with the product, for example metafield_material.

Using a Google Merchant Center or Meta feed

If you already export a standard product file for Google Merchant Center or Meta Commerce, you can connect or upload it as it is — no rebuilding. Tolstoy reads Google’s own field names: id, title, description, link, image_link, price, sale_price, availability, brand and item_group_id.

  • Fields Tolstoy does not use — condition, gtin, mpn, google_product_category, product_type, shipping, additional_image_link and the rest — are ignored rather than rejected, so you do not have to strip them. If you want the extra images, copy them into an images column.

  • Google writes availability as in stock, out of stock, preorder or backorder, and some exports use the schema.org URL form. All of them are understood — see Stock and availability below.

  • Tolstoy stores the price exactly as you send it, so keep price numeric — 37.95 — and put the currency in currencyCode. A Google-style 37.95 ILS is imported as it is.

Stock and availability

The inventory column — or availability, if you export a Google or Meta shopping feed — tells Tolstoy whether a product can be bought. It takes either a number or a word.

  • A number — 25, 0, 3 available — stores that exact quantity. 0 means out of stock.

  • in stock, available, available for order, preorder, presale, backorder, limited availability — in stock, with no specific quantity.

  • out of stock, sold out, unavailable, not available, discontinued — out of stock.

  • http://schema.org/InStock, http://schema.org/OutOfStock and the other schema.org values — the same as the plain words above.

Wording is flexible: in stock, in_stock, IN STOCK and In-Stock all mean the same thing, and a count in brackets does not confuse it — out of stock (0) is still out of stock.

If you leave the column out, or a value is one Tolstoy cannot read, the product is treated as available and is never shown as out of stock. Stock is optional, and a catalog with no stock column works normally.

So to mark something out of stock, say so. Include the column, with either 0 or out of stock on that row. Tolstoy cannot infer it from a file that does not mention stock.

English and schema.org wording is recognised today. If your feed says ausverkauft or agotado, use 0 or out of stock instead, or contact support and we will add your wording.

Troubleshooting / FAQs

All of my products show as out of stock, but they are in stock on my site.
Check whether your file has an inventory or availability column, and what is in it. If there is no such column, there is nothing to fix — products import as available. If the column holds 0 on those rows, your export is writing a zero quantity: correct it at the source, or remove the column entirely. If it holds wording that is not listed under Stock and availability — including wording in another language — replace it with in stock or out of stock, or contact support so we can add it. After correcting the file, wait for the next sync or re-upload it to apply the change straight away.

Some of my products disappeared after a sync.
Each sync replaces your catalog with the contents of the file, so any product that is not in the latest file is removed. A row is also skipped when id, title, url, imageUrl or price is empty. Check those five columns are filled on every row.

Why did my CSV import fail?
The most common reasons are missing required columns, invalid column names, an unreadable CSV file, or a URL Tolstoy cannot access. Check the file structure and try again.

Which CSV columns are required?
Tolstoy requires id, title, url, imageUrl, and price. Other supported columns are optional.

What is the difference between Connect URL and Upload File?
Connect URL links Tolstoy to a hosted CSV and can refresh it automatically every 24 hours. Upload File imports a CSV from your computer as a one-time upload.

Why are my products not showing up yet?
The import may still be processing. Wait until the status shows that the import is complete, then check Product Catalog. Keep in mind that a connected file syncs once every 24 hours, at around 11:00 UTC, so you might have to give it time before you see your missing products.

Can I use CSV product upload without Shopify?
Yes. This flow is specifically for Non-Shopify or manual website setups.

Why are the prices or currency incorrect?
Check the values in price, currencyCode, and currencySymbol, and set the Default currency in Tolstoy if needed.

How do I update products later?
If you used Connect URL, refresh or keep recurring sync enabled. If you used Upload File, upload a new CSV file when your catalog changes.

Did this answer your question?