ThriftBooks Used Book Listings Scraper
Pricing
Pay per event
ThriftBooks Used Book Listings Scraper
π Extract public ThriftBooks used-book listings with price, condition, ISBN, format, availability, images, and canonical product URLs.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Extract public ThriftBooks browse listings for used-book sourcing, edition comparison, and inventory monitoring.
Turn a title, author, ISBN, or public ThriftBooks browse URL into structured listing records.
What does it do?
This Actor collects the public listing cards returned by ThriftBooks browse searches.
It uses an HTTP-first parser, so it does not require a browser for the listing MVP.
Each record preserves the price and condition shown at the time of collection.
Use it to make a repeatable inventory snapshot instead of copying results by hand.
Who is it for?
π Used-book dealers can compare available conditions and prices before sourcing stock.
π Catalog and marketplace teams can normalize public listing data into their own product workflows.
π Price-monitoring teams can schedule the same input and compare snapshots over time.
π Researchers can search an author, title, or ISBN and export the visible results.
Why use it?
ThriftBooks results combine editions, formats, and conditions that are difficult to compare in a browser tab.
The dataset separates the values into fields that are easy to filter, join, and export.
Canonical product URLs remove result-tracking parameters, making deduplication simpler.
The source URL and collection timestamp make each snapshot traceable.
Data you get
| Field | Description |
|---|---|
title | Listing title shown on the browse card |
author | Public author text when shown |
isbn | ISBN from the product link when provided |
format | Format such as Paperback or Hardcover |
condition | Condition such as Good or Like New |
price | Current displayed USD price |
listPrice | Displayed list price when available |
availability | in_stock, out_of_stock, or unknown |
imageUrl | Cover image URL when available |
url | Canonical ThriftBooks product URL |
searchUrl | Browse page that produced the record |
sourceTimestamp | ISO timestamp for the collected page |
How do I search ThriftBooks listings?
-
Enter one or more book searches in Book searches.
-
Start with a low maximum listing count such as 20.
-
Run the Actor and open the default dataset.
-
Filter by
condition,format, oravailability. -
Schedule the same input when you need repeat monitoring.
Search input
Use searchQueries for titles, author names, ISBNs, or phrases.
For example, harry potter returns the public browse results for that phrase.
You can submit multiple queries in one run.
Duplicate canonical product URLs are emitted only once per run.
Browse and category URLs
Use startUrls when you already have a public ThriftBooks browse or category URL.
This is useful when you selected filters on the site before building a workflow.
The Actor accepts either a URL object in the console editor or a plain URL string through the API.
Combine URLs with search queries when you need multiple inventory segments.
Pagination limits
maxPagesPerInput controls how many public result pages are requested for each input.
A typical browse page can contain many listing cards.
The Actor stops early when a page is empty or only repeats prior listings.
Keep page limits conservative to reduce target load and make scheduled monitoring predictable.
Output example
{"title": "Harry Potter and the Sorcerer's Stone","author": "J.K. Rowling","isbn": "0590353403","format": "Hardcover","condition": "Like New","price": 8.09,"listPrice": 29.99,"availability": "in_stock","url": "https://www.thriftbooks.com/w/harry-potter-and-the-philosophers-stone-by-jk-rowling/248957/","sourceTimestamp": "2026-07-11T00:00:00.000Z"}
Values vary with the public listing card and may be absent when ThriftBooks does not show them.
Condition and format signals
Condition and format are copied from the public result card rather than inferred.
This is important when comparing books with the same title but different editions.
Treat missing values as source omissions, not as a claim about a book.
Use the canonical URL when you need to manually verify a high-value result.
Availability and stock monitoring
The Actor reports availability based on visible browse-card signals.
in_stock means a current displayed price was found without an out-of-stock marker.
out_of_stock is used when visible source text says a listing is unavailable.
unknown is retained when the card does not provide a reliable signal.
Pricing: how much does it cost to scrape ThriftBooks listings?
This Actor uses pay-per-event billing: a small start event and a per-listing event.
The current price is shown in the Apify console before you run it.
Start with a small sample to validate the fields you need.
Larger monitoring jobs should use only the pages required by your workflow.
Tips for better results
π Search an ISBN when you want the narrowest edition-oriented result set.
π Search an author when you are comparing a broader catalog.
π§ͺ Begin with one page before scheduling a multi-page job.
π Save sourceTimestamp if your downstream system compares price changes.
Integrations
Send the dataset to Google Sheets to compare a buyer's sourcing shortlist.
Load records into a database and deduplicate with url for catalog maintenance.
Use Make or Zapier to notify a team when a scheduled result enters a target price range.
Feed the canonical URLs into a review queue for manual edition verification.
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/thriftbooks-used-book-listings-scraper').call({searchQueries: ['harry potter'], maxItems: 20, maxPagesPerInput: 1,});console.log(await client.dataset(run.defaultDatasetId).listItems());
API usage with Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("automation-lab/thriftbooks-used-book-listings-scraper").call(run_input={"searchQueries": ["harry potter"], "maxItems": 20, "maxPagesPerInput": 1})print(client.dataset(run["defaultDatasetId"]).list_items().items)
API usage with cURL
curl "https://api.apify.com/v2/acts/automation-lab~thriftbooks-used-book-listings-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"searchQueries":["harry potter"],"maxItems":20,"maxPagesPerInput":1}'
MCP with Claude
Add the Apify MCP server in Claude Code, then enable this Actor as a tool.
$claude mcp add --transport http apify https://mcp.apify.com?tools=automation-lab/thriftbooks-used-book-listings-scraper
For Claude Desktop, add this server configuration and restart the app.
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/thriftbooks-used-book-listings-scraper"}}}
Example prompt: βSearch public ThriftBooks listings for ISBN 0590353403 and return condition and price.β
Example prompt: βMonitor public ThriftBooks listings for this author and summarize the cheapest in-stock formats.β
Reliability and partial results
A later page can fail because public retail sites may throttle or change markup.
The Actor keeps records collected from earlier pages and logs the failed page.
It does not retry aggressively or use product-detail requests in the listing MVP.
If a source changes its public card structure, inspect logs and rerun a small sample first.
Limitations
This Actor extracts public browse-card data; it does not promise a complete site catalog.
Product-detail-only fields such as full descriptions or publisher metadata are not part of this version.
Ratings and review counts are optional because they are not present on every browse card.
Prices, availability, and condition are snapshots and can change after collection.
Legality and responsible use
Only collect public data you are authorized to access.
Respect ThriftBooks terms, robots guidance where applicable, and applicable privacy and data-use laws.
Use low page limits and avoid unnecessary repeated runs.
Do not use this Actor to bypass access controls or collect personal data.
Troubleshooting: no items
Check that each URL is a public ThriftBooks browse or category page.
For search input, try a broad title or author before using an uncommon ISBN.
If a result page has no listing cards, the Actor stops that input to avoid repeated empty requests.
Review the run log for the exact source URL and response status.
Troubleshooting: missing fields
Browse cards do not always display every field for every book.
A missing ISBN, rating, review count, or list price means the public card did not expose it.
Do not treat optional missing fields as zero values.
Use the record URL for manual verification when an exact edition matters.
FAQ
Does this scrape product detail pages? No. This version intentionally focuses on public browse listings.
Can I use multiple searches? Yes. Add several searchQueries values in one run.
Can I monitor prices over time? Yes. Schedule an identical input and compare price, availability, and sourceTimestamp.
Why did the run stop before my page limit? It stops on an empty, repeated, or failed page to preserve partial results and avoid unnecessary requests.
Related scrapers
For a broader automation portfolio, browse Automation Lab Actors.
Use a source-specific Actor when your workflow requires another marketplace rather than public ThriftBooks listings.
Keep each source separate so conditions, prices, and URL conventions remain clear.
Support and feedback
Include the source URL, input, and a small output sample when reporting a parsing issue.
That information makes markup changes easier to diagnose without reproducing a large run.
For best reliability, validate a small input after changing a complex browse filter.
Version notes
Version 0.1 focuses on public listing-card extraction and bounded pagination.
Future releases may add optional enrichment only when it can be measured without reducing listing reliability.
Stable field names are intended to make scheduled exports easier to maintain.
Quick checklist
β Provide a search query or public browse/category URL.
β Keep the first run small.
β Verify condition, format, and availability fields for your target listings.
β Schedule the validated input for monitoring.