Books-A-Million APIbooksamillion.com ↗
Access Books-A-Million bestseller lists, book details, customer reviews, keyword search, and store locations via a structured JSON API.
What is the Books-A-Million API?
The Books-A-Million API covers 11 endpoints that expose book catalog data across bestseller categories, new releases, search, and physical store locations. The get_book_details endpoint returns ISBN-13, current price, retail price, savings, availability, publisher, publish date, page count, and dimensions for any product page URL. Review data, category-specific bestseller lists, and ZIP-code store lookup round out the full surface.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/1d8eab97-d399-48dd-a9c5-1bc55a352b95/get_bestsellers' \ -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 booksamillion-com-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.books_a_million_api import BooksAMillion, BookSummary, Book, Store
bam = BooksAMillion()
# Browse bestselling fiction
for book in bam.booksummaries.bestselling_fiction(limit=5):
print(book.title, book.author, book.price)
# Search for books by keyword
for result in bam.booksummaries.search(query="science fiction", limit=3):
print(result.title, result.url)
# Get full details for a book by navigating from a summary
top_book = next(iter(bam.booksummaries.bestsellers(limit=1)))
detail = top_book.details()
print(detail.title, detail.isbn, detail.price)
# Fetch book details directly by URL
book = bam.books.get(url="https://www.booksamillion.com/p/Project-Hail-Mary/Andy-Weir/9780593135228")
print(book.title, book.author, book.isbn)
# Get reviews for a book
for page in book.reviews(limit=1):
print(page.page_id, page.rollup.average_rating, page.rollup.review_count)
# Find a nearby store
store = bam.stores.locate(zip="35801")
print(store.name, store.address, store.city, store.distance_miles)
Fetches the overall bestsellers list from Books-A-Million. Returns all books currently featured on the main bestsellers page, across all categories. Single-page response containing the full list.
No input parameters required.
{
"type": "object",
"fields": {
"count": "integer total number of items returned",
"items": "array of book objects with title, author, price, format, image, and url"
},
"sample": {
"data": {
"count": 100,
"items": [
{
"url": "https://www.booksamillion.com/p/Daggermouth/H-M-Wolfe/9798330520572",
"image": "https://covers1.booksamillion.com/covers/bam/9/79/833/052/9798330520572_w.jpg",
"price": "$23.99",
"title": "Daggermouth",
"author": "H. M. Wolfe",
"format": "Paperback"
}
]
},
"status": "success"
}
}About the Books-A-Million API
Bestseller Lists and New Releases
Six category-specific endpoints — get_bestsellers, get_bestselling_fiction, get_bestselling_nonfiction, get_bestselling_manga, get_bestselling_ya, and get_bestselling_kids — each return an array of book objects with title, author, price, format, image, and url. The category endpoints also return a category string identifier. get_new_releases follows the same shape and requires no inputs. All list endpoints return a count field alongside the items array.
Book Search and Detail
search_books accepts a required query string and returns up to 20 results per page, including a retail_price field in addition to the standard book fields, allowing price-vs-retail comparisons directly from search results. For deeper data, pass any product page URL to get_book_details to retrieve isbn, savings, availability, and a details object containing ISBN-10, Publisher, Publish Date, Dimensions, and Page Count.
Reviews and Store Locations
get_book_reviews accepts an ISBN-13 (obtainable from get_book_details) and optional from and limit parameters for pagination. The response includes a paging object with total_results, pages_total, page_size, current_page_number, and next_page_url, plus a results array with rollup summary data and individual reviews containing ratings, comments, and reviewer info. get_store_locator takes a US ZIP code and returns the nearest store's name, address, city, state, phone, latitude, longitude, and internal store number.
The Books-A-Million API is a managed, monitored endpoint for booksamillion.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when booksamillion.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 booksamillion.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?+
- Track Books-A-Million bestseller rankings across fiction, nonfiction, manga, YA, and kids categories for publishing market analysis.
- Build a price comparison tool using the
retail_priceandpricefields fromsearch_booksorget_book_details. - Monitor new release listings and surface fresh titles with cover images and author data for a book discovery app.
- Aggregate customer review sentiment and ratings via
get_book_reviewspagination across large ISBNs sets. - Power a store finder feature using
get_store_locatorto return the nearest Books-A-Million location by ZIP code. - Enrich book records with publisher, page count, dimensions, and availability data from
get_book_details. - Build a manga-specific bestseller tracker using the dedicated
get_bestselling_mangaendpoint.
| 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 Books-A-Million have an official developer API?+
What does get_book_reviews return and how do I paginate through results?+
paging object with total_results, pages_total, page_size, current_page_number, and next_page_url, plus a results array containing a rollup summary and individual review objects with ratings, written comments, and reviewer info. Use the from parameter to set the starting index and limit to control page size.Does the search endpoint support filtering by format, price range, or publication date?+
search_books accepts only a keyword query and returns up to 20 results per page with title, author, price, retail_price, format, image, and URL. Filter parameters are not exposed. You can fork this API on Parse and revise it to add filtering support if your use case requires it.Does get_store_locator return multiple nearby stores or just the single nearest one?+
Are e-book or audiobook listings included in bestseller and search results?+
format field in book objects can reflect different product formats, but dedicated e-book or audiobook catalog endpoints are not included. The API covers the main Books-A-Million print and format listings as shown on the site. You can fork this API on Parse and revise it to add format-specific filtering or separate audiobook endpoints.