# Quotes to Scrape Quotes Scraper (`parseforge/quotes-to-scrape-scraper`) Actor

Scrapes quotes from Quotes to Scrape, the classic web scraping practice site. Returns each quote with its text, author, and tags as a flat row.

- **URL**: https://apify.com/parseforge/quotes-to-scrape-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 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 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)

### Quotes to Scrape Quotes Scraper

**Scrape quotes from Quotes to Scrape, the classic web scraping sandbox, up to your defined limit per run.** Every quote comes with its text, author, and tags. No login or API key. Export to CSV, JSON, Excel, or XML.

Quotes to Scrape is the go-to practice site for web scraping, but building a scraper from scratch takes time you could spend on analysis. This Actor reads the public quote pages directly, follows pagination, and returns each quote in one fixed schema. It is a ready-made tool for testing data collection patterns or gathering sample datasets.

| Who uses it | What they scrape Quotes to Scrape for |
|---|---|
| Web scraping beginners | Learning how structured data extraction works with a reliable, simple target site. |
| Data analysts | Building sample quote datasets for text analysis, sentiment practice, or tagging experiments. |
| Educators and trainers | Providing a live, no-auth data source for classroom exercises on web data collection. |
| QA engineers | Validating that a scraping workflow handles pagination and item limits correctly. |

### What it does

This Actor collects quotes from Quotes to Scrape by starting URL and returns each one as a flat row with its text, author, and tags.

- 📄 **Start URLs:** Provide one or more page URLs to begin scraping. Defaults to the main page.
- 🔢 **Max items:** Set a hard limit on the number of quotes to collect. The run stops when this count is reached.
- 🏷️ **Tag and author data:** Each quote includes its full text, the author name, and a list of associated tags.
- 📄 **Pagination handled:** The Actor automatically follows next-page links so you get quotes from the full site.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Quotes to Scrape data

**🧪 Learn web scraping by example.**

A beginner runs the Actor on the default start URL with a limit of 20 quotes to see how a scraper extracts text, authors, and tags from a real website.

**📊 Build a sample NLP dataset.**

A data analyst scrapes all available quotes to create a small corpus for testing text classification or sentiment analysis models.

**🏫 Run a classroom exercise.**

An instructor asks students to scrape quotes by a specific author by setting a start URL for that author's page and comparing the structured output.

**✅ Validate a scraping pipeline.**

A QA engineer uses the Actor to confirm that pagination and item limits work correctly before applying the same pattern to a production target.

### Why choose this scraper

|  | What you get |
|---|---|
| **Ready-made sandbox scraper** | Skip writing boilerplate code for the most common web scraping practice site. |
| **Fixed, predictable schema** | Every quote arrives with the same fields: text, author, and tags, making downstream processing simple. |
| **Controlled volume** | The max items setting lets you pull a small sample or the entire site without runaway runs. |
| **No authentication needed** | Quotes to Scrape is a public sandbox, so you can start scraping immediately with no API keys or logins. |

### How it compares

No other Store actor targets Quotes to Scrape the same way, so the honest comparison is with the alternatives teams actually weigh.

| | Quotes to Scrape Quotes Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When Quotes to Scrape changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor from one or more start URLs and set a maximum number of quotes to collect. The run stops when the item limit is reached. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "startUrls": [
    {
      "url": "http://quotes.toscrape.com"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

A larger pull:

```json
{
  "startUrls": [
    {
      "url": "http://quotes.toscrape.com"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 200
}
```

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Quotes to Scrape Quotes Scraper](https://apify.com/parseforge/quotes-to-scrape-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Quotes to Scrape through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/quotes-to-scrape-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your start URL points to a valid Quotes to Scrape page. The default URL is http://quotes.toscrape.com. Also verify that the max items limit is set to at least 1.

**The run stopped before scraping all pages.**

This is expected if you set a Max items limit. The Actor stops as soon as it reaches that number. Increase or remove the limit to scrape more pages.

**Some quotes are missing tags or authors.**

Quotes to Scrape is a consistent sandbox, but if a quote on the site genuinely lacks an author or tags, those fields will be empty in your output. This is not an error.

**The Actor is running slowly.**

Quotes to Scrape is a lightweight site. If you experience slowness, check your proxy configuration. Running without a proxy is fastest for this sandbox.

### FAQ

| Question | Answer |
|---|---|
| What is Quotes to Scrape? | Quotes to Scrape is a public website designed specifically for practicing web scraping. It contains paginated lists of quotes, each with an author and tags, and requires no login. |
| Do I need an API key or login to scrape Quotes to Scrape? | No. The site is a completely open sandbox, so you can run this Actor immediately without any authentication. |
| How do I scrape only quotes by a specific author? | Set the start URL to an author's dedicated page, such as http://quotes.toscrape.com/author/Albert-Einstein, and the Actor will collect only quotes from that page. |
| Can I limit how many quotes are scraped? | Yes. Use the Max items field to set an upper limit. The Actor will stop as soon as it reaches that number, even if more pages are available. |
| Does the Actor handle pagination automatically? | Yes. It follows the next-page links on Quotes to Scrape, so you get quotes from all pages unless you set a max items limit that stops it earlier. |
| What output formats are supported? | You can export your scraped quotes to CSV, JSON, Excel, or XML from the Apify dataset tab. |
| What fields does each scraped quote contain? | Each quote row includes the quote text, the author name, and a list of tags associated with that quote. |
| Can I scrape multiple start URLs in one run? | Yes. Add multiple URLs to the Start URLs array, and the Actor will scrape quotes from each of them in a single run. |
| Is a proxy required to scrape Quotes to Scrape? | No proxy is needed. The site is a simple sandbox, but you can optionally configure Apify proxy if your setup requires it. |

### Related actors

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

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Quotes to Scrape. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

List of pages on Quotes to Scrape to start scraping from. Defaults to the main page.

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

Maximum number of quotes to scrape. The actor will stop when this limit is reached.

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

Use Apify proxy or no proxy. This site works without proxy.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "http://quotes.toscrape.com"
    }
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "http://quotes.toscrape.com"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/quotes-to-scrape-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 = {
    "startUrls": [{ "url": "http://quotes.toscrape.com" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/quotes-to-scrape-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 '{
  "startUrls": [
    {
      "url": "http://quotes.toscrape.com"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call parseforge/quotes-to-scrape-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/quotes-to-scrape-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/7Z149uBGMQek97VPl/builds/vWc6RBDwEGm7aUMfx/openapi.json
