FairPrice Scraper – Singapore Grocery Prices & Products avatar

FairPrice Scraper – Singapore Grocery Prices & Products

Pricing

from $2.00 / 1,000 search results

Go to Apify Store
FairPrice Scraper – Singapore Grocery Prices & Products

FairPrice Scraper – Singapore Grocery Prices & Products

Scrape NTUC FairPrice (Singapore's largest grocery) without an API: product name, brand, price, original price, discount, promo, unit, category and stock. Bulk-paste keywords; export JSON/CSV/Excel. Ideal for grocery price monitoring and comparison.

Pricing

from $2.00 / 1,000 search results

Rating

0.0

(0)

Developer

Chad

Chad

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

FairPrice Scraper | Singapore Grocery Prices, Products & Discounts (No API, No Login)

Scrape NTUC FairPrice (fairprice.com.sg) supermarket product data: keyword-search listings, selling price, promo labels, brand, category, stock status and images. It reads FairPrice's public JSON API — no login, no API token, no browser — and outputs clean, structured snake_case data.

Singapore FMCG price intelligence is a proven B2B need — running the same set of keywords on a schedule builds a running SG supermarket price-tracking series.


What you get

Every product returns the fields below (missing values are always null — no field is dropped):

FieldDescription
product_idFairPrice product ID
nameProduct name
brandBrand
priceSelling price (SGD)
original_priceOriginal price (pre-promo MRP; null when there is no promotion)
discount_pctDiscount percentage (computed from price / original price; null when there is no promotion)
price_per_unitUnit price (planned for v1.1, currently always null)
unit_of_measureUnit of measure, e.g. 1 L, 500 g
categoryMain category name
category_pathFull category path (planned for v1.1, currently always null)
in_stockWhether the item is in stock
is_express_deliveryWhether express delivery is available (planned for v1.1, currently always null)
promo_labelPromo copy, e.g. *Buy 1* Save $0.35
ratingAverage rating (null when there are no reviews)
review_countNumber of reviews
image_urlsArray of product image URLs
product_urlProduct page URL
source_modeSource mode (search)
source_queryThe keyword that triggered this row
scraped_atScrape timestamp (ISO 8601)

Fields marked "planned for v1.1" are already reserved in the output schema and will be populated in a future release once source data support is validated.


Modes (v1.0 has search only)

ModeWhat it doesBilling eventPrice
🔎 searchKeyword search → product listings (price, promo, stock, category, images)search-listing (per row)$0.002

Each Run also charges a one-time actor-start fee of $0.005. All charges are billed only after data is successfully written to the dataset, and the Run log prints total_items / charged / skipped for reconciliation.

Product detail (single-product page scraping) is planned for v1.1 — the search mode already returns brand, price, promo, category and image fields on every row, which covers most price-comparison and monitoring use cases in v1.0.


Input fields

FieldTypeRequiredDefaultDescription
keywordsstring[]one required (or bulkInput)Search keywords; one concept per keyword works best. Up to 50 per run.
bulkInputstringoptionalOne per line (press Enter, no quotes or commas). Merged into keywords at runtime. Fastest is to paste a column from Google Sheets / Excel.
storeIdstringoptionalSpecify a FairPrice store to get that store's price/stock. Leave blank to use the default online warehouse.
maxItemsintegeroptional50Max results per keyword (1-500).
proxyConfigurationobjectoptionaloffAdvanced, usually left off — FairPrice has no Cloudflare / bot challenge.

Examples

🔎 Basic keyword search

{ "keywords": ["milk"], "maxItems": 30 }

📋 Bulk keywords (one per line)

{ "keywords": ["coffee"], "bulkInput": "eggs\nrice\nolive oil", "maxItems": 20 }

🏬 Specific store

{ "keywords": ["bread"], "storeId": "165", "maxItems": 50 }

Sample output row

{
"product_id": "1577586",
"name": "RedMan UHT Full Cream Milk 3.5%",
"brand": "Redman",
"price": 3.13,
"original_price": null,
"discount_pct": null,
"price_per_unit": null,
"unit_of_measure": "1 L",
"category": "UHT Milk",
"category_path": null,
"in_stock": true,
"is_express_delivery": null,
"promo_label": "*Buy 1* Save $0.35",
"rating": null,
"review_count": null,
"image_urls": ["https://media.nedigital.sg/fairprice/90221204_XL1_..."],
"product_url": "https://www.fairprice.com.sg/product/redman-uht-full-cream-milk-35-1577586",
"source_mode": "search",
"source_query": "milk",
"scraped_at": "2026-07-04T00:00:00.000Z"
}

Notes

  • Public data only. No login and no FairPrice account required; it never accesses anything behind authentication.
  • No login / no API token. Fill in the input and run — no keys to configure. Requests go straight to FairPrice's public JSON search endpoint.
  • JSON API + CheerioCrawler — no browser. Keeps compute cost low and avoids the overhead of a headless browser.
  • Polite to the site. Per-domain concurrency is capped at 5, failures retry with exponential backoff up to 3 times, and it auto-stops after 5 pages with no new data — no idle burn.
  • Prices and promotions reflect what FairPrice returns at scrape time and will vary by store and by time of day.

FAQ

Q: Can it capture promo pricing? Yes — it returns the current selling price (price), the pre-promo original price (original_price), the computed discount percentage (discount_pct), and the promo copy (promo_label). When there is no active promotion, original_price and discount_pct are null.

Q: Can I scrape prices for a specific store? Yes, set storeId. Leave it blank to use the default online warehouse.

Q: Will it get blocked? FairPrice has no Cloudflare or bot challenge; direct datacenter requests work fine and a proxy generally isn't needed.

Q: How is billing calculated? Each Run charges actor-start once ($0.005); each product listing charges search-listing ($0.002). Both are billed only after data is written to the dataset, and the Run log prints the actual charged count.

Q: Do you support the product detail page (full single-product data)? v1.0 ships search-listing only. If demand is proven, a detail mode is planned for v1.1.


Deploy

apify login # first time: paste your Apify token (never written to the repo)
apify push # build and upload to Apify Store

After publishing, set the PPE event prices in Apify Console → Monetization: actor-start $0.005, search-listing $0.002.


Disclaimer

This scraper only collects publicly visible FairPrice product search data, for price research and personal comparison-shopping use, not for any unauthorized commercial resale. Please ensure your use complies with FairPrice's Terms of Service and your local laws. This Actor makes no guarantee about the accuracy, timeliness or completeness of the data — always refer to the live FairPrice website for current prices and stock.


FairPrice scraper, NTUC FairPrice, Singapore grocery prices, SG supermarket data, grocery price comparison Singapore, FMCG price monitoring, Singapore retail data