Books Scraper — Titles, Authors, ISBN, Editions (Open Library) avatar

Books Scraper — Titles, Authors, ISBN, Editions (Open Library)

Pricing

from $0.70 / 1,000 result items

Go to Apify Store
Books Scraper — Titles, Authors, ISBN, Editions (Open Library)

Books Scraper — Titles, Authors, ISBN, Editions (Open Library)

Search books by title, author, ISBN or subject: title, authors, first publish year, editions count, ISBNs, subjects, languages, cover image, Open Library and Goodreads ids; ISBN lookup with publisher, pages and description. No API key.

Pricing

from $0.70 / 1,000 result items

Rating

0.0

(0)

Developer

Samat Makatov

Samat Makatov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Categories

Share

Search 20+ million Open Library book records by title, author, subject, publisher or ISBN and get clean JSON: authors, first publish year, edition count, ISBNs, subjects, languages, publishers, ratings, reading-log popularity, Goodreads/Amazon/OCLC ids, covers and e-book availability. Look up ISBNs for publisher, pages, format and description; list an author's works, browse a subject, or pull every edition of a work. No API key, no proxy, no browser.

Use cases

  • Catalogue enrichment for bookshops and marketplaces: turn a list of ISBNs into title, authors, publisher, pages, format, cover and description.
  • Publisher and competitor research: list a publisher's catalogue (searchField: "publisher") or a subject's newest titles.
  • Rights and translation scouting: find which languages and editions exist for a work, with years and publishers.
  • Reading-list and recommendation products: rank books in a subject by popularity (reading logs, want-to-read) or rating.
  • Author due diligence: bio, birth/death dates, Wikidata/VIAF/ISNI ids and most-read works of an author.
  • Library and e-learning: filter to works with a readable/borrowable scan on archive.org (ebookOnly).

Input

FieldTypeDefaultAllowed values / notes
queriesstring[]requiredTitles, keywords, author names, subjects, ISBN-10/13 (hyphens ok), Open Library keys OL…W / OL…M / OL…A or their URLs
modestringautoauto (detect ISBN/key/text), search, isbn, author, subject, work
searchFieldstringanyany, title, author, subject, publisher, place, person, isbn (search mode)
limitinteger51–100 results per query (search/author/subject)
offsetinteger00–10 000, for paging across runs
sortBystringrelevancesee Sort orders; subject mode: only relevance/editions (most editions), new, old — other sorts are refused there
languagestringanyMARC 21 code, see Languages; search and author modes (refused in subject mode: the subjects API has no language filter)
yearFrom / yearTointegernone1000–2100, first publication year (inclusive)
ebookOnlybooleanfalseOnly works with a scan on archive.org
includeAvailabilitybooleanfalseLending status per work (search mode)
includeDescriptionbooleanfalseWork description + external links (+1 request/work; ISBN, edition and work lookups always carry the description)
includeEditionsbooleanfalseEditions list per work (+1 request/work)
maxEditionsinteger101–50
includeAuthorDetailsbooleanfalseauthorsDetailed: bio, dates, Wikipedia/Wikidata/VIAF/ISNI, photo (+1 request per distinct author, cached)
coverSizestringLS, M, L
maxSubjectsinteger150–200
dedupebooleantrueSave each work/edition/author once across queries
fieldsstring[]allKeep only these output fields, in your order; query is always kept. Case, snake_case and Open Library names (author_name, cover_i) are read as the field; unknown names are left out and named in the status; a list with no known field is refused. Rows with none of the listed fields (e.g. the author row for ["title"]) are not saved and not charged

Reference

Lookup modes

ModeWhat you passWhat you get
autoanythingISBN → edition record; OL…W → work; OL…M → edition; OL…A → author + works; text → search
searchkeywordsWorks matching the text (optionally in one searchField)
isbnISBN-10/13One edition: publisher, date, pages, format, identifiers, work description, subjects, author names. Check digit is validated (warning only)
authorname or OL…AOne author row (for names, the record with the most works is chosen, alternatives are logged) + their works
subjectsubject name/slugWorks in that subject (science fiction → science_fiction), with total subjectWorkCount. Years and ebookOnly apply; language does not exist there
workOL…W / OL…MFull work record from the search index + description

Sort orders

ValueMeaning
relevanceBest text match (default)
new / oldFirst publish year, newest / oldest first
ratingAverage user rating
editionsMost editions
readinglogMost reading-log entries (overall popularity)
want_to_read / currently_reading / already_readReading-log shelves
titleTitle A–Z
scansWorks with scans first
randomRandom order

Languages

The language select offers these MARC 21 codes; Apify refuses any other value before the run starts. Full MARC list: loc.gov MARC language codes.

CodeLanguageCodeLanguageCodeLanguageCodeLanguage
engEnglishspaSpanishfreFrenchgerGerman
itaItalianporPortugueserusRussianchiChinese
jpnJapanesekorKoreanaraArabicdutDutch
sweSwedishpolPolishturTurkishperPersian
hebHebrewhinHindiukrUkrainianczeCzech
danDanishfinFinnishnorNorwegianhunHungarian
greGreekrumRomaniankazKazakhuzbUzbek
kirKyrgyztgkTajikazeAzerbaijanigeoGeorgian
armArmenianmonMongolianbelBelarusiantatTatar
indIndonesianmayMalayvieVietnamesethaThai
benBengaliurdUrdutamTamiltelTelugu
marMarathilatLatincatCatalanbulBulgarian
hrvCroatiansrpSerbiansloSlovakslvSlovenian
litLithuanianlavLatvianestEstonianiceIcelandic
afrAfrikaansswaSwahilitglTagalog

Common subject slugs

Any Open Library subject works; examples: business, entrepreneurship, management, economics, finance, marketing, leadership, self-help, psychology, science_fiction, fantasy, mystery_and_detective_stories, romance, history, biography, programming, computer_science, artificial_intelligence, machine_learning, mathematics, medicine, cooking, travel, children, poetry. Browse more at openlibrary.org/subjects.

Examples

Enrich a list of ISBNs for a shop catalogue

{ "queries": ["978-0-307-88789-4", "9780062316097", "0735211299"], "mode": "isbn", "includeAuthorDetails": true, "coverSize": "M" }

Newest books in a subject (new-release tracking)

{ "queries": ["entrepreneurship"], "mode": "subject", "yearFrom": 2024, "sortBy": "new", "limit": 50 }

An author's most-read works with all editions (rights scouting)

{ "queries": ["Peter Drucker"], "mode": "author", "sortBy": "readinglog", "limit": 10, "includeEditions": true, "maxEditions": 20, "includeAuthorDetails": true }

A publisher's catalogue in one language

{ "queries": ["O'Reilly Media"], "searchField": "publisher", "language": "eng", "yearFrom": 2020, "sortBy": "new", "limit": 100, "fields": ["title", "authors", "firstPublishYear", "isbn13", "url"] }

Free-to-read classics for an e-learning library

{ "queries": ["economics"], "searchField": "subject", "ebookOnly": true, "includeAvailability": true, "sortBy": "readinglog", "limit": 25 }

Output

Search / author / subject rows describe a work; ISBN rows describe an edition; author mode adds one author row. Real example (author-mode work row for "Peter Drucker", sortBy: "readinglog"; arrays trimmed):

{
"query": "Peter Drucker",
"mode": "author",
"workKey": "OL274337W",
"title": "The Practice of Management",
"authors": ["Peter F. Drucker"],
"authorKeys": ["OL4345625A"],
"firstPublishYear": 1954,
"latestPublishYear": 2017,
"editionCount": 37,
"isbn13": "9780060913168",
"isbn10": "0330020315",
"isbnCount": 44,
"languages": ["chi", "und", "eng"],
"publishers": ["Butterworth Heinemann", "Taylor & Francis Group"],
"subjects": ["Business", "Nonfiction", "Industrial management"],
"pagesMedian": 404,
"firstSentence": "THE manager is the dynamic, life-giving element in every business.",
"rating": 5,
"ratingsCount": 2,
"readingLogCount": 144,
"wantToRead": 130,
"goodreadsId": "114837",
"amazonAsin": "B002JN0B82",
"oclc": "567448468",
"ddc": "658",
"ebookAccess": "borrowable",
"hasFulltext": true,
"coverUrl": "https://covers.openlibrary.org/b/id/6418448-L.jpg",
"url": "https://openlibrary.org/works/OL274337W",
"source": "openlibrary",
"fetchedAt": "2026-09-13T08:17:11.726Z",
"numFound": 320
}
FieldRowsDescription
query, mode, foundallInput query (always kept, also with fields), lookup type; found is true on every row (queries that match nothing or fail are not rows — see SUMMARY)
workKey, editionKey, authorKeywork / edition / authorStable Open Library ids
title, subtitle, authors, authorKeyswork, edition
firstPublishYear, publishYears, latestPublishYear, editionCountwork
isbn13, isbn10, isbns, isbnCountwork (strings: the first ISBN-13/-10; isbns: first 20), edition (lists)
languages, publishers, subjects, places, people, timePeriodswork
rating, ratingsCount, readingLogCount, wantToRead, currentlyReading, alreadyReadworkPopularity signals
goodreadsId, amazonAsin, librarythingId, oclc, lccn, lcc, ddcwork, editionExternal identifiers / classifications
ebookAccess, hasFulltext, publicScan, archiveOrgIds, availabilityworkE-book status
publishDate, publishYear, pages, physicalFormat, publishPlaces, series, edition, descriptionedition
editions, editionsTotalwith includeEditionsBrief edition list: key, year, publishers, ISBNs, languages, pages, format, cover
authorsDetailed, name, bio, birthDate, deathDate, wikidataId, viaf, isni, photoUrlauthor / includeAuthorDetailsThe dataset's Authors view shows the author rows
numFound, subjectWorkCountsearch / subjectTotal matches at the source
coverUrl, url, source, fetchedAtall

Every field's type, meaning and an example are in the dataset schema (Output tab / API).

Use it from code / agents

curl -X POST "https://api.apify.com/v2/acts/yadroo~openlibrary-books/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"queries":["9780307887894","9780062316097"],"mode":"isbn"}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yadroo/openlibrary-books').call({ queries: ['machine learning'], mode: 'subject', sortBy: 'new', limit: 30 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yadroo/openlibrary-books").call(run_input={"queries": ["Nassim Taleb"], "mode": "author", "includeAuthorDetails": True})
items = client.dataset(run["defaultDatasetId"]).list_items().items

MCP: add https://mcp.apify.com to Claude / Cursor / any MCP client and call the yadroo/openlibrary-books tool with the same JSON input.

Pricing

Pay per event: $0.001 per run start + $0.001 per dataset row (work, edition or author). Queries that match nothing or fail are not rows and are not charged. Store discounts: Bronze −10 %, Silver −20 %, Gold and above −30 % on the row price; the start event is the same on every plan; platform usage is included. Typical runs: 10 ISBN lookups ≈ $0.011; 100 books in a subject ≈ $0.101; an author row + 50 works ≈ $0.052. The run never goes over your Maximum cost per run: it stops with the status Stopped at your spending limit: N rows delivered, and it spends enrichment requests only on rows the limit still pays for.

Limits & FAQ

  • Speed and politeness: Open Library is a volunteer-run non-profit. Its API policy allows 3 requests per second to clients that identify themselves, as this actor does with its User-Agent. The actor sends one request at a time, at least 350 ms apart (retries included). An ISBN costs about 3 requests: the edition, its work (subjects, description) and its author names, with authors cached within the run. Enrichment options add one request per work, and includeAuthorDetails adds one per distinct author.
  • Capacity: a 15-minute run (the default timeout) does roughly 2 000 requests. That is about 600–700 ISBNs, or a few hundred enriched works. Near the timeout the actor stops starting requests, saves what it has and ends with the status Stopped before the run timeout: N rows saved. Raise the timeout or split the job for more.
  • Bulk data: Open Library asks not to bulk-download through its API. For whole-catalogue work (millions of records) use its free monthly data dumps instead of this actor.
  • Data quality: records are community-edited: duplicates of authors/works exist, ratings are sparse, some ISBNs map to the wrong work. For name lookups in author mode the record with the most works is chosen and alternatives are logged; pass an OL…A key to force one.
  • Freshness: live API, new records appear as soon as they are added to Open Library.
  • Not found / errors: ISBNs, keys or searches that match nothing, and requests that fail, are not dataset rows (you are not charged for them). They are listed in the run's SUMMARY record (notFound, notFoundCount, errors: [{ input, error }], errorCount) and in the status message, e.g. 7 record(s) saved · 1 query not found · 1 failed. The run fails only when nothing could be fetched at all. Each request gets 30 s per attempt and up to 3 attempts. Retries on 429/5xx, dropped connections and non-JSON answers wait 2 s and then 4 s, or whatever Retry-After asks for. When 3 requests in a row fail like that, Open Library is treated as down: the run stops and the status names the queries not tried.
  • Not included: prices, stock or seller offers (Open Library does not have them), and full text of books.
  • Roadmap: trending lists.

Made by Yadroo. Sibling actors: arxiv-papers, openalex-works, wikipedia-search, rss-to-json, hackernews-search.