Discover/Com API
live

Com APIfairprice.com.sg

Access NTUC FairPrice meat product listings, selling prices, regular prices, pack weights, and price-per-100g via 3 structured endpoints.

Endpoint health
verified 3h ago
list_meat_categories
list_category_products
search_products
3/3 passing latest checkself-healing
Endpoints
3
Updated
3h ago

What is the Com API?

The FairPrice.com.sg API exposes 3 endpoints covering NTUC FairPrice's meat and seafood catalogue in Singapore, returning selling price, regular price, pack weight in grams, and a computed price-per-100g for each product. Use list_meat_categories to discover all browsable category slugs, list_category_products to paginate a specific category, or search_products to run a keyword search across the full catalogue with optional brand and country-of-origin filters.

This call costs1 credit / call— charged only on success
Try it

No input parameters required.

api.parse.bot/scraper/15f02241-a4e6-434b-acdc-6b15bbde8189/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/15f02241-a4e6-434b-acdc-6b15bbde8189/list_meat_categories' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace fairprice-com-sg-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: FairPrice meat products — browse categories, list products, search."""
from parse_apis.fairprice_com_sg_api import FairPrice, SortOrder, InputFormatInvalid

client = FairPrice()

# Browse meat/seafood categories and pick the first one.
cat = client.categories.list(limit=5).first()
if cat is not None:
    print(f"Category: {cat.name} (storage: {cat.storage}, parent: {cat.parent_name})")

    # List products in that category, cheapest first.
    for product in cat.products.list(sort=SortOrder.PRICE_ASC, limit=3):
        print(f"  {product.name} — ${product.price:.2f} ({product.display_unit})")
        if product.offers:
            print(f"    Offer: {product.offers[0].description}")

# Search across the whole catalogue by keyword.
try:
    hit = client.products.search(query="minced beef", sort=SortOrder.PRICE_ASC, limit=1).first()
except InputFormatInvalid as e:
    print(f"Search rejected by site: {e.message}")
    hit = None
if hit is not None:
    print(f"\nCheapest minced beef: {hit.name} by {hit.brand}")
    print(f"  ${hit.price:.2f} (regular ${hit.regular_price:.2f}, save ${hit.discount:.2f})")
    if hit.weight_grams is not None and hit.price_per_100g is not None:
        print(f"  {hit.weight_grams:.0f}g — ${hit.price_per_100g:.2f}/100g")

print("\nexercised: categories.list / category.products.list / products.search")
All endpoints · 3 totalmissing one? ·

Returns the leaf shopping categories under FairPrice's 'Meat & Seafood' department plus the 'Frozen Meat' branch of the 'Frozen' department, deduplicated by slug (a category that appears in both departments is listed once). Each row carries the category_slug accepted by list_category_products and a storage label (fresh, frozen, chilled or other) derived from the category name. One request; no pagination. Seafood leaves are included because the site groups them under the same department.

Input

No input parameters required.

Response
{
  "type": "object",
  "fields": {
    "count": "integer number of category rows",
    "categories": "array of category rows: category_id (integer), name, category_slug (pass to list_category_products), parent_name, top_level_name, storage (fresh|frozen|chilled|other, derived from the name), url"
  },
  "sample": {
    "data": {
      "count": 18,
      "categories": [
        {
          "url": "https://www.fairprice.com.sg/category/frozen-chicken",
          "name": "Frozen Chicken & Poultry",
          "storage": "frozen",
          "category_id": 2186,
          "parent_name": "Frozen Meat",
          "category_slug": "frozen-chicken",
          "top_level_name": "Frozen"
        },
        {
          "url": "https://www.fairprice.com.sg/category/fresh-pork",
          "name": "Fresh Pork",
          "storage": "fresh",
          "category_id": 2129,
          "parent_name": "Pork",
          "category_slug": "fresh-pork",
          "top_level_name": "Meat & Seafood"
        }
      ]
    },
    "status": "success"
  }
}

About the Com API

Category Discovery

list_meat_categories returns a deduplicated list of leaf categories drawn from the Meat & Seafood department and the Frozen Meat branch of the Frozen department. Each row includes category_id, name, category_slug, parent_name, and top_level_name. The category_slug value is what you pass directly to list_category_products — no additional lookup needed.

Browsing Products by Category

list_category_products accepts a required category_slug (e.g. frozen-chicken) and optional parameters: page (1-based, 20 products per page), sort, brand, and country. The response includes title (the category heading as shown on-site), total_count, total_pages, has_more, and an array of product rows. Each product row carries product_id, name, brand, slug, url, image, category, category_slug, country_of_origin, storage_type, the selling_price (regular price minus any advertised single-unit discount, in SGD), regular_price, weight_g (parsed from the site's display unit, null if the unit is not a weight), and price_per_100g (computed, null when weight is unavailable).

Keyword Search

search_products accepts a required query string (e.g. minced beef) and the same optional filters as list_category_products: page, sort, brand, and country. The response shape is identical to list_category_products except title is always null for search results. Both endpoints report total_count and total_pages as site-reported figures, so you can paginate reliably without overshooting.

Data Notes

Pack weight is parsed from the product's display unit and will be null when the site lists a product by count or volume rather than weight. The price_per_100g field is derived from selling_price and weight_g; if either is absent the field is null. Brand and country filters match the labels as they appear in the site's filter panel — pass them exactly as shown there (e.g. Australia, not AUS).

Reliability & maintenanceVerified

The Com API is a managed, monitored endpoint for fairprice.com.sg — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when fairprice.com.sg changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official fairprice.com.sg API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
3h ago
Latest check
3/3 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Track weekly selling-price movements for specific meat SKUs using product_id as a stable key.
  • Build a price-per-100g comparison table across fresh and frozen chicken cuts using weight_g and price_per_100g.
  • Filter Australian-origin beef products with the country parameter and monitor regular vs. discounted prices.
  • Enumerate every meat and seafood category slug with list_meat_categories before syncing a product database nightly.
  • Search for a specific cut (e.g. 'pork belly') across the whole catalogue using search_products and surface the cheapest brand by selling_price.
  • Aggregate brand coverage across categories by collecting brand fields from paginated list_category_products responses.
  • Compare storage type distribution (chilled vs. frozen) across a category by reading the storage_type field on product rows.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does NTUC FairPrice offer an official developer API?+
NTUC FairPrice does not publish a public developer API or documentation portal for third-party access to its product catalogue.
How does pagination work across the three endpoints?+
list_category_products and search_products both return 20 products per page. Each response includes total_count (site-reported total matching products), total_pages, and a has_more boolean. Pass the page parameter (1-based) to step through results. list_meat_categories returns all categories in a single call with no pagination.
When is the `weight_g` or `price_per_100g` field null?+
Both fields are null when the product's display unit on the site is not a weight — for example, items sold by count or by volume. In those cases selling_price and regular_price are still returned, but a per-gram comparison is not possible.
Does the API cover seafood, deli, or non-meat grocery categories?+
The API covers leaf categories under Meat & Seafood and the Frozen Meat branch of the Frozen department. General grocery, deli, dairy, and other non-meat departments are not included. You can fork this API on Parse and revise it to add endpoints targeting other FairPrice departments.
Can I retrieve product reviews or nutritional information through these endpoints?+
Not currently. Product rows include pricing, weight, brand, country of origin, storage type, and image URL, but not customer reviews or nutritional panels. You can fork the API on Parse and revise it to add an endpoint targeting product detail pages that expose additional fields.
Page content last updated . Spec covers 3 endpoints from fairprice.com.sg.
Related APIs in Food DiningSee all →
wholefoodsmarket.com API
Search for grocery products, browse weekly sales, and find store locations at Whole Foods Market. Returns pricing, availability, ingredients, and nutritional information.
sayweee.com API
Search and browse Asian grocery products on SayWeee.com, including detailed product information, category filtering by deals, bestsellers, and new arrivals. Find exactly what you need from their supermarket inventory with powerful search and curated shopping collections.
tesco.com API
Search and browse Tesco's complete grocery catalog to find products with detailed nutritional information, ingredient lists, and customer reviews. Explore product suggestions via autocomplete and browse items organized by category to make informed shopping decisions.
safeway.com API
Access data from safeway.com.
carrefour.be API
Search and browse Carrefour Belgium's grocery catalog to find products with detailed nutritional information, ingredients, and pricing. Explore product categories and discover items that match your shopping needs.
carrefour.eu API
Search and browse Carrefour's European online product catalog to access pricing, promotions, availability, and detailed product information including nutritional data. Retrieve comprehensive product details across categories to compare prices and find current deals in real-time.
marksandspencer.com API
marksandspencer.com API
sainsburys.co.uk API
Access Sainsbury's grocery catalogue: search products by keyword, browse the full category hierarchy, retrieve detailed product information, and discover trending searches.