{
  "openapi": "3.0.1",
  "info": {
    "title": "Quora Search Scraper",
    "description": "Search Quora by keywords and extract questions, answers, author info, upvotes, and engagement metrics. Find relevant Q&A content across any topic.",
    "version": "1.0",
    "x-build-id": "rgv5RHt1GzZzxPTbV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/crawlerbros~quora-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-crawlerbros-quora-search-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/crawlerbros~quora-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-crawlerbros-quora-search-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/crawlerbros~quora-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-crawlerbros-quora-search-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "scrapeDepth": {
            "title": "Scrape Depth",
            "enum": [
              "overview",
              "detail"
            ],
            "type": "string",
            "description": "Overview extracts the initial visible entity without answer/comment/profile-activity expansion. Detail performs the configured bounded traversal; neither mode claims complete history.",
            "default": "detail"
          },
          "searchQueries": {
            "title": "Search Keywords",
            "type": "array",
            "description": "Keywords to search for on Quora. Attempts bounded discovery and preserves visible source/query evidence; availability, ordering, and relevance depend on the accessible result page and authorized access configuration.",
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "Search Queries (Compatibility Alias)",
            "type": "array",
            "description": "Compatibility alias for searchQueries. Canonical searchQueries takes precedence when both are supplied.",
            "items": {
              "type": "string"
            }
          },
          "searchKeywords": {
            "title": "Search Keywords (Compatibility Alias)",
            "type": "array",
            "description": "Compatibility alias for searchQueries. Canonical searchQueries takes precedence, then queries, when multiple names are supplied.",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "Search Query (Compatibility Alias)",
            "type": "string",
            "description": "Compatibility alias for searchQueries for a single query. Canonical searchQueries, queries, and searchKeywords take precedence when supplied."
          },
          "directUrls": {
            "title": "Direct Quora URLs",
            "type": "array",
            "description": "Direct Quora URLs to scrape (questions, profiles, topics, spaces). Example: https://www.quora.com/What-is-Python",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (API-compatible)",
            "type": "array",
            "description": "Alternative to directUrls. Accepts Quora URL objects such as {\"url\":\"https://www.quora.com/...\"}.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "usernames": {
            "title": "Profile Usernames",
            "type": "array",
            "description": "Quora profile usernames/slugs (with or without a leading @ or trailing slash). Normalized to https://www.quora.com/profile/{slug} and merged into the direct-URL queue; also seeds author-discovery and post-discovery when relevant.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "targets": {
            "title": "Mixed Targets (Compatibility Alias)",
            "type": "array",
            "description": "Compatibility alias for a mixed list of Quora URLs and search keywords. URL-shaped values join directUrls; other values join searchQueries. Canonical fields and targets are merged; canonical dedupe behavior is applied downstream according to dedupeMode.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "resultTypes": {
            "title": "Result Types",
            "type": "array",
            "description": "Restrict output to selected entity types. search_result rows are visible Quora discovery cards, not fully scraped question entities.",
            "items": {
              "type": "string",
              "enum": [
                "question",
                "answer",
                "profile",
                "profile_activity",
                "topic",
                "space",
                "post",
                "comment",
                "search_result",
                "entity_edge",
                "author",
                "topic_question",
                "topic_post",
                "topic_related",
                "post_discovery"
              ]
            },
            "default": [
              "question",
              "answer",
              "profile",
              "profile_activity",
              "topic",
              "space",
              "post",
              "search_result"
            ]
          },
          "contentTypes": {
            "title": "Content Types (Compatibility Alias)",
            "type": "array",
            "description": "Compatibility alias for resultTypes. Plural values such as questions, answers, profiles, topics, spaces, and posts are normalized to canonical entity types.",
            "items": {
              "type": "string"
            }
          },
          "scrapeType": {
            "title": "Scrape Type (Compatibility Alias)",
            "enum": [
              "search",
              "question",
              "answer",
              "profile",
              "author",
              "topic",
              "space",
              "post"
            ],
            "type": "string",
            "description": "Compatibility alias for resultTypes. It is used only when resultTypes and contentTypes are absent; search means the default unified entity set."
          },
          "onlyUnanswered": {
            "title": "Only Explicitly Unanswered Questions",
            "type": "boolean",
            "description": "Retain question/search rows only when an explicit typed answer count is exactly zero. Unknown or ambiguous counts are excluded; status and run-manifest rows remain. This does not prove complete answer-history coverage.",
            "default": false
          },
          "excludePromoted": {
            "title": "Exclude Explicitly Promoted",
            "type": "boolean",
            "description": "Exclude only cards with explicit visible or structured sponsored/promoted/ad evidence; unknown cards remain.",
            "default": false
          },
          "includePromoted": {
            "title": "Include Explicitly Promoted",
            "type": "boolean",
            "description": "Include cards with explicit promotion evidence. Set false to exclude them; explicit excludePromoted takes precedence when both are supplied.",
            "default": true
          },
          "includePromotionEvidence": {
            "title": "Include Promotion Evidence",
            "type": "boolean",
            "description": "Retain promotion state and explicit label/source fields on native search-result rows.",
            "default": true
          },
          "includeUncertain": {
            "title": "Include Uncertain Promotion State",
            "type": "boolean",
            "description": "Mark accessible cards without explicit promotion evidence as unknown; this is not a negative classification.",
            "default": true
          },
          "maxResults": {
            "title": "Maximum Results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of results per search query or answers per question URL.",
            "default": 50
          },
          "maxResultsPerQuery": {
            "title": "Maximum Results Per Query (Compatibility Alias)",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Compatibility alias for maxResults. The canonical maxResults takes precedence.",
            "default": 50
          },
          "searchType": {
            "title": "Native Search Content Type",
            "enum": [
              "all",
              "all types",
              "question",
              "Question",
              "answer",
              "Answer",
              "profile",
              "Profile",
              "Author",
              "topic",
              "Topic",
              "space",
              "Space",
              "post",
              "Post"
            ],
            "type": "string",
            "description": "Fail-closed filter for visible native Quora search cards: all, question, answer, profile, topic, space, or post.",
            "default": "all"
          },
          "searchTimeFilter": {
            "title": "Native Search Time Filter",
            "enum": [
              "all_time",
              "past_hour",
              "past_day",
              "past_week",
              "past_month",
              "past_year"
            ],
            "type": "string",
            "description": "Visible-timestamp filter. Non-all filters exclude cards without a machine-readable timestamp; no date is inferred.",
            "default": "all_time"
          },
          "timeFilter": {
            "title": "Time Filter (Compatibility Alias)",
            "type": "string",
            "description": "Compatibility alias for searchTimeFilter. Values such as 'Past Week' normalize to past_week; the canonical searchTimeFilter takes precedence."
          },
          "dateFrom": {
            "title": "Date From",
            "type": "string",
            "description": "Optional inclusive ISO date/datetime lower bound applied locally to native search cards with machine-readable timestamps."
          },
          "dateTo": {
            "title": "Date To",
            "type": "string",
            "description": "Optional inclusive ISO date/datetime upper bound applied locally to native search cards with machine-readable timestamps."
          },
          "customDateFrom": {
            "title": "Custom Date From (Alias)",
            "type": "string",
            "description": "Backward-compatible alias for dateFrom. If both are supplied, dateFrom takes precedence."
          },
          "customDateTo": {
            "title": "Custom Date To (Alias)",
            "type": "string",
            "description": "Backward-compatible alias for dateTo. If both are supplied, dateTo takes precedence."
          },
          "sortOrder": {
            "title": "Native Search Sort Order",
            "enum": [
              "relevance",
              "newest",
              "most_viewed",
              "most_answered"
            ],
            "type": "string",
            "description": "Stable DOM relevance order, newest by visible machine timestamp, or most viewed by visible view count. Missing evidence retains original order.",
            "default": "relevance"
          },
          "sortBy": {
            "title": "Sort By (Compatibility Alias)",
            "type": "string",
            "description": "Compatibility alias for sortOrder. Supported compatibility values include relevance, recent, most_recent, and most_viewed; unsupported values fail validation rather than being guessed."
          },
          "dedupeMode": {
            "title": "Deduplication Mode",
            "enum": [
              "canonical",
              "none"
            ],
            "type": "string",
            "description": "canonical suppresses overlapping entity rows by stable ID or normalized canonical URL (default). none preserves every observed non-status row; duplicate_records_suppressed in the manifest remains 0 because no suppression is performed.",
            "default": "canonical"
          },
          "globalOrder": {
            "title": "Global Output Order",
            "enum": [
              "observed",
              "newest",
              "views_desc",
              "answers_desc",
              "followers_desc",
              "reactions_desc",
              "comments_desc"
            ],
            "type": "string",
            "description": "Optional deterministic order across comparable unified parent rows. Missing typed evidence remains in stable fallback order.",
            "default": "observed"
          },
          "outputFields": {
            "title": "Output Fields (Optional)",
            "maxItems": 3000,
            "type": "array",
            "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.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "includeFieldEvidence": {
            "title": "Include Field Evidence",
            "type": "boolean",
            "description": "Retain field_sources and fields_present after projection; disabling removes only these evidence maps, not semantic or protected access fields.",
            "default": true
          },
          "language": {
            "title": "Language / Locale",
            "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"
            ],
            "type": "string",
            "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.",
            "default": "auto"
          },
          "maxItems": {
            "title": "Maximum Total Items",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Maximum total records across all inputs. Use 0 for no total cap.",
            "default": 0
          },
          "maxItemsPerSource": {
            "title": "Maximum Items Per Source",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum semantic records emitted from each individual query or direct URL. Status/access rows are preserved; 0 means unlimited.",
            "default": 0
          },
          "maxItemsPerQuery": {
            "title": "Maximum Items Per Query (Compatibility Alias)",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Compatibility alias for maxItemsPerSource. The canonical maxItemsPerSource takes precedence.",
            "default": 0
          },
          "requestDelay": {
            "title": "Delay Between Requests",
            "minimum": 0,
            "maximum": 30,
            "type": "number",
            "description": "Seconds to wait between search/page navigations. Set to 0 for no added delay; this controls pacing but cannot guarantee bypassing Quora access controls.",
            "default": 2
          },
          "maxConcurrency": {
            "title": "Maximum Concurrent Discovery Queries",
            "minimum": 1,
            "maximum": 3,
            "type": "integer",
            "description": "Maximum independent indexed discovery queries processed concurrently in deterministic batches. Page extraction remains sequential for shared deduplication and incremental state correctness.",
            "default": 1
          },
          "maxNavigationRetries": {
            "title": "Maximum Navigation Retries",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Bounded retries after transient page-navigation failures. HTTP access gates, 404/410 responses, and rendered challenge pages are not retried or relabeled.",
            "default": 2
          },
          "maxAnswersPerQuestion": {
            "title": "Maximum Answers per Question",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Independent answer limit for each question URL.",
            "default": 50
          },
          "minAnswerUpvotes": {
            "title": "Minimum Answer Upvotes",
            "minimum": 0,
            "maximum": 2000000000,
            "type": "integer",
            "description": "When positive, retain only answer records with explicit machine-readable upvote evidence at or above this threshold. Missing or ambiguous upvotes are never treated as zero and are reported in filter diagnostics.",
            "default": 0
          },
          "minUpvotes": {
            "title": "Minimum Upvotes (Compatibility Alias)",
            "minimum": 0,
            "maximum": 2000000000,
            "type": "integer",
            "description": "Compatibility alias for minAnswerUpvotes. The canonical minAnswerUpvotes value takes precedence when both are supplied.",
            "default": 0
          },
          "answerSortOrder": {
            "title": "Answer Sort Order",
            "enum": [
              "observed",
              "upvotes_desc",
              "newest",
              "views_desc"
            ],
            "type": "string",
            "description": "Order retained answer records by rendered order or explicit typed upvotes, machine timestamps, or view counts. Rows missing the selected metric retain stable fallback order and are counted.",
            "default": "observed"
          },
          "sortAnswersBy": {
            "title": "Sort Answers By (Compatibility Alias)",
            "enum": [
              "relevance",
              "recency",
              "upvotes"
            ],
            "type": "string",
            "description": "Compatibility alias mapped to answerSortOrder: relevance=observed, recency=newest, upvotes=upvotes_desc. The canonical answerSortOrder takes precedence when both are supplied.",
            "default": "relevance"
          },
          "filterAiAnswers": {
            "title": "Filter Explicit AI Answers",
            "enum": [
              "include",
              "exclude",
              "only"
            ],
            "type": "string",
            "description": "Include all answers, exclude only explicitly AI-labeled answers, or retain only explicitly AI-labeled answers. Unknown/missing AI labels are never classified and are counted in filter diagnostics. Legacy boolean true/false values are accepted by the API normalizer as exclude/include.",
            "default": "include"
          },
          "topCommentsOnly": {
            "title": "Top-Labeled Comments Only",
            "type": "boolean",
            "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.",
            "default": false
          },
          "commentSortOrder": {
            "title": "Comment Sort Order",
            "enum": [
              "observed",
              "upvotes_desc",
              "reactions_desc",
              "replies_desc",
              "newest"
            ],
            "type": "string",
            "description": "Order comments by observed order or an explicitly typed metric/timestamp. Unknown selected metrics remain in stable fallback order and are counted.",
            "default": "observed"
          },
          "maxScrollAttempts": {
            "title": "Maximum Scroll Attempts",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Bound the number of browser pagination/scroll attempts per question page. This is capped at 20 to control cost and runaway pages.",
            "default": 20
          },
          "maxLoadMoreAttempts": {
            "title": "Maximum Search Load-more Attempts",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Bound clicks on exact visible search continuation controls independently from scrolling. No click is attempted by default.",
            "default": 0
          },
          "includeAnswers": {
            "title": "Include Answers",
            "type": "boolean",
            "description": "Expand and emit answer records for question pages.",
            "default": true
          },
          "includeMedia": {
            "title": "Include Media and Links",
            "type": "boolean",
            "description": "Extract image/video URLs from visible question, answer, and post content. External links are controlled independently by includeOutboundLinks.",
            "default": true
          },
          "includeOutboundLinks": {
            "title": "Include External Links",
            "type": "boolean",
            "description": "Independently retain visible external anchors from question, answer, and post content; when omitted, follows includeMedia for backward compatibility.",
            "default": true
          },
          "includeAnswerHtml": {
            "title": "Include Answer HTML",
            "type": "boolean",
            "description": "Include the rendered HTML of answer content. Disable to reduce dataset size.",
            "default": true
          },
          "includeHtmlContent": {
            "title": "Include HTML Content (Compatibility Alias)",
            "type": "boolean",
            "description": "Compatibility alias for includeAnswerHtml. It controls bounded answer HTML only; canonical includeAnswerHtml takes precedence.",
            "default": true
          },
          "includeRelatedQuestions": {
            "title": "Include Related Questions",
            "type": "boolean",
            "description": "Retain explicitly labeled related-question links from question pages. Disable to reduce question-context payload; this does not affect answer extraction.",
            "default": true
          },
          "maxRelatedQuestions": {
            "title": "Maximum Related Questions",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Bound the emitted related-question collection on question rows. Zero preserves all observed related links; positive values emit related_questions_scraped and related_questions_limit_reached diagnostics.",
            "default": 0
          },
          "includeQuestionTopics": {
            "title": "Include Question Topics",
            "type": "boolean",
            "description": "Retain explicit topic links associated with question rows. Disable to reduce question-context payload; this does not affect answer or post traversal.",
            "default": true
          },
          "maxQuestionTopics": {
            "title": "Maximum Question Topics",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Bound retained explicit topic names/URLs on question rows. Zero preserves all observed topic links; positive values emit question_topics_scraped and question_topics_limit_reached diagnostics.",
            "default": 0
          },
          "topicFilter": {
            "title": "Explicit Topic Filter",
            "maxItems": 50,
            "type": "array",
            "description": "For question and search-result rows, retain only rows with an exact explicitly observed topic label or topic URL matching one of these terms. Unknown topic evidence is excluded and counted; this is local payload filtering, not a server-side Quora filter.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "includeTopicQuestions": {
            "title": "Include Topic Questions",
            "type": "boolean",
            "description": "Emit visible topic question links as topic_question rows.",
            "default": true
          },
          "maxTopicQuestions": {
            "title": "Maximum Topic Questions",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Bound topic_question rows emitted per topic page. Zero means unlimited.",
            "default": 50
          },
          "includeTopicPosts": {
            "title": "Include Topic Posts",
            "type": "boolean",
            "description": "Emit explicitly linked standalone Posts from a topic page as topic_post rows.",
            "default": false
          },
          "maxTopicPosts": {
            "title": "Maximum Topic Posts",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Bound topic_post rows emitted per topic page. Zero means unlimited.",
            "default": 50
          },
          "includeRelatedTopics": {
            "title": "Include Related Topics",
            "type": "boolean",
            "description": "Emit visibly linked related topics as topic_related rows.",
            "default": true
          },
          "maxRelatedTopics": {
            "title": "Maximum Related Topics",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Bound topic_related rows emitted per topic page. Zero means unlimited.",
            "default": 50
          },
          "includeAnswerPreview": {
            "title": "Include Answer Preview",
            "type": "boolean",
            "description": "Opt in to bounded, already-rendered answer-preview evidence on question/search_result cards, without navigating to the full answer page.",
            "default": false
          },
          "maxAnswerPreviews": {
            "title": "Maximum Answer Previews",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Bound answer_preview_* entries retained per question/search_result card.",
            "default": 3
          },
          "minAnswerPreviewUpvotes": {
            "title": "Minimum Answer Preview Upvotes",
            "minimum": 0,
            "maximum": 2000000000,
            "type": "integer",
            "description": "Minimum typed upvote threshold an answer preview must meet to be retained. Fails closed: previews with unknown upvotes are excluded once this is positive.",
            "default": 0
          },
          "includeSpaceSettings": {
            "title": "Include Explicit Space Settings",
            "type": "boolean",
            "description": "Opt in to explicitly labeled Space settings/content-permission evidence for Space rows; missing settings remain unknown and admin-only queues are not scraped.",
            "default": false
          },
          "includeQuestionDetails": {
            "title": "Include Question Details",
            "type": "boolean",
            "description": "Retain rendered question description/body text on question rows. Disable to reduce payload while preserving question identity, metrics, answer/post traversal, and status envelopes.",
            "default": true
          },
          "includeQuestionHtml": {
            "title": "Include Question HTML",
            "type": "boolean",
            "description": "Retain bounded rendered HTML from the question scope after nested answer regions are removed.",
            "default": false
          },
          "maxQuestionHtmlBytes": {
            "title": "Maximum Question HTML Bytes",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Optional UTF-8 byte ceiling for question HTML; positive values emit question_html_bytes and question_html_truncated.",
            "default": 0
          },
          "maxAnswerHtmlBytes": {
            "title": "Maximum Answer HTML Bytes",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Optional UTF-8 byte ceiling for rendered answer HTML. Zero preserves uncapped backward-compatible HTML; positive values emit answer_html_bytes and answer_html_truncated.",
            "default": 0
          },
          "maxPostHtmlBytes": {
            "title": "Maximum Standalone Post HTML Bytes",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Optional UTF-8 byte ceiling for rendered standalone Post HTML in unified Post rows. Zero disables HTML retention; positive values emit post_html_bytes and post_html_truncated.",
            "default": 0
          },
          "includePostHtml": {
            "title": "Include Post HTML (Legacy Alias)",
            "type": "boolean",
            "description": "Legacy alias: true sets a 100000-byte maxPostHtmlBytes ceiling unless maxPostHtmlBytes is explicitly set.",
            "default": false
          },
          "maxPostsPerSource": {
            "title": "Maximum Discovered Posts Per Source",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Bound /post/... links discovered (then fully scraped as post rows when resultTypes includes post) from one profile/Space/search source page. Distinct from maxItemsPerSource, which caps already-scraped rows rather than discovery candidates. 0 means unlimited discovery evidence; full-page opens are internally bounded to control cost.",
            "default": 0
          },
          "includeComments": {
            "title": "Include Visible Comments",
            "type": "boolean",
            "description": "Extract only comments rendered in visible answer comment-content nodes; hidden comments are not inferred.",
            "default": false
          },
          "includePostComments": {
            "title": "Include Top-Labeled Post Comments",
            "type": "boolean",
            "description": "For standalone post URLs, retain only comments inside an explicitly labeled Top/Most helpful/Popular collection as top_comments. Ordinary comments, votes, and position never qualify.",
            "default": false
          },
          "maxCommentsPerPost": {
            "title": "Maximum Post Comments Observed",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Bound the visible post-comment nodes inspected when includePostComments is enabled; this is not a complete comment-history guarantee.",
            "default": 50
          },
          "includeEngagementBreakdown": {
            "title": "Include Engagement Breakdown",
            "type": "boolean",
            "description": "Opt in to explicitly labeled answer-scoped upvote/reaction items in nested answer rows. Comment controls and icons are never decomposed.",
            "default": false
          },
          "includeReactionBreakdown": {
            "title": "Include Reaction Breakdown (Legacy Alias)",
            "type": "boolean",
            "description": "Legacy alias for includeEngagementBreakdown. The canonical includeEngagementBreakdown takes precedence when both are supplied.",
            "default": false
          },
          "includeRelatedContent": {
            "title": "Include Related Content",
            "type": "boolean",
            "description": "Opt in to an explicit 'related/attached content' region scoped to one answer or post card.",
            "default": false
          },
          "maxRelatedContent": {
            "title": "Maximum Related Content Items",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Bound related_content entries retained per answer/post.",
            "default": 20
          },
          "includePostAuthorContext": {
            "title": "Include Post Author Context",
            "type": "boolean",
            "description": "Opt in to explicitly labeled About, Education, and Joined/Member since values inside the owning standalone-post author scope; no profile navigation or inference is performed.",
            "default": false
          },
          "maxPostAuthorContextItems": {
            "title": "Maximum Post Author Spaces",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum explicitly labeled active Space links retained per standalone-post author when includePostAuthorContext is enabled; zero emits none.",
            "default": 10
          },
          "maxCommentsPerAnswer": {
            "title": "Maximum Comments per Answer",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum visible comments extracted from each answer when comments are enabled.",
            "default": 50
          },
          "maxReplyExpandAttempts": {
            "title": "Maximum Reply Expansions",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Bound clicks on clearly labeled visible reply/comment expansion controls per question page.",
            "default": 0
          },
          "maxCommentDepth": {
            "title": "Maximum Comment Depth",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum explicit comment nesting depth retained from answer pages. Root comments are depth 0; deeper comments are omitted and marked with comment_depth_limit_reached. The maxDepth alias is accepted for compatibility.",
            "default": 20
          },
          "includeProfileActivity": {
            "title": "Include Profile Activity",
            "type": "boolean",
            "description": "Extract public activity links visibly rendered on profile pages.",
            "default": false
          },
          "includeProfileSensitiveFields": {
            "title": "Include Profile Sensitive Fields",
            "type": "boolean",
            "description": "When false, strip location, employment, education, and profile_joined_date from profile/author rows.",
            "default": true
          },
          "includeSensitiveProfileFields": {
            "title": "Include Profile Sensitive Fields (Deprecated Alias)",
            "type": "boolean",
            "description": "Deprecated alias for includeProfileSensitiveFields. The canonical field takes precedence whenever both are supplied.",
            "default": true
          },
          "includeSocialLinks": {
            "title": "Include Social Links",
            "type": "boolean",
            "description": "When false, omit social_links/website_url from profile/author rows.",
            "default": true
          },
          "activityTab": {
            "title": "Profile Activity Tab",
            "enum": [
              "all",
              "answers",
              "questions",
              "posts"
            ],
            "type": "string",
            "description": "Click the given profile-activity tab before extracting profile_activity rows.",
            "default": "all"
          },
          "includeActivityText": {
            "title": "Include Activity Text",
            "type": "boolean",
            "description": "Include bounded visible activity_text on profile_activity rows.",
            "default": true
          },
          "includeActivityHtml": {
            "title": "Include Activity HTML",
            "type": "boolean",
            "description": "Include bounded, redacted rendered activity_html (up to 30000 bytes) on profile_activity rows.",
            "default": false
          },
          "maxItemsPerTab": {
            "title": "Maximum Items Per Activity Tab",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Independent cap on profile_activity rows per tab (answers/questions/posts), in addition to maxProfileActivityItems. Zero means unlimited.",
            "default": 0
          },
          "maxDetailItems": {
            "title": "Maximum Profile Activity Detail Expansions",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "When scrapeDepth=detail, bounded number of profile_activity items opened individually for detail_text/detail_title extraction. Zero disables detail expansion.",
            "default": 0
          },
          "maxAuthors": {
            "title": "Maximum Discovered Authors",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum unique discovered author rows to emit, independent of maxItems. Requires resultTypes to include author.",
            "default": 1000
          },
          "maxSourcePages": {
            "title": "Maximum Author-Discovery Source Pages",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum author-discovery source pages (search/question/answer/topic/Space/post/profile) whose already-scraped rows are scanned for author evidence.",
            "default": 100
          },
          "maxEvidencePerAuthor": {
            "title": "Maximum Evidence Per Author",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum evidence_urls/evidence_question_urls/evidence_answer_urls/evidence_answer_previews entries retained per discovered author.",
            "default": 10
          },
          "includeProfileSnapshot": {
            "title": "Include Profile Snapshot on Author Rows",
            "type": "boolean",
            "description": "When true and resultTypes includes author, open each discovered author's profile and merge a full profile snapshot onto the author row.",
            "default": false
          },
          "includeEntityGraph": {
            "title": "Include Entity Graph",
            "type": "boolean",
            "description": "Emit deterministic entity_edge relationship rows when explicit endpoint URLs or IDs are present. This is opt-in and does not invent relationships.",
            "default": false
          },
          "includeGraphEdges": {
            "title": "Include Graph Edges (Compatibility Alias)",
            "type": "boolean",
            "description": "Compatibility alias for includeEntityGraph. The canonical includeEntityGraph takes precedence when both are supplied.",
            "default": false
          },
          "maxGraphEdges": {
            "title": "Maximum Graph Edges",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Independent cap for entity_edge rows. Graph rows may be added in addition to maxItems.",
            "default": 5000
          },
          "profileActivityTypes": {
            "title": "Profile Activity Types",
            "type": "array",
            "description": "Activity categories to retain: answer, question, or post.",
            "items": {
              "type": "string",
              "enum": [
                "answer",
                "question",
                "post"
              ]
            },
            "default": [
              "answer",
              "question",
              "post"
            ]
          },
          "maxProfileActivityItems": {
            "title": "Maximum Profile Activity Items",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum visibly rendered public activity records per profile.",
            "default": 50
          },
          "onlyNewItems": {
            "title": "Only New or Changed Items",
            "type": "boolean",
            "description": "Compare stable IDs and content hashes against a persistent state store and suppress unchanged rows.",
            "default": false
          },
          "includeUnchanged": {
            "title": "Include Unchanged Items",
            "type": "boolean",
            "description": "When onlyNewItems is set, also retain change_type=unchanged rows instead of dropping them.",
            "default": true
          },
          "stateStoreId": {
            "title": "Incremental State Store ID",
            "type": "string",
            "description": "Name of the Key-Value Store used to persist onlyNewItems state across runs (created automatically on first use if it doesn't exist). Reuse the same name across runs to keep incremental state. Required when onlyNewItems is enabled."
          },
          "cookies": {
            "title": "Optional Quora Session Cookies",
            "type": "array",
            "description": "Optional authenticated browser cookies. Use only for content you are authorized to view; cookies are stored as secret input and are never logged.",
            "items": {
              "type": "object"
            }
          },
          "cookieString": {
            "title": "Optional Cookie Header String",
            "type": "string",
            "description": "Optional browser-exported name=value; name2=value2 header. Parsed locally into authorized session cookies; the raw header is never emitted or logged."
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Proxy settings. RESIDENTIAL Apify Proxy is forced by default (and whenever no explicit apifyProxyGroups is chosen) because Quora's Cloudflare/anti-bot layer blocks the plain AUTO/datacenter pool on most page types; supply an explicit apifyProxyGroups or a custom proxyUrl to override.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}