Tony Wang6 min readHow to Scrape Apple Books in 2026 (API & Python)
Scrape Apple Books in 2026 — ebooks and audiobooks: search, catalog detail, reviews, similar titles, series, charts — DIY, no-code, or a structured API.
The fastest way to scrape Apple Books in 2026 is to call a structured API that returns normalized JSON — for both the ebook and audiobook sides of the store — instead of parsing Apple's pages yourself. Apple Books covers two parallel catalogs (books and audiobooks) with their own ids, series, and reviews, and Apple has no modern developer API built for third-party catalog research. This guide covers DIY, no-code, and a structured API that handles both catalogs, plus the legal reality up front.
Why scrape Apple Books?
Apple Books is one of the largest ebook and audiobook storefronts, which powers:
- Catalog enrichment — attach canonical title, author, price, ISBN, and rating data to a reading app, comparison tool, or internal dataset.
- Ebook vs. audiobook pricing research — compare price and format availability for the same title across both catalogs.
- Reception research — track how a title's rating and rating distribution move after release.
- Series and author tracking — follow a series' full reading order or an author's bibliography across formats.
- Chart and bestseller monitoring — watch category charts for what's trending in ebooks and audiobooks.
Is it legal to scrape Apple Books?
Option 1: DIY in Python (and why it breaks)
A DIY approach means either calling the rate-limited iTunes Search API or parsing Apple Books' server-rendered book and audiobook pages directly:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://books.apple.com/us/book/harry-potter-and-the-sorcerers-stone-enhanced-edition/id1037193578",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Rating, price, and description live in embedded JSON that shifts
# across Apple's storefront redesigns — and reviews load separately
It demos and then breaks:
- Two catalogs, two id spaces. Books and audiobooks are separate objects with separate ids, series, and review threads — a title available in both formats needs two lookups, not one.
- The iTunes Search API alone isn't enough. It's capped around 20 calls/minute, and its book/audiobook payloads are thinner than what the live storefront pages show (no reviews, no similar titles, missing fields like audiobook duration).
robots.txtblocks key paths.books.apple.com/robots.txtdisallows/WebObjects/*and/v1/catalog/*for all crawlers.- Reviews, similar titles, and series each paginate or load separately. A complete title record means several requests, not one page load.
Option 2: No-code tools
Some no-code scraper marketplaces and browser extensions offer pre-built Apple Books or iTunes-storefront templates for one-off exports — fine for pulling a handful of titles by hand. They're awkward to run on a schedule against two catalogs at once, don't expose a clean ebook/audiobook data contract, and carry the same ToS exposure as a DIY script since they scrape the same pages underneath.
Option 3: A structured Apple Books API
For a repeatable, permission-scoped workflow, an Apple Books scraping API returns normalized JSON across both catalogs with no page parsing to maintain. Search covers ebooks by default; audiobooks have a parallel search endpoint:
curl "https://api.crawlora.net/api/v1/apple-books/search?term=harry+potter&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"
curl "https://api.crawlora.net/api/v1/apple-books/audiobook/search?term=harry+potter&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"
Then resolve the id and pull detail, reviews, and similar titles in Python — same shape for books and audiobooks:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/apple-books"
book_hits = requests.get(f"{base}/search", headers=h, params={"term": "harry potter"}).json()["data"]
book_id = book_hits[0]["id"]
book = requests.get(f"{base}/book/{book_id}", headers=h).json()["data"]
book_reviews = requests.get(f"{base}/book/{book_id}/reviews", headers=h, params={"limit": 20}).json()["data"]
audio_hits = requests.get(f"{base}/audiobook/search", headers=h, params={"term": "harry potter"}).json()["data"]
audiobook_id = audio_hits[0]["id"]
audiobook = requests.get(f"{base}/audiobook/{audiobook_id}", headers=h).json()["data"]
Book detail is normalized JSON (real fields — check the docs):
{
"code": 200,
"msg": "OK",
"data": {
"id": 1037193578,
"name": "Harry Potter and the Sorcerer's Stone (Enhanced Edition)",
"url": "https://books.apple.com/us/book/harry-potter-and-the-sorcerers-stone-enhanced-edition/id1037193578",
"artist_id": 79595314,
"artist_name": "J.K. Rowling",
"genres": ["Fiction & Literature", "Fantasy"],
"isbn": "9781781105849",
"publisher": "Pottermore Publishing",
"page_count": 309,
"release_date": "2015-11-20T08:00:00Z",
"price": 11.99,
"currency": "USD",
"rating": 4.7,
"rating_count": 10686,
"rating_histogram": { "1": 348, "2": 211, "3": 339, "4": 934, "5": 8854 },
"series_id": 1044374793,
"series_name": "The Harry Potter Series",
"series_sequence": "1"
}
}
The audiobook of the same title returns the parallel shape, plus narrator and duration:
{
"code": 200,
"msg": "OK",
"data": {
"id": 1442174040,
"name": "Harry Potter and the Sorcerer's Stone",
"url": "https://books.apple.com/us/audiobook/harry-potter-and-the-sorcerers-stone/id1442174040",
"artist_id": 79595314,
"artist_name": "J.K. Rowling",
"narrator": "Jim Dale",
"duration_seconds": 29898,
"provider": "Pottermore Publishing",
"price": 25.99,
"currency": "USD",
"rating": 4.5,
"rating_count": 10639,
"series_id": 6442645726,
"series_name": "The Harry Potter Series",
"book_id": 1037193578
}
}
Note the book_id / series_id cross-references — an audiobook record links back to its ebook counterpart and to its own audiobook series, since /apple-books/series/{id} (ebook series) and /apple-books/audiobook-series/{id} are separate endpoints. /apple-books/book/{id}/similar, /apple-books/audiobook/{id}/similar, /apple-books/author/{id}, and /apple-books/charts (with collection and genre filters) round out the pattern — id or query in, normalized JSON out. Store one row per book (or per audiobook, per review) and re-run on a schedule.
What you can collect
Public catalog and review metadata across both formats: search results (id, title, author, genres, price, rating); book detail (description, ISBN, publisher, page count, audience, series, rating distribution); audiobook detail (narrator, duration, provider, series, linked book_id); paginated customer reviews for books and audiobooks (rating, title, text, reviewer name, date); similar titles for books and audiobooks; author profiles (bio genres, book and audiobook lists); ebook series and audiobook series listings; and chart rankings by collection and genre. Public data only — no purchased-library, account, or DRM-protected file content.
Limitations and common challenges
- No modern developer API for catalog research. The legacy iTunes Search API exists but is rate-limited and thinner than the live storefront on fields like audiobook duration and reviews.
- Terms explicitly restrict automated access. Scope any project to public catalog and review pages, avoid the
robots.txt-disallowed paths, and never bulk-republish full review text. - Two parallel catalogs. Books and audiobooks have separate ids, series, and review threads — a title in both formats means two full lookups, not one.
- Per-title fan-out. Reviews and similar titles each load separately, so a complete title record means several calls.
- Personal data in reviews. Reviewer names and text are personal data under GDPR/CCPA — collect only what's needed and handle it accordingly.
Where this gets used
- Reading and listening app catalogs — attach canonical title, price, and rating data to a discovery or comparison product.
- Format pricing research — compare ebook vs. audiobook pricing and availability for the same title.
- Publishing and reception research — track rating trends for a title around launch, series completion, or a media tie-in.
Sources
Start collecting
Try it first, free: run any public URL through the Free Web Scraper, or check whether a site blocks bots with the Anti-Bot Checker — no signup.
Test the search, book, and audiobook endpoints in the Playground, check the schema in the API docs, and review pricing. Apple Books is the storefront/commerce side of books — catalog, pricing, and charts; Goodreads is the community/review side of the same books vertical, so pair the two for catalog plus reader sentiment. If you're already working with Apple's other iTunes-lookup catalogs, how to scrape Apple Podcasts covers the same id-in, JSON-out pattern for shows and episodes. See also how to choose a web scraping API and is web scraping legal.
Part of our how-to-scrape guide series — every platform we cover, in one index.
Frequently asked questions
How do I scrape Apple Books?
Send a search term or Apple Books id to Crawlora Apple Books endpoints and get ebook and audiobook catalog, review, and chart data as structured JSON — no Apple ID or app registration required. Collect public data and respect Apple's terms.
Does Apple have a public API for Apple Books?
No modern one for third-party catalog research. The legacy iTunes Search API covers books and audiobooks but is rate-limited to roughly 20 calls/minute and omits fields like audiobook duration that scraping the live storefront recovers.
Can I get both ebook and audiobook data for the same title?
Yes. Books and audiobooks are separate id spaces with parallel endpoints (/apple-books/book/{id} and /apple-books/audiobook/{id}); an audiobook record includes a book_id cross-reference back to its ebook counterpart.
Can I page through Apple Books reviews?
Yes. /apple-books/book/{id}/reviews and /apple-books/audiobook/{id}/reviews both page beyond the first page via page and limit query parameters.
Is scraping Apple Books legal?
Apple's Website Terms of Use and Media Services Terms both prohibit automated scraping and data mining without written consent. Collecting public catalog and review data narrowly, respecting robots.txt and rate limits, is lower-risk than bulk collection or republishing full review text, but this is not legal advice.
What fields does Apple Books book detail return?
Title, author, ISBN, publisher, page count, genres, price, currency, release date, rating, rating distribution, and series id/name/sequence where applicable.
What is the difference between /apple-books/series and /apple-books/audiobook-series?
They are separate endpoints for the two catalogs: /apple-books/series/{id} lists an ebook series' books in reading order, while /apple-books/audiobook-series/{id} lists the audiobook series' audiobooks with narrators.