Thomann APIthomann.de ↗
Access Thomann's music store catalog via API. Search products, browse categories, retrieve specs, pricing, availability, and customer reviews.
What is the Thomann API?
The Thomann API exposes 6 endpoints covering product search, detailed specs, category browsing, and customer reviews from one of Europe's largest music retail catalogs. search_products returns paginated results with price, availability, and rating data across the full Thomann inventory. get_product_details delivers EAN barcodes, brand, model, description, and a numeric rating score for any individual product.
curl -X GET 'https://api.parse.bot/scraper/6af99b32-0117-475c-82e4-622fd744b176/search_products?page=1&limit=25&query=guitar' \ -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 thomann-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.
from parse_apis.thomann_api import Thomann, ProductSummary, Product, Category, Review
thomann = Thomann()
# Search for acoustic guitars
for product in thomann.productsummaries.search(query="acoustic guitar", limit=3):
print(product.name, product.brand, product.price, product.currency, product.rating)
# Filter products by price range and manufacturer
for product in thomann.productsummaries.filter(query="piano", max_price=500, limit=3):
print(product.name, product.price, product.availability)
# Get full product details from a search result
for result in thomann.productsummaries.search(query="gibson sg", limit=1):
detail = result.details()
print(detail.name, detail.description, detail.ean)
# Get reviews for the product
for review in detail.reviews.list(limit=3):
print(review.author, review.headline, review.stars, review.text)
# Browse categories and list products in one
for cat in thomann.categories.list(limit=5):
print(cat.name, cat.url)
guitars = Category(_api=thomann, name="Guitars and Basses", url="guitars_and_basses.html")
for item in guitars.products(limit=3):
print(item.name, item.brand, item.price)
Full-text search over Thomann's product catalog by keyword. Returns paginated product summaries including price, rating, and availability. Results are ordered by relevance. Pagination via page number; each page returns up to `limit` items.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number. |
| limit | integer | Max results per page. Accepted values: 25, 50, 100. |
| queryrequired | string | Search keyword. |
{
"type": "object",
"fields": {
"page": "integer current page number",
"total": "integer total number of matching products",
"products": "array of ProductSummary objects"
},
"sample": {
"data": {
"page": 1,
"total": 677,
"products": [
{
"id": 362956,
"url": "https://www.thomannmusic.com/gibson_sg_standard_eb_462537.htm?type=quickSearch",
"name": "Gibson SG Standard EB",
"brand": "Gibson",
"image": "https://thumbs.static-thomann.de/thumb/thumb400x400/pics/prod/462537.jpg",
"model": "SG Standard EB",
"price": "1444.0000",
"rating": 9.6078,
"currency": "USD",
"features": [
"Body: Mahogany"
],
"item_number": "462537",
"availability": "In stock",
"review_count": 51
}
]
},
"status": "success"
}
}About the Thomann API
Product Search and Filtering
search_products accepts a query string and returns paginated product summaries including id, item_number, name, brand, model, url, price, currency, availability, rating, and review_count. The limit parameter accepts 25, 50, or 100 results per page. For narrower queries, filter_products adds min_price, max_price, manufacturer, and category_url parameters on top of keyword search, giving you multi-axis filtering in a single call.
Product Details and Reviews
get_product_details takes a product page URL or slug and returns the full record: ean, image, price, rating (out of 10), currency, and structured description fields. Reviews are handled separately by get_product_reviews, which accepts a Thomann item_number (the product_id field) and returns paginated review objects containing author, date, rating_percent, stars, and review text. The item_number used here maps directly to the item_number field returned by search_products.
Category Navigation
get_all_categories takes no inputs and returns the top-level category tree as an array of objects with name and url. Those url slugs feed directly into get_category_listings, which paginates all products under a given category and returns the same product summary shape as search. This makes it straightforward to crawl a specific department — guitars, studio monitors, or DJ gear — without constructing search queries.
The Thomann API is a managed, monitored endpoint for thomann.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when thomann.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 thomann.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?+
- Track Thomann price changes on specific products using
get_product_detailsprice and currency fields - Build a music gear price comparison tool by matching EAN barcodes from
get_product_detailsagainst other retailers - Aggregate customer sentiment by collecting review
starsandtextfields fromget_product_reviewsacross product lines - Index a specific instrument category for a niche storefront using
get_category_listingswith a category slug fromget_all_categories - Filter in-stock products by manufacturer and price band using the
manufacturer,min_price, andmax_priceparams onfilter_products - Monitor brand availability and rating trends by periodically calling
search_productsfor a manufacturer name
| 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 Thomann offer an official developer API?+
What does `get_product_reviews` return and how is pagination handled?+
get_product_reviews requires a product_id matching the item_number from search results. Each review object includes author, date, rating_percent, stars, and full review text. Pagination is controlled by the page parameter; the response echoes back the current page number alongside the reviews array.Does `get_product_details` always return an EAN barcode?+
ean field is returned when Thomann lists it for the product, but it can be null. Coverage varies by product type — accessories and bundled items are less likely to carry a barcode than standalone instruments or electronics.Does the API cover Thomann's used or outlet products?+
Can I retrieve product availability by warehouse location or shipping region?+
availability field in product summaries reflects the general stock status shown on the product listing. Region-specific shipping lead times and per-warehouse stock splits are not broken out as separate fields. You can fork the API on Parse and revise it to add more granular availability data if the source exposes it for your target region.