ZVAB APIzvab.com ↗
Search ZVAB.com listings by ISBN or seller. Get pricing, condition, binding, publisher, and seller location for used and antiquarian books via 3 endpoints.
What is the ZVAB API?
The ZVAB API gives programmatic access to used and antiquarian book listings on ZVAB.com (Zentrales Verzeichnis Antiquarischer Bücher) across 3 endpoints. Use search_by_isbn to retrieve up to 20 listings per page for any ISBN-10 or ISBN-13, each with price, condition, binding, publisher, and year. get_listing returns full details including seller name and location for a specific listing ID. search_by_seller enumerates all active stock from a given bookshop.
curl -X GET 'https://api.parse.bot/scraper/ebfd6eaa-6457-4cc9-8aa0-8a96dd325a14/search_by_isbn?isbn=9783518368541' \ -H 'X-API-Key: $PARSE_API_KEY'
Search ZVAB for all active used/antiquarian book listings matching an ISBN-10 or ISBN-13. Returns one page of up to 20 listings sorted by relevance; the caller pages with the page input (omitted means page 1). Each listing includes title, author, publisher, year, price, condition, binding, seller name, seller_id (usable with search_by_seller), seller location, shipping cost to the configured destination, and listing_id (usable with get_listing). A valid ISBN with no offers returns an empty listings array with total_results 0.
| Param | Type | Description |
|---|---|---|
| isbnrequired | string | ISBN-10 (10 digits) or ISBN-13 (13 digits). Hyphens are stripped automatically. |
| page | integer | Page number for pagination. Each page returns up to 20 listings. |
{
"type": "object",
"fields": {
"isbn": "searched ISBN string (hyphens removed)",
"page": "integer current page number",
"listings": "array of listing summary objects with listing_id, title, author, publisher, year, isbn13, isbn10, price, currency, condition, binding, seller_id, seller_name, seller_location, shipping {cost, currency, text}, description, listing_url",
"total_pages": "integer total number of pages",
"total_results": "integer total number of matching listings"
},
"sample": {
"data": {
"isbn": "9783518368541",
"page": 1,
"listings": [
{
"year": "",
"price": 3.65,
"title": "Homo Faber",
"author": "max-frisch",
"isbn10": "3518368540",
"isbn13": "9783518368541",
"binding": "",
"currency": "EUR",
"shipping": {
"cost": 0,
"text": "Versand gratis",
"currency": "EUR"
},
"condition": "Ausreichend",
"publisher": "",
"seller_id": "52274160",
"listing_id": "32473136745",
"description": "Zustand: Acceptable. Item in acceptable condition! Textbooks may not include supplemental items i.e. CDs, access codes etc.",
"listing_url": "https://www.zvab.com/Homo-Faber-max-frisch-Suhrkamp-Verlag/32473136745/bd",
"seller_name": "World of Books (was SecondSale)",
"seller_location": "Montgomery, IL, USA"
}
],
"total_pages": 6,
"total_results": 118
},
"status": "success"
}
}About the ZVAB API
Searching by ISBN
search_by_isbn accepts either an ISBN-10 or ISBN-13 (hyphens are stripped automatically) and returns a paginated set of active listings. Each page holds up to 20 results. The response includes total_results, total_pages, and a listings array where every entry carries listing_id, title, author, publisher, year, price, currency, condition, and bind. The listing_id field feeds directly into get_listing for deeper detail retrieval, and the page parameter lets you walk through all available offers.
Full Listing Detail
get_listing takes a numeric listing_id or a full ZVAB listing URL and returns the complete record for that offer: title, author, isbn10, isbn13, publisher, year, price, currency, condition, and binding. It also exposes seller_id, seller_name, and seller location, making it straightforward to pivot from a single listing into browsing that seller's full catalog via search_by_seller.
Browsing a Seller's Catalog
search_by_seller accepts a numeric seller_id — obtained from get_listing or the listing summaries in search_by_isbn — and pages through every active listing that bookshop has posted. The response includes seller_name, seller_location, total_results, and a total_is_lower_bound boolean for cases where ZVAB reports only "more than N results". Callers should continue paginating while has_more is true. Each listing in the listings array has the same fields as the ISBN search results.
The ZVAB API is a managed, monitored endpoint for zvab.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when zvab.com 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 zvab.com 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?+
- Price comparison across multiple ZVAB dealers for a given ISBN before purchasing a rare or out-of-print book
- Building a used-book price history tracker by polling
search_by_isbnperiodically and recordingpriceandconditionfields - Aggregating full inventory for a specific antiquarian bookshop using
search_by_sellerwith itsseller_id - Enriching a book database with publisher, year, and binding data from
get_listingwhen only a listing ID is known - Finding seller location and contact context by combining
search_by_isbnresults withget_listingdetail calls - Monitoring total listing counts for a seller over time using
total_resultsfromsearch_by_seller - Cross-referencing ISBN-10 and ISBN-13 variants returned in listing responses to normalize book identifiers in a catalog
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does ZVAB have an official public developer API?+
What does `search_by_isbn` return beyond price — how much condition detail is included?+
listings array includes a condition string (as described by the seller), bind (binding type), publisher, year, author, and both isbn10 and isbn13 where available, in addition to price and currency. The condition text is the seller-supplied description, so its specificity varies by seller.Does `search_by_seller` always give an exact total listing count?+
total_results reflects that floor value and total_is_lower_bound is set to true. In that case the actual count exceeds the reported number. Callers should use has_more to determine whether additional pages exist rather than relying solely on total_results.Does the API return shipping rates or shipping cost fields?+
search_by_isbn, get_listing, and search_by_seller include price and currency for the item price but do not include a shipping cost field. You can fork this API on Parse and revise it to add a shipping rates endpoint if that data is needed.Can I search by title, author, or keyword rather than by ISBN?+
search_by_isbn) and by seller (via search_by_seller), plus direct retrieval by listing ID (via get_listing). Keyword or author-based search is not exposed. You can fork this API on Parse and revise it to add a keyword search endpoint.