Vexaloom Labs

Use Quora Keyword Search & Author Discovery Scraper with Python

Search Quora by keyword or scrape visibly accessible question, answer, profile, topic, Space, and Post URLs directly, with filters for promoted cards, AI-labeled answers, unanswered questions, and author discovery across your results.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "answerSortOrder": "observed",
  "directUrls": [
    "https://www.quora.com/What-is-Python-primarily-used-for"
  ],
  "filterAiAnswers": "include",
  "includeAnswerHtml": false,
  "includeAnswers": true,
  "includeAuthorProfiles": false,
  "includeFieldEvidence": true,
  "includeMedia": false,
  "includeOutboundLinks": false,
  "includeProfileSensitiveFields": true,
  "includeRelatedQuestions": false,
  "includeSocialLinks": true,
  "maxAnswersPerQuestion": 2,
  "maxAuthors": 20,
  "maxItems": 3,
  "maxItemsPerSource": 0,
  "maxRelatedQuestions": 0,
  "mode": "urls",
  "onlyUnanswered": false,
  "resultTypes": [
    "question",
    "answer"
  ],
  "searchQueries": []
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringoptionalWhat to scrape. `urls` follows pasted Quora links. `search` discovers indexed question links for your keywords and expands related questions. `authors` builds author profiles from pasted profile or question URLs.
directUrlsarrayoptionalPaste question, answer, profile, or topic URLs. Language subdomains such as es.quora.com are accepted. Invalid links are reported as status rows.
searchQueriesarrayoptionalBest-effort keyword discovery. Quora's own search page is gated for anonymous visitors, so results depend on the public web index; a run with no indexed matches returns a clear status row instead of invented results.
usernamesarrayoptionalQuora profile slugs, with or without a leading @ or trailing slash. Converted to profile URLs and merged with Quora URLs.
resultTypesarrayoptionalWhich entity rows to emit. Status and run-manifest rows are always written when relevant.
includeAnswersbooleanoptionalEmit answer rows and fetch answers beyond the first visible cards on question pages.
maxAnswersPerQuestionintegeroptionalAnswer cap for each question URL. Zero emits no answers from question pages.
includeRelatedQuestionsbooleanoptionalFollow the related-question links on each question page and scrape those questions too. This is the reliable discovery path when keyword search is gated.
maxRelatedQuestionsintegeroptionalRelated questions retained per question page and used as discovery seeds. Zero keeps all observed related questions.
includeAuthorProfilesbooleanoptionalOpen each discovered author's profile to add followers, following, answer/question counts, views, join date, and credential.
maxAuthorsintegeroptionalMaximum unique author rows emitted from answer evidence.
minAnswerUpvotesintegeroptionalDrop answers below this upvote count. Answers with no explicit upvote count are excluded when this is above zero.
filterAiAnswersstringoptionalInclude all answers, exclude answers explicitly labelled as AI, or keep only those AI-labelled answers.
answerSortOrderstringoptionalKeep Quora's observed order, or sort by explicit upvotes or creation time.
includeMediabooleanoptionalRetain image and video links embedded in answer content.
includeOutboundLinksbooleanoptionalRetain external links embedded in answer content.
includeAnswerHtmlbooleanoptionalRetain a simple HTML rendering of each answer alongside its plain text.
includeProfileSensitiveFieldsbooleanoptionalInclude location, employment, education, and join date on profile and author rows.
includeSocialLinksbooleanoptionalInclude website and social links found on a profile.
maxItemsintegeroptionalHard cap on real data rows across the run. Status and manifest rows do not consume the cap.
maxItemsPerSourceintegeroptionalCap real rows emitted from each URL or keyword. Zero means no per-source cap.
includeFieldEvidencebooleanoptionalAdd field_sources and fields_present metadata so each value can be traced to the page payload.
onlyUnansweredbooleanoptionalKeep only questions whose explicit answer count is exactly zero. Unknown counts are excluded.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/kBf4VDxTBbjxk50DV/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

Quora questions, full answers, author profiles, topics, and access-status rows.

Questions before you run

Which inputs are required?

No top-level fields are marked required in the published schema. Conditional requirements can still apply; check the README.

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build JWoVhbBdDSTo9DNhE and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.