# Book Metadata — ISBN & Title Lookup (`cynix_dev/book-metadata`) Actor

Look up book metadata by ISBN, title, author, or subject from Open Library. Typed records with authors, year, publisher, subjects, and cover. No API key.

- **URL**: https://apify.com/cynix\_dev/book-metadata.md
- **Developed by:** [Cynix Dev](https://apify.com/cynix_dev) (community)
- **Categories:** Automation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.13 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Book Metadata — ISBN & Title Lookup

Look up **book metadata** by ISBN, title, author or subject from **Open Library** — authors, year, publisher, subjects and cover image. No API key required.

### What it does

Open Library is the open, Wikipedia-style catalogue of books, and it's a great source for structured book data without a commercial API contract. This Actor accepts a mixed list of queries — ISBNs, titles, author names or subjects — auto-detects what each one is (or you set `mode`), and returns typed records.

It's the metadata backbone for a bookstore, a reading app, or a library tool: resolve an ISBN to a full record, or search by author to build a bibliography.

### Features

- **Mixed query input** — ISBNs, titles, authors or subjects in one list.
- **Auto-detection** — figures out ISBNs automatically, or you set `mode`.
- **Typed records** — authors, publication year, publisher, subjects.
- **Cover images** — optionally resolve a cover URL from Open Library.
- **No API key required.**

### What people use it for

- Bookstore and library catalogs — enrich or validate listings.
- Reading apps — resolve an ISBN to metadata and a cover.
- Bibliography building — search an author and get their works.
- Research corpora — gather metadata for a body of literature.
- ISBN/title normalization in a data pipeline.

### Formats and identifiers

Open Library understands **ISBN-10, ISBN-13, and ISBN-13-with-hyphens** as well as OCLC and LCCN where present. The Actor auto-detects an ISBN from the query string, so you can paste `9780134685991` directly.

#### Subjects vs full text

Subjects come back as tags (e.g. `"Fiction"`, `"Science fiction"`), useful for categorization but not a full table-of-contents. For a single known book, an ISBN query is the most precise; for discovery, an author or title search returns a set to choose from.

### Input

`queries` is required (ISBNs, titles, authors or subjects). `mode` controls interpretation.

| Field | Type | Default | What it does |
| --- | --- | --- | --- |
| `queries` **(required)** | array | `["9780134685991", "Effective Java", "author:George Orwell"]` | ISBNs (auto-detected), titles, author names, or subjects. Auto-detection figures out the type, or set 'mode' explicitly. |
| `mode` | string | `auto` | How to interpret queries. 'auto' detects ISBNs, else treats as a general search. Options: `auto`, `isbn`, `title`, `author`, `subject`. |
| `maxResults` | integer | `10` | Max records returned per query. Range 1–50. |
| `withCoverUrl` | boolean | `true` | Resolve a cover image URL from Open Library covers. |

#### Input example

```json
{
  "queries": [
    "9780134685991",
    "Effective Java",
    "author:George Orwell"
  ],
  "mode": "auto",
  "maxResults": 10,
  "withCoverUrl": true
}
```

### Output

One record per matched book with authors, year, publisher, subjects and (optionally) a cover URL.

Every dataset record contains: `query`, `title`, `authors`, `firstPublishYear`, `publishers`, `isbn`, `languages`, `subjects`, `coverUrl`, `openLibraryUrl`, `fetchedAt`.

#### Output example

A real record from a run of this Actor:

```json
{
  "query": "isbn:9780134685991",
  "title": "Effective Java",
  "authors": [
    "Joshua Bloch"
  ],
  "firstPublishYear": 2001,
  "publishers": [
    "Prentice Hall PTR",
    "Addison-Wesley Pub (Sd)",
    "Ji xie gong ye chu ban she",
    "… +3 more"
  ],
  "isbn": [
    "9783827319333",
    "9780134685991",
    "7111113853",
    "… +11 more"
  ],
  "languages": [
    "eng",
    "chi",
    "ger"
  ],
  "subjects": [
    "Java (Computer program language)",
    "Object-oriented programming (Computer science)",
    "Java 2.",
    "… +6 more"
  ],
  "coverUrl": "https://covers.openlibrary.org/b/id/1176573-L.jpg",
  "openLibraryUrl": null,
  "fetchedAt": "2026-08-14T19:30:59.114Z"
}
```

Export the dataset as JSON, CSV, Excel, XML or JSONL from the Console, or pull it programmatically through the Apify API and any of the official clients.

### How to use it

1. Click **Try for free** (or **Start** if you already have an Apify account).
2. Fill in the input fields described above — the defaults already produce a working run.
3. Press **Start** and watch the log; results stream into the dataset as they are found.
4. When the run finishes, open the **Output/Storage** tab and export as JSON, CSV or Excel.

Runs can be scheduled (hourly, daily, weekly) and wired into Slack, Google Sheets, Zapier, Make, webhooks or your own backend through Apify integrations. Everything the Console does is also available over the [Apify API](https://docs.apify.com/api/v2).

### Pricing

This Actor is billed on Apify's **pay-per-event** model: a small charge when a run starts, plus a charge for each result written to the dataset. You only pay for records you actually receive — a run that finds nothing costs only the start event. Current rates are always shown on the **Pricing** tab of this page, and the run log prints your usage as it goes.

Free-plan credits from Apify cover a large amount of light usage, so you can evaluate the Actor before committing to anything.

### FAQ

#### Do I need an API key?

No. Open Library is an open project with a public API.

#### Why is a field empty for some books?

Open Library is community-edited, so completeness varies — older and obscure titles may lack a publisher or cover. Popular books are well-documented.

#### Can I get the full text of the book?

No — this returns metadata (and a cover link), not the book's content. Full text is a separate licensing matter.

#### How do I get cover images?

Set `withCoverUrl` to true; the Actor resolves a cover image URL from Open Library's covers service when one exists.

### Other Actors by cynix\_dev

| Actor | What it does |
| --- | --- |
| [arXiv Papers Extractor](https://apify.com/cynix_dev/arxiv-papers) | Search arXiv and extract papers as clean typed records: title, abstract, authors, categories, DOI, and direct PDF links. |
| [CoinGecko Markets — Crypto Data API](https://apify.com/cynix_dev/coingecko-markets) | Live cryptocurrency market data from CoinGecko as clean typed JSON: price, market cap, volume, 24h change, ATH/ATL, … |
| [FX Rates & History](https://apify.com/cynix_dev/fx-rates-history) | Latest and historical foreign exchange rates (ECB reference data) as clean, typed dataset records. |
| [USGS Earthquakes — GeoJSON Extractor](https://apify.com/cynix_dev/usgs-earthquakes) | Pull live and historical earthquakes from the USGS FDSN event service as clean typed JSON: magnitude, place, time, lat/lon/depth, … |
| [Launch Library 2 — Rocket Launch Tracker](https://apify.com/cynix_dev/launch-library-launches) | Upcoming, previous, and specific rocket launches from The Space Devs' Launch Library 2 API. |
| [Open Food Facts Extractor](https://apify.com/cynix_dev/open-food-facts) | Search and extract food-product data from Open Food Facts as clean typed JSON: name, brand, ingredients, allergens, nutrition … |

### Legal and responsible use

This Actor collects only publicly available information. You are responsible for how you use the data, including compliance with the target site's Terms of Service, robots directives, copyright, and data protection law such as GDPR and CCPA. Do not use it to gather personal data without a lawful basis.

### Support and feedback

Found a bug, hit a site change, or need an extra field? Open a ticket on the **Issues** tab of this Actor — issues are read and fixed. Feature requests and custom-scraper enquiries are welcome through the same channel.

# Actor input Schema

## `queries` (type: `array`):

ISBNs (auto-detected), titles, author names, or subjects. Auto-detection figures out the type, or set 'mode' explicitly.

## `mode` (type: `string`):

How to interpret queries. 'auto' detects ISBNs, else treats as a general search.

## `maxResults` (type: `integer`):

Max records returned per query.

## `withCoverUrl` (type: `boolean`):

Resolve a cover image URL from Open Library covers.

## Actor input object example

```json
{
  "queries": [
    "9780134685991",
    "Effective Java",
    "author:George Orwell"
  ],
  "mode": "auto",
  "maxResults": 10,
  "withCoverUrl": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

One record per book: title, authors, year, publisher, subjects, cover URL.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "9780134685991",
        "Effective Java",
        "author:George Orwell"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cynix_dev/book-metadata").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": [
        "9780134685991",
        "Effective Java",
        "author:George Orwell",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("cynix_dev/book-metadata").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "9780134685991",
    "Effective Java",
    "author:George Orwell"
  ]
}' |
apify call cynix_dev/book-metadata --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cynix_dev/book-metadata"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/sM7F78U3ag8cpZgkg/builds/syJtFkjfyJhq7kc4r/openapi.json
