PriceCheck APIpricecheck.co.za ↗
Search PriceCheck.co.za products and compare store offers across South African retailers. Get prices in ZAR, store names, addresses, and product details.
What is the PriceCheck API?
The PriceCheck.co.za API gives developers access to South African retail pricing data through 2 endpoints. Use search_products to query the full PriceCheck catalogue and retrieve product names, best prices in ZAR, and retailer names, then pass the returned product_id to get_product_offers to fetch every store's individual listing price, the store's registered address, and the full price range across all offers.
curl -X GET 'https://api.parse.bot/scraper/6de3452a-00ab-44bc-b023-4f6c36b1e64e/search_products?query=samsung+galaxy+s24' \ -H 'X-API-Key: $PARSE_API_KEY'
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 pricecheck-co-za-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: PriceCheck South Africa — search products, compare store offers."""
from parse_apis.pricecheck_co_za_api import PriceCheck, ProductNotFound
client = PriceCheck()
# Search for products and browse the first few results.
for summary in client.product_summaries.search(query="samsung galaxy s24", limit=5):
print(summary.name, summary.price, summary.currency, "-", summary.store)
# Drill into the first hit to see every store offer.
hit = client.product_summaries.search(query="samsung galaxy s24", limit=1).first()
if hit is not None:
product = hit.details()
print(product.name, product.brand, product.category)
print(f"Price range: {product.low_price} – {product.high_price} {product.currency}")
if product.offers:
for offer in product.offers:
label = "SPECIAL" if offer.on_special else "regular"
print(f" {offer.store}: {offer.price} ({label}, in stock: {offer.in_stock})")
# Point lookup by a known product_id with error handling.
try:
detail = client.products.get(product_id="242275225")
print(detail.name, detail.offer_count, "offers")
except ProductNotFound:
print("Product not found")
print("exercised: product_summaries.search / details / products.get")
Searches PriceCheck for products matching a free-text query and returns one page of product listings. Each result is one product with its name, the current best price in ZAR, and the store (retailer) offering that price, plus the product_id needed by get_product_offers. One page holds up to about 18 products; the page input selects the page (omitted = page 1) and total_pages/has_more come from the site's own pagination, so callers step through pages until has_more is false. A query with no matches returns an empty results array.
| Param | Type | Description |
|---|---|---|
| page | integer | Result page number, 1-based, at most 500. Use total_pages / has_more from the response to continue. |
| queryrequired | string | Free-text product search term, e.g. a product name or model. |
{
"type": "object",
"fields": {
"page": "page number returned",
"query": "the search term as applied",
"results": "array of products; each has product_id (string, use with get_product_offers), name, description, price (number, best price), currency (ZAR), store (retailer name offering the best price), in_stock (boolean), image URL and PriceCheck product url",
"has_more": "true when a later page exists",
"total_pages": "total number of result pages the site reports for this query"
},
"sample": {
"data": {
"page": 1,
"query": "samsung galaxy s24",
"results": [
{
"url": "https://www.pricecheck.co.za/offers/242275225/Samsung+Galaxy+S24+Ultra",
"name": "Samsung Galaxy S24 Ultra",
"image": "https://images.pricecheck.co.za/images/objects/hash/product/d75/3f5/22a/image_medium_242275225.jpg?1710293440",
"price": 17999,
"store": "cashconverters",
"currency": "ZAR",
"in_stock": true,
"product_id": "242275225",
"description": "Galaxy S24 Ultra"
}
],
"has_more": true,
"total_pages": 86
},
"status": "success"
}
}About the PriceCheck API
Search and Discovery
The search_products endpoint accepts a free-text query string and returns a paginated list of matching products. Each result includes a product_id (used downstream), name, description, price (the current best price in ZAR), and the store name offering that price. Pagination is 1-based via the page parameter, capped at page 500; the response includes total_pages and a has_more boolean so you can walk through deep result sets programmatically.
Per-Product Offer Details
Passing a product_id to get_product_offers returns the full offer picture for that product. The response includes name, brand, category, images (array of image URLs), currency (always ZAR), low_price, high_price, and an offers array. Each entry in offers carries the retailer name (store), a store_id, offer_id, the store's physical or registered address (when available), and that store's individual listing price. This makes it straightforward to build price-comparison views or store-locator features against live South African retail data.
Coverage and Scope
All prices are denominated in ZAR and reflect listings on PriceCheck.co.za, which aggregates South African online and brick-and-mortar retailers. Product data is organised by PriceCheck's own category taxonomy, returned as the category field in get_product_offers. The brand field is returned where PriceCheck associates one with the product, and may be null for unbranded or generic items.
The PriceCheck API is a managed, monitored endpoint for pricecheck.co.za — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when pricecheck.co.za 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 pricecheck.co.za 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.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price-comparison tool showing the cheapest South African retailer for any product query
- Track ZAR price changes across multiple stores for a given product_id over time
- Enrich a product catalogue with brand, category, and image data from PriceCheck listings
- Display a store locator using the physical address field returned in each offer
- Identify the spread between low_price and high_price to flag price anomalies or deals
- Power a shopping assistant that maps a free-text product query to a ranked offer list
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 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.