Nimbryxo Studio

Quora Question, Answer & Relationship Dataset Builder

Build a structured Quora dataset from question, answer, profile, Topic, Space, and Post URLs or search terms, with the question-answer-comment chain and relationship links kept intact.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringoptionalOptional dispatcher. auto detects every supported Quora route; typed modes validate startUrls against that route. Typed seed lists still work without mode.
scrapeDepthstringoptionalOverview emits page metadata without answer/comment/feed expansion; detail enables SSR answers plus bounded GraphQL pagination and optional comments/topic feeds.
startUrlsarrayoptionalQuestion, answer, profile, topic, Space, or search URLs. Mixed lists are auto-detected; invalid hosts become status rows instead of failing the run.
Show all input fields
FieldTypeRequiredDescription
modestringoptionalOptional dispatcher. auto detects every supported Quora route; typed modes validate startUrls against that route. Typed seed lists still work without mode.
scrapeDepthstringoptionalOverview emits page metadata without answer/comment/feed expansion; detail enables SSR answers plus bounded GraphQL pagination and optional comments/topic feeds.
startUrlsarrayoptionalQuestion, answer, profile, topic, Space, or search URLs. Mixed lists are auto-detected; invalid hosts become status rows instead of failing the run.
searchQueriesarrayoptionalBest-effort public-index discovery only. Quora native search is login/Cloudflare-gated and robots-disallowed; related-question expansion on a question URL is the reliable discovery axis.
questionUrlsarrayoptionalExplicit question-page seeds. Only question routes are accepted.
answerUrlsarrayoptionalExplicit answer-page seeds. Parent question joins are emitted only from observed evidence.
topicUrlsarrayoptionalExplicit Topic-page seeds for bounded visible question discovery.
spaceUrlsarrayoptionalExplicit Space-page seeds for bounded visible feed discovery.
profileUrlsarrayoptionalExplicit profile-page seeds. Only profile routes are accepted; emitted as normalized profile rows exactly like a profile route discovered from startUrls.
postUrlsarrayoptionalExplicit standalone Post-page seeds. Only post routes are accepted; emitted with the same topic_post field family topic-discovered posts use (post_title, post_body, post_author_*).
resultTypesarrayoptionalSelect normalized entities, explicit graph relationships, relationship-collection counts, status rows, and the final run manifest.
outputFormatstringoptionalProjection after one canonical extraction path. Nested groups emitted answers and comments under explicit question/answer parents; flat keeps entity rows with parent context; edges emits explicit edge rows plus status rows.
dedupeModestringoptionalcanonical suppresses overlapping entity rows by stable ID or canonical URL (default); none preserves every observed non-status row. The run manifest reports duplicate_records_suppressed.
onlyNewItemsbooleanoptionalAnnotate canonical entity rows with new/changed/unchanged/scope_mismatch state and suppress only unchanged semantic rows when includeUnchanged is false. Requires stateStoreId; status, graph, and manifest rows remain visible.
includeUnchangedbooleanoptionalRetain unchanged semantic entities when incremental state is enabled; output projection does not alter comparison hashes.
stateStoreIdstringoptionalApify key-value store for canonical entity snapshots. Required when onlyNewItems is enabled; never store cookies or credentials here.
outputFieldsarrayoptionalOptional allowlist for compact rows, including bounded dotted paths through nested collections (for example answers.answer_text, comments.comment_text, feed.feed_text, or contributors.contributor_name where applicable). Child identity/URL fields and the actor identity, access/status, source, traversal, graph, filter, and parser-envelope fields remain protected.
includeFieldEvidencebooleanoptionalInclude field_sources and fields_present maps. Disable only when a smaller payload is required; semantic values and protected access fields remain unchanged.
includeUnresolvedEdgesbooleanoptionalRetain relationship rows whose endpoint URL was not explicitly observed, with unresolved_reason. Disabling this suppresses only those edge rows and does not imply complete relationships.
relationshipTypesarrayoptionalExplicit relationship-type allowlist for the newly ported follower/following/want-answers/upvoter/space-role relationship collections. Empty leaves the existing always-on content-membership/authorship edges untouched (question_has_topic, answer_authored_by, comment_belongs_to_answer, profile_has_activity, space_has_feed_item, etc.); this allowlist only gates the additional collections below. Sensitive follower/want-answer/upvoter types also require includeSensitiveRelationshipData and their matching collection opt-in.
includeProfileEdgesbooleanoptionalEnable explicitly labeled profile follower/following/followed-question/Space/Topic relationship collections. This does not prove a complete list.
includeQuestionFollowerEdgesbooleanoptionalEnable explicitly labeled question follower or want-answer collections. Sensitive identity rows also require the privacy gate.
includeAnswerUpvoterEdgesbooleanoptionalHigh-sensitivity opt-in for explicitly labeled answer upvoter identities; requires includeSensitiveRelationshipData=true.
includeSensitiveRelationshipDatabooleanoptionalExplicit privacy gate required for follower, want-answer, and upvoter identity edges.
includeTargetMetadatabooleanoptionalRetain explicitly visible target link text and image (to_name, to_image_url) on relationship edges. URLs remain evidence; no target navigation or recursive target scraping is performed.
includeRelationshipCountsbooleanoptionalEmit privacy-preserving relationship_collection rows with the real observed total (collection_total_text/collection_total_value) but no target identities. Requires relationship_collection in resultTypes. Observed totals are not always a server-confirmed count.
includeSpaceRoleEdgesbooleanoptionalEnable explicitly labeled Space contributor, moderator, and admin collections.
includeSpaceContentEdgesbooleanoptionalRetain bounded explicit Space post/question membership edges; this never claims a complete Space inventory.
maxRelationshipItemsPerCollectionintegeroptionalBound explicit links emitted from each labeled relationship collection. Zero emits no relationship-collection edges and never means an empty collection.
maxQuestionsintegeroptionalMaximum question seeds or discovered question pages to process.
maxAnswersPerQuestionintegeroptionalMaximum answer rows retained per question after SSR and GraphQL pagination.
maxAnswersintegeroptionalGlobal answer-row cap applied after per-question caps. Zero means no configured global answer cap.
includeQuestionbooleanoptionalRetain normalized question parent rows when selected in resultTypes.
includeAuthorbooleanoptionalRetain visible author fields and profile/profile-activity rows. When false, author fields and author rows are removed from the emitted shape; no contact enrichment is performed.
includeAuthorSnapshotbooleanoptionalOpt into bounded public profile snapshots for visible author profile links; profile access/status is separate from answer/comment success and never includes contact enrichment.
includeTopicsbooleanoptionalRetain explicit topic links and topic relationships where observed.
includeSpacesbooleanoptionalRetain Space rows and SSR feed items. Explicit spaceUrls enable this automatically.
includeCommentsbooleanoptionalOpt-in comment rows from Quora's public comment-area GraphQL. robots-sensitive; off by default. When enabled and maxCommentsPerAnswer is 0, the documented fallback is 10 per answer.
includeEngagementBreakdownbooleanoptionalRetain explicitly labeled per-comment reaction breakdowns alongside aggregate reaction labels. Raw labels are preserved and typed companions are added only when the localized number is unambiguous.
includeRelatedContentbooleanoptionalRetain links inside an explicitly labeled related/attached region scoped to answer cards; unlabeled navigation and neighboring regions are excluded.
maxRelatedContentintegeroptionalBound eligible related-content links per answer when enabled; zero emits no related-content items.
topCommentsOnlybooleanoptionalRetain only comments with an explicit visible Top/Most helpful/Popular comments label. Unknown comments are excluded and counted; votes and position are not used as top evidence.
commentSortOrderstringoptionalOrder builder comment rows by observed order or an explicitly typed metric/timestamp. Unknown selected metrics remain in stable fallback order and are counted.
includeReplyGraphbooleanoptionalEnable comment rows plus one-level nested reply extraction from repliesConnection. Requires includeComments.
includeMediabooleanoptionalRequest explicitly rendered media URL fields scoped to question roots, answer/comment nodes, and Topic post cards where the page exposes them.
includeFeedTextbooleanoptionalRequest bounded visible text from explicitly linked Space feed cards; page-level text and complete feed history are excluded.
includeOutboundLinksbooleanoptionalRequest visible non-Quora links scoped to question roots, answer/comment nodes, and Topic post cards; Quora links, comment permalinks, and links outside the owning scope are excluded.
includeEntityGraphbooleanoptionalEmit explicit relationship rows even when entity_edge is not listed in resultTypes.
maxCommentsPerAnswerintegeroptionalMaximum comment rows retained per answer when comments are enabled. Schema default 0 is kept for compatibility; comments-enabled runs treat 0 as 10.
maxCommentDepthintegeroptionalMaximum nested reply depth when includeCommentReplies/includeReplyGraph is enabled.
maxItemsintegeroptionalCap for normalized entity/status rows before graph and manifest rows.
maxGraphEdgesintegeroptionalIndependent cap for deterministic entity_edge rows.
maxScrollAttemptsintegeroptionalBounded lazy-render scroll budget applied during detail traversal; scroll attempts and termination state are reported.
maxLoadMoreAttemptsintegeroptionalBound exact visible continuation-control clicks on direct question, answer, topic, and Space collection pages independently from scrolling. Search seeds fan out through their discovered child URLs and retain their own source accounting.
includeRawEvidencebooleanoptionalAdd bounded document hash and optional HTML bytes to each page-level entity row.
includeHtmlbooleanoptionalInclude bounded raw-document HTML when raw evidence is enabled and bounded answer-card HTML when answer cards are extracted.
maxHtmlBytesintegeroptionalMaximum UTF-8 bytes retained for optional raw HTML evidence.
requestDelaynumberoptionalDelay between page batches in seconds; this is not an anti-bot bypass guarantee.
maxConcurrencyintegeroptionalMaximum independent seed pages processed concurrently in deterministic batches. Each seed owns a page; discovered seeds merge in batch order.
maxNavigationRetriesintegeroptionalBounded retries after navigation exceptions (e.g. a transient proxy-tunnel handshake failure); exponential backoff is reported in navigation_retry_delays_seconds. Defaults to 2 for reliability.
languagestringoptionalBrowser language hint. Short language codes and supported regional aliases are accepted and normalize to the short code; auto keeps the actor default. This does not translate content or prove access.
proxyConfigurationobjectoptionalOptional proxy override. The actor starts with a direct connection, retries a fresh session on 403/429, then uses Apify AUTO datacenter proxies, and only falls back to RESIDENTIAL as a proven last resort. Leave this unset; a missing proxyConfiguration never stops the run.
redactSensitiveQueryParamsbooleanoptionalRedact narrow credential-like query parameter values in emitted URLs, graph endpoints, redirect chains, and raw HTML. The original document hash remains based on the captured document.
rawEvidenceRetentionDaysintegeroptionalWhen zero, suppress raw_html snapshots while retaining hash, size, and redaction diagnostics. Positive values permit bounded HTML for the requested run; external Apify dataset/run retention still applies.
maxRawEvidenceBytesintegeroptionalHard upper byte cap for returned raw HTML after the maxHtmlBytes cap.
maxItemsPerSourceintegeroptionalMaximum semantic records emitted from each direct URL, query, or typed source. Status and run-manifest rows are preserved. Use 0 for no per-source cap.
searchDiscoverystringoptionalHow searchQueries are handled. relatedOnly attempts Quora's public search and otherwise emits search_unavailable; bestEffortIndex queries a public web index for indexed Quora URLs. Native Quora search is never claimed.
maxRelatedQuestionsintegeroptionalRelated questions to enqueue per question/topic seed. The page usually exposes 26-35; zero disables related-question discovery.
searchResultsPerQueryintegeroptionalMaximum indexed URLs to use per search query when searchDiscovery=bestEffortIndex.
maxAnswerPagesintegeroptionalBound QuestionPagedListPaginationQuery pages. Zero derives a bound from maxAnswersPerQuestion.
maxTopicFeedPagesintegeroptionalBound topic-feed GraphQL pages when includeTopicFeed is enabled.
maxSpaceFeedBundlesintegeroptionalBound Space feed bundles read from the SSR multifeed.
includeCommentRepliesbooleanoptionalInclude nested repliesConnection rows. Requires includeComments. Comments are robots-sensitive and opt-in; zero-row/blocked results produce a status row.
includeQuoraPlusPreviewbooleanoptionalEmit preview-only answers flagged answer_is_quora_plus/answer_text_completeness=preview. The gated remainder is never fetched or presented as full text.
includeProfileStatsbooleanoptionalEmit follower/following/answer/question/post/view counts, joined date, credentials and expertise topics for profile rows.
includeTopicStatsbooleanoptionalEmit topic follower count and most-viewed authors for topic rows.
includeSpaceStatsbooleanoptionalEmit Space follower/member/contributor/moderator/admin counts, description, icon and cover.
includePostStatsbooleanoptionalEmit post upvotes/views/shares/comments, effective access and question-summary flag.
includeAnswerStatsbooleanoptionalEmit answer counters, dates, AI flag, effective access and Quora+ preview flags.
includeTopicFeedbooleanoptionalOpt into the browser topic-feed GraphQL endpoint. robots-sensitive: keep off unless you accept that compliance caveat.
includeQuestionAuditbooleanoptionalOpt into the public question /log page to fill question_created_at, question_view_count and the asker fields. robots.txt disallows /*/log for generic agents; the actor never includes this in the default prefill.
includeProfileHistorybooleanoptionalOpt into the public profile answer/question tab GraphQL and emit bounded profile_activity rows. robots-sensitive and rate-sensitive; on a 400/403 the run keeps a profile_history_unavailable status row.
maxProfileHistoryPagesintegeroptionalBound for each profile history list (answers and questions) when includeProfileHistory is enabled. Zero derives three pages; one page is roughly ten items.
maxRelationshipPagesintegeroptionalBound for each public identity-list query (question followers, answer upvoters, profile followers/following, Space roles) after the relationship allowlist and privacy gates. Zero is treated as one page.

Download the published input schema

View complete JSON
{
  "properties": {
    "answerUrls": {
      "default": [],
      "description": "Explicit answer-page seeds. Parent question joins are emitted only from observed evidence.",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "A Quora URL.",
            "title": "URL",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "title": "Answer URLs",
      "type": "array"
    },
    "commentSortOrder": {
      "default": "observed",
      "description": "Order builder comment rows by observed order or an explicitly typed metric/timestamp. Unknown selected metrics remain in stable fallback order and are counted.",
      "enum": [
        "observed",
        "upvotes_desc",
        "reactions_desc",
        "replies_desc",
        "newest"
      ],
      "enumTitles": [
        "Observed order",
        "Most upvotes",
        "Most reactions",
        "Most replies",
        "Newest first"
      ],
      "title": "Comment Sort Order",
      "type": "string"
    },
    "dedupeMode": {
      "default": "canonical",
      "description": "canonical suppresses overlapping entity rows by stable ID or canonical URL (default); none preserves every observed non-status row. The run manifest reports duplicate_records_suppressed.",
      "enum": [
        "canonical",
        "none"
      ],
      "enumTitles": [
        "Canonical (deduplicate by ID/URL)",
        "None (keep every observed row)"
      ],
      "prefill": "canonical",
      "title": "Deduplication Mode",
      "type": "string"
    },
    "includeAnswerStats": {
      "default": true,
      "description": "Emit answer counters, dates, AI flag, effective access and Quora+ preview flags.",
      "prefill": true,
      "title": "Include Answer Stats",
      "type": "boolean"
    },
    "includeAnswerUpvoterEdges": {
      "default": false,
      "description": "High-sensitivity opt-in for explicitly labeled answer upvoter identities; requires includeSensitiveRelationshipData=true.",
      "prefill": false,
      "title": "Include Answer Upvoter Collections",
      "type": "boolean"
    },
    "includeAuthor": {
      "default": true,
      "description": "Retain visible author fields and profile/profile-activity rows. When false, author fields and author rows are removed from the emitted shape; no contact enrichment is performed.",
      "prefill": true,
      "title": "Include Author Rows",
      "type": "boolean"
    },
    "includeAuthorSnapshot": {
      "default": false,
      "description": "Opt into bounded public profile snapshots for visible author profile links; profile access/status is separate from answer/comment success and never includes contact enrichment.",
      "prefill": false,
      "title": "Include Author Snapshot",
      "type": "boolean"
    },
    "includeCommentReplies": {
      "default": false,
      "description": "Include nested repliesConnection rows. Requires includeComments. Comments are robots-sensitive and opt-in; zero-row/blocked results produce a status row.",
      "prefill": false,
      "title": "Include Comment Replies",
      "type": "boolean"
    },
    "includeComments": {
      "default": false,
      "description": "Opt-in comment rows from Quora's public comment-area GraphQL. robots-sensitive; off by default. When enabled and maxCommentsPerAnswer is 0, the documented fallback is 10 per answer.",
      "prefill": false,
      "title": "Include Comment Rows",
      "type": "boolean"
    },
    "includeEngagementBreakdown": {
      "default": true,
      "description": "Retain explicitly labeled per-comment reaction breakdowns alongside aggregate reaction labels. Raw labels are preserved and typed companions are added only when the localized number is unambiguous.",
      "prefill": true,
      "title": "Include Engagement Breakdown",
      "type": "boolean"
    },
    "includeEntityGraph": {
      "default": false,
      "description": "Emit explicit relationship rows even when entity_edge is not listed in resultTypes.",
      "prefill": false,
      "title": "Include Entity Graph",
      "type": "boolean"
    },
    "includeFeedText": {
      "default": false,
      "description": "Request bounded visible text from explicitly linked Space feed cards; page-level text and complete feed history are excluded.",
      "prefill": false,
      "title": "Include Space Feed Text",
      "type": "boolean"
    },
    "includeFieldEvidence": {
      "default": true,
      "description": "Include field_sources and fields_present maps. Disable only when a smaller payload is required; semantic values and protected access fields remain unchanged.",
      "prefill": true,
      "title": "Include Field Evidence",
      "type": "boolean"
    },
    "includeHtml": {
      "default": false,
      "description": "Include bounded raw-document HTML when raw evidence is enabled and bounded answer-card HTML when answer cards are extracted.",
      "prefill": false,
      "title": "Include HTML",
      "type": "boolean"
    },
    "includeMedia": {
      "default": false,
      "description": "Request explicitly rendered media URL fields scoped to question roots, answer/comment nodes, and Topic post cards where the page exposes them.",
      "prefill": false,
      "title": "Include Media URLs",
      "type": "boolean"
    },
    "includeOutboundLinks": {
      "default": false,
      "description": "Request visible non-Quora links scoped to question roots, answer/comment nodes, and Topic post cards; Quora links, comment permalinks, and links outside the owning scope are excluded.",
      "prefill": false,
      "title": "Include Outbound Links",
      "type": "boolean"
    },
    "includePostStats": {
      "default": true,
      "description": "Emit post upvotes/views/shares/comments, effective access and question-summary flag.",
      "prefill": true,
      "title": "Include Post Stats",
      "type": "boolean"
    },
    "includeProfileEdges": {
      "default": false,
      "description": "Enable explicitly labeled profile follower/following/followed-question/Space/Topic relationship collections. This does not prove a complete list.",
      "prefill": false,
      "title": "Include Profile Relationship Collections",
      "type": "boolean"
    },
    "includeProfileHistory": {
      "default": false,
      "description": "Opt into the public profile answer/question tab GraphQL and emit bounded profile_activity rows. robots-sensitive and rate-sensitive; on a 400/403 the run keeps a profile_history_unavailable status row.",
      "prefill": false,
      "title": "Include Profile History",
      "type": "boolean"
    },
    "includeProfileStats": {
      "default": true,
      "description": "Emit follower/following/answer/question/post/view counts, joined date, credentials and expertise topics for profile rows.",
      "prefill": true,
      "title": "Include Profile Stats",
      "type": "boolean"
    },
    "includeQuestion": {
      "default": true,
      "description": "Retain normalized question parent rows when selected in resultTypes.",
      "prefill": true,
      "title": "Include Question Rows",
      "type": "boolean"
    },
    "includeQuestionAudit": {
      "default": false,
      "description": "Opt into the public question /log page to fill question_created_at, question_view_count and the asker fields. robots.txt disallows /*/log for generic agents; the actor never includes this in the default prefill.",
      "prefill": false,
      "title": "Include Question Audit",
      "type": "boolean"
    },
    "includeQuestionFollowerEdges": {
      "default": false,
      "description": "Enable explicitly labeled question follower or want-answer collections. Sensitive identity rows also require the privacy gate.",
      "prefill": false,
      "title": "Include Question Follower Collections",
      "type": "boolean"
    },
    "includeQuoraPlusPreview": {
      "default": true,
      "description": "Emit preview-only answers flagged answer_is_quora_plus/answer_text_completeness=preview. The gated remainder is never fetched or presented as full text.",
      "prefill": true,
      "title": "Include Quora+ Preview Answers",
      "type": "boolean"
    },
    "includeRawEvidence": {
      "default": false,
      "description": "Add bounded document hash and optional HTML bytes to each page-level entity row.",
      "prefill": false,
      "title": "Include Raw Evidence",
      "type": "boolean"
    },
    "includeRelatedContent": {
      "default": false,
      "description": "Retain links inside an explicitly labeled related/attached region scoped to answer cards; unlabeled navigation and neighboring regions are excluded.",
      "prefill": false,
      "title": "Include Answer Related Content",
      "type": "boolean"
    },
    "includeRelationshipCounts": {
      "default": false,
      "description": "Emit privacy-preserving relationship_collection rows with the real observed total (collection_total_text/collection_total_value) but no target identities. Requires relationship_collection in resultTypes. Observed totals are not always a server-confirmed count.",
      "prefill": false,
      "title": "Include Relationship Collection Counts",
      "type": "boolean"
    },
    "includeReplyGraph": {
      "default": false,
      "description": "Enable comment rows plus one-level nested reply extraction from repliesConnection. Requires includeComments.",
      "prefill": false,
      "title": "Include Reply Graph",
      "type": "boolean"
    },
    "includeSensitiveRelationshipData": {
      "default": false,
      "description": "Explicit privacy gate required for follower, want-answer, and upvoter identity edges.",
      "prefill": false,
      "title": "Sensitive Relationship Data",
      "type": "boolean"
    },
    "includeSpaceContentEdges": {
      "default": true,
      "description": "Retain bounded explicit Space post/question membership edges; this never claims a complete Space inventory.",
      "prefill": true,
      "title": "Include Space Content Edges",
      "type": "boolean"
    },
    "includeSpaceRoleEdges": {
      "default": false,
      "description": "Enable explicitly labeled Space contributor, moderator, and admin collections.",
      "prefill": false,
      "title": "Include Space Role Edges",
      "type": "boolean"
    },
    "includeSpaceStats": {
      "default": true,
      "description": "Emit Space follower/member/contributor/moderator/admin counts, description, icon and cover.",
      "prefill": true,
      "title": "Include Space Stats",
      "type": "boolean"
    },
    "includeSpaces": {
      "default": false,
      "description": "Retain Space rows and SSR feed items. Explicit spaceUrls enable this automatically.",
      "prefill": false,
      "title": "Include Space Rows",
      "type": "boolean"
    },
    "includeTargetMetadata": {
      "default": false,
      "description": "Retain explicitly visible target link text and image (to_name, to_image_url) on relationship edges. URLs remain evidence; no target navigation or recursive target scraping is performed.",
      "prefill": false,
      "title": "Include Explicit Target Metadata",
      "type": "boolean"
    },
    "includeTopicFeed": {
      "default": false,
      "description": "Opt into the browser topic-feed GraphQL endpoint. robots-sensitive: keep off unless you accept that compliance caveat.",
      "prefill": false,
      "title": "Include Topic Feed",
      "type": "boolean"
    },
    "includeTopicStats": {
      "default": true,
      "description": "Emit topic follower count and most-viewed authors for topic rows.",
      "prefill": true,
      "title": "Include Topic Stats",
      "type": "boolean"
    },
    "includeTopics": {
      "default": true,
      "description": "Retain explicit topic links and topic relationships where observed.",
      "prefill": true,
      "title": "Include Topic Links",
      "type": "boolean"
    },
    "includeUnchanged": {
      "default": true,
      "description": "Retain unchanged semantic entities when incremental state is enabled; output projection does not alter comparison hashes.",
      "prefill": true,
      "title": "Include Unchanged Items",
      "type": "boolean"
    },
    "includeUnresolvedEdges": {
      "default": true,
      "description": "Retain relationship rows whose endpoint URL was not explicitly observed, with unresolved_reason. Disabling this suppresses only those edge rows and does not imply complete relationships.",
      "prefill": true,
      "title": "Include Unresolved Edges",
      "type": "boolean"
    },
    "language": {
      "default": "auto",
      "description": "Browser language hint. Short language codes and supported regional aliases are accepted and normalize to the short code; auto keeps the actor default. This does not translate content or prove access.",
      "enum": [
        "auto",
        "en",
        "es",
        "fr",
        "de",
        "pt",
        "it",
        "ja",
        "ko",
        "hi",
        "id",
        "nl",
        "pl",
        "tr",
        "vi",
        "zh",
        "ru",
        "en-US",
        "en-GB",
        "de-DE",
        "fr-FR",
        "es-ES",
        "pt-BR",
        "it-IT",
        "ja-JP",
        "ko-KR",
        "hi-IN",
        "tr-TR",
        "zh-CN",
        "zh-TW",
        "ru-RU"
      ],
      "enumTitles": [
        "Automatic",
        "English",
        "Spanish",
        "French",
        "German",
        "Portuguese",
        "Italian",
        "Japanese",
        "Korean",
        "Hindi",
        "Indonesian",
        "Dutch",
        "Polish",
        "Turkish",
        "Vietnamese",
        "Chinese",
        "Russian",
        "English (US)",
        "English (UK)",
        "German (Germany)",
        "French (France)",
        "Spanish (Spain)",
        "Portuguese (Brazil)",
        "Italian (Italy)",
        "Japanese (Japan)",
        "Korean (Korea)",
        "Hindi (India)",
        "Turkish (Turkey)",
        "Chinese (Simplified)",
        "Chinese (Traditional)",
        "Russian (Russia)"
      ],
      "title": "Language",
      "type": "string"
    },
    "maxAnswerPages": {
      "default": 0,
      "description": "Bound QuestionPagedListPaginationQuery pages. Zero derives a bound from maxAnswersPerQuestion.",
      "maximum": 50,
      "minimum": 0,
      "prefill": 0,
      "title": "Maximum Answer GraphQL Pages",
      "type": "integer"
    },
    "maxAnswers": {
      "default": 0,
      "description": "Global answer-row cap applied after per-question caps. Zero means no configured global answer cap.",
      "maximum": 50000,
      "minimum": 0,
      "title": "Maximum Answers Total",
      "type": "integer"
    },
    "maxAnswersPerQuestion": {
      "default": 10,
      "description": "Maximum answer rows retained per question after SSR and GraphQL pagination.",
      "maximum": 500,
      "minimum": 0,
      "prefill": 5,
      "title": "Maximum Answers per Question",
      "type": "integer"
    },
    "maxCommentDepth": {
      "default": 20,
      "description": "Maximum nested reply depth when includeCommentReplies/includeReplyGraph is enabled.",
      "maximum": 100,
      "minimum": 0,
      "prefill": 20,
      "title": "Maximum Comment Depth",
      "type": "integer"
    },
    "maxCommentsPerAnswer": {
      "default": 0,
      "description": "Maximum comment rows retained per answer when comments are enabled. Schema default 0 is kept for compatibility; comments-enabled runs treat 0 as 10.",
      "maximum": 500,
      "minimum": 0,
      "prefill": 0,
      "title": "Maximum Comments per Answer",
      "type": "integer"
    },
    "maxConcurrency": {
      "default": 1,
      "description": "Maximum independent seed pages processed concurrently in deterministic batches. Each seed owns a page; discovered seeds merge in batch order.",
      "maximum": 3,
      "minimum": 1,
      "title": "Maximum Concurrent Seeds",
      "type": "integer"
    },
    "maxGraphEdges": {
      "default": 5000,
      "description": "Independent cap for deterministic entity_edge rows.",
      "maximum": 50000,
      "minimum": 0,
      "prefill": 1000,
      "title": "Maximum Graph Edges",
      "type": "integer"
    },
    "maxHtmlBytes": {
      "default": 100000,
      "description": "Maximum UTF-8 bytes retained for optional raw HTML evidence.",
      "maximum": 2000000,
      "minimum": 1000,
      "title": "Maximum HTML Bytes",
      "type": "integer"
    },
    "maxItems": {
      "default": 0,
      "description": "Cap for normalized entity/status rows before graph and manifest rows.",
      "maximum": 5000,
      "minimum": 0,
      "title": "Maximum Entity Rows",
      "type": "integer"
    },
    "maxItemsPerSource": {
      "default": 0,
      "description": "Maximum semantic records emitted from each direct URL, query, or typed source. Status and run-manifest rows are preserved. Use 0 for no per-source cap.",
      "maximum": 5000,
      "minimum": 0,
      "prefill": 0,
      "title": "Maximum Items Per Source",
      "type": "integer"
    },
    "maxLoadMoreAttempts": {
      "default": 0,
      "description": "Bound exact visible continuation-control clicks on direct question, answer, topic, and Space collection pages independently from scrolling. Search seeds fan out through their discovered child URLs and retain their own source accounting.",
      "maximum": 20,
      "minimum": 0,
      "title": "Maximum Load-more Attempts",
      "type": "integer"
    },
    "maxNavigationRetries": {
      "default": 2,
      "description": "Bounded retries after navigation exceptions (e.g. a transient proxy-tunnel handshake failure); exponential backoff is reported in navigation_retry_delays_seconds. Defaults to 2 for reliability.",
      "maximum": 3,
      "minimum": 0,
      "title": "Maximum Navigation Retries",
      "type": "integer"
    },
    "maxProfileHistoryPages": {
      "default": 0,
      "description": "Bound for each profile history list (answers and questions) when includeProfileHistory is enabled. Zero derives three pages; one page is roughly ten items.",
      "maximum": 20,
      "minimum": 0,
      "prefill": 0,
      "title": "Maximum Profile History Pages",
      "type": "integer"
    },
    "maxQuestions": {
      "default": 25,
      "description": "Maximum question seeds or discovered question pages to process.",
      "maximum": 1000,
      "minimum": 0,
      "prefill": 10,
      "title": "Maximum Questions",
      "type": "integer"
    },
    "maxRawEvidenceBytes": {
      "default": 100000,
      "description": "Hard upper byte cap for returned raw HTML after the maxHtmlBytes cap.",
      "maximum": 2000000,
      "minimum": 1000,
      "title": "Maximum Raw Evidence Bytes",
      "type": "integer"
    },
    "maxRelatedContent": {
      "default": 20,
      "description": "Bound eligible related-content links per answer when enabled; zero emits no related-content items.",
      "maximum": 100,
      "minimum": 0,
      "title": "Maximum Answer Related Content",
      "type": "integer"
    },
    "maxRelatedQuestions": {
      "default": 20,
      "description": "Related questions to enqueue per question/topic seed. The page usually exposes 26-35; zero disables related-question discovery.",
      "maximum": 100,
      "minimum": 0,
      "prefill": 0,
      "title": "Maximum Related Questions",
      "type": "integer"
    },
    "maxRelationshipItemsPerCollection": {
      "default": 500,
      "description": "Bound explicit links emitted from each labeled relationship collection. Zero emits no relationship-collection edges and never means an empty collection.",
      "maximum": 5000,
      "minimum": 0,
      "title": "Maximum Relationship Items per Collection",
      "type": "integer"
    },
    "maxRelationshipPages": {
      "default": 3,
      "description": "Bound for each public identity-list query (question followers, answer upvoters, profile followers/following, Space roles) after the relationship allowlist and privacy gates. Zero is treated as one page.",
      "maximum": 20,
      "minimum": 0,
      "prefill": 0,
      "title": "Maximum Identity List Pages",
      "type": "integer"
    },
    "maxScrollAttempts": {
      "default": 5,
      "description": "Bounded lazy-render scroll budget applied during detail traversal; scroll attempts and termination state are reported.",
      "maximum": 20,
      "minimum": 0,
      "title": "Maximum Scroll Attempts",
      "type": "integer"
    },
    "maxSpaceFeedBundles": {
      "default": 4,
      "description": "Bound Space feed bundles read from the SSR multifeed.",
      "maximum": 20,
      "minimum": 0,
      "prefill": 1,
      "title": "Maximum Space Feed Bundles",
      "type": "integer"
    },
    "maxTopicFeedPages": {
      "default": 3,
      "description": "Bound topic-feed GraphQL pages when includeTopicFeed is enabled.",
      "maximum": 20,
      "minimum": 0,
      "prefill": 0,
      "title": "Maximum Topic Feed Pages",
      "type": "integer"
    },
    "mode": {
      "default": "auto",
      "description": "Optional dispatcher. auto detects every supported Quora route; typed modes validate startUrls against that route. Typed seed lists still work without mode.",
      "editor": "select",
      "enum": [
        "auto",
        "byQuestionUrls",
        "byAnswerUrls",
        "byProfileUrls",
        "byTopicUrls",
        "bySpaceUrls",
        "byPostUrls",
        "search"
      ],
      "enumTitles": [
        "Auto-detect any supported URL",
        "Questions and answers",
        "Specific answer permalinks",
        "Profiles and stats",
        "Topics and optional feed",
        "Spaces and feeds",
        "Standalone posts",
        "Best-effort search discovery"
      ],
      "prefill": "auto",
      "title": "Mode",
      "type": "string"
    },
    "onlyNewItems": {
      "default": false,
      "description": "Annotate canonical entity rows with new/changed/unchanged/scope_mismatch state and suppress only unchanged semantic rows when includeUnchanged is false. Requires stateStoreId; status, graph, and manifest rows remain visible.",
      "prefill": false,
      "title": "Only New or Changed Items",
      "type": "boolean"
    },
    "outputFields": {
      "default": [],
      "description": "Optional allowlist for compact rows, including bounded dotted paths through nested collections (for example answers.answer_text, comments.comment_text, feed.feed_text, or contributors.contributor_name where applicable). Child identity/URL fields and the actor identity, access/status, source, traversal, graph, filter, and parser-envelope fields remain protected.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "maxItems": 3000,
      "title": "Output Fields",
      "type": "array"
    },
    "outputFormat": {
      "default": "normalized",
      "description": "Projection after one canonical extraction path. Nested groups emitted answers and comments under explicit question/answer parents; flat keeps entity rows with parent context; edges emits explicit edge rows plus status rows.",
      "enum": [
        "normalized",
        "nested",
        "flat",
        "edges"
      ],
      "enumTitles": [
        "Normalized (one row per entity)",
        "Nested (answers under questions)",
        "Flat (entity rows with parent context)",
        "Edges (relationship rows)"
      ],
      "prefill": "normalized",
      "title": "Output Format",
      "type": "string"
    },
    "postUrls": {
      "default": [],
      "description": "Explicit standalone Post-page seeds. Only post routes are accepted; emitted with the same topic_post field family topic-discovered posts use (post_title, post_body, post_author_*).",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "A Quora URL.",
            "title": "URL",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "title": "Post URLs",
      "type": "array"
    },
    "profileUrls": {
      "default": [],
      "description": "Explicit profile-page seeds. Only profile routes are accepted; emitted as normalized profile rows exactly like a profile route discovered from startUrls.",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "A Quora URL.",
            "title": "URL",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "title": "Profile URLs",
      "type": "array"
    },
    "proxyConfiguration": {
      "description": "Optional proxy override. The actor starts with a direct connection, retries a fresh session on 403/429, then uses Apify AUTO datacenter proxies, and only falls back to RESIDENTIAL as a proven last resort. Leave this unset; a missing proxyConfiguration never stops the run.",
      "editor": "proxy",
      "title": "Proxy Configuration (optional)",
      "type": "object"
    },
    "questionUrls": {
      "default": [],
      "description": "Explicit question-page seeds. Only question routes are accepted.",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "A Quora URL.",
            "title": "URL",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "title": "Question URLs",
      "type": "array"
    },
    "rawEvidenceRetentionDays": {
      "default": 30,
      "description": "When zero, suppress raw_html snapshots while retaining hash, size, and redaction diagnostics. Positive values permit bounded HTML for the requested run; external Apify dataset/run retention still applies.",
      "maximum": 30,
      "minimum": 0,
      "title": "Raw Evidence Retention Days",
      "type": "integer"
    },
    "redactSensitiveQueryParams": {
      "default": true,
      "description": "Redact narrow credential-like query parameter values in emitted URLs, graph endpoints, redirect chains, and raw HTML. The original document hash remains based on the captured document.",
      "prefill": true,
      "title": "Redact Sensitive URL Query Values",
      "type": "boolean"
    },
    "relationshipTypes": {
      "default": [],
      "description": "Explicit relationship-type allowlist for the newly ported follower/following/want-answers/upvoter/space-role relationship collections. Empty leaves the existing always-on content-membership/authorship edges untouched (question_has_topic, answer_authored_by, comment_belongs_to_answer, profile_has_activity, space_has_feed_item, etc.); this allowlist only gates the additional collections below. Sensitive follower/want-answer/upvoter types also require includeSensitiveRelationshipData and their matching collection opt-in.",
      "editor": "select",
      "items": {
        "enum": [
          "profile_follows_profile",
          "profile_followed_by_profile",
          "profile_follows_question",
          "profile_follows_space",
          "profile_follows_topic",
          "profile_has_expertise",
          "question_followed_by_profile",
          "question_wants_answers_from_profile",
          "answer_upvoted_by_profile",
          "space_followed_by_profile",
          "space_has_contributor",
          "space_has_moderator",
          "space_has_admin",
          "space_contains_post",
          "space_contains_question",
          "space_contains_unanswered_question",
          "profile_authored_answer",
          "profile_authored_question",
          "profile_authored_post",
          "question_has_topic",
          "question_has_answer",
          "answer_belongs_to_question",
          "answer_authored_by_profile",
          "comment_belongs_to_answer",
          "comment_reply_to_comment",
          "comment_authored_by_profile",
          "post_authored_by_profile",
          "post_in_space",
          "profile_has_activity",
          "space_has_feed_item"
        ],
        "type": "string"
      },
      "title": "Relationship Types",
      "type": "array"
    },
    "requestDelay": {
      "default": 1,
      "description": "Delay between page batches in seconds; this is not an anti-bot bypass guarantee.",
      "maximum": 30,
      "minimum": 0,
      "title": "Request Delay",
      "type": "number"
    },
    "resultTypes": {
      "default": [
        "question",
        "answer",
        "comment",
        "profile",
        "profile_activity",
        "topic",
        "topic_post",
        "space",
        "space_feed_item",
        "entity_edge",
        "status",
        "run_manifest"
      ],
      "description": "Select normalized entities, explicit graph relationships, relationship-collection counts, status rows, and the final run manifest.",
      "editor": "select",
      "items": {
        "enum": [
          "question",
          "answer",
          "comment",
          "profile",
          "profile_activity",
          "topic",
          "topic_post",
          "space",
          "space_feed_item",
          "entity_edge",
          "relationship_collection",
          "status",
          "run_manifest"
        ],
        "type": "string"
      },
      "title": "Result Types",
      "type": "array"
    },
    "scrapeDepth": {
      "default": "detail",
      "description": "Overview emits page metadata without answer/comment/feed expansion; detail enables SSR answers plus bounded GraphQL pagination and optional comments/topic feeds.",
      "enum": [
        "overview",
        "detail"
      ],
      "enumTitles": [
        "Overview (page metadata only)",
        "Detail (answers, comments, feeds)"
      ],
      "prefill": "detail",
      "title": "Scrape Depth",
      "type": "string"
    },
    "searchDiscovery": {
      "default": "relatedOnly",
      "description": "How searchQueries are handled. relatedOnly attempts Quora's public search and otherwise emits search_unavailable; bestEffortIndex queries a public web index for indexed Quora URLs. Native Quora search is never claimed.",
      "editor": "select",
      "enum": [
        "relatedOnly",
        "bestEffortIndex",
        "off"
      ],
      "enumTitles": [
        "Related questions only (no third-party engine)",
        "Best-effort DuckDuckGo index",
        "Disabled"
      ],
      "prefill": "relatedOnly",
      "title": "Search Discovery",
      "type": "string"
    },
    "searchQueries": {
      "default": [],
      "description": "Best-effort public-index discovery only. Quora native search is login/Cloudflare-gated and robots-disallowed; related-question expansion on a question URL is the reliable discovery axis.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "title": "Search Queries",
      "type": "array"
    },
    "searchResultsPerQuery": {
      "default": 10,
      "description": "Maximum indexed URLs to use per search query when searchDiscovery=bestEffortIndex.",
      "maximum": 50,
      "minimum": 0,
      "prefill": 0,
      "title": "Search Results per Query",
      "type": "integer"
    },
    "spaceUrls": {
      "default": [],
      "description": "Explicit Space-page seeds for bounded visible feed discovery.",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "A Quora URL.",
            "title": "URL",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "title": "Space URLs",
      "type": "array"
    },
    "startUrls": {
      "default": [],
      "description": "Question, answer, profile, topic, Space, or search URLs. Mixed lists are auto-detected; invalid hosts become status rows instead of failing the run.",
      "editor": "requestListSources",
      "prefill": [
        {
          "url": "https://www.quora.com/What-is-the-meaning-of-life"
        }
      ],
      "title": "Quora URLs",
      "type": "array"
    },
    "stateStoreId": {
      "default": "",
      "description": "Apify key-value store for canonical entity snapshots. Required when onlyNewItems is enabled; never store cookies or credentials here.",
      "editor": "textfield",
      "title": "Incremental State Store ID",
      "type": "string"
    },
    "topCommentsOnly": {
      "default": false,
      "description": "Retain only comments with an explicit visible Top/Most helpful/Popular comments label. Unknown comments are excluded and counted; votes and position are not used as top evidence.",
      "prefill": false,
      "title": "Top-Labeled Comments Only",
      "type": "boolean"
    },
    "topicUrls": {
      "default": [],
      "description": "Explicit Topic-page seeds for bounded visible question discovery.",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "A Quora URL.",
            "title": "URL",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "title": "Topic URLs",
      "type": "array"
    }
  },
  "schemaVersion": 1,
  "title": "Quora Dataset Builder Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
resultsstringoptionalAll records from the run, in the default dataset.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Normalized Quora questions, answers, comments, profiles, Spaces, relationship edges, status rows, and a run manifest.",
  "properties": {
    "results": {
      "description": "All records from the run, in the default dataset.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Results",
      "type": "string"
    }
  },
  "title": "Quora Question, Answer & Relationship Dataset Builder Output",
  "type": "object"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "title": "Quora Dataset Builder Output",
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "access_state": {
            "format": "text",
            "label": "Access"
          },
          "access_state_counts": {
            "format": "json",
            "label": "Access state counts"
          },
          "activity_answer_id": {
            "format": "text",
            "label": "Activity answer ID"
          },
          "activity_question_id": {
            "format": "text",
            "label": "Activity question ID"
          },
          "activity_question_title": {
            "format": "text",
            "label": "Activity question title"
          },
          "activity_question_url": {
            "format": "link",
            "label": "Activity question URL"
          },
          "activity_source": {
            "format": "text",
            "label": "Activity source"
          },
          "activity_url": {
            "format": "link",
            "label": "Activity URL"
          },
          "ai_label_source": {
            "format": "text",
            "label": "AI label source"
          },
          "ai_label_text": {
            "format": "text",
            "label": "AI label text"
          },
          "answer_access_option": {
            "format": "text",
            "label": "Answer effective access"
          },
          "answer_age_days": {
            "format": "number",
            "label": "Answer age (days)"
          },
          "answer_age_state": {
            "format": "text",
            "label": "Answer age evidence"
          },
          "answer_author_follower_count": {
            "format": "text",
            "label": "Answer author followers"
          },
          "answer_author_is_verified": {
            "format": "boolean",
            "label": "Answer author verified"
          },
          "answer_comment_count": {
            "format": "text",
            "label": "Answer comments"
          },
          "answer_comment_count_value": {
            "format": "number",
            "label": "Answer comments (number)"
          },
          "answer_count": {
            "format": "number",
            "label": "Answer count"
          },
          "answer_created_at": {
            "format": "text",
            "label": "Answer created at"
          },
          "answer_effective_access": {
            "format": "text",
            "label": "Answer effective access (alias)"
          },
          "answer_gql_pages": {
            "format": "text",
            "label": "Answer GraphQL pages"
          },
          "answer_html": {
            "format": "text",
            "label": "Answer HTML"
          },
          "answer_id": {
            "format": "text",
            "label": "Answer ID"
          },
          "answer_image_urls": {
            "format": "json",
            "label": "Answer image URLs"
          },
          "answer_is_anonymous": {
            "format": "boolean",
            "label": "Answer is anonymous"
          },
          "answer_is_collapsed": {
            "format": "boolean",
            "label": "Answer is collapsed"
          },
          "answer_is_quora_plus": {
            "format": "boolean",
            "label": "Answer is Quora+"
          },
          "answer_is_top_labeled": {
            "format": "boolean",
            "label": "Answer has top label"
          },
          "answer_jsonld_type": {
            "format": "text",
            "label": "Answer JSON-LD type"
          },
          "answer_limit_reached": {
            "format": "boolean",
            "label": "Answer cap"
          },
          "answer_media_urls": {
            "format": "json",
            "label": "Answer media URLs"
          },
          "answer_node_id": {
            "format": "text",
            "label": "Answer node ID"
          },
          "answer_original_question_title": {
            "format": "text",
            "label": "Original question title"
          },
          "answer_original_question_url": {
            "format": "text",
            "label": "Original question URL"
          },
          "answer_original_url": {
            "format": "link",
            "label": "Answer original URL"
          },
          "answer_outbound_links": {
            "format": "json",
            "label": "Answer outbound links"
          },
          "answer_pagination_state": {
            "format": "text",
            "label": "Answer pagination state"
          },
          "answer_pagination_unrelated_suppressed": {
            "format": "number",
            "label": "Unrelated paginated answers suppressed"
          },
          "answer_rank": {
            "format": "number",
            "label": "Answer rank"
          },
          "answer_rank_source": {
            "format": "text",
            "label": "Answer rank source"
          },
          "answer_share_count": {
            "format": "text",
            "label": "Answer shares"
          },
          "answer_share_count_value": {
            "format": "number",
            "label": "Answer shares (number)"
          },
          "answer_text": {
            "format": "text",
            "label": "Answer"
          },
          "answer_text_completeness": {
            "format": "text",
            "label": "Answer text completeness"
          },
          "answer_translation_label": {
            "format": "text",
            "label": "Answer translation label"
          },
          "answer_translation_state": {
            "format": "text",
            "label": "Answer translation state"
          },
          "answer_updated_at": {
            "format": "text",
            "label": "Answer updated at"
          },
          "answer_upvote_count": {
            "format": "text",
            "label": "Answer upvotes"
          },
          "answer_upvote_count_value": {
            "format": "number",
            "label": "Answer upvotes (number)"
          },
          "answer_url": {
            "format": "link",
            "label": "Answer URL"
          },
          "answer_video_urls": {
            "format": "json",
            "label": "Answer video URLs"
          },
          "answer_view_count": {
            "format": "text",
            "label": "Answer views"
          },
          "answer_view_count_value": {
            "format": "number",
            "label": "Answer views (number)"
          },
          "answer_visibility": {
            "format": "text",
            "label": "Answer visibility"
          },
          "answers": {
            "format": "json",
            "label": "Nested answers"
          },
          "answers_observed_before_global_cap": {
            "format": "number",
            "label": "Answers observed"
          },
          "answers_suppressed_by_global_cap": {
            "format": "number",
            "label": "Answers suppressed"
          },
          "author_credentials": {
            "format": "text",
            "label": "Author credentials"
          },
          "author_id": {
            "format": "text",
            "label": "Author ID"
          },
          "author_image_url": {
            "format": "link",
            "label": "Author image"
          },
          "author_name": {
            "format": "text",
            "label": "Author name"
          },
          "author_url": {
            "format": "link",
            "label": "Author URL"
          },
          "browser_locale": {
            "format": "text",
            "label": "Browser locale"
          },
          "canonical_url": {
            "format": "link",
            "label": "Canonical URL"
          },
          "collection_total_text": {
            "format": "text",
            "label": "Collection total"
          },
          "collection_total_value": {
            "format": "number",
            "label": "Collection total (value)"
          },
          "comment_age_days": {
            "format": "number",
            "label": "Comment age (days)"
          },
          "comment_age_state": {
            "format": "text",
            "label": "Comment age evidence"
          },
          "comment_author_credentials": {
            "format": "text",
            "label": "Comment author credentials"
          },
          "comment_author_id": {
            "format": "text",
            "label": "Comment author ID"
          },
          "comment_author_image_url": {
            "format": "link",
            "label": "Comment author image"
          },
          "comment_author_is_verified": {
            "format": "boolean",
            "label": "Comment author verified"
          },
          "comment_author_name": {
            "format": "text",
            "label": "Comment author"
          },
          "comment_cap_hit_count": {
            "format": "text",
            "label": "Comment cap hits"
          },
          "comment_collection_label": {
            "format": "text",
            "label": "Comment collection"
          },
          "comment_container_id": {
            "format": "text",
            "label": "Comment container ID"
          },
          "comment_created_at": {
            "format": "text",
            "label": "Comment created"
          },
          "comment_depth": {
            "format": "number",
            "label": "Comment depth"
          },
          "comment_depth_limit_reached": {
            "format": "boolean",
            "label": "Comment depth cap reached"
          },
          "comment_filter_emitted": {
            "format": "number",
            "label": "Comment filter emitted"
          },
          "comment_filter_observed": {
            "format": "number",
            "label": "Comment filter observed"
          },
          "comment_filter_top_only": {
            "format": "boolean",
            "label": "Top comments only"
          },
          "comment_filter_unknown": {
            "format": "number",
            "label": "Comment filter unknown"
          },
          "comment_gql_pages": {
            "format": "text",
            "label": "Comment GraphQL pages"
          },
          "comment_id": {
            "format": "text",
            "label": "Comment ID"
          },
          "comment_image_urls": {
            "format": "json",
            "label": "Comment image URLs"
          },
          "comment_is_anonymous": {
            "format": "boolean",
            "label": "Anonymous author"
          },
          "comment_is_reply": {
            "format": "boolean",
            "label": "Comment is reply"
          },
          "comment_is_top_labeled": {
            "format": "boolean",
            "label": "Top-labeled comment"
          },
          "comment_items_emitted_count": {
            "format": "number",
            "label": "Comments emitted"
          },
          "comment_items_observed_count": {
            "format": "number",
            "label": "Comments observed"
          },
          "comment_limit_reached": {
            "format": "boolean",
            "label": "Comment cap"
          },
          "comment_media_urls": {
            "format": "json",
            "label": "Comment media"
          },
          "comment_outbound_links": {
            "format": "json",
            "label": "Comment outbound links"
          },
          "comment_page_limited": {
            "format": "text",
            "label": "Comment page limited"
          },
          "comment_rank": {
            "format": "number",
            "label": "Comment rank"
          },
          "comment_rank_source": {
            "format": "text",
            "label": "Comment rank source"
          },
          "comment_reaction_breakdown": {
            "format": "json",
            "label": "Comment reactions"
          },
          "comment_reaction_count": {
            "format": "text",
            "label": "Comment reactions"
          },
          "comment_reaction_count_value": {
            "format": "number",
            "label": "Comment reactions (typed)"
          },
          "comment_reply_count": {
            "format": "text",
            "label": "Comment replies"
          },
          "comment_reply_count_value": {
            "format": "number",
            "label": "Comment replies"
          },
          "comment_reply_path": {
            "format": "json",
            "label": "Reply path"
          },
          "comment_sort_fallback_count": {
            "format": "number",
            "label": "Comment sort fallback"
          },
          "comment_sort_observed": {
            "format": "number",
            "label": "Comments observed"
          },
          "comment_sort_order": {
            "format": "text",
            "label": "Comment sort"
          },
          "comment_source": {
            "format": "text",
            "label": "Comment source"
          },
          "comment_text": {
            "format": "text",
            "label": "Comment"
          },
          "comment_timestamp": {
            "format": "text",
            "label": "Comment timestamp"
          },
          "comment_upvote_count": {
            "format": "text",
            "label": "Comment upvotes"
          },
          "comment_upvote_count_value": {
            "format": "number",
            "label": "Comment upvotes"
          },
          "comment_url": {
            "format": "link",
            "label": "Comment URL"
          },
          "comment_video_urls": {
            "format": "json",
            "label": "Comment video URLs"
          },
          "comment_visibility": {
            "format": "text",
            "label": "Comment visibility"
          },
          "comments": {
            "format": "json",
            "label": "Nested comments"
          },
          "content_type": {
            "format": "text",
            "label": "Type"
          },
          "content_type_counts": {
            "format": "json",
            "label": "Content type counts"
          },
          "created_at": {
            "format": "date",
            "label": "Created"
          },
          "date_interpretations": {
            "format": "json",
            "label": "Date interpretations"
          },
          "dedupe_mode": {
            "format": "text",
            "label": "Dedupe mode"
          },
          "detail_expansion_state": {
            "format": "text",
            "label": "Detail expansion"
          },
          "duplicate_records_suppressed": {
            "format": "number",
            "label": "Duplicates suppressed"
          },
          "edge_evidence_field": {
            "format": "text",
            "label": "Edge evidence"
          },
          "edge_id": {
            "format": "text",
            "label": "Edge ID"
          },
          "edge_state": {
            "format": "text",
            "label": "Edge state"
          },
          "error": {
            "format": "text",
            "label": "Error"
          },
          "event_type": {
            "format": "text",
            "label": "Incremental event"
          },
          "feed_age_days": {
            "format": "number",
            "label": "Feed age (days)"
          },
          "feed_age_state": {
            "format": "text",
            "label": "Feed age evidence"
          },
          "feed_author_credentials": {
            "format": "text",
            "label": "Feed author credentials"
          },
          "feed_author_id": {
            "format": "text",
            "label": "Feed author ID"
          },
          "feed_author_image_url": {
            "format": "link",
            "label": "Feed author image"
          },
          "feed_author_is_anonymous": {
            "format": "boolean",
            "label": "Feed author anonymous"
          },
          "feed_author_is_verified": {
            "format": "boolean",
            "label": "Feed author verified"
          },
          "feed_author_name": {
            "format": "text",
            "label": "Feed author"
          },
          "feed_author_url": {
            "format": "link",
            "label": "Feed author URL"
          },
          "feed_comment_count": {
            "format": "text",
            "label": "Feed comments"
          },
          "feed_created_at": {
            "format": "text",
            "label": "Feed created at"
          },
          "feed_effective_access": {
            "format": "text",
            "label": "Feed effective access"
          },
          "feed_is_ai_answer": {
            "format": "text",
            "label": "Feed AI answer"
          },
          "feed_question_title": {
            "format": "text",
            "label": "Feed question title"
          },
          "feed_question_url": {
            "format": "text",
            "label": "Feed question URL"
          },
          "feed_share_count": {
            "format": "text",
            "label": "Feed shares"
          },
          "feed_text": {
            "format": "text",
            "label": "Feed text"
          },
          "feed_title": {
            "format": "text",
            "label": "Feed title"
          },
          "feed_type": {
            "format": "text",
            "label": "Feed type"
          },
          "feed_upvote_count": {
            "format": "text",
            "label": "Feed upvotes"
          },
          "feed_url": {
            "format": "link",
            "label": "Feed URL"
          },
          "feed_view_count": {
            "format": "text",
            "label": "Feed views"
          },
          "field_sources": {
            "format": "json",
            "label": "Field sources"
          },
          "fields_present": {
            "format": "json",
            "label": "Fields present"
          },
          "final_url": {
            "format": "link",
            "label": "Final URL"
          },
          "from_content_type": {
            "format": "text",
            "label": "From content type"
          },
          "from_id": {
            "format": "text",
            "label": "From ID"
          },
          "from_record_id": {
            "format": "text",
            "label": "From record"
          },
          "from_url": {
            "format": "link",
            "label": "From URL"
          },
          "global_answer_cap_reached": {
            "format": "boolean",
            "label": "Global answer cap"
          },
          "gql_calls": {
            "format": "json",
            "label": "GraphQL calls"
          },
          "hard_limits": {
            "format": "json",
            "label": "Hard limits"
          },
          "http_status": {
            "format": "number",
            "label": "HTTP status"
          },
          "image_urls": {
            "format": "array",
            "label": "Feed image URLs"
          },
          "include_engagement_breakdown": {
            "format": "boolean",
            "label": "Engagement breakdown included"
          },
          "include_entity_graph": {
            "format": "boolean",
            "label": "Entity graph included"
          },
          "include_field_evidence": {
            "format": "boolean",
            "label": "Field evidence included"
          },
          "include_unchanged": {
            "format": "boolean",
            "label": "Include unchanged"
          },
          "include_unresolved_edges": {
            "format": "boolean",
            "label": "Unresolved edges included"
          },
          "input_accounting": {
            "format": "json",
            "label": "Input accounting"
          },
          "is_ai_answer": {
            "format": "boolean",
            "label": "Is AI answer"
          },
          "last_answered_at": {
            "format": "date",
            "label": "Last answered (observed)"
          },
          "last_answered_at_evidence": {
            "format": "json",
            "label": "Last answered evidence"
          },
          "legacy_input_notes": {
            "format": "text",
            "label": "Legacy input notes"
          },
          "load_more_attempts": {
            "format": "number",
            "label": "Load-more attempts"
          },
          "load_more_clicks": {
            "format": "number",
            "label": "Load-more clicks"
          },
          "load_more_state": {
            "format": "text",
            "label": "Load-more state"
          },
          "manifest_version": {
            "format": "text",
            "label": "Manifest version"
          },
          "matched_input": {
            "format": "text",
            "label": "Matched input"
          },
          "matched_input_kind": {
            "format": "text",
            "label": "Matched input kind"
          },
          "max_answers_per_question": {
            "format": "number",
            "label": "Max answers per question"
          },
          "max_answers_total": {
            "format": "number",
            "label": "Max answers total"
          },
          "max_concurrency": {
            "format": "number",
            "label": "Max concurrency"
          },
          "max_items_per_source": {
            "format": "number",
            "label": "Configured source cap"
          },
          "max_raw_evidence_bytes": {
            "format": "number",
            "label": "Max raw bytes"
          },
          "media_urls": {
            "format": "array",
            "label": "Feed media URLs"
          },
          "navigation_attempts": {
            "format": "number",
            "label": "Navigation attempts"
          },
          "navigation_attempts_total": {
            "format": "number",
            "label": "Navigation attempts total"
          },
          "navigation_retries": {
            "format": "number",
            "label": "Navigation retries"
          },
          "navigation_retries_total": {
            "format": "number",
            "label": "Navigation retries total"
          },
          "navigation_retry_delays_seconds": {
            "format": "json",
            "label": "Retry delays"
          },
          "nested_answer_count": {
            "format": "number",
            "label": "Nested answers emitted"
          },
          "nested_answer_count_observed": {
            "format": "number",
            "label": "Nested answers observed"
          },
          "nested_child_state": {
            "format": "text",
            "label": "Nested child state"
          },
          "nested_comment_count": {
            "format": "number",
            "label": "Nested comments emitted"
          },
          "nested_comment_count_observed": {
            "format": "number",
            "label": "Nested comments observed"
          },
          "nested_orphan_reason": {
            "format": "text",
            "label": "Nested orphan reason"
          },
          "node_image_url": {
            "format": "link",
            "label": "Node image"
          },
          "observed_depth": {
            "format": "text",
            "label": "Observed depth"
          },
          "only_new_items": {
            "format": "boolean",
            "label": "Only new items"
          },
          "outbound_links": {
            "format": "array",
            "label": "Feed outbound links"
          },
          "output_format": {
            "format": "text",
            "label": "Output format"
          },
          "output_projection": {
            "format": "text",
            "label": "Projection"
          },
          "parent_comment_id": {
            "format": "text",
            "label": "Parent comment ID"
          },
          "parent_comment_url": {
            "format": "link",
            "label": "Parent comment URL"
          },
          "parser_strategy": {
            "format": "text",
            "label": "Parser strategy"
          },
          "parser_version": {
            "format": "text",
            "label": "Parser version"
          },
          "post_age_days": {
            "format": "number",
            "label": "Post age (days)"
          },
          "post_age_state": {
            "format": "text",
            "label": "Post age evidence"
          },
          "post_author_credentials": {
            "format": "text",
            "label": "Post author credentials"
          },
          "post_author_follower_count": {
            "format": "text",
            "label": "Post author followers"
          },
          "post_author_id": {
            "format": "text",
            "label": "Post author ID"
          },
          "post_author_image_url": {
            "format": "link",
            "label": "Post author image"
          },
          "post_author_is_anonymous": {
            "format": "boolean",
            "label": "Post author anonymous"
          },
          "post_author_is_verified": {
            "format": "boolean",
            "label": "Post author verified"
          },
          "post_author_name": {
            "format": "text",
            "label": "Post author"
          },
          "post_author_url": {
            "format": "link",
            "label": "Post author URL"
          },
          "post_body": {
            "format": "text",
            "label": "Post body"
          },
          "post_comment_count": {
            "format": "text",
            "label": "Post comments"
          },
          "post_created_at": {
            "format": "text",
            "label": "Post created at"
          },
          "post_effective_access": {
            "format": "text",
            "label": "Post effective access"
          },
          "post_image_urls": {
            "format": "json",
            "label": "Post image URLs"
          },
          "post_is_question_summary": {
            "format": "text",
            "label": "Post is question summary"
          },
          "post_media_urls": {
            "format": "json",
            "label": "Post media URLs"
          },
          "post_outbound_links": {
            "format": "json",
            "label": "Post outbound links"
          },
          "post_question_title": {
            "format": "text",
            "label": "Post question title"
          },
          "post_question_url": {
            "format": "text",
            "label": "Post question URL"
          },
          "post_share_count": {
            "format": "text",
            "label": "Post shares"
          },
          "post_title": {
            "format": "text",
            "label": "Post title"
          },
          "post_updated_age_days": {
            "format": "number",
            "label": "Post updated age (days)"
          },
          "post_updated_age_state": {
            "format": "text",
            "label": "Post updated age evidence"
          },
          "post_updated_at": {
            "format": "text",
            "label": "Post updated at"
          },
          "post_upvote_count": {
            "format": "text",
            "label": "Post upvotes"
          },
          "post_url": {
            "format": "link",
            "label": "Post URL"
          },
          "post_video_urls": {
            "format": "json",
            "label": "Post video URLs"
          },
          "post_view_count": {
            "format": "text",
            "label": "Post views"
          },
          "previous_snapshot_hash": {
            "format": "text",
            "label": "Previous state hash"
          },
          "profile_account_status": {
            "format": "text",
            "label": "Profile account status"
          },
          "profile_answer_count": {
            "format": "text",
            "label": "Profile answers"
          },
          "profile_author_id": {
            "format": "text",
            "label": "Profile author ID"
          },
          "profile_bio": {
            "format": "text",
            "label": "Profile bio"
          },
          "profile_credential": {
            "format": "text",
            "label": "Profile credential"
          },
          "profile_expertise_topics": {
            "format": "json",
            "label": "Expertise topics"
          },
          "profile_follower_count": {
            "format": "text",
            "label": "Profile followers"
          },
          "profile_following_count": {
            "format": "text",
            "label": "Profile following"
          },
          "profile_history_limited": {
            "format": "text",
            "label": "Profile history limited"
          },
          "profile_history_pages": {
            "format": "number",
            "label": "Profile history pages"
          },
          "profile_history_state": {
            "format": "text",
            "label": "Profile history state"
          },
          "profile_image_url": {
            "format": "link",
            "label": "Profile image"
          },
          "profile_is_anonymous": {
            "format": "text",
            "label": "Profile anonymous"
          },
          "profile_is_deceased": {
            "format": "text",
            "label": "Profile deceased"
          },
          "profile_is_restricted": {
            "format": "boolean",
            "label": "Profile restricted"
          },
          "profile_is_verified": {
            "format": "boolean",
            "label": "Profile verified"
          },
          "profile_joined_at": {
            "format": "text",
            "label": "Profile joined"
          },
          "profile_jsonld_type": {
            "format": "text",
            "label": "Profile JSON-LD type"
          },
          "profile_location_credentials": {
            "format": "json",
            "label": "Location credentials"
          },
          "profile_month_content_views": {
            "format": "text",
            "label": "Profile monthly views"
          },
          "profile_name": {
            "format": "text",
            "label": "Profile name"
          },
          "profile_post_count": {
            "format": "text",
            "label": "Profile posts"
          },
          "profile_question_count": {
            "format": "text",
            "label": "Profile questions"
          },
          "profile_school_credentials": {
            "format": "json",
            "label": "School credentials"
          },
          "profile_snapshot_requested": {
            "format": "boolean",
            "label": "Profile snapshot requested"
          },
          "profile_snapshot_state": {
            "format": "text",
            "label": "Profile snapshot"
          },
          "profile_total_content_views": {
            "format": "text",
            "label": "Profile total views"
          },
          "profile_url": {
            "format": "link",
            "label": "Profile URL"
          },
          "profile_work_credentials": {
            "format": "json",
            "label": "Work credentials"
          },
          "proxy_errors": {
            "format": "json",
            "label": "Proxy errors"
          },
          "proxy_path_used": {
            "format": "text",
            "label": "Proxy path"
          },
          "proxy_resolution_state": {
            "format": "text",
            "label": "Proxy state"
          },
          "proxy_used": {
            "format": "boolean",
            "label": "Proxy used"
          },
          "query_hashes": {
            "format": "json",
            "label": "Query hashes"
          },
          "question_age_days": {
            "format": "number",
            "label": "Question age (days)"
          },
          "question_age_state": {
            "format": "text",
            "label": "Question age evidence"
          },
          "question_answer_count": {
            "format": "text",
            "label": "Answers (raw)"
          },
          "question_answer_count_scraped": {
            "format": "number",
            "label": "Answers scraped"
          },
          "question_answer_count_value": {
            "format": "number",
            "label": "Answers"
          },
          "question_audit_attempts": {
            "format": "number",
            "label": "Question audit attempts"
          },
          "question_audit_state": {
            "format": "text",
            "label": "Question audit state"
          },
          "question_author_credentials": {
            "format": "text",
            "label": "Question author credentials"
          },
          "question_author_id": {
            "format": "text",
            "label": "Question author ID"
          },
          "question_author_image_url": {
            "format": "link",
            "label": "Question author image"
          },
          "question_author_is_anonymous": {
            "format": "boolean",
            "label": "Question author anonymous"
          },
          "question_author_is_verified": {
            "format": "boolean",
            "label": "Question author verified"
          },
          "question_author_name": {
            "format": "text",
            "label": "Question author"
          },
          "question_author_url": {
            "format": "link",
            "label": "Question author URL"
          },
          "question_created_at": {
            "format": "text",
            "label": "Question created"
          },
          "question_follower_count": {
            "format": "text",
            "label": "Question followers"
          },
          "question_follower_count_value": {
            "format": "text",
            "label": "Question followers (number)"
          },
          "question_id": {
            "format": "text",
            "label": "Question ID"
          },
          "question_image_urls": {
            "format": "json",
            "label": "Question image URLs"
          },
          "question_media_urls": {
            "format": "json",
            "label": "Question media URLs"
          },
          "question_merge_count": {
            "format": "number",
            "label": "Question merges into"
          },
          "question_outbound_links": {
            "format": "json",
            "label": "Question outbound links"
          },
          "question_updated_at": {
            "format": "text",
            "label": "Question updated"
          },
          "question_url": {
            "format": "link",
            "label": "Question URL"
          },
          "question_video_urls": {
            "format": "json",
            "label": "Question video URLs"
          },
          "question_view_count": {
            "format": "number",
            "label": "Question views"
          },
          "quora_plus_preview_count": {
            "format": "text",
            "label": "Quora+ previews"
          },
          "raw_evidence_retention_days": {
            "format": "number",
            "label": "Raw retention days"
          },
          "raw_evidence_state": {
            "format": "text",
            "label": "Raw evidence"
          },
          "raw_html": {
            "format": "text",
            "label": "HTML snapshot"
          },
          "raw_html_bytes": {
            "format": "number",
            "label": "Raw HTML bytes"
          },
          "raw_html_redaction_state": {
            "format": "text",
            "label": "HTML redaction"
          },
          "raw_html_redactions": {
            "format": "json",
            "label": "HTML redactions"
          },
          "raw_html_returned_bytes": {
            "format": "number",
            "label": "Returned HTML bytes"
          },
          "raw_html_sha256": {
            "format": "text",
            "label": "HTML SHA-256"
          },
          "raw_html_truncated": {
            "format": "boolean",
            "label": "Raw HTML truncated"
          },
          "reaction_breakdown": {
            "format": "json",
            "label": "Answer reaction breakdown"
          },
          "recordType": {
            "format": "text",
            "label": "Record type alias"
          },
          "record_id": {
            "format": "text",
            "label": "Record ID"
          },
          "records_emitted": {
            "format": "number",
            "label": "Records emitted"
          },
          "redact_sensitive_query_params": {
            "format": "boolean",
            "label": "Sensitive query redaction"
          },
          "redirect_chain": {
            "format": "json",
            "label": "Redirect chain"
          },
          "related_content": {
            "format": "json",
            "label": "Related content"
          },
          "related_content_count": {
            "format": "number",
            "label": "Related content count"
          },
          "related_content_limit_reached": {
            "format": "boolean",
            "label": "Related content cap"
          },
          "related_content_observed_count": {
            "format": "number",
            "label": "Related content observed"
          },
          "related_questions": {
            "format": "json",
            "label": "Related questions"
          },
          "relationship": {
            "format": "text",
            "label": "Relationship"
          },
          "relationship_collection_diagnostic": {
            "format": "json",
            "label": "Relationship collection diagnostic"
          },
          "relationship_collection_key": {
            "format": "text",
            "label": "Relationship collection"
          },
          "relationship_identity_pages": {
            "format": "number",
            "label": "Identity list pages"
          },
          "relationship_identity_requests": {
            "format": "number",
            "label": "Identity list requests"
          },
          "relationship_identity_states": {
            "format": "json",
            "label": "Relationship identity states"
          },
          "request_delay_seconds": {
            "format": "number",
            "label": "Request delay (s)"
          },
          "requested_depth": {
            "format": "text",
            "label": "Requested depth"
          },
          "requested_language": {
            "format": "text",
            "label": "Requested language"
          },
          "requested_output_fields": {
            "format": "json",
            "label": "Requested output fields"
          },
          "requested_result_types": {
            "format": "json",
            "label": "Requested result types"
          },
          "run_duration_ms": {
            "format": "number",
            "label": "Run duration (ms)"
          },
          "run_finished_at": {
            "format": "text",
            "label": "Run finished"
          },
          "run_started_at": {
            "format": "text",
            "label": "Run started"
          },
          "scrape_duration_ms": {
            "format": "number",
            "label": "Duration (ms)"
          },
          "scrape_timestamp": {
            "format": "text",
            "label": "Scrape timestamp"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped at alias"
          },
          "scroll_attempts": {
            "format": "number",
            "label": "Scroll attempts"
          },
          "scroll_state": {
            "format": "text",
            "label": "Scroll state"
          },
          "search_discovery_hits": {
            "format": "text",
            "label": "Search discovery hits"
          },
          "search_discovery_source": {
            "format": "text",
            "label": "Search discovery source"
          },
          "session_cookie_count": {
            "format": "number",
            "label": "Session cookie count"
          },
          "session_cookie_expiry_state": {
            "format": "text",
            "label": "Cookie expiry"
          },
          "session_input_state": {
            "format": "text",
            "label": "Session input"
          },
          "sourceUrl": {
            "format": "text",
            "label": "Source URL alias"
          },
          "source_cap": {
            "format": "number",
            "label": "Source cap"
          },
          "source_cap_reached": {
            "format": "boolean",
            "label": "Source cap reached"
          },
          "source_items_emitted": {
            "format": "number",
            "label": "Source emitted"
          },
          "source_items_observed": {
            "format": "number",
            "label": "Source observed"
          },
          "source_observation_count": {
            "format": "number",
            "label": "Source observation count"
          },
          "source_observations": {
            "format": "json",
            "label": "Source observations"
          },
          "source_pages_attempted": {
            "format": "number",
            "label": "Source pages attempted"
          },
          "source_queries": {
            "format": "json",
            "label": "Source queries"
          },
          "source_query": {
            "format": "text",
            "label": "Source query"
          },
          "source_url": {
            "format": "link",
            "label": "Source url"
          },
          "space_admin_count": {
            "format": "text",
            "label": "Space admins"
          },
          "space_ads_skipped": {
            "format": "text",
            "label": "Space ads skipped"
          },
          "space_all_time_followers": {
            "format": "text",
            "label": "Space all-time followers"
          },
          "space_contributor_count": {
            "format": "text",
            "label": "Space contributors"
          },
          "space_cover_url": {
            "format": "text",
            "label": "Space cover"
          },
          "space_description": {
            "format": "text",
            "label": "Space description"
          },
          "space_feed_bundles": {
            "format": "text",
            "label": "Space feed bundles"
          },
          "space_feed_capped": {
            "format": "text",
            "label": "Space feed capped"
          },
          "space_follower_count": {
            "format": "text",
            "label": "Space followers"
          },
          "space_icon_url": {
            "format": "text",
            "label": "Space icon"
          },
          "space_id": {
            "format": "text",
            "label": "Space ID"
          },
          "space_item_count": {
            "format": "text",
            "label": "Space items"
          },
          "space_member_count": {
            "format": "text",
            "label": "Space members"
          },
          "space_moderator_count": {
            "format": "text",
            "label": "Space moderators"
          },
          "space_name": {
            "format": "text",
            "label": "Space name"
          },
          "space_url": {
            "format": "link",
            "label": "Space URL"
          },
          "state_scope_fingerprint": {
            "format": "text",
            "label": "State scope fingerprint"
          },
          "state_snapshot_hash": {
            "format": "text",
            "label": "Current state hash"
          },
          "state_store_error": {
            "format": "text",
            "label": "State store error"
          },
          "state_store_state": {
            "format": "text",
            "label": "State store"
          },
          "timestamp": {
            "format": "text",
            "label": "Timestamp"
          },
          "title": {
            "format": "text",
            "label": "Title"
          },
          "to_content_type": {
            "format": "text",
            "label": "To content type"
          },
          "to_id": {
            "format": "text",
            "label": "To ID"
          },
          "to_image_url": {
            "format": "link",
            "label": "To image"
          },
          "to_name": {
            "format": "text",
            "label": "To name"
          },
          "to_record_id": {
            "format": "text",
            "label": "To record"
          },
          "to_url": {
            "format": "link",
            "label": "To URL"
          },
          "topic_default_photo_url": {
            "format": "text",
            "label": "Topic default photo"
          },
          "topic_feed_cap_hit_count": {
            "format": "text",
            "label": "Topic feed cap hits"
          },
          "topic_feed_pages": {
            "format": "text",
            "label": "Topic feed pages"
          },
          "topic_feed_state": {
            "format": "text",
            "label": "Topic feed state"
          },
          "topic_follower_count": {
            "format": "text",
            "label": "Topic followers"
          },
          "topic_has_leaderboard": {
            "format": "text",
            "label": "Topic leaderboard"
          },
          "topic_id": {
            "format": "text",
            "label": "Topic ID"
          },
          "topic_links": {
            "format": "json",
            "label": "Topic links"
          },
          "topic_most_viewed_authors": {
            "format": "json",
            "label": "Topic most-viewed authors"
          },
          "topic_name": {
            "format": "text",
            "label": "Topic name"
          },
          "topic_photo_url": {
            "format": "text",
            "label": "Topic photo"
          },
          "topic_url": {
            "format": "link",
            "label": "Topic URL"
          },
          "topics": {
            "format": "json",
            "label": "Topics"
          },
          "unresolved_reason": {
            "format": "text",
            "label": "Unresolved reason"
          },
          "url": {
            "format": "link",
            "label": "URL"
          },
          "url_redaction_state": {
            "format": "text",
            "label": "URL redaction"
          },
          "url_redactions": {
            "format": "json",
            "label": "URL redactions"
          },
          "video_urls": {
            "format": "array",
            "label": "Feed video URLs"
          }
        }
      },
      "title": "Normalized records",
      "transformation": {
        "fields": [
          "content_type",
          "event_type",
          "state_snapshot_hash",
          "previous_snapshot_hash",
          "state_scope_fingerprint",
          "state_store_state",
          "state_store_error",
          "only_new_items",
          "include_unchanged",
          "parser_strategy",
          "parser_version",
          "field_sources",
          "fields_present",
          "final_url",
          "http_status",
          "error",
          "scrape_duration_ms",
          "navigation_attempts",
          "navigation_retries",
          "proxy_resolution_state",
          "session_input_state",
          "browser_locale",
          "navigation_retry_delays_seconds",
          "records_emitted",
          "input_accounting",
          "session_cookie_count",
          "session_cookie_expiry_state",
          "run_duration_ms",
          "proxy_used",
          "request_delay_seconds",
          "scrape_timestamp",
          "requested_result_types",
          "run_started_at",
          "run_finished_at",
          "source_pages_attempted",
          "content_type_counts",
          "access_state_counts",
          "relationship_collection_diagnostic",
          "manifest_version",
          "requested_output_fields",
          "max_concurrency",
          "navigation_attempts_total",
          "navigation_retries_total",
          "raw_evidence_retention_days",
          "max_raw_evidence_bytes",
          "redact_sensitive_query_params",
          "raw_html_redactions",
          "url_redactions",
          "date_interpretations",
          "canonical_url",
          "redirect_chain",
          "answer_count",
          "scroll_attempts",
          "scroll_state",
          "load_more_attempts",
          "load_more_clicks",
          "load_more_state",
          "raw_html_redaction_state",
          "url_redaction_state",
          "output_format",
          "output_projection",
          "answers",
          "comments",
          "nested_answer_count",
          "nested_answer_count_observed",
          "nested_comment_count",
          "nested_comment_count_observed",
          "nested_child_state",
          "nested_orphan_reason",
          "requested_depth",
          "observed_depth",
          "detail_expansion_state",
          "title",
          "question_title",
          "url",
          "post_url",
          "post_pid",
          "post_node_id",
          "post_title",
          "post_author_name",
          "post_author_url",
          "post_author_image_url",
          "post_author_id",
          "post_author_credentials",
          "post_author_is_verified",
          "post_author_is_anonymous",
          "post_body",
          "post_media_urls",
          "post_image_urls",
          "post_video_urls",
          "post_outbound_links",
          "question_media_urls",
          "question_author_name",
          "question_author_url",
          "question_author_image_url",
          "question_author_id",
          "question_author_is_verified",
          "question_author_is_anonymous",
          "question_author_credentials",
          "question_image_urls",
          "question_video_urls",
          "question_outbound_links",
          "post_created_at",
          "post_updated_at",
          "post_updated_age_days",
          "post_updated_age_state",
          "post_age_days",
          "post_age_state",
          "relationship",
          "record_id",
          "access_state",
          "from_record_id",
          "to_record_id",
          "from_id",
          "to_id",
          "to_name",
          "to_image_url",
          "node_image_url",
          "relationship_collection_key",
          "collection_total_text",
          "collection_total_value",
          "edge_evidence_field",
          "unresolved_reason",
          "source_query",
          "source_kind",
          "source_queries",
          "matched_input",
          "matched_input_kind",
          "source_observations",
          "source_observation_count",
          "question_url",
          "question_answer_count",
          "question_answer_count_value",
          "question_answer_count_scraped",
          "question_id",
          "question_created_at",
          "question_age_days",
          "question_age_state",
          "question_updated_at",
          "question_view_count",
          "question_audit_state",
          "question_merge_count",
          "last_answered_at",
          "last_answered_at_evidence",
          "answer_id",
          "answer_node_id",
          "answer_url",
          "answer_text",
          "answer_html",
          "answer_media_urls",
          "answer_image_urls",
          "answer_video_urls",
          "answer_outbound_links",
          "answer_translation_state",
          "answer_translation_label",
          "answer_original_url",
          "answer_is_anonymous",
          "answer_author_is_verified",
          "answer_author_credentials",
          "answer_author_image_url",
          "answer_updated_at",
          "answer_created_at",
          "answer_age_days",
          "answer_age_state",
          "answer_visibility",
          "answer_text_completeness",
          "answer_is_collapsed",
          "answer_is_quora_plus",
          "answer_is_top_labeled",
          "answer_rank_source",
          "answer_upvote_count",
          "answer_upvote_count_value",
          "answer_comment_count",
          "answer_comment_count_value",
          "answer_view_count",
          "answer_view_count_value",
          "answer_share_count",
          "answer_share_count_value",
          "reaction_breakdown",
          "is_ai_answer",
          "ai_label_text",
          "ai_label_source",
          "related_content",
          "related_content_count",
          "related_content_observed_count",
          "related_content_limit_reached",
          "answer_jsonld_type",
          "answer_rank",
          "answer_limit_reached",
          "edge_id",
          "from_url",
          "to_url",
          "comment_id",
          "comment_url",
          "comment_text",
          "comment_author_name",
          "comment_author_url",
          "comment_author_image_url",
          "comment_author_id",
          "comment_author_credentials",
          "comment_author_is_verified",
          "comment_is_anonymous",
          "comment_timestamp",
          "comment_created_at",
          "comment_age_days",
          "comment_age_state",
          "comment_visibility",
          "comment_upvote_count",
          "comment_depth",
          "comment_depth_limit_reached",
          "comment_items_observed_count",
          "comment_items_emitted_count",
          "comment_limit_reached",
          "comment_media_urls",
          "comment_image_urls",
          "comment_video_urls",
          "comment_outbound_links",
          "comment_collection_label",
          "comment_is_top_labeled",
          "comment_filter_top_only",
          "comment_filter_observed",
          "comment_filter_emitted",
          "comment_filter_unknown",
          "comment_rank",
          "comment_rank_source",
          "comment_sort_order",
          "comment_sort_observed",
          "comment_sort_fallback_count",
          "comment_reaction_count",
          "comment_reaction_count_value",
          "comment_reply_count",
          "comment_reply_path",
          "parent_comment_id",
          "parent_answer_url",
          "parent_comment_url",
          "comment_is_reply",
          "comment_reaction_breakdown",
          "comment_upvote_count_value",
          "comment_reply_count_value",
          "profile_url",
          "profile_name",
          "profile_bio",
          "profile_image_url",
          "profile_jsonld_type",
          "profile_author_id",
          "profile_is_verified",
          "profile_is_restricted",
          "profile_snapshot_requested",
          "topic_url",
          "space_url",
          "feed_url",
          "feed_type",
          "feed_post_pid",
          "feed_post_node_id",
          "feed_title",
          "feed_text",
          "feed_author_name",
          "feed_author_url",
          "feed_author_image_url",
          "feed_author_id",
          "feed_author_credentials",
          "feed_author_is_verified",
          "feed_author_is_anonymous",
          "feed_created_at",
          "feed_age_days",
          "feed_age_state",
          "media_urls",
          "image_urls",
          "video_urls",
          "outbound_links",
          "activity_url",
          "activity_type",
          "activity_source",
          "activity_question_url",
          "activity_question_title",
          "activity_question_id",
          "activity_answer_id",
          "author_name",
          "author_url",
          "author_image_url",
          "author_id",
          "author_credentials",
          "topics",
          "topic_links",
          "created_at",
          "timestamp",
          "include_unresolved_edges",
          "include_field_evidence",
          "include_engagement_breakdown",
          "include_entity_graph",
          "profile_snapshot_state",
          "global_answer_cap_reached",
          "answers_observed_before_global_cap",
          "answers_suppressed_by_global_cap",
          "dedupe_mode",
          "duplicate_records_suppressed",
          "raw_html_bytes",
          "raw_html_returned_bytes",
          "raw_html_truncated",
          "raw_evidence_state",
          "raw_html",
          "raw_html_sha256",
          "max_items_per_source",
          "source_cap",
          "source_items_observed",
          "source_items_emitted",
          "source_cap_reached",
          "source_url",
          "from_content_type",
          "to_content_type",
          "edge_state",
          "requested_language",
          "max_answers_per_question",
          "max_answers_total",
          "recordType",
          "scrapedAt",
          "sourceUrl",
          "question_follower_count",
          "question_follower_count_value",
          "related_questions",
          "answer_author_follower_count",
          "answer_access_option",
          "answer_effective_access",
          "answer_original_question_url",
          "answer_original_question_title",
          "profile_follower_count",
          "profile_following_count",
          "profile_answer_count",
          "profile_question_count",
          "profile_post_count",
          "profile_total_content_views",
          "profile_month_content_views",
          "profile_joined_at",
          "profile_credential",
          "profile_work_credentials",
          "profile_school_credentials",
          "profile_location_credentials",
          "profile_expertise_topics",
          "profile_account_status",
          "profile_is_anonymous",
          "profile_is_deceased",
          "profile_history_limited",
          "profile_history_state",
          "topic_id",
          "topic_name",
          "topic_follower_count",
          "topic_most_viewed_authors",
          "topic_photo_url",
          "topic_default_photo_url",
          "topic_has_leaderboard",
          "topic_feed_state",
          "space_id",
          "space_name",
          "space_follower_count",
          "space_all_time_followers",
          "space_member_count",
          "space_contributor_count",
          "space_moderator_count",
          "space_admin_count",
          "space_description",
          "space_icon_url",
          "space_cover_url",
          "space_item_count",
          "space_feed_capped",
          "space_ads_skipped",
          "feed_upvote_count",
          "feed_view_count",
          "feed_share_count",
          "feed_comment_count",
          "feed_effective_access",
          "feed_is_ai_answer",
          "feed_question_url",
          "feed_question_title",
          "post_upvote_count",
          "post_view_count",
          "post_share_count",
          "post_comment_count",
          "post_effective_access",
          "post_is_question_summary",
          "post_author_follower_count",
          "post_question_url",
          "post_question_title",
          "comment_source",
          "comment_page_limited",
          "comment_container_id",
          "proxy_path_used",
          "search_discovery_source",
          "search_discovery_hits",
          "answer_gql_pages",
          "comment_gql_pages",
          "topic_feed_pages",
          "space_feed_bundles",
          "quora_plus_preview_count",
          "comment_cap_hit_count",
          "topic_feed_cap_hit_count",
          "profile_history_pages",
          "relationship_identity_pages",
          "relationship_identity_requests",
          "question_audit_attempts",
          "answer_pagination_state",
          "answer_pagination_unrelated_suppressed",
          "relationship_identity_states",
          "gql_calls",
          "query_hashes",
          "legacy_input_notes",
          "hard_limits",
          "proxy_errors"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Quora Question, Answer & Relationship Dataset Builder

Build a structured Quora dataset from direct links or best-effort search discovery. Point it at question, answer, profile, Topic, Space, or Post URLs and it returns normalized rows for every entity it finds, with the question → answer → comment chain and author/topic links kept intact. Choose how deep to go, how the rows are shaped, and which relationship or feed data to include.

This is an independent, third-party actor. It is not affiliated with, endorsed by, or licensed by Quora, Inc. No Quora account, login, session cookie, or paid proxy is used or required.

What this actor does

  • Accepts question, answer, profile, Topic, Space, and Post URLs directly, plus best-effort search discovery. Typed seed lists (questionUrls, answerUrls, topicUrls, spaceUrls, profileUrls, postUrls) override route auto-detection.
  • Empty fields are omitted; a missing field means the source did not expose it, never null or a sentinel.
  • Parses Quora's server-rendered Relay payloads and double-decodes the window.ansFrontendGlobals.data.inlineQueryResults .push() strings; it does not depend on CSS classes or DOM selectors for the core fields.
  • Paginates question answers with Quora's public QuestionPagedListPaginationQuery cursor, up to maxAnswersPerQuestion / maxAnswers / maxAnswerPages. Every paginated answer is checked against the page question (title/path, linkedQuestion, originalQuestionIfDifferent, and the answer permalink), so unrelated promoted answers cannot become dataset rows while legitimate merged variants still pass.
  • Paginates comment areas and nested replies through AllCommentsListQuery (10+ pages with after cursors), with maxCommentsPerAnswer as the hard cap; this is opt-in and robots-sensitive.
  • Optionally reads a Topic feed, a Space SSR multifeed, profile statistics, Topic statistics, and Post metrics.
  • Optionally reads the public question /log audit for created time, view count, and asker identity (includeQuestionAudit), and paginates profile answer/question history (includeProfileHistory).
  • Optionally resolves public identity lists for question followers, answer upvoters, profile followers/following, and Space roles through explicitly requested relationship types and the sensitive-data gate.
  • Walks the question → answer → comment chain and keeps the links between them (entity_edge rows), so you can rebuild the conversation tree.
  • Offers four output shapes via outputFormat: normalized (separate rows per entity, default), nested (answers grouped under their question, comments under their answer), flat, and edges (relationship rows plus any status rows).
  • Reports a status row (rather than guessing) whenever a page is blocked, login-gated, removed, or otherwise inaccessible, and a run_manifest row summarizing the whole run.
  • Leaves empty content fields out of each row rather than filling them with a guess. 0 and false are kept as real values.
  • Never emits cookie/credential material. URLs are redacted when redactSensitiveQueryParams is on.

Output per record

Every row carries content_type (question, answer, comment, profile, profile_activity, topic, topic_post, space, space_feed_item, entity_edge, relationship_collection, status, or run_manifest), plus shared fields: record_id, title, url, canonical_url, source_url, access_state, scrape_timestamp, requested_depth, observed_depth, detail_expansion_state, output_format, matched_input, matched_input_kind, and (when search seeds were used) source_query/source_queries.

Every row also carries run-context fields describing how it was collected: source_observations/source_observation_count, redirect_chain, url_redaction_state/url_redactions, proxy_used, proxy_path_used, proxy_resolution_state, session_cookie_count, session_input_state, session_cookie_expiry_state, request_delay_seconds, browser_locale, requested_language, navigation_retries/navigation_retry_delays_seconds, parser_version and parser_strategy. With includeFieldEvidence on (default), rows also get field_sources (where each value came from) and fields_present.

access_state is public for normal pages. Other values include login_required, cloudflare_challenge, rate_limited, not_found, removed, unavailable, quora_plus_or_gated, quora_plus_preview, redirected_to_search, unsupported_url, search_unavailable, answer_pagination_limited, answer_pagination_unavailable, comments_unavailable, comments_capped, topic_feed_unavailable, topic_feed_capped, space_feed_capped, profile_history_limited, profile_history_unavailable, question_audit_unavailable, relationship_identity_unavailable, relationship_identity_capped, relationship_identities_not_observed, state_store_unavailable, state_store_uncommitted and network_error.

Question row — question_url, question_id, question_answer_count (label) / question_answer_count_value (parsed number) / question_answer_count_scraped (rows actually collected), question_follower_count / question_follower_count_value (when the public payload exposes it), related_questions (qid, title, url), question_created_at, question_updated_at, question_view_count, question_audit_state, question_merge_count, question_age_days/question_age_state, last_answered_at + last_answered_at_evidence, question_author_name/_url/_image_url/_id/_is_verified/_is_anonymous/_credentials (from a visible author card or the opt-in /log audit), question_image_urls/_video_urls/_outbound_links (opt-in), answer_count, answer_limit_reached, topics, topic_links.

Answer row — answer_id, answer_node_id, answer_url, answer_text, answer_html (opt-in, derived from rich text), answer_media_urls/_image_urls/_video_urls/_outbound_links (opt-in), answer_translation_state/_label, answer_original_url, answer_is_anonymous, answer_author_is_verified, answer_author_follower_count (when present), answer_created_at/_updated_at, answer_age_days/_state, answer_visibility, answer_text_completeness, answer_is_collapsed, answer_is_quora_plus, answer_access_option, answer_effective_access, answer_is_top_labeled, answer_rank/_rank_source, answer_upvote_count/_value, answer_comment_count/_value, answer_view_count/_value, answer_share_count/_value, reaction_breakdown (opt-in), is_ai_answer/ai_label_text/ai_label_source, related_content/_count/_observed_count/_limit_reached (opt-in), answer_jsonld_type, author_name/_url/_image_url/_id/_credentials.

Comment row — comment_id, comment_url, comment_text, comment_source (graphql_comment_area), comment_author_name/_image_url/_id/_credentials/_is_verified, comment_is_anonymous, comment_timestamp/_created_at, comment_age_days/_state, comment_visibility, comment_upvote_count/_value, comment_reaction_count/_value, comment_reply_count/_value, comment_reaction_breakdown, comment_media_urls/_image_urls/_video_urls/_outbound_links, comment_is_top_labeled, comment_rank/_rank_source, comment_sort_order, comment_depth, comment_depth_limit_reached, comment_is_reply, parent_comment_id/_url, comment_reply_path, comment_container_id, comment_items_observed_count/_emitted_count, comment_limit_reached, comment_page_limited.

Profile row — profile_url, profile_name, profile_bio, profile_image_url, profile_author_id, profile_is_verified, profile_is_restricted, profile_account_status, profile_is_anonymous, profile_is_deceased, profile_snapshot_state, plus profile_follower_count, profile_following_count, profile_answer_count, profile_question_count, profile_post_count, profile_total_content_views, profile_month_content_views, profile_joined_at, profile_credential, profile_work_credentials, profile_school_credentials, profile_location_credentials, profile_expertise_topics, profile_history_limited when the visible feed is truncated or the opt-in history is capped, and profile_history_state (not_requested/observed/capped/rate_limited/unavailable/empty) when history is requested.

Profile-activity row — activity_url, activity_type, activity_source, activity_question_url/_title/_id, activity_answer_id, created_at, author_name/_url/_image_url/_id/_credentials.

Topic row — topic_url, topic_id, topic_follower_count, topic_most_viewed_authors (uid, name, url, follower_count, num_views, num_public_most_viewed_answers, credential), topic_photo_url, topic_default_photo_url, topic_has_leaderboard, and topic_feed_state (not_requested/observed/capped/unavailable).

Topic-Post row — post_url, post_pid, post_node_id, post_title (explicit title or first content line), post_body, post_media_urls/_image_urls/_video_urls/_outbound_links (opt-in), post_author_name/_url/_image_url/_id/_credentials/_is_verified/_is_anonymous/_follower_count, post_question_url/_title, topic_url, post_created_at/_updated_at, post_age_days/_state, post_updated_age_days/_state, post_upvote_count, post_view_count, post_share_count, post_comment_count, post_effective_access, post_is_question_summary.

Space row — space_url, space_id, space_follower_count, space_all_time_followers (conditional), space_member_count, space_contributor_count, space_moderator_count, space_admin_count, space_description, space_icon_url, space_cover_url, space_item_count, space_feed_capped, space_ads_skipped.

Space feed-item row — feed_url, feed_type, feed_title, feed_text (opt-in), feed_post_pid/feed_post_node_id (post stories), feed_author_name/_url/_image_url/_id/_credentials/_is_verified/_is_anonymous, feed_created_at, feed_age_days/_state, feed_upvote_count, feed_view_count, feed_share_count, feed_comment_count, feed_effective_access, feed_is_ai_answer, feed_question_url/_title, media_urls/image_urls/video_urls/outbound_links (opt-in).

Relationship row (entity_edge) — relationship, edge_id, from_record_id/_content_type/_url/_id, to_record_id/_content_type/_url/_id/_name/_image_url, node_image_url, edge_state, unresolved_reason, edge_evidence_field, relationship_collection_key, collection_total_text/_value.

Relationship-count row (relationship_collection) — relationship_collection_key, collection_total_text, collection_total_value, edge_evidence_field.

Status row — access_state, http_status, error, source_url, and for pages that failed to load final_url, scrape_duration_ms, navigation_attempts, navigation_retries. Run-level status rows (url: run://quora-dataset-builder) report a state store that could not be read (state_store_unavailable), state that was not saved because a source did not finish (state_store_uncommitted), or a run that produced no real rows (no_records_emitted).

Option-dependent fields — with a stateStoreId, entity rows add event_type (new/changed/unchanged/scope_mismatch), state_snapshot_hash, previous_snapshot_hash, state_scope_fingerprint, state_store_state, only_new_items, include_unchanged. With includeRawEvidence, page-level rows add raw_html_sha256, raw_html_bytes, raw_html_truncated, raw_html_returned_bytes, raw_html_redaction_state, raw_html_redactions, raw_evidence_state, raw_evidence_retention_days, plus raw_html when includeHtml is also on and rawEvidenceRetentionDays is above zero. In nested format, question rows carry answers arrays (each answer with its comments) and nested_* count fields. With maxItemsPerSource set, rows add max_items_per_source and per-source cap fields.

Run-manifest row — one per run, summarizing counts and the settings actually applied: run_started_at/_finished_at/_duration_ms, records_emitted, source_pages_attempted, content_type_counts, access_state_counts, input_accounting, requested_result_types, requested_output_fields, dedupe_mode, duplicate_records_suppressed, proxy_path_used, proxy_resolution_state, search_discovery_source, search_discovery_hits, answer_gql_pages, answer_pagination_state, answer_pagination_unrelated_suppressed, comment_gql_pages, topic_feed_pages, space_feed_bundles, quora_plus_preview_count, comment_cap_hit_count, topic_feed_cap_hit_count, profile_history_pages, profile_history_state, relationship_identity_pages, relationship_identity_requests, relationship_identity_states, question_audit_state, question_audit_attempts, legacy_input_notes, hard_limits, gql_calls, query_hashes, and the per-run values of your own input settings echoed back for reconciliation.

Trimming rows, depth, sessions and caps

  • Field allowlist. outputFields keeps only the fields you name, applied after extraction; an empty list returns the full row. Nested projection is supported with dotted paths such as answers.answer_text or answers.comments.comment_text in nested output. Child identity/URL fields stay in place, and content_type, identity, access/status, depth, timing and parser fields are always protected so a trimmed row can still be traced. output_projection on each row reads full or selected, and the run manifest records the requested fields. includeFieldEvidence toggles the field_sources/fields_present maps.
  • Depth. scrapeDepth: "detail" (default) runs the capped traversal; overview emits page-level summaries without answer, comment, profile-activity or Space-feed expansion. Every row reports requested_depth, observed_depth and detail_expansion_state. bounded means a configured cap was reached, not that Quora's full history was collected, and blocked pages report observed_depth: "status".
  • Caps. maxAnswersPerQuestion bounds each question, maxAnswers is a global answer cap, maxAnswerPages bounds GraphQL pages explicitly, maxItems caps entity/status rows before graph/manifest rows, maxItemsPerSource caps each source, and maxGraphEdges caps relationship rows. When maxItems/maxGraphEdges is 0 the corresponding cap is off. maxRelationshipItemsPerCollection bounds each labeled relationship collection, maxRelationshipPages bounds each public identity-list query, and maxProfileHistoryPages bounds each profile answer/question list. answer_pagination_limited is emitted only when a configured page cap or a GraphQL rate limit stopped pagination; an exhausted source is not reported as a cap.
  • Comments. Set includeComments: true. When maxCommentsPerAnswer is 0, the documented fallback is 10 per answer. The actor calls AllCommentsListQuery with after cursors and a page size derived from your cap (up to 50), so a 24-comment answer is collected as 10 + 10 + 4 when the server pages at ten. includeCommentReplies (or includeReplyGraph) expands nested replies up to maxCommentDepth; comment_page_limited is set only when a cap is actually hit, and a comments_capped status row follows. If the paginated query fails, the actor falls back to the first-page loader rather than inventing rows. Comments use Quora's comment-area GraphQL, which robots.txt disallows for generic agents: keep this opt-in and review your own compliance posture.
  • Topic feed. Set includeTopicFeed: true to call the topic page's own public GraphQL feed. maxTopicFeedPages bounds pages. This path is also robots-sensitive; keep it opt-in.
  • Question audit. includeQuestionAudit: true reads the question's public /log page for question_created_at, question_view_count, question_merge_count, and the asker name/uid/profile/credential. It retries a transient 403 once, then keeps question_audit_state: "unavailable" and a question_audit_unavailable status row. /log is robots-disallowed for generic agents and is never part of the daily prefill.
  • Profile history. includeProfileHistory: true paginates UserProfileAnswersMostRecent_RecentAnswers_Query and UserProfileQuestionsList_Questions_Query and emits bounded profile_activity rows. maxProfileHistoryPages (default 0 = three pages per list) and requestDelay (used as a 1.5–2.5 s GraphQL pace when above zero) bound the work. A cap sets profile_history_limited; a 400/403 sets profile_history_state: "rate_limited" and a profile_history_unavailable status row instead of fabricated rows.
  • Identity lists. Identity rows are emitted only when relationshipTypes explicitly requests them, the matching family flag is on, and includeSensitiveRelationshipData is on for sensitive types. The public GraphQL operations cover profile followers/following people/questions/Spaces/Topics, question followers, answer upvoters, and Space admins/contributors/moderators/followers. maxRelationshipItemsPerCollection and maxRelationshipPages bound every list; Space role calls run from a www.quora.com page context. These lists are robots-sensitive and rate-sensitive; a failure keeps a relationship_identity_unavailable or relationship_identities_not_observed status row, and a page/item cap adds relationship_identity_capped.
  • Sessions and proxies. No account, login, cookie, or session secret is used. The transport ladder is direct (curl_cffi, fresh session per attempt) → optional user proxy override → Apify AUTO datacenter → RESIDENTIAL only as a hardcoded last resort after the free rungs fail. A missing proxyConfiguration never stops the run, and there is no paid default. proxy_path_used reports the rung that worked.
  • Exact field names. Every output field this actor can emit is listed under Output per record above. Fields whose source is absent on a given page are omitted, not set to null or a sentinel.

Complete schema input inventory

Every input is optional. The daily prefill uses one public question URL with a small answer cap, comments and feeds off, and no paid proxy.

Field Type Default Description
mode string auto auto / byQuestionUrls / byAnswerUrls / byProfileUrls / byTopicUrls / bySpaceUrls / byPostUrls / search; typed modes validate seed routes
scrapeDepth string detail overview (page-level summary only) or detail (full capped traversal)
startUrls array [] Question, answer, profile, Topic, Space, or Post URLs; mixed lists are auto-detected and invalid hosts become status rows
searchQueries array [] Best-effort discovery terms; Quora's native search is login/Cloudflare-gated and is never claimed
questionUrls array [] Typed question seeds
answerUrls array [] Typed answer-permalink seeds
topicUrls array [] Typed Topic seeds
spaceUrls array [] Typed Space seeds; automatically enables Space output
profileUrls array [] Typed profile seeds
postUrls array [] Typed standalone Post seeds
resultTypes array ["question","answer","comment","profile","profile_activity","topic","topic_post","space","space_feed_item","entity_edge","status","run_manifest"] Which content_type values to include
outputFormat string normalized normalized / nested / flat / edges
dedupeMode string canonical canonical (merge duplicate entities by canonical URL/ID) or none
onlyNewItems boolean false With stateStoreId, suppress rows unchanged since the last run
includeUnchanged boolean true Keep unchanged rows when onlyNewItems is on
stateStoreId string - Apify key-value store name for incremental re-scraping; required when onlyNewItems is on
outputFields array [] Optional field allowlist for smaller rows; identity/status fields are always kept
includeFieldEvidence boolean true Include field_sources/fields_present on each row
includeUnresolvedEdges boolean true Keep relationship rows whose target could not be matched
relationshipTypes array [] Allowlist of labeled relationship collections to expand (follower, following, want-answers, upvoter, Space role); identity-revealing types also need includeSensitiveRelationshipData and the matching family opt-in
includeProfileEdges boolean false Per-family opt-in for profile follower/following/question/space/topic relationships
includeQuestionFollowerEdges boolean false Per-family opt-in for question follower/want-answer identities (sensitive)
includeAnswerUpvoterEdges boolean false Per-family opt-in for answer upvoter identities (requires includeSensitiveRelationshipData)
includeSensitiveRelationshipData boolean false Privacy gate required for identity-revealing relationship collections
includeTargetMetadata boolean false Keep the visible name/image of each relationship target
includeRelationshipCounts boolean false Emit privacy-preserving member-count rows; also add relationship_collection to resultTypes
includeSpaceRoleEdges boolean false Keep Space contributor/moderator/admin edges
includeSpaceContentEdges boolean true Keep Space to post/question membership edges and feed-item membership
maxRelationshipItemsPerCollection integer 500 Cap per labeled relationship collection
maxQuestions integer 25 How many discovered question links get queued on top of your own seed URLs
maxAnswersPerQuestion integer 10 Maximum answer rows kept per question after SSR and GraphQL pagination
maxAnswers integer 0 Global answer cap across the whole run (0 = no cap)
includeQuestion boolean true Keep question entities in the output
includeAuthor boolean true Keep author/profile entities and author fields in the output
includeAuthorSnapshot boolean false Fetch a bounded profile snapshot for each visible answer author
includeTopics boolean true Keep topic entities and topic links
includeSpaces boolean false Keep Space and Space feed-item rows; switched on automatically when a Space URL is used in startUrls or spaceUrls
includeComments boolean false Opt-in comment rows with AllCommentsListQuery cursor pagination; robots-sensitive
includeEngagementBreakdown boolean true Include per-reaction breakdowns alongside aggregate counts
includeRelatedContent boolean false Collect explicitly attached answer related-content links when Quora's public payload exposes them; otherwise they are omitted
maxRelatedContent integer 20 Bound related-content links per answer when enabled; zero emits no related-content items
topCommentsOnly boolean false Keep only comments explicitly labeled Top/Most helpful
commentSortOrder string observed observed / upvotes_desc / reactions_desc / replies_desc / newest
includeReplyGraph boolean false Compatibility alias that enables comments and nested replies
includeMedia boolean false Include image/video URL fields where available
includeFeedText boolean false Include visible text on Space feed cards
includeOutboundLinks boolean false Include non-Quora links found in rich text
includeEntityGraph boolean false Emit relationship rows even when entity_edge is not in resultTypes
maxCommentsPerAnswer integer 0 Comments kept per answer; when comments are on and this is 0, the fallback is 10; the cap is the pagination limit, not a page size
maxCommentDepth integer 20 Maximum nested reply depth when replies are enabled; 0 disables replies
maxItems integer 0 Cap on entity/status rows before graph and manifest rows (0 = no cap)
maxGraphEdges integer 5000 Cap on relationship rows (0 = no edges)
maxScrollAttempts integer 5 Scroll attempts per page in detail mode
maxLoadMoreAttempts integer 0 "Load more" button clicks per page
includeRawEvidence boolean false Attach a document hash and size/redaction metadata for auditing
includeHtml boolean false Retain bounded raw HTML on page-level rows and derived answer HTML
maxHtmlBytes integer 100000 Upper bound for retained or derived HTML
requestDelay number 1 Delay in seconds between page batches
maxConcurrency integer 1 Independent seeds processed in parallel (values above 3 are treated as 3)
maxNavigationRetries integer 2 Retries after a failed page load (max 3)
language string auto Browser language hint (en, es, fr, ...); not a translation guarantee
proxyConfiguration object - Optional proxy override. The free ladder runs first; there is no paid default
redactSensitiveQueryParams boolean true Redact credential-like query values and fragment credentials from emitted URLs/HTML
rawEvidenceRetentionDays integer 30 Retention label for raw HTML evidence; 0 keeps metadata only
maxRawEvidenceBytes integer 100000 Size bound for raw HTML evidence
maxItemsPerSource integer 0 Cap on records from each individual source URL/query (0 = no cap)
searchDiscovery string relatedOnly relatedOnly (related questions only) / bestEffortIndex (third-party index) / off
maxRelatedQuestions integer 20 Related questions enqueued per question seed
searchResultsPerQuery integer 10 Maximum best-effort index results per query
maxAnswerPages integer 0 Explicit answer GraphQL page cap; 0 derives from maxAnswersPerQuestion
maxTopicFeedPages integer 3 Topic-feed GraphQL page cap when includeTopicFeed is on (minimum one page)
maxSpaceFeedBundles integer 4 Space feed bundles read from the SSR multifeed
includeCommentReplies boolean false Expand nested repliesConnection comment replies
includeQuoraPlusPreview boolean true Emit Quora+ preview answers with preview flags; when false, omit them
includeProfileStats boolean true Emit profile follower/following/answer/question/post/view/joined/credential fields
includeTopicStats boolean true Emit Topic follower count and most-viewed authors
includeSpaceStats boolean true Emit Space counters, description, icon and cover
includePostStats boolean true Emit Post counters, effective access and question-summary flag
includeAnswerStats boolean true Emit answer counters, dates, AI flag and effective access
includeTopicFeed boolean false Browser GraphQL Topic feed; opt-in and robots-sensitive
includeQuestionAudit boolean false Read the public question /log for created time, view count, merge count, and asker identity; robots-sensitive opt-in
includeProfileHistory boolean false Paginate the public profile answer/question tabs into bounded profile_activity rows; robots- and rate-sensitive opt-in
maxProfileHistoryPages integer 0 Cap per profile history list; 0 derives three pages (about 30 items per list)
maxRelationshipPages integer 3 Cap per public identity-list query after the relationship allowlist and privacy gates

Example inputs

Example: full detail for a question

{
  "questionUrls": [{ "url": "https://www.quora.com/What-is-the-best-way-to-learn-Python" }],
  "maxAnswersPerQuestion": 20,
  "includeComments": true,
  "maxCommentsPerAnswer": 10
}

Example: best-effort search discovery, compact nested output

{
  "searchQueries": ["machine learning career advice"],
  "searchDiscovery": "relatedOnly",
  "maxQuestions": 10,
  "outputFormat": "nested",
  "maxAnswersPerQuestion": 5
}

Example: a Space's content and follower count

{
  "spaceUrls": [{ "url": "https://www.quora.com/q/example-space" }],
  "resultTypes": ["space", "space_feed_item", "relationship_collection", "run_manifest"],
  "includeRelationshipCounts": true,
  "relationshipTypes": ["space_has_contributor"]
}

Example: incremental re-scrape of the same question

{
  "questionUrls": [{ "url": "https://www.quora.com/What-is-the-best-way-to-learn-Python" }],
  "onlyNewItems": true,
  "includeUnchanged": false,
  "stateStoreId": "python-question-watch"
}

Use cases

  • Content research — pull full question-answer-comment threads on a topic for analysis
  • Community monitoring — re-scrape the same questions on a schedule and keep only rows flagged new/changed
  • Knowledge graph building — use outputFormat: "edges" to load the question/answer/topic relationship graph into a graph database
  • Influencer and expert tracking — follow a profile's visible answers and its public follower/following/content statistics
  • Space analysis — collect a Quora Space's feed, metrics and contributor counts

FAQ

Do I need a Quora account? No. Direct public question, answer, profile, Topic, Space, and Post pages are read without login. The actor never asks for, stores, or emits cookies or session secrets.

Why did I get a status row instead of question/answer data? Quora showed a login wall, Cloudflare challenge, a removed page, or an unsupported redirect for that URL. The actor reports this honestly as a status row instead of guessing at data that was not there. A run with zero real rows also gets a no_records_emitted status row and a non-success status message.

Why do I sometimes get fewer answers than maxAnswersPerQuestion? The actor reads the server-rendered answers, filters out answers whose question is provably unrelated, then paginates the public GraphQL cursor up to your cap. If the question genuinely has fewer answers, the cursor stops; you get the answers that were observable and no answer_pagination_limited row, because the source was exhausted rather than capped. answer_pagination_limited appears only when maxAnswerPages/your cap stopped a non-exhausted source or Quora rate-limited a pagination request, and the page's known answerCount is not already satisfied; a non-rate GraphQL failure uses answer_pagination_unavailable. Neither case fabricates an answer.

How do I get question created time, view count, or the asker? Set includeQuestionAudit: true. The actor reads the public /<question>/log page (robots-sensitive, opt-in) and fills question_created_at, question_view_count, question_merge_count, and the question_author_* fields. Without it, those fields are omitted rather than guessed. A blocked /log leaves question_audit_state: "unavailable" and a status row.

How do I get more than the three visible profile history items? Set includeProfileHistory: true. The actor paginates the public answer/question tab connections into profile_activity rows, bounded by maxProfileHistoryPages and paced by requestDelay. This GraphQL path is robots- and rate-sensitive; a 400/403 leaves a profile_history_unavailable status row and no fabricated rows.

What is the difference between the four outputFormat values? normalized keeps every entity as its own row (the default). nested groups each question's answers (and each answer's comments) underneath it; rows without a matching parent stay at the top level with an orphan reason. flat is like normalized, except answer rows also get question context and comment rows get answer_url. edges returns the relationship rows between entities plus any status rows.

Can I get a Quora account's followers, question followers, answer upvoters, or Space roles? Yes, as explicit opt-ins. Request the relationship type in relationshipTypes, turn on the matching family flag (includeProfileEdges, includeQuestionFollowerEdges, includeAnswerUpvoterEdges, or includeSpaceRoleEdges), and set includeSensitiveRelationshipData: true for follower/upvoter/want-answer types. The actor then calls the public identity-list GraphQL operations, paginates up to maxRelationshipPages, and emits only identities whose profile/question/Space/Topic URLs it observed. It may also use visible DOM links as a fallback. These paths are robots- and rate-sensitive; failures produce relationship_identity_unavailable or relationship_identities_not_observed status rows. It never invents identities.

What does the incremental re-scrape (onlyNewItems) actually compare? It hashes each entity's semantic content and compares it to the previous run stored under stateStoreId, tagging each row new, changed, unchanged, or scope_mismatch (the previous run used different settings). Rows are only dropped when onlyNewItems is on and includeUnchanged is off. Status and manifest rows are never dropped by this setting. If any requested source did not finish, the new state is not saved and a state_store_uncommitted status row tells you so.

Why are some text/media fields missing even with includeMedia/includeHtml on? Those fields are only populated when Quora's public payload actually contains that content for the entity in question. The toggles request the data; they do not guarantee every entity has it.

Is search native Quora search? No. Quora's native /search?q= is login/Cloudflare-gated for logged-out clients and is disallowed by robots.txt. searchQueries uses related-question discovery by default and an optional third-party best-effort index; if no public results are discoverable it emits a search_unavailable status row.

What are the hard limitations? Native Quora search is not available cookielessly: /search?q= redirects and the public search GraphQL returns no connection. Quora+ smart_distribution answers may be preview/truncated; they are flagged answer_is_quora_plus and their observed completeness is reported, and no gated remainder is fabricated. Space all-time views/upvotes/comments are private (tested across ten diverse Spaces), Topic description and question count are absent, and question description is absent. Space allTimeFollowers is emitted as space_all_time_followers only when the payload carries it (not every Space does).

Question created/view/asker, full profile history, comment/reply pagination, and identity lists are technically available through public pages/GraphQL but are robots-sensitive and/or rate-sensitive opt-ins; they are off by default and not part of the daily prefill. Be aware that robots.txt for generic agents disallows / broadly, including /*_POST, /*/log, /*/followers, /*/following, and /*/comments; product/legal review decides whether to enable those opt-ins. Quora URLs are valid in a browser, but plain HTTP clients can receive a Cloudflare 403 on HEAD/GET; the actor fetches them with TLS impersonation.

Is this affiliated with Quora? No. This is an independent, third-party actor that reads public Quora pages; it is not affiliated with or endorsed by Quora, Inc. You are responsible for how you use the data.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build yJ2UZKFwANg4ScxlV. Documentation is regenerated from the default published build; private drafts are not included.