Woolworths APIwoolworths.co.za ↗
Access Woolworths SA food categories, product listings, nutritional data, pricing, and store locations via a structured API. 7 endpoints covering search and store locator.
What is the Woolworths API?
This API exposes 7 endpoints covering Woolworths South Africa's food catalogue and store network. You can retrieve top-level food categories via get_food_categories, paginate through product listings with pricing, search by keyword, and pull full product detail records including ingredients, allergens, nutritional information, and images. Three store locator endpoints let you resolve provinces, suburbs, and nearby store addresses.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/3c08f360-415f-4984-bcd1-846bc0d7dafc/get_food_categories' \ -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 woolworths-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: Woolworths South Africa SDK — bounded, re-runnable."""
from parse_apis.Woolworths_South_Africa_API import Woolworths, ParseError
client = Woolworths()
# Browse food categories
for category in client.categories.list(limit=5):
print(category.name, category.url)
# Search for products by keyword
for product in client.product_summaries.search(query="bread", limit=5):
print(product.name, product.price, product.on_sale)
# Drill-down: get full details from a search result
item = client.product_summaries.search(query="chicken", limit=1).first()
if item:
detail = item.details()
print(detail.name, detail.brand, detail.rating, detail.review_count)
for nutrient in detail.nutritional_info[:3]:
print(nutrient.nutrient, nutrient.per_100g_ml, nutrient.unit)
# Browse products in a specific category (constructible by url/group_id)
pantry = client.category(url="ncat0010251")
for product in pantry.products(limit=3):
print(product.name, product.price, product.price_per_kg)
# Find stores near a suburb
suburb = client.suburbs.list(limit=1).first()
if suburb:
print(suburb.name, suburb.postal_code)
for store in suburb.stores.list(distance=25, limit=3):
print(store.name, store.address, store.phone)
# List provinces with availability flags
for province in client.provinces.list(limit=5):
print(province.name, province.store_pickup_enabled, province.liquor_delivery_enabled)
# Handle errors gracefully
try:
bad = client.category(url="invalid_category_xyz")
list(bad.products(limit=1))
except ParseError as e:
print(f"Error: {e}")
print("exercised: categories.list / product_summaries.search / details / category.products / suburbs.list / stores.list / provinces.list")
Retrieves all top-level food categories from Woolworths via Constructor.io browse API. Each category includes a name and group_id suitable for use with get_product_listing. Categories include seasonal collections, product types (Bakery, Frozen Food), and dietary preferences.
No input parameters required.
{
"type": "object",
"fields": {
"categories": "array of category objects with name and url (group_id)"
},
"sample": {
"data": {
"categories": [
{
"url": "ncat0010251",
"name": "Pantry"
},
{
"url": "cat606522",
"name": "Promotions"
},
{
"url": "ncat0010112",
"name": "Meat, Poultry & Fish"
},
{
"url": "ncat0010084",
"name": "Bakery"
}
]
},
"status": "success"
}
}About the Woolworths API
Food Catalogue Endpoints
get_food_categories returns an array of category objects, each with a name and url field. Those URL paths feed directly into get_product_listing as the required category_url parameter. get_product_listing returns a products array plus a total count, paginated in pages of 24 — use the offset integer parameter to walk through results. search_products accepts a query string and the same offset parameter, returning matching products with prices. Note that some search terms may return zero results if they do not match indexed product names on the site.
Product Detail
get_product_details takes a product_url path from any listing or search result and returns a structured object covering id, name, description, brand, images, ingredients, nutritional_info, allergens, dietary_info, and pricing. This is the endpoint to use when you need label-level data — macronutrient breakdowns, allergen flags, and dietary classifications — rather than just the summary price and name available in listing results.
Store Locator
Three endpoints cover physical store discovery. get_store_locator_provinces returns all South African provinces with storePickupEnabled and liquorDeliveryEnabled boolean flags per province. get_store_locator_suburbs returns a flat list of suburbs with name, id, and postalCode fields. Pass a suburb_id from that list into get_stores_by_suburb along with an optional distance radius (in km) to get nearby stores with name, address, and phone fields.
The Woolworths API is a managed, monitored endpoint for woolworths.co.za — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when woolworths.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 woolworths.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 South African grocery price tracker using product listings and pricing fields from get_product_listing.
- Extract allergen and ingredient data from get_product_details to power a dietary restriction filtering tool.
- Aggregate nutritional_info fields across product categories for meal planning or calorie tracking applications.
- Map Woolworths store locations by suburb using get_stores_by_suburb with distance radius filtering.
- Check province-level liquorDeliveryEnabled flags to determine delivery eligibility for alcohol products.
- Sync Woolworths food catalogue data into a comparison shopping platform using search_products with paginated offsets.
- Monitor price changes on specific products by polling get_product_details with known product URL paths.
| 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 Woolworths South Africa have an official developer API?+
What product-level fields does get_product_details return beyond basic pricing?+
ingredients, nutritional_info, allergens, dietary_info, images, brand, and description in addition to price and product identifiers. This makes it the appropriate endpoint when you need label-quality data rather than just the name and price surfaced in listing results.Does the API cover non-food departments like clothing or homeware?+
Does get_product_listing support filtering by dietary flag or price range within a category?+
category_url and offset as inputs; there is no server-side filter for dietary flags or price range. Filtering on those fields would need to be done client-side against the returned products array. You can fork this API on Parse and revise it to expose additional filter parameters if the underlying category pages support them.How does pagination work across listing and search endpoints?+
total count so you can calculate how many pages exist. Pass multiples of 24 (0, 24, 48, ...) as the offset integer to retrieve subsequent pages.