# Quora Scraper - Answers, Upvotes, Views & Authors (`scrapewise/quora-scraper`) Actor

Scrape every answer of any Quora question without login or cookies: full text, upvotes, views, shares, comments, author name, credential and profile, dates and the question title, topics and answer count. Paste question or answer links. Error rows are free.

- **URL**: https://apify.com/scrapewise/quora-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Social media, AI
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 answer delivereds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Quora Scraper: every answer of any Quora question, with upvotes, views and authors

Quora Scraper collects **all the answers of the Quora questions you give it**, without a Quora account, cookies or a
browser. Each answer comes back as one clean row: the full text, upvotes, views, shares and comments, the author's
name, profile link and credential, when it was written, its language, any images, and the question it belongs to.
Each question can also get its own row with the title, link, topics and total number of answers.

It is used to build datasets for AI training and RAG, to research what real people say about a product, a market or
a problem, to find content ideas and FAQs for SEO, and to follow how a discussion grows over time.

### At a glance

| What | Price |
|---|---|
| Answer delivered | **US$ 1.00 per 1,000 answers** (US$ 0.001 each) |
| Question opened (question row) | US$ 0.002 per question |
| Run start | US$ 0.005 per run |

- 10 questions with 20 answers each = 200 answers + 10 question rows = **US$ 0.23**.
- Error rows and duplicates are never charged. `maxItems` is a hard cap, and a spending limit set on the run stops it
  cleanly with everything delivered so far.
- The US residential proxy that Quora needs is included in the price.

### Quick start

```json
{
  "startUrls": ["https://www.quora.com/What-is-the-best-way-to-learn-Python"],
  "maxAnswersPerQuestion": 20
}
```

Several questions, every answer of each one, answers only:

```json
{
  "startUrls": [
    "https://www.quora.com/What-are-the-best-books-to-read",
    "https://www.quora.com/How-do-I-start-a-small-business"
  ],
  "maxAnswersPerQuestion": 0,
  "includeQuestionRow": false
}
```

An answer link also works (the Actor opens its question), and so does the part after `quora.com/` on its own.

### Input

| Field | What it does |
|---|---|
| `startUrls` | Quora question links, one per line. Answer links and bare slugs are accepted. |
| `maxAnswersPerQuestion` | Answers per question, in Quora's order (default 20; 0 = all of them). Popular questions have hundreds or thousands. |
| `maxItems` | Cap for the whole run, across all questions (0 = no cap). |
| `onlyDirectAnswers` | Only answers written for this exact question, leaving out the ones Quora brings in from similar merged questions (default off). |
| `includeQuestionRow` | One row per question with title, link, topics and answer count (default on). |
| `proxyConfiguration` | US residential by default; Quora refuses datacenter IPs. |

`maxItemsPerQuery`, `questionUrls` and `urls` are accepted too, so inputs written for other Quora tools keep working.

### Output

**Answer row** (`type: answer`):

| Field | What it is |
|---|---|
| `answerId`, `answerUrl` | Quora answer id and permanent link |
| `text` | Full answer text, one paragraph per line (lists keep their bullets) |
| `images` | Links of the images in the answer (an image-only answer has an empty `text`) |
| `upvotes`, `views`, `shares`, `comments` | Engagement counts as Quora shows them |
| `createdAt`, `updatedAt` | When it was written and last edited (UTC; `updatedAt` is null if never edited) |
| `authorName`, `authorUrl`, `authorCredential` | Author's public name, profile link and the credential shown on the answer |
| `authorIsAnonymous`, `authorIsVerified` | Anonymous answers come without name or link |
| `language` | Content language code (`en`, `es`, `pt`...) |
| `isMachineAnswer`, `fromRelatedQuestion` | Quora's AI answer flag, and answers Quora brings in from a similar question it merged with this one |
| `position` | Order of the answer in this question |
| `questionId`, `questionTitle`, `questionUrl`, `sourceUrl` | The question, and the link you sent |

**Question row** (`type: question`): `questionId`, `questionTitle`, `questionUrl`, `topics`, `answerCount`,
`sourceUrl`.

One real answer row (text shortened):

```json
{
  "type": "answer",
  "answerId": 176847,
  "answerUrl": "https://www.quora.com/As-an-intermediate-Python-programmer-how-can-I-take-my-skills-to-the-next-level/answer/Vaibhav-Mallya",
  "text": "It sounds like you've already finished Step 1 of learning a language...",
  "images": [],
  "upvotes": 53,
  "views": 11346,
  "shares": 2,
  "comments": 1,
  "createdAt": "2010-12-10T16:55:39Z",
  "authorName": "Vaibhav Mallya",
  "authorCredential": "Proud Parseltongue. Passionate about the language",
  "language": "en",
  "position": 1,
  "questionTitle": "As an intermediate Python programmer, how can I take my skills to the next level?"
}
```

### Keyword search

Quora shows search results only to logged-in accounts, so search is not available without cookies. A keyword sent in
`queries` returns a free `SEARCH_NEEDS_LOGIN` row instead of failing the run. To cover a topic, search Quora or
Google in your browser for the questions you want and paste their links in `startUrls`.

### Errors you may see

Every error is a row with `errorCode` and is never charged:

| errorCode | Meaning |
|---|---|
| `INVALID_URL` | Not a Quora question or answer link |
| `INVALID_INPUT` | A number field has a wrong value |
| `NOT_FOUND` | The question does not exist or was removed |
| `NO_DATA` | The page opened without question data |
| `BLOCKED` | Quora refused every attempt for this question; run it again in a few minutes |
| `NOT_REACHED` | The run timeout or the cost guard arrived before this question |
| `SEARCH_NEEDS_LOGIN` | Keyword search needs a Quora login (see above) |

### Integrations, scheduling and AI agents

- **Schedule** the same questions weekly in [Apify schedules](https://docs.apify.com/platform/schedules) to follow
  new answers and how upvotes and views grow.
- **Export** as JSON, CSV, Excel or XML, or read the dataset from the [Apify API](https://docs.apify.com/api/v2).
- **Connect** it to Make, n8n, Zapier or Google Sheets through
  [Apify integrations](https://docs.apify.com/platform/integrations).
- **AI agents:** call it as a tool through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp)
  in Claude, ChatGPT, Cursor or any MCP client, for example "get the top 50 answers to these 5 Quora questions and
  summarize what people recommend".

### FAQ

**Do I need a Quora account?** No. Everything comes from public question pages, without login or cookies.

**How many answers can I get from one question?** All of them: set `maxAnswersPerQuestion` to 0. The Actor pages
through Quora's answer list until the end or your cap.

**Why do some answers belong to a slightly different question?** Quora merges similar questions and shows their
answers together. Those rows have `fromRelatedQuestion: true` and their own `answerUrl`; turn on `onlyDirectAnswers` to leave them out.

**Is it legal?** The Actor reads public pages only and returns no emails or phone numbers. You are responsible for
how you use the data under the laws that apply to you.

**Something broke or a field is missing?** Open an issue on the Actor page; issues are answered within a day.

### Limitations

- Comments on answers are counted (`comments`) but their text is not collected.
- Spaces, profiles and topic pages are not supported yet; use question links.
- Counts are the ones Quora shows at the moment of the run.

### Changelog

- **16 Oct 2026:** first version: every answer of a question, author and engagement fields, images, question row.

# Actor input Schema

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

Quora question links, one per line, for example https://www.quora.com/What-is-the-best-way-to-learn-Python. Answer links work too (the Actor opens their question), and so does the part after quora.com/ on its own.

## `maxAnswersPerQuestion` (type: `integer`):

How many answers to collect from each question, in Quora's order. 0 = all of them (popular questions have hundreds or thousands).

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

Hard cap for the whole run, across all questions. 0 = no cap.

## `onlyDirectAnswers` (type: `boolean`):

Quora shows answers from similar questions it merged with this one (marked fromRelatedQuestion). On: keep only answers written for this exact question. Off (default): everything Quora shows on the page.

## `includeQuestionRow` (type: `boolean`):

On: each question also gets one row with its title, link, topics and answer count. Off: answers only.

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

Quora sits behind Cloudflare and refuses datacenter IPs; the default US residential proxy is included in the price. Change it only if you know you need to.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.quora.com/What-is-the-best-way-to-learn-Python",
    "https://www.quora.com/What-are-the-best-books-to-read"
  ],
  "maxAnswersPerQuestion": 20,
  "maxItems": 0,
  "onlyDirectAnswers": false,
  "includeQuestionRow": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (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 = {
    "startUrls": [
        "https://www.quora.com/What-is-the-best-way-to-learn-Python",
        "https://www.quora.com/What-are-the-best-books-to-read"
    ],
    "maxAnswersPerQuestion": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/quora-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": [
        "https://www.quora.com/What-is-the-best-way-to-learn-Python",
        "https://www.quora.com/What-are-the-best-books-to-read",
    ],
    "maxAnswersPerQuestion": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/quora-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": [
    "https://www.quora.com/What-is-the-best-way-to-learn-Python",
    "https://www.quora.com/What-are-the-best-books-to-read"
  ],
  "maxAnswersPerQuestion": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapewise/quora-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/quora-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/EaWA4JSWwexok61r9/builds/ZbSw4wySOttyFrQi6/openapi.json
