viaLibri Scraper — Rare & Antiquarian Book Listings, Prices avatar

viaLibri Scraper — Rare & Antiquarian Book Listings, Prices

Pricing

from $2.82 / 1,000 book listings

Go to Apify Store
viaLibri Scraper — Rare & Antiquarian Book Listings, Prices

viaLibri Scraper — Rare & Antiquarian Book Listings, Prices

Scrape viaLibri for rare and antiquarian book listings with prices, sellers, marketplaces and condition notes for dealers and collectors. $3.52 per 1,000.

Pricing

from $2.82 / 1,000 book listings

Rating

0.0

(0)

Developer

Muhammad Afzal

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

14 hours ago

Last modified

Share

viaLibri Scraper searches viaLibri, the search engine for old, rare, and second-hand books, and returns one record per listing with title, author, price in your chosen currency, original price, seller, seller location, source marketplace, listing link, and description. It is built for rare-book dealers, collectors, librarians, and price researchers, and costs $3.52 per 1,000 listings on the FREE tier plus a $0.006251 start fee per run.

What does the viaLibri scraper return?

It returns one dataset record per unique viaLibri listing, used or auction, with these fields:

FieldWhat it contains
title, authorBook title and author as listed
listingTypeused or auction
price, currencyPrice converted by viaLibri into your display currency
originalPriceThe seller's own price text, for example €18
sellerName, sellerLocation, sellerIdBookseller and country when listed
aggregatorMarketplace or site the listing comes from
listingUrlviaLibri link that forwards to the seller's listing
description, descriptionIsTruncatedEdition, condition, and binding notes
yearPublication year read from the title or the imprint at the start of the description, for example 1520; null when neither shows one
imageUrlCover or item image when viaLibri has one; often null
listingId, bookIdviaLibri identifiers
sourceSearchUrl, scrapedAtThe viaLibri search page and retrieval time

A run summary is saved as OUTPUT: listings returned, listings charged, searches, pages fetched, runtime, and warnings.

How do I compare rare book prices across sellers?

Search for the title and author, sort by price, and pick one display currency, so every listing is directly comparable.

{
"searchQueries": ["Virginia Woolf Orlando first edition"],
"listingTypes": ["used", "auction"],
"currency": "GBP",
"sort": "price.asc",
"maxResults": 100,
"maxPagesPerQuery": 2
}

price is viaLibri's converted price; originalPrice keeps the seller's own figure, so you can check the conversion. Auction rows may show the current bid.

How do I search antiquarian books by title, author, or keyword?

Add one or more phrases to searchQueries; each is matched against viaLibri's title, author, and keyword fields. Use 2–200 characters per query.

  • maxResults: 1–500 listings across all searches (default 50).
  • maxPagesPerQuery: 1–10 pages per search, about 50 listings per page (default 2).
  • listingTypes: used, auction, or both (default both).
  • currency: USD (default), EUR, GBP, CAD, AUD, CHF, or JPY.
  • sort: by year, price, author, title, or dealer name, ascending or descending, or added.desc for newest; default year.asc.

Yes. Build the search on viaLibri with its advanced filters, copy the results URL (it starts with https://www.vialibri.net/searches), and pass it in startUrls. The Actor reruns that search with your currency, sort, and listing types unless the URL already sets them.

{
"startUrls": [{ "url": "https://www.vialibri.net/searches?all_text=Darwin+Origin+of+Species&listing_type=auction" }],
"searchQueries": []
}

When you pass only startUrls, only those searches run. The Hamlet query is a Console prefill, not a default, so it is never added to API calls that leave searchQueries out.

When should I use it, and when not?

Use it when you need:

  • asking prices for a title across many booksellers and marketplaces in one table;
  • a dealer's view of what copies of an edition are on the market, with condition notes;
  • a scheduled check for new listings of a wanted book (sort by added.desc);
  • antiquarian or out-of-print book data for an AI agent or price study.

Do not use it when you need:

  • open access scholarly books with ISBN and DOI: use Open Access Books Scraper;
  • valuations or sold prices: the Actor returns current asking prices, not appraisals or sale records;
  • reader reviews or ratings, or seller contact details beyond the name and country shown.

How do I call it from code?

Use the official Apify API clients with the same JSON input as in Console.

JavaScript (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/vialibri-books-scraper').call({
searchQueries: ['Hamlet'],
listingTypes: ['used'],
sort: 'price.asc',
maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((b) => console.log(b.title, b.price, b.currency, b.sellerName));

Python (apify-client 3.x)

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/vialibri-books-scraper").call(
run_input={"searchQueries": ["Hamlet"], "sort": "price.asc", "maxResults": 50}
)
for listing in client.dataset(run.default_dataset_id).iterate_items():
print(listing["title"], listing["price"], listing["currency"], listing["aggregator"])

Use it from an AI assistant

The Actor works from Claude, ChatGPT, Cursor, or any MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/vialibri-books-scraper as a server, then ask, for example: "What are the five cheapest copies of a first edition of The Hobbit on viaLibri right now, in pounds?"

What does the output look like?

Listings from a three-listing test search for Hamlet sorted by price (2026-08-13; descriptions shortened):

[
{
"recordType": "bookListing",
"listingId": "202608130734iA6G7L33nt.a3",
"bookId": null,
"author": "Hansen, William",
"title": "Saxo Grammaticus and the Life of Hamlet: A Translation, History, and Commentary (English and Latin Edition)",
"listingType": "used",
"description": "Univ of Nebraska Pr, 1983. Jacket in Fair condition. Pencil underlining on some pages…",
"descriptionIsTruncated": false,
"year": null,
"sellerName": "Archives Books, Inc.",
"sellerLocation": "United States",
"sellerId": 8340,
"price": 23.44,
"currency": "USD",
"originalPrice": "$23",
"aggregator": "Amazon.com",
"listingUrl": "https://www.vialibri.net/search-result-links/202608130734iA6G7L33nt.a3.1/link",
"imageUrl": null,
"sourceSearchUrl": "https://www.vialibri.net/searches?all_text=Hamlet&listing_type=used&sort=price.asc&s=1.tjp6d5.723a60a61ed188bc",
"scrapedAt": "2026-08-13T07:34:20.870Z",
"warnings": []
},
{
"listingId": "202608130734iA6G7L33nt.8u",
"author": "Shakespeare, William",
"title": "Hamlet",
"listingType": "used",
"description": "Bantam Classics, 1988…",
"sellerName": "Bonita",
"sellerLocation": "United States",
"price": 30.93,
"currency": "USD",
"originalPrice": "$31",
"aggregator": "Alibris"
}
]

How much does it cost to scrape viaLibri?

You pay per unique listing saved, plus a start fee charged once per run. Platform usage is included in these prices.

EventFREEBRONZESILVERGOLD, PLATINUM, DIAMOND
Book listing (per listing)$0.00352$0.003432$0.003344$0.002816
Actor start (once per run)$0.006251$0.006094$0.005938$0.005

Worked totals on the FREE tier:

  • Default run, 50 listings: $0.006251 + 50 × $0.00352 = $0.182251.
  • Maximum run, 500 listings: $0.006251 + 500 × $0.00352 = $1.766251 (GOLD: $1.413).

The start fee is charged when the run begins, even if a search then finds nothing. Each listing is charged once, after it is saved.

Limits and reliability

  • Up to 500 listings per run and 10 pages per search.
  • viaLibri gathers results from many sites while you wait, so the Actor polls until the search completes, for up to about three minutes per search.
  • Listings are deduplicated by listingId across all searches in a run.
  • If no listing is collected and a search failed, the run fails with the reason in its status message; partial results are kept otherwise.
  • The Actor uses viaLibri's public search and the structured data embedded in its result pages. It does not log in or open seller pages.

FAQ

Does it need a viaLibri account?

No. It uses viaLibri's public search, the same one any visitor uses, and never logs in.

Which marketplaces do the listings come from?

Whatever viaLibri aggregates for your search. The aggregator field names the source of each listing, for example Alibris or Amazon.com in the sample above.

Can I get auction listings only?

Yes. Set listingTypes to ["auction"].

Which currencies are supported?

USD, EUR, GBP, CAD, AUD, CHF, and JPY. price is converted by viaLibri; originalPrice keeps the seller's figure.

Why is year sometimes empty?

viaLibri does not publish a separate year field, so the Actor reads it from the listing title or the imprint at the start of the description ("Paris, 1520. Folio."). Life dates such as "(1564-1616)", year ranges and measurements are ignored, and year is null when no imprint year is shown. In a 50-listing Hamlet check on 2026-10-27, 41 listings had a year.

How many listings can one run return?

Up to 500 across all searches. For more, split the job into several runs with different queries or sort orders.

Can I track new listings for a wanted book?

Yes. Save a Task with sort: "added.desc", schedule it, and compare listingId values between runs.

The Actor collects public listing data that viaLibri shows to every visitor. It does not log in, bypass access controls, or collect private data. Follow viaLibri's terms and applicable data-protection and copyright law, and verify prices with the seller before buying.

Last verified: 2026-10-27