Call the hosted Open Library Scraper from Node.js with the official apify-client.
npm install apify-clientimport { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/openlibrary-scraper').call({
mode: 'search',
query: 'science fiction',
maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} books`);
for (const b of items.slice(0, 5)) {
console.log(`${b.title} — ${b.authors} (${b.firstPublishYear}) ★ ${b.ratingsAverage ?? 'n/a'}`);
}import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/openlibrary-scraper').call({
mode: 'search',
query: 'fantasy',
sort: 'rating',
maxResults: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const topRated = items
.filter((b) => b.ratingsCount > 100)
.sort((a, b) => (b.ratingsAverage ?? 0) - (a.ratingsAverage ?? 0))
.slice(0, 10);
console.table(topRated.map((b) => ({ title: b.title, avg: b.ratingsAverage, n: b.ratingsCount })));import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/openlibrary-scraper').call({
mode: 'bookDetail',
workIds: ['OL27258W', 'OL45804W'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const b of items) {
console.log(b.title, '—', (b.description || '').slice(0, 100));
}import { ApifyClient } from 'apify-client';
import { writeFileSync } from 'node:fs';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/openlibrary-scraper').call({
mode: 'subject',
subject: 'science_fiction',
maxResults: 2000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
writeFileSync('books.json', JSON.stringify(items, null, 2));
console.log(`Saved ${items.length} books to books.json`);📄 Documentation only.