# Wikiquote Quotations Scraper (`parseforge/wikiquote-quotations-scraper`) Actor

Pull sourced quotations for any person or topic straight from Wikiquote. Returns the quote text, attribution, page title, section, and language for every line. Handy for writers, researchers, and trivia builders who want clean, verifiable quotes from a trusted reference.

- **URL**: https://apify.com/parseforge/wikiquote-quotations-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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 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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 💬 Wikiquote Quotations Scraper

> 🚀 **Export sourced quotations in seconds.** Turn any Wikiquote page into a clean feed of quotes with attribution, section, and source link, one record per quotation.

> 🕒 **Last updated:** 2026-06-05 · **📊 8 fields** per record · scales to thousands of quotes · 10+ language editions

Wikiquote is the open, community curated companion to Wikipedia dedicated to quotations from notable people, books, films, and topics. This Actor reads a page through the official MediaWiki API, parses the bulleted quote lines under the Quotes sections, strips the wiki markup, and returns each quotation as its own structured record.

**Coverage:** Pull quotations from any Wikiquote page in English (en) plus nine other language editions including Spanish, German, French, Italian, Portuguese, Russian, Polish, Dutch, and Japanese. Each record carries the quote text, the attribution or source note when present, the page title, the section it came from, the language, and a direct link back to the page.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Writers, journalists, and editors | Sourcing accurate, attributed quotes |
| Researchers and students | Building citation ready quote collections |
| App and bot builders | Powering quote of the day feeds |
| Educators and trivia creators | Compiling themed quotation sets |

### 📋 What the Wikiquote Quotations Scraper does

- Reads one or more Wikiquote pages by title through the MediaWiki action API.
- Detects the quotation sections (Quotes, Sourced, Attributed, Misattributed, and similar) and skips See also, References, and external link blocks.
- Parses each top level bullet as a quote and the indented sub bullets as attribution or source notes.
- Strips wiki markup, reference tags, templates, and citation only lines, leaving readable text.
- Outputs one clean record per quotation, ready for downstream use.
- Supports ten language editions and a configurable item limit.

### 🎬 Full Demo (_🚧 Coming soon_)

### ⚙️ Input

| Field | Type | Description |
|---|---|---|
| `pageTitles` | array | One or more Wikiquote page titles, for example Albert Einstein or Mark Twain. |
| `language` | string | Wikiquote language edition to query. Defaults to en. |
| `maxItems` | integer | Maximum number of quotation records to collect. Free plan caps at 10. |

Example, default run:

```json
{
  "pageTitles": ["Albert Einstein", "Mark Twain"],
  "language": "en",
  "maxItems": 10
}
````

Example, single topic in another language:

```json
{
  "pageTitles": ["Friedrich Nietzsche"],
  "language": "de",
  "maxItems": 50
}
```

> ⚠️ **Good to Know:** Titles must match the Wikiquote page name. Redirects are followed automatically. Pages with no Quotes section return no quotations rather than an error.

### 📊 Output

Each record represents a single quotation.

| Field | Description |
|---|---|
| 📄 `pageTitle` | The resolved Wikiquote page title the quote came from |
| 💬 `quote` | The cleaned quotation text |
| ✍ `attribution` | Source, work, date, or context note when present, otherwise null |
| 🗂 `section` | The section path the quote was found under |
| 🌐 `language` | The Wikiquote language edition queried |
| 🔗 `sourceUrl` | Direct link to the Wikiquote page |
| 🕒 `scrapedAt` | ISO timestamp of collection |
| ❌ `error` | Error message for a failed page, otherwise null |

Real sample records:

```json
{
  "pageTitle": "Albert Einstein",
  "quote": "\"Everything should be made simple as possible but no simpler.\"",
  "attribution": "Repeated throughout his life, see: Quote Investigator",
  "section": "Quotes",
  "language": "en",
  "sourceUrl": "https://en.wikiquote.org/wiki/Albert_Einstein",
  "scrapedAt": "2026-06-05T17:54:21.379Z",
  "error": null
}
```

```json
{
  "pageTitle": "Albert Einstein",
  "quote": "Un homme heureux est trop content du présent pour trop se soucier de l'avenir.",
  "attribution": "A happy man is too satisfied with the present to dwell too much on the future. From \"Mes Projets d'Avenir\", a French essay written at age 18 for a school exam (18 September 1896). The Collected Papers of Albert Einstein Vol. 1 (1987) Doc. 22.",
  "section": "Quotes > 1890s",
  "language": "en",
  "sourceUrl": "https://en.wikiquote.org/wiki/Albert_Einstein",
  "scrapedAt": "2026-06-05T17:54:21.379Z",
  "error": null
}
```

```json
{
  "pageTitle": "Albert Einstein",
  "quote": "Autoritätsdusel ist der größte Feind der Wahrheit.",
  "attribution": "Blind obedience to authority is the greatest enemy of truth.",
  "section": "Quotes > 1900s",
  "language": "en",
  "sourceUrl": "https://en.wikiquote.org/wiki/Albert_Einstein",
  "scrapedAt": "2026-06-05T17:54:21.379Z",
  "error": null
}
```

### ✨ Why choose this Actor

- Uses the official MediaWiki API, no fragile HTML scraping of rendered pages.
- One quotation per record, so the data drops straight into spreadsheets and databases.
- Attribution and source notes are preserved, not discarded.
- Ten language editions out of the box.
- Markup, templates, and reference tags are cleaned for you.
- Sends a descriptive User-Agent and follows page redirects responsibly.

### 📈 How it compares to alternatives

- Manual copy and paste loses structure and attribution. This Actor keeps quote, source, and section separate.
- Generic web scrapers return raw HTML full of markup. This Actor returns readable text.
- Static quote lists go stale. Wikiquote is community maintained and updated continuously.

### 🚀 How to use

1. Sign up for a free Apify account using [this link](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Wikiquote Quotations Scraper.
3. Enter one or more page titles and pick a language edition.
4. Set an item limit, then click Start.
5. Download your quotations or connect them to your app through the Apify API.

### 💼 Business use cases

#### Content and editorial

| Need | How this helps |
|---|---|
| Sourcing quotes for articles | Pull attributed quotes with their origin note |
| Building newsletters | Compile themed quote sets per author |

#### Apps and products

| Need | How this helps |
|---|---|
| Quote of the day features | Feed a rotating bank of quotations |
| Chatbots and assistants | Ground responses in sourced quotes |

#### Research and education

| Need | How this helps |
|---|---|
| Citation collections | Capture quote plus source for references |
| Classroom materials | Gather quotes by figure or theme |

#### Marketing and social

| Need | How this helps |
|---|---|
| Social media content | Build a backlog of shareable quotes |
| Brand voice research | Study how figures phrased ideas |

### 🔌 Automating Wikiquote Quotations Scraper

Connect runs and results to the tools you already use through Apify integrations and the API, including Make, Zapier, Slack, Airbyte, GitHub, and Google Drive. Trigger a run on a schedule, then route the quotations into your destination of choice.

### 🌟 Beyond business use cases

- **Research:** assemble primary quotation sets for a thesis or paper.
- **Personal:** build a personal commonplace book of favorite quotes.
- **Non-profit:** curate inspirational quotes for community programs.
- **Experimentation:** train or test text projects on attributed quotations.

### 🤖 Ask an AI assistant

Paste your collected quotations into [ChatGPT](https://chat.openai.com), [Claude](https://claude.ai), [Perplexity](https://www.perplexity.ai), or [Microsoft Copilot](https://copilot.microsoft.com) and ask it to group, theme, summarize, or fact check the attributions.

### ❓ Frequently Asked Questions

**Where does the data come from?** Directly from Wikiquote through the official MediaWiki action API.

**Which languages are supported?** English, Spanish, German, French, Italian, Portuguese, Russian, Polish, Dutch, and Japanese editions.

**How do I pick a page?** Use the exact Wikiquote page title, for example Mark Twain. Redirects are followed automatically.

**What counts as one record?** Each individual quotation is one record.

**Is attribution always present?** No. When a quote has a source or context note it is captured, otherwise attribution is null.

**What happens to a page with no quotes?** It returns no quotation records for that page rather than failing the run.

**Can I scrape several pages at once?** Yes, pass multiple titles in the page titles list.

**Are references and templates included?** No, reference tags, templates, and citation only lines are stripped.

**Is there a free tier?** Yes, free plans are limited to 10 items per run. Paid plans raise the limit.

**Is this affiliated with Wikiquote?** No. It is an independent tool that reads publicly available content.

**Does it modify Wikiquote?** No. It only reads pages, it never edits anything.

### 🔌 Integrate with any app

Every run produces a structured dataset you can pull through the Apify API, webhooks, or any of the platform integrations, so the quotations flow into your spreadsheets, databases, or apps automatically.

### 🔗 Recommended Actors

- [ParseForge collection](https://apify.com/parseforge) for more reference and knowledge base scrapers.
- Browse the ParseForge store for related Wikipedia and reference data tools.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** independent tool, not affiliated with Wikiquote or the Wikimedia Foundation. Only publicly available data is collected.

# Actor input Schema

## `pageTitles` (type: `array`):

One or more Wikiquote page titles (a person, character, or topic). Spaces are fine, e.g. Albert Einstein.

## `language` (type: `string`):

Wikiquote language edition to query (e.g. en for English, es for Spanish, de for German).

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

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

## Actor input object example

```json
{
  "pageTitles": [
    "Albert Einstein",
    "Mark Twain"
  ],
  "language": "en",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (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 = {
    "pageTitles": [
        "Albert Einstein",
        "Mark Twain"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/wikiquote-quotations-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 = {
    "pageTitles": [
        "Albert Einstein",
        "Mark Twain",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/wikiquote-quotations-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 '{
  "pageTitles": [
    "Albert Einstein",
    "Mark Twain"
  ],
  "maxItems": 10
}' |
apify call parseforge/wikiquote-quotations-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Wikiquote Quotations Scraper",
        "description": "Pull sourced quotations for any person or topic straight from Wikiquote. Returns the quote text, attribution, page title, section, and language for every line. Handy for writers, researchers, and trivia builders who want clean, verifiable quotes from a trusted reference.",
        "version": "0.1",
        "x-build-id": "tvRBXzTxWAcmS8JQN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~wikiquote-quotations-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-wikiquote-quotations-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/parseforge~wikiquote-quotations-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-wikiquote-quotations-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/parseforge~wikiquote-quotations-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-wikiquote-quotations-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": [
                    "pageTitles"
                ],
                "properties": {
                    "pageTitles": {
                        "title": "Page Titles",
                        "type": "array",
                        "description": "One or more Wikiquote page titles (a person, character, or topic). Spaces are fine, e.g. Albert Einstein.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "language": {
                        "title": "Language Edition",
                        "enum": [
                            "en",
                            "es",
                            "de",
                            "fr",
                            "it",
                            "pt",
                            "ru",
                            "pl",
                            "nl",
                            "ja"
                        ],
                        "type": "string",
                        "description": "Wikiquote language edition to query (e.g. en for English, es for Spanish, de for German).",
                        "default": "en"
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
