Game APIgame.co.za ↗
Search Game.co.za products by name. Returns prices, stock status, brand, ratings, and image URLs for South Africa's major retail chain.
What is the Game API?
The Game.co.za API gives programmatic access to product listings from one of South Africa's largest general merchandise retailers. A single endpoint, search_products, returns up to 10 structured fields per product — including price, brand, stock status, rating, and review count — across paginated result sets that can return up to 100 items per page.
curl -X POST 'https://api.parse.bot/scraper/1b9ac293-18b9-4a82-812b-21665d25555b/search_products' \
-H 'X-API-Key: $PARSE_API_KEY' \
-H 'Content-Type: application/json' \
-d '{}'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 game-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.
"""
Game South Africa Product Search API - Parse Client
Search for products on Game.co.za with pagination support.
Get your API key from: https://parse.bot/settings
"""
import os
import requests
from typing import Optional, Any, Dict, List
from dataclasses import dataclass
@dataclass
class Product:
"""Represents a product from Game.co.za"""
code: str
name: str
price: float
formatted_price: str
currency: str
image_url: str
brand: str
in_stock: bool
rating: Optional[float]
review_count: Optional[int]
def __str__(self) -> str:
stock_status = "✓ In Stock" if self.in_stock else "✗ Out of Stock"
rating_str = f"⭐ {self.rating} ({self.review_count} reviews)" if self.rating else "No ratings"
return f"{self.name}\n Brand: {self.brand}\n Price: {self.formatted_price}\n {stock_status}\n {rating_str}"
class ParseClient:
"""Client for Game South Africa Product Search API"""
def __init__(self, api_key: Optional[str] = None):
"""Initialize the Parse API client
Args:
api_key: API key for authentication. If not provided, reads from PARSE_API_KEY env var.
"""
self.base_url = "https://api.parse.bot"
self.scraper_id = "1b9ac293-18b9-4a82-812b-21665d25555b"
self.api_key = api_key or os.getenv("PARSE_API_KEY")
if not self.api_key:
raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")
def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
"""Make an API call to the Parse bot
Args:
endpoint: The endpoint name (e.g., "search_products")
method: HTTP method ("GET" or "POST")
**params: Query/body parameters
Returns:
API response as dictionary
"""
url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
headers = {
"X-API-Key": self.api_key,
"Content-Type": "application/json"
}
try:
if method.upper() == "GET":
response = requests.get(url, headers=headers, params=params, timeout=30)
else: # POST
response = requests.post(url, headers=headers, json=params, timeout=30)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"API Error: {e}")
raise
def search_products(self, query: str, page: int = 1, page_size: int = 20) -> Dict[str, Any]:
"""Search for products by name on Game.co.za
Args:
query: Search query text (e.g., 'samsung', 'laptop')
page: Page number for pagination (1-based, default: 1)
page_size: Number of results per page, 1-100 (default: 20)
Returns:
Dictionary containing search results with products list
"""
return self._call("search_products", method="POST", query=query, page=page, page_size=page_size)
def main():
"""Practical workflow example: Search for products and analyze results"""
# Initialize the client
client = ParseClient()
# Practical use case: Find all Samsung products across multiple pages
search_query = "samsung"
print(f"\n🔍 Searching for '{search_query}' on Game.co.za...\n")
all_products: List[Product] = []
pages_to_check = 2 # Check first 2 pages
for page_num in range(1, pages_to_check + 1):
print(f"📄 Fetching page {page_num}...")
try:
# Search with pagination
results = client.search_products(
query=search_query,
page=page_num,
page_size=10 # Get 10 results per page for demo
)
# Parse results
total_results = results.get("total_results", 0)
total_pages = results.get("total_pages", 0)
products_data = results.get("products", [])
if not products_data:
print(f" No more products found.")
break
print(f" Found {len(products_data)} products on this page")
print(f" Total results available: {total_results} across {total_pages} pages\n")
# Convert to Product objects for easier handling
for product_data in products_data:
product = Product(
code=product_data.get("code"),
name=product_data.get("name"),
price=product_data.get("price", 0),
formatted_price=product_data.get("formatted_price"),
currency=product_data.get("currency"),
image_url=product_data.get("image_url"),
brand=product_data.get("brand"),
in_stock=product_data.get("in_stock", False),
rating=product_data.get("rating"),
review_count=product_data.get("review_count")
)
all_products.append(product)
except Exception as e:
print(f" Error fetching page {page_num}: {e}")
break
# Analysis: Find best deals and in-stock items
print("\n" + "="*60)
print("📊 ANALYSIS RESULTS")
print("="*60)
if all_products:
# In-stock products
in_stock = [p for p in all_products if p.in_stock]
print(f"\n✓ In-stock products: {len(in_stock)}/{len(all_products)}")
# Products with ratings
rated_products = [p for p in all_products if p.rating is not None]
print(f"⭐ Products with ratings: {len(rated_products)}/{len(all_products)}")
if rated_products:
# Find highest rated
top_rated = max(rated_products, key=lambda x: x.rating)
print(f"\n🏆 Highest Rated Product:")
print(f" {top_rated.name}")
print(f" Rating: {top_rated.rating} stars ({top_rated.review_count} reviews)")
print(f" Price: {top_rated.formatted_price}")
# Find cheapest in-stock
if in_stock:
cheapest = min(in_stock, key=lambda x: x.price)
print(f"\n💰 Cheapest In-Stock Product:")
print(f" {cheapest.name}")
print(f" Price: {cheapest.formatted_price}")
print(f" Brand: {cheapest.brand}")
# Price range
prices = [p.price for p in all_products]
print(f"\n💵 Price Range:")
print(f" Lowest: R{min(prices):,.2f}")
print(f" Highest: R{max(prices):,.2f}")
print(f" Average: R{sum(prices)/len(prices):,.2f}")
# Brand breakdown
brands = {}
for product in all_products:
brands[product.brand] = brands.get(product.brand, 0) + 1
print(f"\n🏢 Top Brands Found:")
for brand, count in sorted(brands.items(), key=lambda x: x[1], reverse=True)[:5]:
print(f" {brand}: {count} products")
else:
print("No products found in the search results.")
if __name__ == "__main__":
main()Search for products by name on Game.co.za. Returns paginated results with product name, price, image URL, brand, stock status, and ratings.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| queryrequired | string | Search query text for finding products (e.g. 'samsung', 'laptop', 'washing machine'). |
| page_size | integer | Number of results per page, between 1 and 100. |
{
"type": "object",
"fields": {
"query": "string",
"products": "array of product objects with code, name, price, formatted_price, currency, image_url, brand, in_stock, rating, review_count",
"page_size": "integer",
"total_pages": "integer",
"current_page": "integer",
"total_results": "integer"
},
"sample": {
"query": "samsung",
"products": [
{
"code": "000000000000646956",
"name": "ONE FOR ALL Samsung TV Remote CON000203",
"brand": "ONE FOR ALL",
"price": 399,
"rating": null,
"currency": "ZAR",
"in_stock": true,
"image_url": "https://api-beta-game.walmart.com/medias/Default-Product-Default-WF-null?context=bWFzdGVyfHByb2Nlc3NlZH...",
"review_count": null,
"formatted_price": "R399.00"
},
{
"code": "000000000000824678",
"name": "SAMSUNG SAMSUNG FRONT L 8kg WW80T3040BS/FA",
"brand": "SAMSUNG",
"price": 5999,
"rating": 4.5,
"currency": "ZAR",
"in_stock": true,
"image_url": "https://api-beta-game.walmart.com/medias/Default-Product-Default-WF-null?context=bWFzdGVyfHByb2Nlc3NlZH...",
"review_count": 40,
"formatted_price": "R5,999.00"
}
],
"page_size": 5,
"total_pages": 45,
"current_page": 1,
"total_results": 222
}
}About the Game API
What the API Returns
The search_products endpoint accepts a query string (for example, 'samsung', 'laptop', or 'washing machine') and returns a paginated list of matching products from Game.co.za. Each product object in the products array includes: code (the product's unique identifier), name, price (numeric), formatted_price (currency-formatted string), currency, image_url, brand, in_stock (boolean), rating, and review_count. This covers the full snapshot of what a shopper sees on a standard search results page.
Pagination and Query Parameters
Results are controlled by three inputs: query (required), page (1-based integer), and page_size (integer between 1 and 100). The response always includes total_results, total_pages, and current_page alongside the product array, making it straightforward to iterate through large result sets programmatically. For a query like 'television', you can retrieve up to 100 products per call and walk through subsequent pages until current_page equals total_pages.
Coverage and Scope
Game.co.za carries a wide range of categories including electronics, appliances, furniture, gaming hardware, and home goods. The API reflects whatever Game.co.za surfaces in its search results for a given query, including price and stock availability at time of request. All monetary values are in South African Rand (ZAR). The API does not require any account or login to retrieve results.
The Game API is a managed, monitored endpoint for game.co.za — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when game.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 game.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 price movements on electronics like laptops and TVs across multiple queries over time using the
pricefield. - Build a stock alert system that monitors
in_stockstatus for specific products by polling thesearch_productsendpoint. - Aggregate
ratingandreview_countdata across product categories to compare consumer sentiment on brands available in South Africa. - Populate a product comparison tool for South African shoppers using
name,formatted_price,brand, andimage_urlfields. - Feed a price comparison site covering ZAR-denominated retail by extracting
priceandcurrencyfrom search results. - Audit brand presence on Game.co.za by querying brand names and counting returned product listings.
| 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 Game.co.za have an official developer API?+
What does search_products return for out-of-stock items?+
in_stock boolean field distinguishes available products from unavailable ones, so you can filter client-side rather than getting only in-stock results.Does the API return product detail pages, descriptions, or specifications?+
Can I filter search results by category, price range, or brand?+
search_products endpoint accepts a free-text query and pagination parameters only. Category, price-range, and brand filters are not current inputs. You can fork the API on Parse and revise it to add those filter parameters.