Shoprite APIshoprite.co.za ↗
Access Shoprite.co.za product listings, specials, pricing, store locations, and department categories via 8 structured API endpoints.
What is the Shoprite API?
The Shoprite.co.za API exposes 8 endpoints covering product search, promotional specials, department browsing, store locations, and cross-retailer price comparison. Each product response includes fields like price, special_price, deal_type, valid_until, and availability, giving you real-time data on what Shoprite is currently selling and at what price. The set_preferred_store endpoint lets you scope results to a specific branch using a store ID from get_store_locator.
curl -X GET 'https://api.parse.bot/scraper/98bf936f-1cdc-4e00-b994-5c44eb2d1d31/get_all_specials?page=0' \ -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 shoprite-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: Shoprite ZA SDK — browse specials, search products, drill into departments."""
from parse_apis.shoprite_za_api import Shoprite, Product, Department, Store, StorePreference, ProductNotFound
shoprite = Shoprite()
# Search for products by name — limit caps total items fetched
for product in shoprite.products.search(query="milk", limit=5):
print(product.name, product.code, product.price, product.availability)
# Browse current specials/promotions
for special in shoprite.products.list_specials(limit=3):
print(special.name, special.price, special.special_price, special.deal_type)
# Drill into one product's full detail by code
try:
detail = shoprite.products.get(product_code="10136301EA")
print(detail.name, detail.price, detail.description, detail.availability)
except ProductNotFound as exc:
print(f"Product not found: {exc.product_code}")
# List departments and browse their products
dept = shoprite.departments.list(limit=1).first()
if dept:
print(dept.id, dept.name)
for item in dept.products(limit=3):
print(item.name, item.price, item.deal_type)
# List stores
for store in shoprite.stores.list(limit=2):
print(store.name, store.address, store.town, store.phone)
result = store.set_preferred()
print(result.status, result.store_id)
print("exercised: products.search / products.list_specials / products.get / departments.list / dept.products / stores.list / store.set_preferred")
Retrieve current promotional/special products from the Shoprite specials page. Returns up to 20 products per page with real-time pricing, deal types, and availability. Products include bundle deals, price reductions, and multi-buy offers.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed). |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"products": "array of product objects with code, name, brand, category, url, price, special_price, deal_type, valid_until, availability"
},
"sample": {
"data": {
"page": 0,
"products": [
{
"url": "https://www.shoprite.co.za/p/10538316EA",
"code": "10538316EA",
"name": "County Fair Frozen Chicken Mixed Portions With Brine Based Mixture 5kg",
"brand": "",
"price": "R249.99",
"category": "",
"deal_type": "Now R209.99",
"valid_until": null,
"availability": "Available",
"special_price": "R209.99"
},
{
"url": "https://www.shoprite.co.za/p/10156064EA",
"code": "10156064EA",
"name": "Selati Golden Brown Sugar 2kg",
"brand": "",
"price": "R59.99",
"category": "",
"deal_type": "Now R44.99",
"valid_until": null,
"availability": "Available",
"special_price": "R44.99"
}
]
},
"status": "success"
}
}About the Shoprite API
Product Data and Search
The search_products endpoint accepts a query string and an optional 0-indexed page parameter, returning up to 20 products per page. Each product object includes code, name, brand, category, url, price, special_price, deal_type, valid_until, and availability. The get_product_detail endpoint takes a single product_code (e.g. 10136301EA) and returns the full product record including a description field not present in list results. Product codes are interchangeable across endpoints — pull them from search or category results and pass them directly to detail.
Specials and Promotions
get_all_specials returns the current promotions page, paginated in sets of 20. The deal_type field distinguishes bundle deals, straight price reductions, and multi-buy offers. valid_until gives the expiry date of each promotion so you can filter or alert on soon-expiring deals. This endpoint requires no inputs beyond an optional page number.
Departments and Category Browsing
get_all_departments returns every top-level department with its id, name, and url. Those id and name values feed directly into get_products_by_category, which requires both category_id (e.g. 2413) and category_name in URL-path format (e.g. All-Departments/Food). Products returned from category browsing carry the same field set as search results, so the data shape is consistent regardless of how you arrive at a product list.
Store Locations and Store-Specific Pricing
get_store_locator returns the full list of Shoprite branches with each store's id, name, address, town, postal_code, phone, latitude, longitude, and openings (weekly hours). Once you have a store_id, pass it to set_preferred_store to scope subsequent product requests — stock levels and prices — to that specific branch. The compare_prices endpoint accepts a product name string and returns a comparison array with shoprite_price, shoprite_special, muncho_price, and muncho_special across available retailers.
The Shoprite API is a managed, monitored endpoint for shoprite.co.za — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when shoprite.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 shoprite.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?+
- Track Shoprite promotional prices and
valid_untildates to build a weekly specials alert service. - Build a grocery price comparison tool using
compare_pricesto surface Shoprite vs Muncho pricing for a given product. - Map all Shoprite store locations using
latitudeandlongitudefromget_store_locatorto show the nearest branch. - Monitor price changes on specific SKUs by polling
get_product_detailwith a productcodeon a schedule. - Power a category-browsing grocery app using
get_all_departmentsandget_products_by_categorywith pagination. - Filter active bundle deals and multi-buy offers by checking the
deal_typefield acrossget_all_specialsresults. - Scope store-specific availability by combining
get_store_locatorstore IDs withset_preferred_storebefore querying products.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Shoprite have an official developer API?+
What does `set_preferred_store` actually change, and does it persist?+
set_preferred_store accepts a store_id from get_store_locator and returns a confirmation with the set store_id. It scopes stock levels and prices in subsequent product requests to that branch. The preference applies within the same session context; it does not persist automatically across independent API calls in a new session.Does `get_all_specials` return specials from all store types, including Checkers and Usave?+
Can I retrieve product reviews or ratings through this API?+
name, description, price, special_price, and availability, but does not expose customer reviews or star ratings. You can fork the API on Parse and revise it to add a reviews endpoint if that data is accessible on the product page.How many products does each paginated endpoint return, and where does pagination start?+
search_products, get_all_specials, and get_products_by_category — return up to 20 products per page. Pagination is 0-indexed, meaning the first page is page=0. The page parameter is optional and defaults to the first page when omitted.