1. 2scraper
  2. Publishing & community
  3. Quora
Open source · MITFree to run · paid add-ons optional

Quora Scraper

Quora answers from question pages, topic feeds and profiles, with upvotes, views and full text, on 24 language sites.

  • Playwright
  • Selenium
  • Puppeteer
  • Scraping Browser API
  • JSON
  • CSV
quora-scraper
# Question page
$ python3 playwright_scraper.py --url "https://www.quora.com/What-is-machine-learning-4" --pages 3 --out ml
✓ 5 sample rows · 30 columns in sample_output.json
24Quora language sites
3page kinds: question, topic, profile
260rows from one question in one scroll batch (Sep 2026)
0API keys, proxies or accounts needed to start
Available Quora scrapers

What the Quora scraper collects

Scrapes Quora answers off a question page, a topic feed or a profile into JSON or CSV, one row per answer. Where Quora inlines its own GraphQL results, rows carry upvotes, views, shares, creation time, numeric ids and full text; a data_source column says which view built each row.

Question page

Input: A Quora question URL

One row per answer, with upvotes, views, shares, comments, creation time and full text wherever Quora's inlined payload covers the answer.

Topic feed

Input: A Quora topic URL

One row per answer card in the topic feed: author, credential and the card's text. Counts and timestamps are null, because Quora does not send them on topic pages.

Profile

Input: A Quora profile URL

One row per answer by that author, with counts and full text for the answers the inlined payload covers.

Quick start

From zero to Quora data in 3 steps

  1. Install

    Clone the repository and install one browser engine. Python 3.9+.

    $ git clone https://github.com/2scraper/quora-scraper && cd quora-scraper
    $ python3 -m venv .venv && source .venv/bin/activate
    $ pip install -r requirements.txt -r requirements-playwright.txt
    $ playwright install chromium
  2. Run a scraper

    Pick what you need and run it. Every flag is documented in the README.

    $ python3 playwright_scraper.py --url "https://www.quora.com/What-is-machine-learning-4" --pages 3 --out ml
  3. Get structured data

    Rows land in JSON or CSV (--format), with a .meta.json sidecar recording status, pages fetched and why the run stopped.

Output

Quora data fields

30 columns per row in a predictable schema. The most useful ones:

FieldWhat it holds
urlAnswer permalink
titleThe question text
question_urlThe question's URL
answer_idQuora's numeric answer id (payload-backed rows)
answer_countHow many answers Quora says the question has
authorAnswer author
author_credentialAuthor's credential line; null when they have none
textAnswer text; full from the payload, truncated on topic cards
text_charsLength of text, so truncation is visible
upvotesUpvote count
viewsView count
sharesShare count
commentsComment count
created_atReal creation timestamp from the payload
languageLanguage site, e.g. en
data_sourceWhich view built the row, e.g. dom+inline
[
  {
    "source": "www.quora.com",
    "scraped_at": "2026-09-15T12:35:22.190442+00:00",
    "url": "https://www.quora.com/What-is-machine-learning-4/answer/Naushin-Ara-6",
    "sku": "www.quora.com/What-is-machine-learning-4/answer/Naushin-Ara-6",
    "title": "What is machine learning?",
    "question_url": "https://www.quora.com/What-is-machine-learning-4",
    "question_id": "4256391",
    "answer_id": "1477743913929252",
    "answer_count": 253,
    "author": "Naushin Ara",
    "author_url": "https://www.quora.com/profile/Naushin-Ara-6",
    "author_credential": null,
    "author_is_verified": false,
    "text": "Machine Learning (ML) is a field of Artificial Intelligence that focuses on developing …",
    "text_chars": 225,
    "upvotes": 3,
    "views": 162,
    "shares": 1,
    "comments": 0,
    "created_at": "2026-07-25T07:13:30.376859Z",
    "updated_at": null,
    "date_text": "Jul 25",
    "is_machine_answer": false,
    "is_translated": false,
    "language": "en",
    "category": "What-is-machine-learning-4",
    "mode": "question",
    "data_source": "dom+inline",
    "page": 1,
    "position": 1
  },
  {
    "source": "www.quora.com",
    "scraped_at": "2026-09-15T12:35:22.190898+00:00",
    "url": "https://www.quora.com/What-is-machine-learning-4/answer/Anil-Yadav-7999",
    "sku": "www.quora.com/What-is-machine-learning-4/answer/Anil-Yadav-7999",
    "title": "What is machine learning?",
    "question_url": "https://www.quora.com/What-is-machine-learning-4",
    "question_id": "4256391",
    "answer_id": "1477743744691014",
    "answer_count": 253,
    "author": "Anil Yadav",
    "author_url": "https://www.quora.com/profile/Anil-Yadav-7999",
    "author_credential": "former Data Scientist at Multinational Corporations",
    "author_is_verified": false,
    "text": "Hey, future ML engineers!!\nMachine Learning is not a tough subject; it's all about regr…",
    "text_chars": 2156,
    "upvotes": 125,
    "views": 1734,
    "shares": 0,
    "comments": 0,
    "created_at": "2024-03-07T08:31:46.062197Z",
    "updated_at": null,
    "date_text": "2y",
    "is_machine_answer": false,
    "is_translated": false,
    "language": "en",
    "category": "What-is-machine-learning-4",
    "mode": "question",
    "data_source": "dom+inline",
    "page": 1,
    "position": 3
  }
]

First 2 of 5 rows from a real run — sample_output.json. Long values shortened here.

Built for Quora

Handles what breaks naive Quora scrapers

Reads Quora's inlined GraphQL

Quora renders nothing on the server and publishes no JSON-LD. The scraper reads the GraphQL results Quora inlines into the page, which carry upvotes, views, creation times and full text that the rendered cards do not.

?page=2 is not a page

Quora has no per-page URLs, and ?page=2 silently returns the first items again. --pages counts settled scroll batches, and the run ends when a batch adds no new answer instead of reporting a false complete run.

Short loads detected

How many answers Quora serves is decided when the page loads, not by scrolling. The run warns when it gets a short variant instead of reporting it as complete; a re-run re-rolls it.

Spaces and Sessions handled

Answers on {space}.quora.com subdomains have no /answer/ segment and look like question URLs. Cards are anchored on Quora's own answer-timestamp hook, which tells them apart where no URL pattern can.

Everything built in

Scraping infrastructure included

The same tested core runs every 2scraper repository, so the hard parts work the same way on every site.

CAPTCHA handling

Detects the challenge a page really serves and, with a 2Captcha key, solves it only when it blocks the data — a capped number of solves per page.

Proxy rotation

Single proxy or a pool from a file, rotated on blocks with a fresh browser per exit. Credentials stay out of argv and logs.

Fingerprints

Optional complete device identity from the 2Captcha Fingerprint API — user agent, client hints, locale and timezone that agree with each other.

Honest run metadata

Every run writes a .meta.json sidecar and distinct exit codes: complete, blocked, empty and partial are never confused, and a failed run never overwrites good data.

Diff two runs

diff_runs.py compares two complete Quora snapshots by id — new, removed and changed rows for monitoring.

Use cases

What teams do with Quora data

Audience and content research

Collect the answers on questions in your field, with upvotes and views, to see which explanations and angles resonate.

Brand and product mention tracking

Monitor answers on relevant questions and track how their view and upvote counts move with diff_runs.py.

Multilingual text datasets

Gather answer text from any of Quora's 24 language sites, each a separate catalogue, with language recorded on every row.

Author analysis

Read a profile's answers with their counts and timestamps to study an author's output and reach.

Access & pricing

Free to run. Pay only for what the site requires.

Free to run · paid add-ons optional

To start, nothing is needed: Playwright's bundled Chromium on a datacentre address with no key or proxy was served 8 of the first 14 fetches (measured Sep 2026). What Quora's Cloudflare check scores is an address's recent request rate, so sustained scraping needs a generous --delay or residential proxies to spread the rate. The 2Captcha Scraper API returns a question's payload-backed answers in one request for about $0.0005, and the Scraping Browser API provides remote browsers with persistent profiles. This repo does not implement solving for Quora's managed challenge, since the limit here is rate rather than a captcha.

Optional 2Captcha services — captcha solving, the Scraping Browser API, residential proxies and fingerprints — work behind one key.

Good to know

  • Topic-feed rows have no counts, timestamps or ids, and their text is truncated to what the card shows.
  • Quora search and anything behind sign-in are not supported.
  • --fingerprint and --locale are not available in the pyppeteer engine.

2scraper vs. hosted scraper APIs

2scraperTypical hosted API
CodeOpen source, MIT — read and patch itClosed
CostFree; optional services billed only when usedSubscription or per request / per result
Runs onYour machine, server or CIThe vendor's infrastructure
OutputJSON/CSV files + run metadataAPI responses
When the site changesFix it yourself or open an issue / PRWait for the vendor
FAQ

Quora scraper FAQ

Why do topic rows have no upvotes or views?

Quora sends a topic's answers over a later request, so the page's inlined payload holds none of them. Point the scraper at a question or profile URL when you need counts and timestamps.

Do I need a proxy to scrape Quora?

Not for a few pages. For sustained runs, yes: Quora challenges an address after a burst of fetches, and switching language hosts does not help.

How does pagination work?

There are no page URLs. A page is one settled scroll batch, the run stops when a batch adds nothing new, and --concurrency above 1 is refused for that reason.

Which languages are supported?

All 24 Quora language sites, from www.quora.com to es., fr., de., jp., hi., ar. and pl.quora.com, each a separate catalogue.

Can it scrape Quora search?

No. Quora answers an anonymous search request with the language home page, so /search is refused with that reason. The scraper also does not log in.

Is scraping Quora legal?

It reads public pages as an anonymous reader sees them. Public data scraping is generally lawful, but follow Quora's terms and robots policy and the law where you operate, and keep request rates low.