Aponeo APIaponeo.de ↗
Access Aponeo.de product data via API: search by PZN, browse categories, get pricing, availability, deals, and JSON-LD product details for German pharmacy items.
What is the Aponeo API?
The Aponeo.de API covers 8 endpoints for extracting product data from one of Germany's major online pharmacies. Use search_products to run full-text queries across the catalog and retrieve PZN codes, prices, and manufacturer details, or call get_product_detail with a PZN to pull structured product data including JSON-LD offers, ratings, attribute maps, and stock availability. Category browsing, deal feeds, and bestseller lists are also supported.
curl -X GET 'https://api.parse.bot/scraper/9fe92eb8-fe22-4dbc-9f98-fd5b679b2a7c/search_products?page=1&query=aspirin' \ -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 aponeo-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: Aponeo Pharmacy SDK — search medications, browse categories, check deals."""
from parse_apis.aponeo_pharmacy_api import Aponeo, ProductNotFound
client = Aponeo()
# Search for products by keyword — limit caps total items fetched.
for product in client.productsummaries.search(query="ibuprofen", limit=3):
print(product.name, product.price_b, product.brand)
# Drill into one search result to get full product details.
item = client.productsummaries.search(query="aspirin", limit=1).first()
if item:
detail = item.details()
print(detail.pzn, detail.url, detail.availability)
# Browse a category — paginated, returns products with pricing/discounts.
for cat_product in client.categoryproducts.by_category(category="arzneimittel", limit=5):
print(cat_product.name, cat_product.price, cat_product.discount)
# Fetch a product directly by PZN.
try:
product = client.products.get(pzn="03464237")
print(product.pzn, product.availability, product.url)
except ProductNotFound as exc:
print(f"Product not found: {exc.pzn}")
# Check current top sellers.
for top in client.productsummaries.topsellers(limit=3):
print(top.name, top.price_b)
print("exercised: search / details / by_category / get / topsellers")
Full-text search over Aponeo's product catalog. Returns products from the site's dataLayer including name, PZN, pricing, brand, and manufacturer. Paginated by page number; total_results indicates the full result count. Each product carries a PZN suitable for fetching full detail via get_product_detail.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination |
| queryrequired | string | Search keyword (e.g., 'aspirin', 'ibuprofen', 'vitamin d') |
{
"type": "object",
"fields": {
"page": "integer — current page number",
"query": "string — the search query used",
"products": "array of product objects with name, pzn, price_b, base_price, brand, manufacturer",
"total_results": "integer — total number of results found"
},
"sample": {
"data": {
"page": 1,
"query": "aspirin",
"products": [
{
"pzn": "03464237",
"gtin": "03464237",
"name": "Aspirin Plus C Brausetabletten",
"brand": "Aspirin",
"price_b": 15.99,
"category": [
"9426",
"9542",
"12155"
],
"basePrice": 24.5,
"base_price": 24.5,
"grossPrice": 15.99,
"categoryIds": [
"9426",
"9542",
"12155"
],
"manufacturer": "Bayer Vital GmbH",
"promotionKey": "",
"manufacturerid": "2958"
}
],
"total_results": 28
},
"status": "success"
}
}About the Aponeo API
Product Lookup and Search
The search_products endpoint accepts a query string (e.g., 'ibuprofen', 'vitamin d') and an optional page integer for pagination. Results include each product's name, pzn, price_b, base_price, brand, and manufacturer, plus a total_results count so you can iterate through all pages. The returned pzn values feed directly into the detail endpoints.
get_product_detail and get_product_by_pzn both resolve a full product record by PZN. The response contains a json_ld array with Product schema objects — including offers, aggregate ratings, and reviews — alongside an attributes object (label-to-value pairs such as dosage form or package size), a descriptions map of section headings to text content, and a boolean availability field indicating current stock status. Providing a slug to get_product_detail constructs the direct product URL; omitting it falls back to a search-based resolution.
Category and Promotional Feeds
get_category_products takes a category path (e.g., 'arzneimittel', 'koerperpflege-kosmetik') and an optional page number, returning product name, pzn, url, price, and where applicable base_price and discount fields. Three no-parameter endpoints — get_deals, get_new_products, and get_topseller_products — return product lists from Aponeo's Schnäppchen, Neuheiten, and Topseller pages respectively, each providing name, pzn, price_b, and available metadata fields.
APO Cash Deals
get_apo_cash_deals surfaces products enrolled in Aponeo's APO Cash bonus scheme. The response mirrors the category product shape: name, pzn, url, price, and optional base_price and discount percentage. This endpoint is useful for tracking which products carry the bonus and monitoring price changes over time.
The Aponeo API is a managed, monitored endpoint for aponeo.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when aponeo.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 aponeo.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?+
- Monitor price changes for specific PZNs across Aponeo's catalog using
get_product_by_pznon a schedule - Build a German pharmacy price-comparison tool by searching for drug names and comparing
price_bandbase_pricefields - Track current discount promotions by polling
get_dealsfor updated Schnäppchen product lists - Identify newly listed pharmaceutical products by periodically fetching
get_new_products - Aggregate structured product metadata (dosage form, package size, manufacturer) from the
attributesresponse field - Audit stock availability across a watchlist of PZNs using the
availabilityboolean in detail responses - Discover which products qualify for APO Cash bonuses and their discount percentages via
get_apo_cash_deals
| 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 Aponeo.de offer an official developer API?+
What does `get_product_detail` return beyond basic pricing?+
json_ld array containing Product schema objects with offer details, aggregate ratings, and reviews. It also returns an attributes object mapping label names (such as dosage form or pack size) to their values, a descriptions map of labeled text sections from the product page, and a boolean availability flag for stock status.How does pagination work for search and category endpoints?+
search_products accepts an optional page integer and returns total_results so you can calculate the number of pages needed. get_category_products also accepts a page parameter. The deal, new product, topseller, and APO cash endpoints return a flat list with no pagination support.Does the API expose prescription-only medication data or patient leaflet documents?+
Can I retrieve customer review text for individual products?+
json_ld array returned by get_product_detail and get_product_by_pzn. Individual review text is not broken out into a dedicated endpoint or separate fields. You can fork this API on Parse and revise it to add an endpoint that extracts individual review content from the product page.