WooCommerce Store API — Any Store’s Products as JSON | FetchLayer
Unofficial Third-party API
7 endpoints live

Any WooCommerce store.
Every price, as JSON.

Products, prices & stock Any store you name Variations & categories AI-ready JSON

You choose the storefront. Pass a domain and get its products, prices, sale prices, stock, SKUs, variations, images and category tree as structured JSON — from any of the millions of independent shops running WooCommerce. No consumer key, no plugin, no cooperation from the store required.

Free tier included No credit card No scraper maintenance

Trusted by developers shipping real products.

493,455 served today

POST /woocommerce-stores/products
200 OK

Request

$ curl -X POST \
  https://api.fetchlayer.dev/woocommerce-stores/products \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"store":"example-shop.com","onSale":true}'

Response

{
  "dataSource": "catalog-api",
  "products": [{
    "name": "Coastal Rain Shell",
    "sku": "CRS-BLK-M",
    "price": "129.00",
    "regularPrice": "179.00",
    "stockStatus": "in-stock",
    "source": "catalog-api"
  }],
  "totalProducts": 118,
  "notes": []
}

Used by developers at

Individual developers or teams — not official partnerships

Built for feedback workflows

Fetch the public signal. Use it wherever your team works.

Any store, named by you

There is no fixed target site. Pass a domain — or any URL on it — and the same routes answer for any of the millions of independent shops running WooCommerce. Point it at one competitor or a list of a hundred.

Detect before you spend

One call confirms a domain really is WooCommerce, finds the real storefront, and reports which published sources answer. You know whether reading a store is cheap, expensive, or pointless before the second request.

Products, prices and stock

Every SKU with price, regular price, sale price, stock status and quantity, categories, tags, brands, attributes and image URLs. Amounts are exact decimal strings in the store’s own currency, never floats.

Every variation, priced

One product-detail call returns each variation with its own id, SKU, option values, price and stock — so a size-and-colour matrix comes back priced, not as a single range you have to guess at.

The source is on the record

Cost varies by store, not by route. Every response names the path it took — catalog-api, content-api or product-pages — so you know which fields to trust and what the read cost before you scale the job.

Nothing fails quietly

A notes[] array on every response reports truncated walks, upstream limits and fields a store does not publish. A short result set is explained, not silently returned as if it were complete.

Paste a URL, get input

Hand any store, product or category URL to resolve-url and it comes back as the domain, store URL, product slug or id, and category slug the other routes take. Parsing a URL is free.

AI-ready JSON

Pass catalogues, prices and stock to an LLM or an MCP agent to compare a market, spot a discount cycle, or write the pricing memo — no HTML parsing, no wrapper code, no per-store scraper.

FetchLayer Research Chat

Price a whole category across a dozen stores—then export it.

Prefer not to write code? Give FetchLayer Research Chat a list of storefronts, ask what they charge and what they keep in stock, and turn the whole comparison into a structured file for your pricing review, board deck, or market map.

  • Ask questions in plain English
  • Analyze themes, sentiment, and pain points
  • Download the structured results as CSV or JSON
Compare stores in Chat

No code or setup required · Uses your FetchLayer credits

WooCommerce research

Check these twelve stores, pull every product in their outerwear category with price and stock, and tell me who is discounting hardest. Then export it as CSV.

Y

All twelve domains confirmed as WooCommerce. I read 1,180 products, found four stores discounting more than 30% on outerwear right now, and flagged the two that are out of stock on their best sellers. The full product-level table is ready to download.

woocommerce-category-pricing.csv

1,180 products · 14 columns · ready to download

CSV

From raw feedback to action

One request is the start of the workflow.

Store the structured response, run it on a schedule, pass it to an LLM, or feed it into the system your team already uses. FetchLayer handles retrieval so you can focus on the outcome.

  1. 01

    Detect the store

    Send the domain to /detect-store. It confirms WooCommerce, finds the real storefront, and tells you which data sources it publishes — and therefore what reading it will cost.

  2. 02

    Map it, then pull it

    Read the category tree cheaply to see what the store sells, then request the products that matter with price, stock and search filters, paging with a cursor.

  3. 03

    Diff it on a schedule

    Key on dateModified and re-read weekly: price moves, new SKUs, stockouts and discount depth across a whole set of competitors, as a table instead of a browsing session.

MCP & agents

Live

Your AI already knows how to use this.

Use the WooCommerce endpoint directly from your MCP-compatible agent. Ask it to retrieve public feedback, identify patterns, and turn the result into a useful brief without writing integration glue.

1
Pick your editor
2
Agent discovers 7+ tools
3
Query any platform instantly
connect your agent ~30s

Pick your editor and we hand you the config with your key already in it — no JSON to hand-edit, no wrapper code.

Get your free API key

Free tier · no credit card · any MCP host

New chat fetchlayer connected

Is this domain a WooCommerce store? If it is, pull its outerwear category with prices and tell me what it is discounting.

Used fetchlayer.woocommerce_products

Confirmed WooCommerce with high confidence, reading from the store’s published catalog. Pulled 118 products in outerwear: 31 are on sale, the deepest cut is 42% off, and four best sellers are out of stock.

Ask a follow-up…

Works with every MCP-compatible tool

Cursor
Claude
VS Code
Windsurf
Cline
Hermes
OpenClaw
Kiro
No wrapper code
All 7 endpoints exposed as tools
Official & maintained
Free to install

Use cases

What teams build with WooCommerce store data.

Same API, endless applications. Here is what teams ship with public storefront data.

01

Competitor pricing intelligence

Point one key at any WooCommerce store and read its products, prices, sale prices, stock and every variation.

competitorspricingresearch
02

AI agent context

Hand Claude, Codex, or your MCP agent structured catalogues and exact decimal prices instead of a per-store scraper.

llmagentsmcp
03

Discount-cycle monitoring

Poll a storefront on a schedule to see when sale prices drop, how deep they go, and what quietly restocks.

alertsmonitoringcron
04

Assortment research

Compare categories, brands and attributes across rival shops to find the products a market is still missing.

assortmentgapsinsight
05

Catalogue exports

Export a whole store — SKUs, variations, prices, stock and images — as one clean dataset per domain.

cataloguecsvexport
06

Market sizing

Detect WooCommerce across a list of a hundred domains, then read them all to size an independent market.

marketsdetectionresearch

Compare approaches

Spend time on the insight, not the collection layer.

What you needFetchLayerOfficial APIBuild it yourself
Read a store you do not ownConsumer key requiredYou build it
Works on any WooCommerce domainOne store per keyOne scraper per store
Detects the store before reading itN/AYou build it
Falls back when no catalog is publishedNo dataYou build it
Reports what the read actually costN/AYou instrument it
Ready for AI and MCP workflowsYour integrationYour integration

FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.

Pricing

Start free. Scale when ready.

Pay per request with no commitment, or lock in a flat monthly rate with built-in savings.

Free plan — 30 requests

Verify responses, inspect the API, no credit card required.

Try free

Pay as you go

$1.99

per 1,000 requests

$0.00199 per request · credits never expire

How credits work — no multipliers

One credit = one API call, on every endpoint and platform. No matter how many results come back, you pay for the call, not the output size. Most scraping APIs charge multipliers of 5x, 25x, even 75x per call depending on the target — here it's always 1.

  • No multipliers — 1 request = 1 credit
  • No monthly commitment
  • Credits never expire
  • Same API & MCP access as subscribers
  • ∞ req/min, ∞ API keys
Get API key

Expiry

Credits stay until you use them. No monthly reset, no pressure to hit a quota.

0

Commitments

No subscription, no contract, no minimums. Start, pause, or scale whenever.

100%

Access

Every endpoint and MCP included. Not a limited tier — same data as any subscriber.

API reference

Every parameter, documented.

All requests are POST with a JSON body and Bearer auth header.

POST /woocommerce-stores/detect-store

Confirm a domain runs WooCommerce and find the real storefront behind it, before you spend requests on it. Returns a confidence verdict, the signals that matched, and every published data source that answered.

store* string Store domain, e.g. example-shop.com, or any URL on the store
timeoutMs number Per-request time limit in milliseconds (max 600000).
POST /woocommerce-stores/store-profile

The store's own details: name, description, the currency and symbol it prices in, locale, logo, the social profiles it advertises, and the product and category counts it reports.

store* string Store domain, or any URL on the store
dataSource string 'catalog-api' | 'content-api' | 'product-pages'. Defaults to the most complete one the store offers.
POST /woocommerce-stores/products

Products with prices, sale prices, stock, SKUs, categories, tags, brands, attributes, variations and image URLs. The response's dataSource tells you which path the read took — and therefore what it cost.

store* string Store domain, or any URL on the store
limit number Maximum products returned (max 250), or -1 for everything available. Defaults to 30.
search string Only products matching this text
category string Only products in this category, by slug or id
tag string Only products with this tag, by slug or id
minPrice string Only products at or above this price, in the store's currency
maxPrice string Only products at or below this price, in the store's currency
onSale boolean Only products the store has discounted
inStock boolean Only products the store reports as in stock
orderBy string 'date' | 'price' | 'popularity' | 'rating' | 'title' | 'menu_order'.
orderDirection string 'asc' | 'desc'.
pages number Pages of results to collect in one request (max 100).
cursor string Resume from a previous response's nextCursor.
dataSource string Pin the read to one published source instead of the most complete available.
POST /woocommerce-stores/product-detail

One product in full: description, prices, SKU, stock status and quantity, rating and review count, categories, tags, brands, every attribute, every variation with its own price and stock, all images, weight and dimensions, and related product ids.

store* string Store domain, or any URL on the store
product* string Product id, slug, or the product's URL on the store
includeVariations boolean Also resolve each variation's own price, SKU and stock. Defaults to true.
POST /woocommerce-stores/categories

The store's category tree: name, slug, URL, description, parent and the number of products reported in each. Cheap on every source, so it is the usual way to map a catalog before deciding what is worth pulling.

store* string Store domain, or any URL on the store
limit number Maximum categories returned (max 500), or -1 for everything available.
slug string Only the category with this slug
parent string Only categories directly under this one, by slug or id
includeEmpty boolean Include categories holding no products. Defaults to false.
POST /woocommerce-stores/media

A GET that streams a product image’s bytes, with HTTP Range support. Use the downloadUrl returned on any product image verbatim — it already carries both parameters, and a URL that does not belong to that store is rejected.

store* string The store the image belongs to (query parameter)
url* string Image URL, exactly as returned on a product (query parameter)
filename string Content-Disposition filename to serve the file as
POST /woocommerce-stores/resolve-url

Parse any store, product or category URL into the structured input the other endpoints take — domain, store base URL, product slug or id, category slug. Free: it never consumes a credit.

url* string Any store, product or category URL

Fields marked * are required. Full API reference →

FAQ

Common questions.

Which store does this read?

Whichever one you name. Unlike a single-source API there is no fixed target site here: every endpoint takes a store — a domain such as example-shop.com, or any URL on it — so the same seven routes answer for any of the millions of independent shops running WooCommerce. Point it at a competitor, at a list of stores in a category, or at a market you are sizing. FetchLayer is not affiliated with, endorsed by, or sponsored by WooCommerce or Automattic.

Do I need the store’s consumer key or a plugin installed?

No. You authenticate with your FetchLayer API key — the same Bearer token you use for every other platform. Nothing is required from the store itself: no WooCommerce consumer key or consumer secret, no WordPress login, no plugin, no cooperation from the shop owner. Only what the storefront already publishes is read.

What does /detect-store do, and why call it first?

It answers a question no other platform on FetchLayer has to ask: is this domain actually a WooCommerce store, and where is the real storefront? It returns a verdict with a confidence level, the individual signals that were checked and which matched, and every published data source that answered — most complete first. Run it once on a new domain and you know, before spending a single further request, whether reading that store is cheap, expensive, or pointless.

Why does one store cost more to read than another?

Because cost here depends on the target, not the route. A store that publishes a catalog answers a products call in roughly 102 KB. A store that publishes none has to be read from its rendered product pages — measured at up to 5 MB for nine products. Every response carries a source on each product and a dataSource on the response naming which path was taken: catalog-api, content-api, or product-pages. Check it before you scale a job across a list of stores.

So what does limit actually mean?

On a store read from its catalog, limit is a target: ask for 250 products and you get 250 in about three cheap pages. On a store read from rendered pages, limit is a hard request budget — every product is a page fetch, so asking a catalog-less store for 500 products is asking for something very expensive. Start small, read dataSource on the response, and walk a large catalog with cursor across billed requests rather than hiding it inside one.

Why should I read notes[] on every response?

Because it is where a short answer gets explained. notes[] reports truncated walks, upstream limits, and fields a particular store does not publish. A result set smaller than you expected is usually described there rather than returned as an error, so an integration that ignores notes will quietly mistake a capped walk for a small catalog.

Can I get product reviews?

Not yet, and that is deliberate rather than an oversight. The groundwork exists, but there is a documented trap: the generic WordPress comments route that answers on many stores excludes the review comment type, so a store with 1,201 reviews reports a total of zero and looks like it worked perfectly. Shipping a route that silently returns nothing is worse than shipping none, so reviews wait for a source that reports them honestly. Product ratings and review counts are returned today.

What can I actually build with this?

Competitor catalog and pricing intelligence — every SKU, price, sale price and stock status a rival publishes, diffed on a schedule. Market research across many independent stores at once: what a whole category charges, how deeply it discounts, what it stocks. And catalog monitoring on your own or a partner’s store, keyed on dateModified, so a price change, a stockout or a new product is something you find out about rather than something you notice.

Can I use this with an AI model or MCP agent?

Yes. Every response is structured JSON you can store, embed, or hand to an LLM, and the six JSON routes are exposed through FetchLayer’s MCP server — so an agent can check a domain, read its catalog, compare prices across stores and write the summary without any wrapper code. Prices come back as exact decimal strings in the store’s own currency, never floats, so the arithmetic stays correct.

How does billing work?

One API request equals one credit, the same as every other FetchLayer platform — no multipliers. Each page walked counts as one request, so pages: 10 bills as ten. Parsing a URL with /resolve-url is free and consumes nothing; streaming an image through /media bills as a normal request. WooCommerce is in Beta while coverage expands, at standard pricing.

Start pulling WooCommerce store data today.

Get a free API key, make your first request, and put public feedback to work in your own product or research workflow.