AbeBooks Book Listings Scraper avatar

AbeBooks Book Listings Scraper

Pricing

from $2.08 / 1,000 book listing extracteds

Go to Apify Store
AbeBooks Book Listings Scraper

AbeBooks Book Listings Scraper

Search AbeBooks by title, author, ISBN, keyword, or URL and export offer-level book, condition, seller, price, shipping, availability, and listing data.

Pricing

from $2.08 / 1,000 book listing extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

13 days ago

Last modified

Categories

Features

Limited permissions

Share

Search public AbeBooks book listings and export structured offer data for rare-book sourcing, used-book comparison, and recurring inventory checks.

The Actor searches by keyword, title, author, ISBN, or a public AbeBooks search URL. Each result represents one seller offer—not just a generic book edition—so price, shipping, condition, seller, quantity, and listing URL stay together.

What does this AbeBooks scraper do?

AbeBooks Book Listings Scraper turns public search result pages into integration-ready dataset rows.

Use it to:

  • compare offers for one ISBN;
  • find books by title or author;
  • source signed copies and first editions;
  • filter by condition, binding, year, and price;
  • capture item price and shipping separately;
  • monitor seller offers with scheduled Actor runs;
  • export results to CSV, Excel, JSON, or an API pipeline.

The Actor uses AbeBooks' public US storefront. It does not log in, add books to a basket, contact sellers, or place orders.

Who is it for?

Rare-book dealers

Collect comparable offers with condition descriptions, edition clues, seller identity, and delivered-cost components.

Collectors and researchers

Find copies for a title, author, ISBN, signed-book search, or first-edition search without manually copying result cards.

Resale and sourcing teams

Schedule repeatable searches and compare current public inventory in spreadsheets or databases.

Catalog and pricing analysts

Join ISBN, publisher, publication year, condition, seller, item price, and shipping into a consistent record.

Why use this Actor?

  • Offer-level output: one row maps to one AbeBooks seller listing.
  • Several search modes: keyword, title, author, ISBN, and public search URLs.
  • Collectible filters: signed, first edition, dust jacket, condition, and binding.
  • Transparent costs: item price and shipping are separate numeric fields when available.
  • Bounded extraction: maxItems and maxPagesPerSearch prevent accidental open-ended runs.
  • Typed results: dataset fields are ready for spreadsheets, code, and database ingestion.
  • No browser overhead: public server-rendered search results are fetched directly.

What data can you extract?

FieldMeaning
listingIdStable AbeBooks offer identifier
titleSeller's listing title
authorAuthor or contributor byline
isbn10, isbn13ISBN values when shown
publisherPublisher shown on the result card
publishYearPublication year when shown
languageListing language
bindingExplicit card binding, falling back to description text
editionFirst Edition badge or recognizable non-negated edition text
isFirstEditiontrue only for an explicit First Edition card badge; otherwise omitted
isSignedtrue only for an explicit Signed card badge; otherwise omitted (signer not established)
conditionAbeBooks condition label
conditionDescriptionSeller-supplied copy description
sellerNamePublic bookseller name
sellerLocationPublic seller location
sellerRatingSeller star rating when shown
priceItem price, excluding separate shipping
currencyISO currency code for the displayed price
shippingPriceShipping amount, or 0 when marked free
shippingTextShipping label shown by AbeBooks
availabilityDerived offer availability
quantityAvailableNumber of copies when displayed
imageUrlPublic cover or seller image
listingUrlCanonical AbeBooks offer URL
sellerUrlPublic AbeBooks seller page
searchUrlSearch page where the offer was found
positionOne-based position on that result page
scrapedAtUTC extraction timestamp

Optional fields are omitted when AbeBooks or the seller does not expose them on the search card.

How to get started

  1. Open the Actor in Apify Console.
  2. Add one or more objects under Book searches.
  3. Enter a keyword, title, author, ISBN, or a supported AbeBooks search URL.
  4. Choose any shared filters.
  5. Set the maximum listings and pages.
  6. Click Start.
  7. Open the default dataset to preview or export results.

A practical first run is:

{
"searches": [{ "isbn": "9780441172719" }],
"condition": "used",
"sortBy": "lowest-price",
"maxItems": 20,
"maxPagesPerSearch": 1
}

Input parameters

searches

An array of search objects. A row can contain:

  • keyword for words anywhere in the listing;
  • title for title words;
  • author for an author name;
  • isbn for an ISBN-10 or ISBN-13.

Combine fields in one object to narrow a search. Add separate objects to run several searches in one task.

startUrls

Optional public https://www.abebooks.com/servlet/SearchResults... or /book-search/... URLs.

The Actor rejects other hosts, credentials, non-HTTPS URLs, nonstandard ports, and non-search paths, including pagination and redirect destinations. Saved URL criteria (condition, sorting, binding, years, prices, and flags) are preserved unless you supply the corresponding shared override. The Actor controls page size (ds=30) and grouping (rollup=on).

For example, { "startUrls": [{ "url": "https://www.abebooks.com/servlet/SearchResults?kn=dune&cond=vg&sortby=17&bi=h&fe=on" }], "maxItems": 20 } retains those criteria. Explicit condition: "any" or binding: "any" removes that URL filter; a boolean false removes its flag (it does not request the opposite attribute). Omitted filters preserve saved URL values. Explicit sort/year/price values replace those parameters. Generated searches still default to relevance with no optional filters.

Pretty-path filters follow the same rule: { "startUrls": [{ "url": "https://www.abebooks.com/book-search/title/dune/first-edition/" }], "firstEdition": false, "maxItems": 3 } searches Dune without requiring first editions. Explicit condition/binding overrides replace /used/, /new/, /hard-cover/, or /soft-cover/; boolean overrides replace /first-edition/, /signed/, /dust-jacket/, or /free-shipping/. Omitted overrides retain these path criteria and the search identity stays intact.

Already-saved Tasks that explicitly contain any, false, or relevance continue to apply those values as overrides. Remove them from the Task input if you want the URL's corresponding criteria preserved.

Offer filters

  • condition: any, new, used, fine, very good, good, or fair/poor;
  • binding: any, hardcover, or softcover;
  • firstEdition: first-edition offers only;
  • signed: signed offers only;
  • dustJacket: offers marked with a dust jacket;
  • freeShipping: free-shipping offers on the US storefront;
  • minPrice, maxPrice: item-price range;
  • minPublishYear, maxPublishYear: publication-year range;
  • sortBy: relevance, lowest price, highest price, newest, or oldest.

Run limits

  • maxItems defaults to 50 and applies across all searches.
  • maxPagesPerSearch defaults to 5 and applies separately to each search.

AbeBooks usually exposes 30 offers per page. The Actor stops early when it reaches maxItems, runs out of pages, recognizes a genuine no-results page, or encounters an already-visited page URL. The cap is global across searches after listing-ID deduplication. AbeBooks performs query matching and filtering; the Actor does not promise exact whole-title matching or exhaustive inventory coverage.

Output example

A current ISBN search returns records shaped like this:

{
"listingId": "30101086817",
"title": "Dune",
"author": "Herbert, Frank",
"isbn10": "0441172717",
"isbn13": "9780441172719",
"publisher": "Ace",
"publishYear": 1990,
"language": "English",
"condition": "Used - Good",
"sellerName": "medimops",
"sellerLocation": "Berlin, Germany",
"sellerRating": 5,
"price": 9.44,
"currency": "USD",
"shippingPrice": 0,
"shippingText": "Free Shipping",
"availability": "in_stock",
"quantityAvailable": 20,
"listingUrl": "https://www.abebooks.com/Dune-Herbert-Frank-Ace/30101086817/bd",
"searchUrl": "https://www.abebooks.com/servlet/SearchResults?isbn=9780441172719",
"position": 1,
"scrapedAt": "2026-09-19T06:09:03.840Z"
}

Prices, availability, seller data, and descriptions can change after extraction. Use scrapedAt to identify the observation time.

How much does it cost to search AbeBooks book listings?

The Actor uses pay-per-event pricing:

  • $0.005 when a run starts;
  • one item event for each unique offer saved.

Item prices decrease by Apify pricing tier:

TierPrice per saved offer
FREE$0.0039836
BRONZE$0.003464
SILVER$0.0027019
GOLD$0.0020784
PLATINUM$0.0020784
DIAMOND$0.0020784

At the FREE tier, 20 saved offers cost about $0.084672, 100 cost about $0.40336, and 1,000 cost about $3.9886, including one start event.

At the BRONZE tier, the same examples cost about $0.07428, $0.3514, and $3.469.

Failed requests and duplicate or rejected rows do not create item events. Apify displays the applicable tier and total charge before or after each run.

Cost examples are estimates, not payout or invoice guarantees. Final billing can be affected by Apify plan rules, refunds, fraud, disputes, taxes, corrections, or clawbacks.

ISBN price comparison workflow

Use one exact ISBN, select lowest-price, and keep shippingPrice separate from price.

For an estimated delivered cost in a spreadsheet:

price + shippingPrice

Do not interpret item price alone as delivered cost. Tax, customs charges, or destination-specific shipping changes may not appear on the public search card.

Signed and first-edition sourcing workflow

A repeat sourcing task can combine author searches with collectible filters:

{
"searches": [
{ "author": "Stephen King" },
{ "author": "Ursula K. Le Guin" }
],
"condition": "used",
"firstEdition": true,
"signed": true,
"sortBy": "newest",
"maxItems": 100,
"maxPagesPerSearch": 3
}

Schedule the task, export each run, and compare by listingId. The Actor returns current snapshots; it does not itself store history, send alerts, or label listings as newly added.

Scheduling and monitoring

Apify Schedules can run a saved task hourly, daily, weekly, or with a cron expression.

A typical monitoring pipeline is:

  1. save a Task with stable searches and filters;
  2. schedule repeated runs;
  3. export each default dataset;
  4. upsert by listingId in your database;
  5. compare price, shippingPrice, condition, and availability over time;
  6. send alerts from your own automation when values change.

Keep timestamps because an offer may disappear, be relisted, or change after a run.

Export and integrations

The default dataset supports Apify exports such as:

  • JSON and JSONL;
  • CSV and Excel;
  • XML and RSS;
  • direct dataset API access.

You can connect runs to Google Sheets, Make, Zapier, webhooks, cloud storage, or your own ETL system.

Run with the Apify API

Replace <APIFY_TOKEN> with your token.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~abebooks-book-search-listings/runs?token=<APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searches":[{"isbn":"9780441172719"}],"maxItems":20}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/abebooks-book-search-listings').call({
searches: [{ author: 'Ursula K. Le Guin' }],
firstEdition: true,
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/abebooks-book-search-listings').call(run_input={
'searches': [{'keyword': 'antiquarian astronomy'}],
'condition': 'used',
'maxItems': 50,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with MCP and AI agents

Add the Apify MCP server in Claude Code:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/abebooks-book-search-listings"

Claude Desktop, Cursor, and VS Code

Use this equivalent MCP configuration in Claude Desktop, Cursor, or VS Code:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/abebooks-book-search-listings"
}
}
}

Example prompts:

  • “Find 20 used offers for ISBN 9780441172719 and rank them by item plus shipping price.”
  • “Export signed first-edition Stephen King offers with seller and condition details.”
  • “Run my saved AbeBooks rare-book sourcing task and summarize the least expensive available copies.”

Reliability and failure behavior

The Actor validates enum values, search/URL shapes, integer years (1000–2100), numeric ranges, booleans, and limits before start/item charging or making source requests.

It fails with a non-zero status when:

  • an ISBN has an invalid shape;
  • a start URL is outside supported AbeBooks search pages;
  • price or year ranges are reversed;
  • AbeBooks returns a challenge instead of listings;
  • AbeBooks returns a non-success HTTP response after bounded retries.

A recognized natural no-result search succeeds with zero dataset rows and no item charges (the start event still applies). Unrecognized HTML and pages with listing cards but zero valid offers fail clearly. Candidate, accepted, rejected, duplicate, page, request, retry, and saved-row counters are logged; partial card rejection raises a warning. These counters describe parsing/work, not completeness of AbeBooks inventory.

Failed operations send sanitized diagnostic input, exceptions, bounded work counters, and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL queries are removed; reports are retained for 30 days.

The Actor deduplicates offers by listingId within one run. It does not deduplicate against previous runs.

Limits and practical tips

  • Search cards may not contain every detail found on an individual book page.
  • binding prefers explicit card attributes; edition prefers the First Edition badge, with seller-text fallback. Collector booleans use only exact card badges, not descriptions or input filters. Missing badges mean unknown, never false.
  • Sampled cards do not expose a dedicated dust-jacket badge; no hasDustJacket output is fabricated. Dust-jacket filtering is an upstream request, not per-copy evidence.
  • Seller descriptions can be long, multilingual, or inconsistently formatted.
  • Shipping is the displayed storefront value and can vary by destination.
  • Currency reflects the displayed search result, not a converted accounting currency.
  • Search ranking and counts can change between pages or runs.
  • Start with one page while tuning filters, then increase limits.
  • Use ISBN for edition-specific comparison and title/author for broader discovery.
  • Avoid overlapping searches when you do not need duplicate discovery work.

Legality and responsible use

Public marketplace data can still be subject to terms, database rights, copyright, privacy rules, and local law.

Use the Actor for legitimate research, sourcing, catalog, and monitoring purposes. Collect only what you need, respect applicable rules, avoid attempting to identify private individuals, and do not republish copyrighted seller descriptions without an appropriate basis.

This Actor is independent and is not endorsed by AbeBooks or Amazon.

Troubleshooting

Why did my run return no rows?

Check that the source search returns offers in a normal browser. Then loosen condition, edition, signed, price, or year filters. A valid search can naturally have no matching inventory.

Why is shipping missing?

Some cards do not expose a numeric shipping amount for the current storefront context. Inspect shippingText; destination-specific checkout costs may differ.

Why does edition look incomplete?

AbeBooks search cards do not expose a universal structured edition field. The Actor prefers an explicit First Edition badge and otherwise reports recognizable non-negated seller edition text. A badge is the seller/platform claim, not an independent authentication of a collectible copy.

Can I scrape one individual product URL?

No. startUrls accepts public AbeBooks search URLs, not arbitrary detail pages. The product is designed for offer discovery and comparison.

Does the Actor track changes or send alerts?

It produces current snapshots. Use Apify Schedules plus your spreadsheet, database, webhook, or automation platform to compare runs and alert on changes.

Use related sources as separate datasets. Marketplace offer condition, shipping, and availability are source-specific and should not be treated as interchangeable.

FAQ

Is an AbeBooks account required?

No. The Actor searches public listing pages without login.

Are the prices historical?

No. Each row is a current public observation at scrapedAt.

Can one run search multiple books?

Yes. Add multiple searches objects. maxItems is shared across them, while maxPagesPerSearch applies to each search.

Are duplicate offers charged twice?

No. Within one run, the Actor deduplicates offers before they are saved. Each saved unique offer creates one item event.

Does the Actor download cover images?

No. It records the public image URL when shown, avoiding unnecessary media transfer.