Disclosure: I'm Ben, and I built the Apify Actor mentioned at the end. I charge per result for it. The how-it-works part applies whatever tool you use.

I wanted a simple thing: give it a Quora question, get back the question, the top answers with their view and upvote counts, and the related questions. No account, no cookies. It turned out to be more fiddly than most sites I've scraped, so here's what I learned.

The data is already in the page

You don't need to parse Quora's HTML layout. Every question, answer and profile page ships its data as JSON strings inside script tags, pushed onto an array like this:

....push("{\"data\":{\"question\":{...}}}"); 

Each string is JSON encoded twice, so you JSON.parse it twice. Inside you'll find objects with a __typename of Question, Answer or User. Walk the whole tree, group by qid, aid and uid, and merge the partial copies you see along the way. That gets you things that aren't easy to read off the screen:

  • answers: numViews, numUpvotes, numShares, comment count, creation time (in microseconds, careful), the author's credential, and even an isMachineAnswer flag
  • questions: answer count, follower count, topics, related questions
  • profiles: followers, number of answers, all-time content views, views last month, "Most viewed writer" years

Answer text is stored as a small rich text document (sections of spans), so you join the span texts to get plain text. Skip anything whose typename ends in Ad, or you'll scrape promoted content too.

The hard part: Cloudflare

A plain fetch or curl from a server gets the "Just a moment..." Cloudflare page. Datacenter IPs basically never get through. What worked for me:

  1. A real (stealth-patched) Firefox via Playwright, on a US residential proxy.
  2. Open the first page normally and wait until the challenge clears and the cf_clearance cookie shows up.
  3. After that, don't keep navigating. Call fetch() for the next page from inside that same page, with the session's cookies. You get the full HTML with the JSON blobs, and you skip loading Quora's JS bundles, images and ads.
  4. Block everything except the document, XHR and Cloudflare's own challenge files. Residential proxy is billed per GB, so this matters.
  5. If a page still gets blocked, throw the session away and start a new one with a new IP. Give up on that page after three tries.

Go slowly, one page at a time with a short gap. That's kinder to Quora and also what keeps the session alive.

Limits you can't get around (logged out)

  • Only a few answers per question. A logged-out visitor sees the first handful, usually 2 to 6. On "How do I learn Python?" (198 answers) I got 4. Some of those are pulled in from a very similar question, so check each answer's own question ID; I flag those as fromSimilarQuestion.
  • No keyword search. /search is disallowed in Quora's robots.txt, so I stay out of it. Instead you start from question URLs and follow the related questions list to grow a topic dataset.
  • Don't use it for AI training. Quora's terms say no to that without a license. Market research, content ideas, finding experts: fine, with the usual care for authors' copyright.

Real numbers

Some records from my test runs on Nov 1, 2026:

Record Numbers
Top answer on "How do I learn Python?" 921,089 views, 3,160 upvotes
An answer on "What are the best ways to save money?" 449,994 views, 4,904 upvotes
Jimmy Wales' profile 387,617 followers, 1,003 answers, 64,155,244 content views

My last QA run (1 seed question with related questions on, 4 question pages, 1 profile) saved 20 records (4 questions, 15 answers, 1 profile) in about 71 seconds. Across my test runs the platform cost (browser + residential proxy) came out around $0.0012 per record, almost all of it proxy traffic and compute for the browser.

If you don't want to build it

I packaged all of this as an Apify Actor: Quora Scraper: Questions, Answers and Profiles. Paste question or profile URLs, optionally turn on "Follow related questions", and download JSON/CSV/Excel. It's $0.0019 per record with the proxy included, and you can set a max cost per run so it stops cleanly.

If something breaks (Quora changes things often), open an issue on the Actor page and I'll take a look.