OBI APIobi.de ↗
Search OBI Germany's product catalog, retrieve pricing and product details, and check branch-level stock availability at nearby stores by postal code.
What is the OBI API?
The OBI.de API covers 3 endpoints for querying the OBI Germany hardware and home improvement catalog. Use search_products to run full-text searches returning article IDs, names, and URLs across the entire catalog; then feed those IDs into get_product_detail for pricing, brand, GTIN, energy class, and ratings, or into check_store_availability to see stock quantities and opening hours at up to 10 nearby OBI branches.
curl -X GET 'https://api.parse.bot/scraper/a41d44df-0bce-46cc-b9ee-4295beefe6d0/search_products?query=mobiles+Klimager%C3%A4t' \ -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 obi-de-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: OBI Germany SDK — bounded, re-runnable; every call capped."""
from parse_apis.OBI_Germany_API import Obi, ProductNotFound
client = Obi()
# Search for mobile air conditioners
for product in client.product_summaries.search(query="mobiles Klimagerät", limit=3):
print(product.name, product.article_id, product.is_marketplace)
# Drill down: get full details for the first result via navigation
item = client.product_summaries.search(query="Klimagerät", limit=1).first()
try:
detail = item.details()
print(detail.name, detail.price, detail.currency, detail.is_marketplace, detail.merchant_name)
except ProductNotFound as e:
print(f"not found: {e.article_id}")
# Check store availability near Leipzig (04103)
for store in detail.check_availability(postal_code="04103", limit=3):
print(store.store_name, store.city, store.distance_km, store.in_stock, store.available_quantity)
print("exercised: product_summaries.search / product_summary.details / product.check_availability")
Full-text search across the OBI product catalog. Returns matching products with article IDs, names, URLs, and marketplace indicators. Results are auto-iterated; the SDK walks all pages. Each product exposes an article_id usable with get_product_detail and check_store_availability. Marketplace status (is_marketplace, merchant_name) is null in search results; use get_product_detail for definitive seller identification.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword(s) in German, e.g. 'mobiles Klimagerät', 'Ventilator', 'Klimaanlage'. |
{
"type": "object",
"fields": {
"query": "the search query that was submitted",
"total": "total number of matching products across all pages",
"products": "array of product summaries with article_id, name, url, is_marketplace, and merchant_name"
},
"sample": {
"data": {
"query": "mobiles Klimagerät",
"total": 125,
"products": [
{
"url": "https://www.obi.de/p/6795504/mobiles-klimageraet-kgm-7000-35-eek-a-inkl-fernbedienung-mit-wifi-funktion",
"name": "Mobiles Klimagerät KGM 7000-35 EEK: A inkl. Fernbedienung mit WiFi-Funktion",
"article_id": "6795504"
},
{
"url": "https://www.obi.de/p/8620890/midea-mobile-split-klimaanlage-portasplit",
"name": "Midea mobile Split-Klimaanlage PortaSplit",
"article_id": "8620890"
}
]
},
"status": "success"
}
}About the OBI API
Product Search and Details
search_products accepts German-language keywords (e.g. 'mobiles Klimagerät', 'Ventilator') and returns the total match count plus a full list of products, each with an article_id, name, and url. Results are paginated automatically, so you receive the complete result set without managing page offsets manually. The article_id from these results is the key input for the other two endpoints.
get_product_detail accepts a single article_id and returns a 10-field response covering the canonical url, gtin (GTIN-13 barcode), name, brand, price (EUR), rating, category, currency, image_url, and article_id. This is the right endpoint when you need machine-readable pricing or want to match OBI products to barcodes in an external system.
Branch-Level Stock Availability
check_store_availability takes an article_id and a 5-digit German postal code (postal_code). It returns stores, an array of up to 10 nearest OBI branches, each with stock quantity, reserve-and-collect eligibility, street address, distance from the postal code, and current opening hours. The response also includes delivery_available (a boolean for home delivery to that postal code) and a delivery_info array listing seller, price, and delivery cost details. This makes it possible to distinguish between click-and-collect and direct-to-door fulfilment in a single call.
The OBI API is a managed, monitored endpoint for obi.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when obi.de 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 obi.de 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-tracking tool that monitors EUR prices for specific OBI article IDs over time.
- Create a store-picker widget that shows which nearby OBI branches have a product in stock before a customer drives to the store.
- Match OBI products to a barcode database using the GTIN-13 field returned by get_product_detail.
- Aggregate product ratings and categories from OBI to feed into a home improvement product comparison site.
- Check reserve-and-collect eligibility across multiple postal codes for a given article to support regional inventory dashboards.
- Query delivery_available and delivery_info to surface shipping options for customers in specific German regions.
- Search OBI's catalog by German-language keyword to build a translated or categorised product index for downstream apps.
| 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.