# BrainyQuote Scraper (`shahidirfan/brainyquote-scraper`) Actor

Easily extract quotes, authors, and topics from BrainyQuote. This lightweight actor is designed for fast and structured data collection. For seamless performance and to avoid potential blocking, using residential proxies is highly recommended.

- **URL**: https://apify.com/shahidirfan/brainyquote-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 10 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## BrainyQuote Quotes Scraper

Extract motivational and inspirational quotes from BrainyQuote at scale. Collect quotes, authors, topics, tags, and more for research, content creation, or personal inspiration. Fast, automated, and reliable for business and personal use.

### Features

- **Topic-Based Collection** — Gather quotes from any BrainyQuote topic
- **Author Search** — Find quotes by your favorite authors
- **Custom Start URLs** — Target specific pages for tailored results
- **Automatic Pagination** — Collect quotes across multiple pages
- **Deduplication** — Ensures unique quotes in every dataset
- **Proxy Support** — Use Apify Proxy for scalable, compliant scraping
- **Timestamped Output** — Every quote includes a scrape time for tracking
- **Telemetry Enrichment** — Adds region and user agent info for each record

---

### Use Cases

#### Content Creation
Build a library of quotes for blogs, newsletters, or social media posts.

#### Academic Research
Analyze motivational language and trends across authors and topics.

#### Market Intelligence
Monitor popular topics and authors for audience engagement.

#### Personal Inspiration
Collect favorite quotes for daily motivation or journaling.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `topic` | String | Yes | `motivational` | Topic slug to collect quotes from |
| `author` | String | No | `""` | Author name for targeted search |
| `startUrls` | Array | No | — | List of BrainyQuote URLs to scrape |
| `maxPages` | Integer | No | `3` | Maximum pages per topic/author |
| `maxItems` | Integer | No | `20` | Maximum quotes to collect |
| `proxyConfiguration` | Object | No | `{ "useApifyProxy": true }` | Proxy settings for Apify |

---

### Output Data

Each dataset item contains:

| Field | Type | Description |
|-------|------|-------------|
| `quote` | String | The quote text |
| `author` | String | Author of the quote |
| `author_url` | String | Link to author profile |
| `quote_url` | String | Link to quote page |
| `topic` | String | Topic associated with the quote |
| `tags` | Array | Related tags |
| `page` | Integer | Page number found |
| `position` | Integer | Position on page |
| `language` | String | Language code |
| `source` | String | Extraction mode (`http` or `browser`) |
| `telemetry` | Object | Region/user agent info |
| `scraped_at` | String | ISO timestamp of extraction |

---

### Usage Examples

#### Basic Topic Extraction

```json
{
  "topic": "motivational",
  "maxPages": 3,
  "maxItems": 20
}
````

#### Author Search

```json
{
  "topic": "motivational",
  "author": "Albert Einstein",
  "maxItems": 20
}
```

#### Custom URL Scraping

```json
{
  "startUrls": [
    { "url": "https://www.brainyquote.com/topics/success-quotes" }
  ],
  "maxItems": 20
}
```

***

### Sample Output

```json
{
  "quote": "It does not matter how slowly you go as long as you do not stop.",
  "author": "Confucius",
  "author_url": "https://www.brainyquote.com/authors/confucius-quotes",
  "quote_url": "https://www.brainyquote.com/quotes/confucius_140908?src=t_motivational",
  "topic": "motivational",
  "tags": [],
  "page": 1,
  "position": 1,
  "language": "en",
  "source": "http",
  "telemetry": {
    "userAgentClass": "other",
    "region": "OTHER",
    "countryCode": "PK",
    "gdpr": false,
    "usp": false
  },
  "scraped_at": "2026-03-03T10:42:36.522Z"
}
```

***

### Tips for Best Results

#### Choose Popular Topics

- Start with trending topics for the richest datasets
- Use author search for targeted inspiration

#### Optimize Collection Size

- Test with small `maxItems` for speed
- Increase for larger research projects

#### Use Proxies for Scale

- Enable Apify Proxy for reliable, compliant scraping

***

### Integrations

- **Google Sheets** — Export quotes for analysis
- **Airtable** — Build searchable quote databases
- **Slack** — Get daily quote notifications
- **Webhooks** — Send data to custom endpoints
- **Make** — Automate content workflows
- **Zapier** — Trigger actions from new quotes

#### Export Formats

- **JSON** — For developers and APIs
- **CSV** — For spreadsheet analysis
- **Excel** — For business reporting
- **XML** — For system integrations

***

### Frequently Asked Questions

#### How many quotes can I collect?

You can collect all available quotes for a topic or author. The practical limit depends on BrainyQuote's pagination.

#### Can I scrape multiple pages?

Yes, the actor automatically paginates to reach your desired result count.

#### What if some fields are empty?

Some quotes may lack tags or author info if not provided by BrainyQuote.

#### Is proxy required?

Proxy is recommended for scale and reliability, especially for large runs.

#### Can I use this for commercial projects?

Yes, as long as you comply with BrainyQuote's terms and applicable laws.

***

### Support

For issues or feature requests, contact support through the Apify Console.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [API Reference](https://docs.apify.com/api/v2)
- [Scheduling Runs](https://docs.apify.com/schedules)

***

### Legal Notice

This actor is designed for legitimate data collection purposes. Users are responsible for ensuring compliance with website terms of service and applicable laws. Use data responsibly and respect rate limits.

# Actor input Schema

## `startUrls` (type: `array`):

Optional BrainyQuote topic or quote URLs to scrape in addition to topic pagination.

## `topic` (type: `string`):

Topic slug without the '-quotes' suffix (e.g., motivational, success, happiness).

## `author` (type: `string`):

Search for quotes by a specific author (e.g., 'Albert Einstein').

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

Stop after saving this many quotes across all topics and start URLs.

## `maxPages` (type: `integer`):

How many paginated pages to visit per topic (including the first page).

## `proxyConfiguration` (type: `object`):

Configure Apify Proxy. Datacenter proxy is sufficient for this target.

## Actor input object example

```json
{
  "topic": "motivational",
  "maxItems": 20,
  "maxPages": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "topic": "motivational",
    "maxItems": 20,
    "maxPages": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/brainyquote-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 = {
    "topic": "motivational",
    "maxItems": 20,
    "maxPages": 3,
}

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

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

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

```

## CLI example

```bash
echo '{
  "topic": "motivational",
  "maxItems": 20,
  "maxPages": 3
}' |
apify call shahidirfan/brainyquote-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=shahidirfan/brainyquote-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "BrainyQuote Scraper",
        "description": "Easily extract quotes, authors, and topics from BrainyQuote. This lightweight actor is designed for fast and structured data collection. For seamless performance and to avoid potential blocking, using residential proxies is highly recommended.",
        "version": "0.0",
        "x-build-id": "CUJYGoELeu3ABjeXZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~brainyquote-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-brainyquote-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/shahidirfan~brainyquote-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-brainyquote-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/shahidirfan~brainyquote-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-brainyquote-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "topic"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Optional BrainyQuote topic or quote URLs to scrape in addition to topic pagination.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL",
                                    "description": "The BrainyQuote URL to scrape."
                                }
                            },
                            "required": [
                                "url"
                            ]
                        }
                    },
                    "topic": {
                        "title": "Primary topic",
                        "type": "string",
                        "description": "Topic slug without the '-quotes' suffix (e.g., motivational, success, happiness).",
                        "default": "motivational"
                    },
                    "author": {
                        "title": "Author",
                        "type": "string",
                        "description": "Search for quotes by a specific author (e.g., 'Albert Einstein')."
                    },
                    "maxItems": {
                        "title": "Max quotes to collect",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Stop after saving this many quotes across all topics and start URLs.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Max pages per topic",
                        "minimum": 1,
                        "type": "integer",
                        "description": "How many paginated pages to visit per topic (including the first page).",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Configure Apify Proxy. Datacenter proxy is sufficient for this target.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
