pnp.co.za APIpnp.co.za ↗
Access Pick n Pay grocery data: search products, browse categories, get specials, product details, and store locations via 6 structured endpoints.
curl -X GET 'https://api.parse.bot/scraper/b87810bc-903f-41b8-b38d-c5c911cab324/search_products?query=milk' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for products by keyword with support for pagination, sorting, and filtering. Returns matching products, facets for refinement, pagination info, and breadcrumbs.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-based) |
| sort | string | Sort order. Accepted values: relevance, price-asc, price-desc |
| queryrequired | string | Search keyword (e.g. 'milk', 'bread') |
| filters | string | Additional filter string appended to the search query (e.g. ':isOnPromotion:On+Promotion') |
| page_size | integer | Number of results per page |
{
"type": "object",
"fields": {
"facets": "array of facet objects for filtering (category, certifications, promotion status)",
"products": "array of product objects with code, name, price, images, stock, and availability",
"pagination": "object with currentPage, pageSize, sort, totalPages, totalResults",
"breadcrumbs": "array of breadcrumb objects for navigation context",
"currentQuery": "object with query value and URL",
"freeTextSearch": "string echoing the original search term"
},
"sample": {
"data": {
"facets": [
{
"name": "category",
"values": [
{
"name": "Bakery",
"count": 99
}
]
}
],
"products": [
{
"code": "000000000000129009_EA",
"name": "Albany Superior White Sliced Bread 700g",
"price": {
"value": 18.49,
"currencyIso": "ZAR",
"formattedValue": "R18.49"
},
"stock": {
"stockLevelStatus": "inStock"
},
"images": [
{
"url": "https://cdn-prd-02.pnp.co.za/sys-master/images/h53/h40/11327325569054/silo-product-image-v2-08Dec2023-152812-6001253010178-Straight_on-193523-6046_400Wx400H",
"format": "product"
}
],
"available": true
}
],
"pagination": {
"sort": "relevance",
"pageSize": 72,
"totalPages": 2,
"currentPage": 0,
"totalResults": 129
},
"breadcrumbs": [],
"currentQuery": {
"query": {
"value": "bread:relevance"
}
},
"freeTextSearch": "bread"
},
"status": "success"
}
}About the pnp.co.za API
The Pick n Pay API exposes 6 endpoints covering product search, category browsing, specials, detailed product data, and store locations from pnp.co.za. The search_products endpoint returns matching products alongside facets for refinement, pagination metadata, and breadcrumbs, while get_product_detail delivers nutritional classifications, stock levels, and full image sets for any individual product code.
Product Search and Discovery
The search_products endpoint accepts a required query string plus optional page, page_size, and sort parameters (relevance, price-asc, price-desc). Results include a products array — each entry carrying code, name, price, images, stock, and available — alongside a facets array that surfaces category, certification, and promotion-status filters. The filters input lets you narrow results further, for example to only on-promotion items, by appending a filter string to the query. get_category_products works identically but takes a category_id (e.g. beverages-423144840) instead of a free-text query, and returns the same product and facet shape with category hierarchy breadcrumbs.
Product Details and Specials
get_product_detail takes a single product_code obtained from search or category results and returns the full record: description, classifications (grouped nutritional and product features), categories array, images with format and alt-text, and a stock object with both stockLevel and stockLevelStatus. The get_specials endpoint lists currently promoted products; each product object includes price with oldPrice and savings details alongside standard stock and image fields. An optional category_id input scopes specials to a single department.
Categories and Store Locations
get_all_categories requires no inputs and returns top-level department navigation as an array of objects with categoryCode, linkName, and url — useful for seeding a category browser or discovering valid category_id values for other endpoints. get_stores accepts an optional query string (name, city, suburb, or street) and returns a stores array with storeId, storeName, storeAddress, storeType, telephone, email, tradingHours, and geolocation coordinates. Omitting the query returns all stores.
- Build a grocery price comparison tool using
search_productswithprice-ascsorting across multiple queries. - Track weekly specials and savings by polling
get_specialsper category and comparingoldPriceagainst currentprice. - Populate a store locator map using
geolocation,tradingHours, andstoreTypefromget_stores. - Extract nutritional
classificationsfromget_product_detailto power a diet-tracking or allergen-screening app. - Index a full product catalog by iterating
get_category_productsacross allcategory_idvalues fromget_all_categories. - Monitor stock availability for specific SKUs by checking
stockLevelStatusinget_product_detailon a schedule. - Scope promotion alerts to a single department by combining
get_specialswith acategory_idfromget_all_categories.
| 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 | 250 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 Pick n Pay have an official public developer API?+
How are facets returned from `search_products` and `get_category_products` useful for filtering?+
facets array containing filter dimensions such as sub-category, certifications, and promotion status. You can pass these filter values back via the filters input parameter on the next request to narrow results — for example, appending :isOnPromotion:On+Promotion to show only discounted items within a search or category query.Does the API return product reviews or ratings?+
What are the pagination conventions across endpoints?+
page parameter. The pagination object in each response includes currentPage, pageSize, totalPages, and totalResults, so you can iterate pages programmatically until currentPage reaches totalPages - 1. The get_stores endpoint returns page, totalCount, and totalPages in its pagination object using the same pattern.Does the API cover Click & Collect or delivery slot availability?+
tradingHours and geolocation, and product-level stock data, but fulfilment slots, Click & Collect scheduling, and delivery windows are not included in any endpoint. You can fork the API on Parse and revise it to add endpoints covering those fulfilment details.