Quora Scraper With Human Answer Quality Score
Pricing
Pay per usage
Quora Scraper With Human Answer Quality Score
🚀 Quora Scraper extracts Questions, Answers, Profiles, Topics & Spaces from Quora. 📥 Perfect for research, lead gen, content insights & competitor analysis. ⚙️ Fast, structured data for smarter decisions.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
10 hours ago
Last modified
Categories
Share
Quora Scraper — Human Answer Quality Score
Quora Scraper With Human Answer Quality Score turns a Quora keyword search or a batch of direct URLs into questions, answers, profiles, topics, and spaces — with every answer scored by a transparent, reproducible quality formula and filtered by whether it came from a human or Quora's own AI-bot answer feature. It's built for content researchers who want genuine expert answers rather than AI-generated filler, community and moderation teams auditing answer quality at scale, and market researchers mining Quora's Q&A data for real customer language and pain points. No Quora login is required. Every section below documents an input, an output field, or exactly how the quality score and AI filter are computed.
What is Quora Scraper With Human Answer Quality Score?
This Actor scrapes Quora's public pages — questions with their full answer thread, profiles, topics, and spaces — using browser-impersonated HTTP requests with a headless-browser fallback for Cloudflare-protected pages, and adds two things a plain Quora scraper doesn't: a deterministic quality score for every answer, and a filter for excluding (or isolating) Quora's AI-generated answers.
Key capabilities, read from the source:
- A fully transparent, reproducible quality score.
compute_quality_score()insrc/main.pyblends three signals already present on the answer payload — upvotes (log-scaled, weight 0.5), answer length (weight 0.3), and freshness/recency (weight 0.2) — into a 0-100qualityScore. No extra fetch is needed, and the same inputs always produce the same score. - AI-vs-human answer filtering.
filterAiAnswersreads Quora's ownisMachineAnswerflag toincludeeverything,excludeAI-bot answers (the default), or keeponlyAI answers for studying bot content specifically — filtered-out answers are dropped before charging, not charged then discarded. - Real absolute timestamps, not just relative strings.
absolute_time()derives an exact UTC ISO-8601answer_created_atfrom the samecreationTimemicrosecond field that also produces the relativeanswer_timestamp("3y") string — both are included. - Cloudflare-aware GraphQL pagination. Answer pagination calls Quora's internal GraphQL endpoint, which is Cloudflare-protected; a curl-based POST that gets a "Just a moment" challenge automatically switches to running the same GraphQL call from inside a real headless browser page, which inherits the browser's already-solved
cf_clearancecookie. - Sticky per-target residential IPs. Each scraped URL keeps one sticky proxy exit IP across all of its requests (page load plus answer pagination), since Quora's cookies and form keys tied to a session become invalid if the exit IP changes mid-target.
- Optional LLM enrichment, off by default.
aiEnhancementadds model-graded sentiment and topic keywords per kept answer when an API key is supplied — the deterministicqualityScorealways runs regardless, and an enrichment failure leaves the AI fieldsnullrather than blocking the row.
What data can I extract with Quora Scraper With Human Answer Quality Score?
Every field below is read directly from build_answer_row() and the scrape_question/scrape_profile/scrape_topic/scrape_space functions in src/main.py — dedicated dataset views (quality, overview, questions, answers, profiles, topics, spaces) group these by content type.
Answer fields
| Field | Example Value | Notes |
|---|---|---|
answer_text / answer_url | full answer body / link | |
author_name / author_url / author_credentials | answerer identity + stated credentials | |
upvotes / comments_count / shares_count | 342 / 18 / 12 | |
answer_timestamp | "3y" | Quora's own relative-age string |
answer_created_at | 2023-07-15T12:51:39+00:00 | Real absolute ISO timestamp, derived from the same source field |
is_ai_answer | false | Quora's own isMachineAnswer flag |
qualityScore | 78.4 | Deterministic 0-100 blend of upvotes/length/freshness — reproducible from the row alone |
aiSentiment / aiTopics | "positive" / ["career advice", "salary"] | null unless aiEnhancement is on and succeeds |
Question, profile, topic, and space fields
| Field | Example Value | Content Type |
|---|---|---|
title / answer_count / follow_count / topics | question text, counts, topic tags | question |
name / bio / credentials / follower_count / following_count / answer_count / question_count / total_views | profile fields | profile |
name / description / follower_count / question_count | topic fields | topic |
name / description / follower_count / post_count / contributor_count | space fields | space |
Why not build this yourself?
Quora has no public API — every field here comes from reverse-engineered embedded GraphQL payloads (window.push() blobs) in the page HTML, and the internal endpoint used for answer pagination is Cloudflare-protected in a way that specifically blocks a plain HTTP client even from an IP whose page-load request just succeeded. Getting past that requires running a real headless browser to solve the Cloudflare challenge once, then replaying the GraphQL call from inside that browser context so it inherits the solved cookie — a two-engine fallback this Actor already implements. On top of that, a "blocked" Quora response is often a technically-valid 200 page that just lacks the real content blob (a throttle shell), so naive scrapers can silently collect empty data — this Actor validates that real, rich fields are actually present before accepting a page as successfully fetched.
How to use data extracted from Quora Scraper With Human Answer Quality Score?
Content and SEO research
Search a topic keyword with filterAiAnswers: "exclude" and sort by qualityScore to surface the most substantive human answers on a topic — useful groundwork for content briefs grounded in real audience language.
Community and moderation auditing
Set filterAiAnswers: "only" to isolate Quora's own AI-bot answers specifically, useful for auditing how much of a topic's Q&A content is bot-generated versus human-authored.
Market and customer research
Scrape questions and answers around your product category, using minUpvotes and minAnswerLength to filter down to substantive, community-endorsed answers before analyzing them for customer pain points and language patterns.
AI agents and content pipelines
Because qualityScore is deterministic and reproducible from the row itself, an agent can re-derive or verify the ranking without needing to re-fetch anything — and can branch on is_ai_answer before deciding whether to trust an answer as a human opinion.
🔼 Input sample
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
searchQueries | No | array | Keywords to search on Quora; each resolves to relevant URLs automatically. | ["python programming"] |
directUrls | No | array | Direct Quora URLs — questions, /profile/, /topic/, or /q/ (space) pages. | ["https://www.quora.com/What-is-Python-primarily-used-for"] |
maxResults | No | integer (1–50000) | Max results per search keyword, and max answers pulled per question. Default 50. | 20 |
filterAiAnswers | No | string enum | include, exclude (human-only, default), or only (AI-only). | "exclude" |
minUpvotes | No | integer | Drop answers under this upvote count. 0 = no threshold. Default 0. | 10 |
minAnswerLength | No | integer | Drop answers shorter than this many characters. 0 = no gate. Default 0. | 200 |
scrapeAnswers | No | boolean | true: full answer extraction. false: question metadata only, fast and cheap. Default true. | true |
aiEnhancement | No | boolean | Add LLM-graded sentiment/topics per kept answer. Requires an API key. Default false. | false |
aiModel | No | string enum | Model/provider for enrichment (Claude, GPT, Gemini, Grok, DeepSeek, Sonar, Mistral variants). Default "claude-haiku-4-5". | "claude-haiku-4-5" |
aiApiKey | No | string (secret) | Provider API key; falls back to the matching environment variable if empty. | "sk-..." |
proxyConfiguration | No | object | Starts direct, escalates to datacenter then residential automatically on a block. | {"useApifyProxy": true} |
{"searchQueries": ["machine learning careers"],"maxResults": 20,"filterAiAnswers": "exclude","minUpvotes": 10}
Common pitfall: each emitted row is charged twice in this Actor's own billing flow — once via Actor.push_data(item, charged_event_name="row_result") and again via a separate Actor.charge(event_name="result-item", count=1) call in sink(). Check your run's cost breakdown for both row_result and result-item events rather than assuming a single charge per row.
🔽 Output sample
Output is one JSON row per question, answer, profile, topic, or space, pushed to the run's default dataset.
{"content_type": "answer","title": "What is Python primarily used for?","answer_text": "Python is widely used for web development, data science, automation...","answer_url": "https://www.quora.com/What-is-Python-primarily-used-for/answer/...","author_name": "Jane Doe","author_credentials": "Software Engineer, 10+ years","upvotes": 342,"comments_count": 18,"shares_count": 12,"answer_timestamp": "3y","answer_created_at": "2023-07-15T12:51:39+00:00","is_ai_answer": false,"qualityScore": 78.4,"aiSentiment": null,"aiTopics": null,"question_title": "What is Python primarily used for?","scrape_timestamp": "2026-07-26T09:00:00+00:00"}
How do you filter and target specific answers?
AI-vs-human is the primary quality lever. filterAiAnswers: "exclude" (the default) is the right setting for genuine expert-opinion research; switch to "only" specifically when you're studying Quora's bot-answer behavior rather than trying to avoid it.
Combine upvotes and length for substance, not just popularity. minUpvotes alone can still surface short, low-effort answers that happen to be old and highly-upvoted; pairing it with minAnswerLength filters for answers that are both community-endorsed and substantive.
Turn off answer scraping for structure-only runs. scrapeAnswers: false returns just question metadata (title, answer count, follower count, topics) — much faster and cheaper when you only need to map a topic's question landscape before deciding which questions deserve a full answer scrape.
Three real examples:
{ "searchQueries": ["career advice"], "filterAiAnswers": "exclude", "minUpvotes": 20, "minAnswerLength": 300 }
High-bar human-answer research: substantive, community-endorsed, non-bot.
{ "directUrls": ["https://www.quora.com/some-question"], "filterAiAnswers": "only" }
Isolate Quora's AI-bot answers on a specific question for bot-content auditing.
{ "searchQueries": ["startup funding"], "scrapeAnswers": false, "maxResults": 100 }
Fast, cheap question-landscape mapping without full answer text.
▶️ Want to try other scrapers?
| Scraper | What it extracts |
|---|---|
| Quora Search Scraper — Fresh Trending Question Monitor | Newly-trending Quora questions |
| Reddit Posts Scraper with Author Media Details | Post threads with author and media data |
| Ahrefs Scraper — Competitor Comparison | Backlink and keyword competitor comparison |
| Google Search Autocomplete API | Keyword suggestion expansion |
How to extract Quora data programmatically
This Actor runs as a standard Apify Actor call — one API call in, structured JSON dataset out, using your Apify API token.
Python example
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("<YOUR_USERNAME>/quora-scraper-with-human-answer-quality-score").call(run_input={"searchQueries": ["machine learning careers"],"filterAiAnswers": "exclude","minUpvotes": 10,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item.get("content_type") == "answer":print(item["author_name"], item["qualityScore"], item["upvotes"])
Export to spreadsheets or CRM
Every dataset supports one-click CSV/Excel export from the Apify Console, plus dedicated dataset views (quality, questions, answers, profiles, topics, spaces) for exporting one content type at a time.
Is it legal to scrape Quora?
Scraping publicly visible Quora questions, answers, and profiles is generally lawful, since this data is published for anyone to view without logging in — the underlying legal question was tested directly in hiQ Labs v. LinkedIn (9th Cir.), which held that scraping public, non-password-protected data does not violate the U.S. Computer Fraud and Abuse Act. Author names and profile bios can constitute personal data under GDPR/CCPA when tied to an identifiable individual, so treat that subset accordingly if you store or reuse it at scale, and consult legal counsel for commercial applications.
❓ FAQ
Is the quality score a Quora metric or something this Actor computes?
It's computed entirely by this Actor — Quora doesn't publish a quality score. compute_quality_score() blends upvotes, answer length, and freshness into a reproducible 0-100 number using fields already present on the answer payload, documented with exact weights (0.5/0.3/0.2) in the source.
How does the Actor tell a human answer from an AI one?
It reads Quora's own isMachineAnswer flag on the answer payload — this Actor doesn't guess or infer it from the text itself.
Do I need an AI API key to use this Actor?
No — the deterministic qualityScore always runs with zero extra cost or configuration. An API key is only needed if you turn on aiEnhancement for optional LLM-graded sentiment and topic tags.
Why would an answer get dropped even though it matched my search?
filterAiAnswers, minUpvotes, and minAnswerLength are all post-filters applied to the answer stream — an answer that doesn't clear your thresholds is dropped before it's charged, so a lower "kept" count than expected usually means your filters are working as intended, not that the scrape failed.
Am I charged once or twice per row?
Per the source, each pushed row triggers two separate charging calls: Actor.push_data(..., charged_event_name="row_result") and a follow-up Actor.charge(event_name="result-item", count=1). Check both event types in your run's cost breakdown.
What happens if Quora's GraphQL endpoint blocks the request?
The Actor detects a Cloudflare challenge response and automatically switches to running the same GraphQL query from inside a real headless browser page, which already carries the solved Cloudflare cookie — this happens transparently mid-run.
How does this compare to other Quora scrapers?
As observed on the Apify Store on 2026-07-26, memo23/Quora-Scraper-with-optional-login and botflowtech/quora-scraper-pro both scrape Quora content but neither documents a deterministic answer-quality score or an AI-vs-human answer filter — those are specific to this Actor.
Does this work with AI agent frameworks?
Yes — call it as a standard HTTP endpoint via the Apify API from any agent framework capable of making an API call; there's no MCP-specific integration for this Actor.
Conclusion
Quora Scraper With Human Answer Quality Score turns a Quora search into structured, quality-ranked Q&A data — a transparent scoring formula, a real AI-vs-human filter, and optional LLM enrichment layered on top. It fits content research, community auditing, and market research that needs genuine, substantive answers rather than unfiltered noise. Start a run from the Apify Console or the Apify API with your target keywords or URLs to get your first quality-scored export.