# Goodreads Quotes Scraper (`parseforge/goodreads-quotes-scraper`) Actor

Scrape quotes from Goodreads by searching keywords. Extract the quote text, author name, associated tags, number of likes, and the quote's URL. Ideal for building curated quote collections, analyzing popular sentiments, or creating inspirational content databases.

- **URL**: https://apify.com/parseforge/goodreads-quotes-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.62 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

> **Unofficial.** This Actor is not affiliated with, endorsed by, or sponsored by Goodreads, Inc. It collects publicly available data only.

This actor collects quotes from Goodreads based on a keyword search. It returns structured data with quote text, author, book, and tags, and requires only a search query and an optional maximum item limit.

The actor searches Goodreads quotes by a keyword you provide. You can set a maximum number of quotes to collect, from 1 to 1,000,000. Free users are limited to a preview of 10 items. The actor uses a stealth browser to handle any client-side rendering, ensuring reliable extraction.

[**Open the input and run it**](https://apify.com/parseforge/goodreads-quotes-scraper/input?fpr=vmoqkp). Enter a keyword like 'life' or 'love', set the maximum number of quotes you need, and the actor will start scraping immediately.

| Target Audience | Primary Use Cases |
|---|---|
| Content creators, writers, researchers, marketers, educators, social media managers | Find inspirational quotes for social media, collect quotes by topic for articles, gather author quotes for research, compile quote collections for newsletters, analyze popular quotes by tag |

Jump to: [Data fields](#goodreads-data-fields) · [How to scrape](#how-to-scrape-goodreads) · [Use cases](#goodreads-data-use-cases) · [API](#use-this-goodreads-scraper-as-an-api) · [Troubleshooting](#troubleshooting) · [FAQ](#goodreads-scraper-faq)

***

### What the Goodreads Quotes Scraper does

- **Keyword Search**: Enter a search term to find matching quotes on Goodreads.

***

### Goodreads Data Fields

Export to CSV, Excel, JSON or XML from the Dataset tab, or pull them straight from the API.

| Field group | Included data |
|---|---|
| Content | `quoteText`, `bookTitle` |
| Author and source | `author` |
| Media | `imageUrl` |
| Time | `scrapedAt` |
| Other | `tags`, `quoteUrl`, `error` |

#### Sample record

```json
{
  "imageUrl": "https://images.gr-assets.com/quotes/1511992603p2/8630.jpg",
  "quoteText": "“I'm selfish, impatient and a little insecure. I make mistakes, I am out of control and at times hard to handle. But if you can't handle me at my worst, then you sure as hell don't deserve me at my best.”",
  "author": "Marilyn Monroe",
  "scrapedAt": "2026-08-10T03:30:48.638Z"
}
```

Abridged to the fields most people use.

***

### What this Goodreads scraper does not do

- **Goodreads may block excessive requests.** The actor respects rate limits, but very large scrapes may be throttled or blocked. Use reasonable maxItems values.
- **Search results are limited by Goodreads' own search.** The actor can only return quotes that appear in Goodreads search results for your keyword. Some quotes may not be indexed.
- **Free users get only 10 items.** To scrape more than 10 quotes, you need a paid Apify subscription.
- **The actor requires a browser.** It uses a stealth browser to render pages, which makes it slower than a simple HTTP scraper.
- **No API access.** The actor does not use an official Goodreads API; it scrapes the public website, which may change.

***

### Why choose this Goodreads scraper

|  | Capability |
|---|---|
| Quote text | The exact quote as displayed on Goodreads |
| Author | Name of the person who said the quote |
| Book | Title of the book the quote is from (if available) |
| Tags | User-generated tags associated with the quote |
| URL | Direct link to the quote page on Goodreads |

***

### How to Scrape Goodreads

1. **Sign up.** [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. **Open the Actor.** Go to the [Goodreads Quotes Scraper](https://apify.com/parseforge/goodreads-quotes-scraper?fpr=vmoqkp) page.
3. **Set your input.** Enter a keyword like 'life' or 'love', set the maximum number of quotes you need, and the actor will start scraping immediately.
4. **Run it, then download.** Results appear in the Dataset tab as CSV, Excel, JSON or XML.

**A first run with the defaults**

```json
{
  "searchQuery": "life",
  "maxItems": 10
}
```

**A larger pull**

```json
{
  "searchQuery": "life",
  "maxItems": 200
}
```

***

### Goodreads Data Use Cases

#### Social Media Content Curation

A social media manager enters a keyword like 'motivation' and sets maxItems to 50. They read the quote text and author fields to create daily posts. The decision it supports: which quotes to schedule for engagement.

#### Research on Famous Quotes

A writer searches for 'success' and collects up to 200 quotes. They analyze the author and book fields to cite sources. The decision it supports: selecting authoritative quotes for an article.

#### Educational Quote Collections

A teacher searches for 'education' and collects 30 quotes. They use the tags field to organize by theme. The decision it supports: building a handout for students.

#### Marketing Campaign Inspiration

A marketer searches for 'innovation' and collects 100 quotes. They review the quote text and author to find compelling phrases for ads. The decision it supports: choosing a tagline for a campaign.

***

### Beyond business use cases

- **Research.** Analyze the frequency of quotes by author or tag across a keyword.
- **Journalism.** Find quotes from notable figures for articles or interviews.
- **Public interest.** Compile quote databases for educational resources.
- **Side projects.** Build a personal quote collection app or bot.

***

### Use This Goodreads Scraper as an API

Call it from anything that can send an HTTP request. This returns the dataset in the same response:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/parseforge~goodreads-quotes-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "searchQuery": "life", "maxItems": 10 }'
```

`$APIFY_TOKEN` is your Apify API token, from Settings in the console. For larger jobs, start the run asynchronously and collect results with a webhook. Client libraries exist for Node.js and Python as `apify-client`, and the full reference is in the [Apify API documentation](https://docs.apify.com/api/v2).

Save a tested input as an Apify Task and attach a [schedule](https://docs.apify.com/platform/schedules) for recurring collection.

***

### Troubleshooting

**I get 0 results.** Check your search query spelling. Try a broader keyword. Goodreads may have no quotes for very specific terms.

**The actor runs but returns fewer items than expected.** Goodreads may not have enough quotes for your keyword. Increase maxItems or try a different query. Also, free accounts are capped at 10 items.

**The actor fails with a timeout.** Large scrapes can take time. Reduce maxItems or run the actor during off-peak hours. If the issue persists, contact support.

**The data seems incomplete (missing author or book).** Some quotes on Goodreads lack author or book attribution. The actor extracts what is available on the page.

**I see an error about browser launch.** The actor uses a browser. Ensure your Apify account has browser capabilities enabled. If the error continues, try again later.

**The actor is very slow.** Browser-based scraping is slower than HTTP. For large scrapes, consider reducing maxItems or splitting into multiple runs.

**Something else.** Open an issue with the run ID, your input with any secrets removed, what you expected and what came back, or email parseforge@protonmail.com.

***

### Goodreads Scraper FAQ

**How many quotes can I scrape?** You can set maxItems from 1 to 1,000,000. Free users are limited to 10 items.

**Can I scrape all quotes on Goodreads?** No, the actor only returns quotes that match your search query. Goodreads does not expose a complete list of all quotes.

**What is the search query?** It is a keyword like 'life', 'love', or 'success'. The actor searches Goodreads quotes for that term.

**Is there a limit for free users?** Yes, free users can only scrape up to 10 quotes. A paid Apify subscription removes this limit.

**Does it scrape quotes from specific authors?** Not directly. You can search by author name as a keyword, but the actor does not have a separate author filter.

**Can I get the book title?** Yes, if the quote is attributed to a book, the book title is included in the output.

**How long does it take?** It depends on the number of quotes and Goodreads' response time. A small scrape of 50 quotes usually finishes in a few minutes.

**Do I need a Goodreads account?** No, the actor scrapes public pages without requiring login.

**What if the search returns no results?** The actor will return an empty dataset. Try a different keyword or check if Goodreads has quotes for that term.

**Can I scrape quotes by tag?** The actor uses the search query, which matches tags as well. For example, searching 'life' will return quotes tagged with 'life'.

**Is the data up to date?** The actor scrapes live pages, so the data reflects the current state of Goodreads at the time of the run.

**Can I export the data?** Yes, you can download the results as JSON, CSV, or Excel from the Apify platform.

***

### Integrate with any app

Connects to any cloud service through [Apify integrations](https://apify.com/integrations):

- [Make](https://docs.apify.com/platform/integrations/make): multi-step automations
- [Zapier](https://docs.apify.com/platform/integrations/zapier): 5,000+ apps
- [Slack](https://docs.apify.com/platform/integrations/slack): run notifications
- [Airbyte](https://docs.apify.com/platform/integrations/airbyte): pipe rows into a warehouse
- [GitHub](https://docs.apify.com/platform/integrations/github): trigger runs from commits
- [Google Drive](https://docs.apify.com/platform/integrations/drive): export straight to Sheets

***

### Related Goodreads Actors

- [goodreads-book-scraper](https://apify.com/parseforge/goodreads-book-scraper?fpr=vmoqkp): Use this to scrape book details instead of quotes.

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

***

**Need help?** [Open our contact form](https://tally.so/r/BzdKgA) or email parseforge@protonmail.com to report an issue, request a scraper, or discuss a custom data project.

# Actor input Schema

## `searchQuery` (type: `string`):

Keyword to search for quotes on Goodreads.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## Actor input object example

```json
{
  "searchQuery": "life",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (type: `string`):

Complete dataset of all scraped records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "life",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/goodreads-quotes-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "life",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/goodreads-quotes-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "life",
  "maxItems": 10
}' |
apify call parseforge/goodreads-quotes-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/goodreads-quotes-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bHhLXfiCS53AF7afy/builds/uhebPhJ9Sf3nPBryJ/openapi.json
