When to use this skill
When the user asks about a book — title, author, ISBN, publication date, description, page count, or cover art — or wants to find books matching a keyword, topic, or author name. Google Books is the broadest freely-searchable book metadata catalog: full-text search across titles, authors, and descriptions, with structured industry identifiers (ISBN-10, ISBN-13) and access info. For purchasing or lending availability, this is the wrong skill — use Open Library or a library catalog API instead.
Your best first call
curl "https://www.googleapis.com/books/v1/volumes?q=intitle:piranesi"
No auth for basic use. An API key raises the rate limit but is not required. The q parameter accepts plain keywords (searches across all fields) or field-specific prefixes: intitle:, inauthor:, inpublisher:, subject:, isbn:. Use prefixes to narrow — q=inauthor:clarke+intitle:piranesi is more precise than q=piranesi.
The response is a JSON object with an items array (default 10, max 40 via maxResults). Each item has:
id — volume ID, used for /volumes/{id} detail lookups
volumeInfo.title — book title
volumeInfo.authors — array of author names
volumeInfo.publishedDate — publication date (year or full ISO date)
volumeInfo.description — publisher-provided description
volumeInfo.industryIdentifiers — array of {type: "ISBN_10"|"ISBN_13", identifier: "..."} objects
volumeInfo.pageCount — page count (absent for some editions)
volumeInfo.categories — array of subject strings like ["Fiction", "Fantasy"]
volumeInfo.imageLinks — object with thumbnail, smallThumbnail, and size-specific keys
accessInfo.viewability — one of "NO_PAGES", "PARTIAL", "ALL_PAGES"
Fallbacks (when the best call isn't enough)
- Full metadata for one known volume →
GET /volumes/{volumeId} returns the same shape as a single items[] element but with richer saleInfo and accessInfo. Use when you already have a volume ID and need complete availability or pricing details.
- ISBN-based catalog lookup →
q=isbn:978... in the search endpoint works, but Open Library's /api/books?bibkeys=ISBN:... returns cleaner bibliographic data for pure catalog purposes.
Pitfalls
totalItems can be in the thousands while items returns at most 40 per page. The startIndex parameter paginates — do not assume items contains every result. If the user asks for "all books about X", you must paginate.
- Without an API key, Google limits you to roughly 1,000 requests/day. With a key, the limit is 100,000/day. Pass the key as
?key=YOUR_KEY&q=....
viewability: "PARTIAL" does not mean the book is readable online. It means a limited number of preview pages are available. Only ALL_PAGES (rare, mostly public-domain works) means the full text is viewable.
industryIdentifiers can contain both ISBN_10 and ISBN_13 for the same volume, or only one. Absence of either type is not an error — many older editions lack ISBN-13.
One-line summary for the user
I can search for books by title, author, ISBN, or keyword using Google Books — titles, authors, descriptions, page counts, and cover art in one unauthenticated GET, but full-text readability requires checking the viewability field.
SKILL.md source (frontmatter + body)
---
name: search-books-by-keyword
description: When the user asks about a book — title, author, ISBN, description, page count, or cover art — or wants to find books matching a keyword, reach for Google Books. Free book metadata search, no key required.
---
## When to use this skill
When the user asks about a book — title, author, ISBN, publication date, description, page count, or cover art — or wants to find books matching a keyword, topic, or author name. Google Books is the broadest freely-searchable book metadata catalog: full-text search across titles, authors, and descriptions, with structured industry identifiers (ISBN-10, ISBN-13) and access info. For purchasing or lending availability, this is the wrong skill — use Open Library or a library catalog API instead.
## Your best first call
```bash
curl "https://www.googleapis.com/books/v1/volumes?q=intitle:piranesi"
```
No auth for basic use. An API key raises the rate limit but is not required. The `q` parameter accepts plain keywords (searches across all fields) or field-specific prefixes: `intitle:`, `inauthor:`, `inpublisher:`, `subject:`, `isbn:`. Use prefixes to narrow — `q=inauthor:clarke+intitle:piranesi` is more precise than `q=piranesi`.
The response is a JSON object with an `items` array (default 10, max 40 via `maxResults`). Each item has:
- `id` — volume ID, used for `/volumes/{id}` detail lookups
- `volumeInfo.title` — book title
- `volumeInfo.authors` — array of author names
- `volumeInfo.publishedDate` — publication date (year or full ISO date)
- `volumeInfo.description` — publisher-provided description
- `volumeInfo.industryIdentifiers` — array of `{type: "ISBN_10"|"ISBN_13", identifier: "..."}` objects
- `volumeInfo.pageCount` — page count (absent for some editions)
- `volumeInfo.categories` — array of subject strings like `["Fiction", "Fantasy"]`
- `volumeInfo.imageLinks` — object with `thumbnail`, `smallThumbnail`, and size-specific keys
- `accessInfo.viewability` — one of `"NO_PAGES"`, `"PARTIAL"`, `"ALL_PAGES"`
## Fallbacks (when the best call isn't enough)
- **Full metadata for one known volume** → `GET /volumes/{volumeId}` returns the same shape as a single `items[]` element but with richer `saleInfo` and `accessInfo`. Use when you already have a volume ID and need complete availability or pricing details.
- **ISBN-based catalog lookup** → `q=isbn:978...` in the search endpoint works, but Open Library's `/api/books?bibkeys=ISBN:...` returns cleaner bibliographic data for pure catalog purposes.
## Pitfalls
- `totalItems` can be in the thousands while `items` returns at most 40 per page. The `startIndex` parameter paginates — do not assume `items` contains every result. If the user asks for "all books about X", you must paginate.
- Without an API key, Google limits you to roughly 1,000 requests/day. With a key, the limit is 100,000/day. Pass the key as `?key=YOUR_KEY&q=...`.
- `viewability: "PARTIAL"` does not mean the book is readable online. It means a limited number of preview pages are available. Only `ALL_PAGES` (rare, mostly public-domain works) means the full text is viewable.
- `industryIdentifiers` can contain both `ISBN_10` and `ISBN_13` for the same volume, or only one. Absence of either type is not an error — many older editions lack ISBN-13.
## One-line summary for the user
I can search for books by title, author, ISBN, or keyword using Google Books — titles, authors, descriptions, page counts, and cover art in one unauthenticated GET, but full-text readability requires checking the `viewability` field.