Unadhi Guides

Export a WooCommerce store's products to CSV without a plugin (titles, prices, stock)

Updated 14 Oct 2026 · Disclosure: the E-commerce Product Scraper linked below is an Unadhi product on the Apify Store. This guide is free. The manual method needs no tool. Current Apify pricing is only on the Store page.

Short answer: many public WooCommerce shops expose products at /wp-json/wc/store/v1/products. Open that URL, page through, and convert the JSON to CSV. If the API is closed, collect /product/… URLs (often listed in /product-sitemap.xml) and copy title, price and stock from each page or from schema.org Product JSON-LD. For many shops at once, paste the storefront URLs into a product scraper on Apify and download one CSV. If it is your shop, use WooCommerce → Products → Export in wp-admin first; that is free and complete.

Who this is for

This guide is WooCommerce-specific. For Shopify's /products.json path, see the related Shopify export guide below. Do not use these methods on marketplaces (Amazon, Flipkart, eBay).

Step 1: confirm it is a WooCommerce storefront

Before you spend time on the API, check a few public signals:

None of these alone proves WooCommerce, but together they usually do. If you only see /collections/ and /products/… without WordPress paths, you are probably on Shopify — use the Shopify guide instead.

Step 2: try the public WooCommerce Store API (free, one shop)

  1. Take the shop homepage, for example https://example-woo-shop.com.
  2. Open https://example-woo-shop.com/wp-json/wc/store/v1/products?per_page=100 in your browser.
  3. If you get a JSON array of products, you are done for the data side. Add &page=2, &page=3 until a page returns [].
  4. Paste the JSON into a JSON-to-CSV converter, or import it in Google Sheets / Excel / a small script. Keep at least: id, name, permalink, prices (regular / sale / currency), is_in_stock, sku.

Prices in the Store API are often in the shop's minor units (paise, cents). Divide by 100 (or the currency's minor-unit factor) when you build the sheet. Currency code is usually in the same prices object.

Some shops disable the Store API, put it behind a firewall, or rate-limit it. If you get 401, 403, 404 or an HTML error page, stop forcing it. Move to Step 3 or drop the shop. Respect robots.txt and the shop's terms of service.

Useful Store API query tips

Step 3: if the API is closed — product pages and sitemap

You can still build a CSV from public HTML when the API is off.

  1. Collect product URLs. Browse the shop or category pages and copy links that match /product/…. Or open /product-sitemap.xml (or the Yoast/Rank Math product sitemap) and copy the <loc> URLs. Skip cart, checkout, account and ?add-to-cart= action links — those are not product pages.
  2. Open each product page. Copy the title (usually h1.product_title), the price block (.woocommerce-Price-amount or .price), and the stock line (.stock).
  3. Prefer structured data when present. View page source and search for "@type":"Product". Many Woo themes output schema.org JSON-LD with name, sku, offers.price, offers.priceCurrency and sometimes offers.availability. That is cleaner than scraping CSS classes by hand.
  4. Record one row per product in your sheet (see the example table below).

This is slow for hundreds of SKUs — that is when Step 5 (Apify) saves time. For five to twenty products it is fine and needs no account.

Step 4: the CSV layout (fake example data only)

product_urltitleskuregular_pricesale_pricecurrencyin_stock
https://example-woo-shop.com/product/cotton-tee-black/Cotton tee, blackTEE-BLK-M799699INRyes
https://example-woo-shop.com/product/canvas-tote/Canvas toteTOTE-011199INRno
https://example-woo-shop.com/product/linen-shirt-blue/Linen shirt, blueSHIRT-BLU18991899INRyes

Example rows only, to show the layout. Not real shop data.

Step 5: many WooCommerce stores at once (Apify, no code)

Doing Steps 2–4 by hand for 10–50 competitor shops every week gets old. The no-code path:

  1. Create a free Apify account (no card needed for the free plan; see apify.com/pricing for current free monthly usage).
  2. Open Shopify & WooCommerce Product + Price Tracker (Unadhi's E-commerce Product Scraper on the Apify Store) and click Try for free. Current pricing is shown only on that Store page.
  3. Paste WooCommerce storefront or category URLs. Example input:
{
  "startUrls": [
    { "url": "https://example-woo-shop.com" },
    { "url": "https://another-woo.example/product-category/tees/" }
  ],
  "maxProductsPerShop": 200,
  "maxListingPages": 15,
  "includeDescription": false
}

Click Save & Start. When the run finishes, open Output / Dataset → Export → CSV.

How the Actor prefers sources (best first): Shopify products.json when present, then the WooCommerce Store API, then schema.org JSON-LD / microdata / OpenGraph on product pages. It checks robots.txt and scans public terms before fetching, and skips shops that forbid scraping — a SHOPS_SUMMARY row explains skips. It never logs in, never fetches Amazon/Flipkart/eBay, and never gets around blocks.

What not to do

This guide is general information, not legal advice. You are responsible for how you use the data and for following each shop's terms and your local law. The Apify Actors mentioned read only public pages, use an honest bot User-Agent, follow robots.txt, never log in and never get around blocks.

Related

← All guides

Unadhi Guides are free, independent explainers. We correct errors as soon as we find them: write to mininglife7@gmail.com.