{
  "openapi": "3.0.1",
  "info": {
    "title": "Google Search Results Scraper: Knowledge Panel & Answer Box",
    "description": "Scrape Google Search results with Knowledge Panels, Answer Boxes, featured snippets, organic results, ads, URLs, titles, and descriptions. Extract structured SERP data for SEO research, competitor analysis, keyword tracking, and search intelligence.",
    "version": "0.4",
    "x-build-id": "Dsq9AjDooX3WAShgt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~google-search-results-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-google-search-results-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/api-empire~google-search-results-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-google-search-results-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/api-empire~google-search-results-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-google-search-results-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",
        "required": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "🔎 Search terms or Google Search URLs",
            "type": "string",
            "description": "Use regular search words or enter Google Search URLs. You can also apply advanced Google search techniques, such as AI site:twitter.com or javascript OR python. You can also define selected search filters as separate fields below (in the Advanced search filters section). Just ensure that your queries do not exceed 32 words to comply with Google Search limits."
          },
          "resultsPerPage": {
            "title": "📊 Organic results requested per page (num)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Specifies the desired number of results per page that is passed to Google Search as the num parameter. However, Google applies its own internal filtering and quality checks, so the actual number of returned results may differ from this value, especially on the first page. To potentially retrieve more results closer to your desired count, consider enabling the \"Unfiltered results\" option from the \"Additional settings\" section below, which includes results that Google normally filters out.",
            "default": 100
          },
          "maxPagesPerQuery": {
            "title": "📄 Pages to walk per search term",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of pages to scrape per search query. Each page contains approximately 10 results.",
            "default": 1
          },
          "aiMode": {
            "title": "⏩ Add-on: Google AI Mode ($)",
            "enum": [
              "aiModeOff",
              "aiModeWithSearchResults",
              "aiModeOnly"
            ],
            "type": "string",
            "description": "Enable scraping of Google's AI Mode to perform Answer Engine Optimization (AEO), GEO targeting, track brand visibility, and analyze competitors.",
            "default": "aiModeOff"
          },
          "serpApiKey": {
            "title": "🔑 SerpApi key (AI Overview add-on only)",
            "type": "string",
            "description": "Optional. When set and AI Mode is not off, fetches AI Overview via SerpApi."
          },
          "perplexitySearch": {
            "title": "⏩ Add-on: Perplexity AI search ($)",
            "type": "object",
            "description": "Enable Perplexity to retrieve AI-generated answers and citations using the Sonar model. This feature is designed for cross-platform analysis, allowing you to directly compare Google AI Mode and ChatGPT results against Perplexity's perspective to identify narrative differences and coverage gaps.\n\nNote: An additional fee applies per result when this feature is active. Please refer to the Pricing tab for your specific rate.",
            "properties": {
              "enablePerplexity": {
                "title": "✨ Enable Perplexity AI",
                "type": "boolean",
                "description": "Fetch AI answer using Perplexity Sonar model.",
                "default": false
              },
              "searchRecency": {
                "title": "🔍 Search Recency",
                "type": "string",
                "description": "Specify the time range for Perplexity search results.",
                "editor": "select",
                "nullable": true,
                "enum": [
                  "",
                  "day",
                  "week",
                  "month",
                  "year"
                ],
                "enumTitles": [
                  "None",
                  "day",
                  "week",
                  "month",
                  "year"
                ]
              },
              "returnImages": {
                "title": "🖼️ Include images in Perplexity AI answers",
                "type": "boolean",
                "description": "Include images in Perplexity response.",
                "default": false
              },
              "returnRelatedQuestions": {
                "title": "❓ Include related questions in Perplexity AI answers",
                "type": "boolean",
                "description": "Include related questions in Perplexity response.",
                "default": false
              }
            },
            "default": {
              "enablePerplexity": false,
              "searchRecency": "",
              "returnImages": false,
              "returnRelatedQuestions": false
            }
          },
          "chatGptSearch": {
            "title": "⏩ Add-on: ChatGPT Search ($)",
            "type": "object",
            "description": "Enable ChatGPT to retrieve AI-generated answers powered by OpenAI's search model. This feature is designed for cross-platform analysis, allowing you to directly compare Google AI Mode and Perplexity results against ChatGPT's perspective to identify narrative differences, coverage gaps, and search engine biases.\n\nThe output includes query fan-out under queryFanOut, showing additional search queries the model generated to answer your question.\n\nNote: An additional fee applies per result when this feature is active. Please refer to the Pricing tab for your specific rate.",
            "properties": {
              "enableChatGpt": {
                "title": "💬 Enable ChatGPT search",
                "type": "boolean",
                "description": "Fetch AI answer using OpenAI search model.",
                "default": false
              }
            },
            "default": {
              "enableChatGpt": false
            }
          },
          "maximumLeadsEnrichmentRecords": {
            "title": "⏩ Add-on: Extract Business Leads Information - Maximum leads per domain ($)",
            "minimum": 0,
            "type": "integer",
            "description": "Enrich your results with detailed contact and company information, including employee names, job titles, emails, phone numbers, LinkedIn profiles, and key company data like industry and number of employees.\n\nThis setting allows you to set the maximum number of leads records you want to scrape per each domain found. By default, it's set to 0 which means that no leads information will be scraped.\n\n⚠️ Note that some of the fields contain personal data. GDPR protects personal data in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your use case is legitimate, please consult an attorney.\n\nTo keep your leads relevant, we automatically filter out large chains and online platforms (e.g., social media, retail giants, food delivery services).\n\n⚠️ Cost warning: This is a multiplier. Requesting 10 leads for 1,000 domains will attempt to find 10,000 total leads. You are only charged for leads successfully found.",
            "default": 0
          },
          "leadsEnrichmentDepartments": {
            "title": "🏢 Leads departments selection",
            "type": "array",
            "description": "You can use this filter to include only specific departments (like Sales, Marketing, or C-Suite). Note: This will only work if the ⏩ Add-on: Extract business leads information - Maximum leads per domain (maximumLeadsEnrichmentRecords) option is enabled. Please note that some job titles are sometimes miscategorized in the wrong departments.",
            "items": {
              "type": "string",
              "enum": [
                "c-suite",
                "product",
                "engineering-technical",
                "design",
                "education",
                "finance",
                "human-resources",
                "information-technology",
                "legal",
                "marketing",
                "medical-health",
                "operations",
                "sales",
                "consulting"
              ],
              "enumTitles": [
                "C-Suite",
                "Product",
                "Engineering & Technical",
                "Design",
                "Education",
                "Finance",
                "Human Resources",
                "Information Technology",
                "Legal",
                "Marketing",
                "Medical & Health",
                "Operations",
                "Sales",
                "Consulting"
              ]
            },
            "default": []
          },
          "focusOnPaidAds": {
            "title": "⏩ Add-on: Enable paid results (ads) extraction ($)",
            "type": "boolean",
            "description": "Enable extraction of paid results (Google Ads). This feature improves ad detection accuracy by using an ad-specialized proxy to perform up to 3 retries for each search query. Best used for queries likely to show ads. An extra cost per search page applies when enabled, regardless of ads found. Pricing depends on your Apify subscription plan.",
            "default": false
          },
          "countryCode": {
            "title": "🌍 Search country (gl)",
            "enum": [
              "af",
              "al",
              "dz",
              "as",
              "ad",
              "ao",
              "ai",
              "aq",
              "ag",
              "ar",
              "am",
              "aw",
              "au",
              "at",
              "az",
              "bs",
              "bh",
              "bd",
              "bb",
              "by",
              "be",
              "bz",
              "bj",
              "bm",
              "bt",
              "bo",
              "ba",
              "bw",
              "bv",
              "br",
              "io",
              "bn",
              "bg",
              "bf",
              "bi",
              "kh",
              "cm",
              "ca",
              "cv",
              "ky",
              "cf",
              "td",
              "cl",
              "cn",
              "cx",
              "cc",
              "co",
              "km",
              "cg",
              "cd",
              "ck",
              "cr",
              "ci",
              "hr",
              "cu",
              "cy",
              "cz",
              "dk",
              "dj",
              "dm",
              "do",
              "ec",
              "eg",
              "sv",
              "gq",
              "er",
              "ee",
              "et",
              "fk",
              "fo",
              "fj",
              "fi",
              "fr",
              "gf",
              "pf",
              "tf",
              "ga",
              "gm",
              "ge",
              "de",
              "gh",
              "gi",
              "gr",
              "gl",
              "gd",
              "gp",
              "gu",
              "gt",
              "gn",
              "gw",
              "gy",
              "ht",
              "hm",
              "va",
              "hn",
              "hk",
              "hu",
              "is",
              "in",
              "id",
              "ir",
              "iq",
              "ie",
              "il",
              "it",
              "jm",
              "jp",
              "jo",
              "kz",
              "ke",
              "ki",
              "kp",
              "kr",
              "kw",
              "kg",
              "la",
              "lv",
              "lb",
              "ls",
              "lr",
              "ly",
              "li",
              "lt",
              "lu",
              "mo",
              "mk",
              "mg",
              "mw",
              "my",
              "mv",
              "ml",
              "mt",
              "mh",
              "mq",
              "mr",
              "mu",
              "yt",
              "mx",
              "fm",
              "md",
              "mc",
              "mn",
              "ms",
              "ma",
              "mz",
              "mm",
              "na",
              "nr",
              "np",
              "nl",
              "an",
              "nc",
              "nz",
              "ni",
              "ne",
              "ng",
              "nu",
              "nf",
              "mp",
              "no",
              "om",
              "pk",
              "pw",
              "ps",
              "pa",
              "pg",
              "py",
              "pe",
              "ph",
              "pn",
              "pl",
              "pt",
              "pr",
              "qa",
              "re",
              "ro",
              "ru",
              "rw",
              "sh",
              "kn",
              "lc",
              "pm",
              "vc",
              "ws",
              "sm",
              "st",
              "sa",
              "sn",
              "cs",
              "sc",
              "sl",
              "sg",
              "sk",
              "si",
              "sb",
              "so",
              "za",
              "gs",
              "es",
              "lk",
              "sd",
              "sr",
              "sj",
              "sz",
              "se",
              "ch",
              "sy",
              "tw",
              "tj",
              "tz",
              "th",
              "tl",
              "tg",
              "tk",
              "to",
              "tt",
              "tn",
              "tr",
              "tm",
              "tc",
              "tv",
              "ug",
              "ua",
              "ae",
              "gb",
              "us",
              "um",
              "uy",
              "uz",
              "vu",
              "ve",
              "vn",
              "vg",
              "vi",
              "wf",
              "eh",
              "ye",
              "zm",
              "zw"
            ],
            "type": "string",
            "description": "Specifies the country used for the search and the Google Search domain (e.g. google.es for Spain). By default, the Actor uses United States (google.com).",
            "default": "us"
          },
          "searchLanguage": {
            "title": "🔤 Restrict results to language (lr)",
            "enum": [
              "",
              "ar",
              "bg",
              "ca",
              "cs",
              "da",
              "de",
              "el",
              "en",
              "es",
              "et",
              "fi",
              "fr",
              "hr",
              "hu",
              "id",
              "is",
              "it",
              "iw",
              "ja",
              "ko",
              "lt",
              "lv",
              "nl",
              "no",
              "pl",
              "pt",
              "ro",
              "ru",
              "sk",
              "sl",
              "sr",
              "sv",
              "tr",
              "zh-CN",
              "zh-TW"
            ],
            "type": "string",
            "description": "Restricts search results to pages in a specific language. For example, choosing 'German' results in pages only in German. Passed to Google Search as the lr URL query parameter. Read more here."
          },
          "languageCode": {
            "title": "🌐 Interface language (hl)",
            "enum": [
              "af",
              "sq",
              "sm",
              "ar",
              "az",
              "eu",
              "be",
              "bn",
              "bh",
              "bs",
              "bg",
              "ca",
              "zh-CN",
              "zh-TW",
              "hr",
              "cs",
              "da",
              "nl",
              "en",
              "eo",
              "et",
              "fo",
              "fi",
              "fr",
              "fy",
              "gl",
              "ka",
              "de",
              "el",
              "gu",
              "iw",
              "hi",
              "hu",
              "is",
              "id",
              "ia",
              "ga",
              "it",
              "ja",
              "jw",
              "kn",
              "ko",
              "la",
              "lv",
              "lt",
              "mk",
              "ms",
              "ml",
              "mt",
              "mr",
              "ne",
              "no",
              "nn",
              "oc",
              "fa",
              "pl",
              "pt-BR",
              "pt-PT",
              "pa",
              "ro",
              "ru",
              "gd",
              "sr",
              "si",
              "sk",
              "sl",
              "es",
              "su",
              "sw",
              "sv",
              "tl",
              "ta",
              "te",
              "th",
              "ti",
              "tr",
              "uk",
              "ur",
              "uz",
              "vi",
              "cy",
              "xh",
              "zu"
            ],
            "type": "string",
            "description": "Language of the Google Search interface (menus, buttons, etc. - not the search results themselves). Passed to Google Search as the hl URL query parameter. From Google Reference: You can use the hl request parameter to identify the language of your graphical interface. The hl parameter value may affect search results, especially on international queries when language restriction (using the lr parameter) is not explicitly specified. Read more here.",
            "default": "en"
          },
          "locationUule": {
            "title": "📍 Exact location code (uule)",
            "type": "string",
            "description": "The code for the exact location for the Google search. It's passed to Google Search as the uule URL query parameter. You can use the UULE code generator. Learn more about emulating local search."
          },
          "forceExactMatch": {
            "title": "🎯 Wrap the query in quotes (exact match)",
            "type": "boolean",
            "description": "If checked, the scraper will search for the exact phrase in the query. This is done by wrapping the query in quotes. Note that this may return fewer results. Also note that if you're using operators such as OR or AND, the whole query will be wrapped in quotes, such as \"Windows AND macOS\". If you want to search for queries such as \"Windows\" AND \"macOS\", you need to specify them directly in the queries field.",
            "default": false
          },
          "site": {
            "title": "🌐 Limit to one site (site:)",
            "type": "string",
            "description": "Limits the search to a specific site, such as: site:example.com. Note that the site filter takes precedence over the relatedToSite filter. If both filters are set, the relatedToSite filter will be ignored and not added to the search queries."
          },
          "relatedToSite": {
            "title": "🔗 Pages related to a site (related:)",
            "type": "string",
            "description": "Filters pages related to a specific site, such as: related:example.com. Note that the site filter takes precedence over the relatedToSite filter. If both filters are set, the relatedToSite filter will be ignored and not added to the search queries."
          },
          "wordsInTitle": {
            "title": "📝 Words required in the title (intitle:)",
            "maxItems": 32,
            "type": "array",
            "description": "Filters pages with specific words in the title. The scraper uses the intitle: operator, even for multiple words (e.g. recipe site:allrecipes.com intitle:\"easy apple\" intitle:pie). There's also a allintitle: operator available, but it's problematic when combined with other search filters, so the scraper avoids using it. If you need to use the allintitle: operator specifically, you can include it in your custom queries from the queries field.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "wordsInText": {
            "title": "📄 Words required in the body text (intext:)",
            "maxItems": 32,
            "type": "array",
            "description": "Filters pages with specific words in the text. The scraper uses the intext: operator, even for multiple words (e.g. cartoon site:wikipedia.com intext:cat intext:mouse). There's also a allintext: operator available, but it's problematic when combined with other search filters, so the scraper avoids using it. If you need to use the allintext: operator specifically, you can include it in your custom queries from the queries field.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "wordsInUrl": {
            "title": "🔗 Words required in the URL (inurl:)",
            "maxItems": 32,
            "type": "array",
            "description": "Filters pages with specific words in the URL. The scraper uses the inurl: operator, even for multiple words (e.g. recipe site:allrecipes.com inurl:apple inurl:pie). There's also a allinurl: operator available, but it's problematic when combined with other search filters, so the scraper avoids using it. If you need to use the allinurl: operator specifically, you can include it in your custom queries from the queries field.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "quickDateRange": {
            "title": "⏱️ Quick date range (qdr:)",
            "type": "string",
            "description": "Filters results from a specific date range. d[number] specifies the number of past days (e.g. the past 10 days can be written as d10). The same applies to hours, weeks, months, and years: h[number], w[number], m[number], y[number]. Example for the past year: 'y1' or even 'y'. The value is passed to Google Search using the tbs URL query parameter, prefixed with qdr:. You should avoid combining this filter with the beforeDate and afterDate filters to prevent conflicts."
          },
          "beforeDate": {
            "title": "📅 Published before",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Filters results from before the specified date. Either absolute date (e.g. 2024-05-03) or relative date from now into the past (e.g. 8 days, 3 months). Absolute time is always interpreted in the UTC timezone, not your local timezone - please convert accordingly. Supported relative date & time units: days, weeks, months, years. You should avoid combining this filter with the quickDateRange filter to prevent conflicts."
          },
          "afterDate": {
            "title": "📆 Published after",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$|^(\\d+)\\s*(day|week|month|year)s?$",
            "type": "string",
            "description": "Filters results from after the specified date. Either absolute date (e.g. 2024-05-03) or relative date from now into the past (e.g. 8 days, 3 months). Absolute time is always interpreted in the UTC timezone, not your local timezone - please convert accordingly. Supported relative date & time units: days, weeks, months, years. You should avoid combining this filter with the quickDateRange filter to prevent conflicts."
          },
          "fileTypes": {
            "title": "📎 File types (filetype:)",
            "maxItems": 10,
            "type": "array",
            "description": "Filters results of specific file types using the filetype: operator, such as filetype:pdf. You can select multiple file types as well. They will be combined with the OR operator, for example: filetype:doc OR filetype:txt. If you need to use a file type that is not in the list (such as a source code file type), you can include it in your custom queries from the queries field, using the filetype: operator.",
            "items": {
              "type": "string",
              "enum": [
                "pdf",
                "csv",
                "epub",
                "ps",
                "htm",
                "html",
                "xls",
                "xlsx",
                "ppt",
                "pptx",
                "doc",
                "docx",
                "odp",
                "ods",
                "odt",
                "rtf",
                "svg",
                "tex",
                "txt",
                "wml",
                "wap",
                "xml",
                "xps",
                "md",
                "readme",
                "log",
                "yml",
                "yaml",
                "toml",
                "ipynb",
                "sas",
                "sql",
                "rdf",
                "avif",
                "avi",
                "mkv",
                "mov",
                "flv",
                "asf",
                "ogv"
              ],
              "enumTitles": [
                "Adobe Portable Document Format (pdf)",
                "Comma-Separated Values (csv)",
                "Electronic Publication (epub)",
                "Adobe PostScript (ps)",
                "HTML (htm)",
                "HTML (html)",
                "Microsoft Excel (xls)",
                "Microsoft Excel (xlsx)",
                "Microsoft PowerPoint (ppt)",
                "Microsoft PowerPoint (pptx)",
                "Microsoft Word (doc)",
                "Microsoft Word (docx)",
                "OpenOffice presentation (odp)",
                "OpenOffice spreadsheet (ods)",
                "OpenOffice text (odt)",
                "Rich Text Format (rtf)",
                "Scalable Vector Graphics (svg)",
                "TeX/LaTeX (tex)",
                "Text (txt)",
                "Wireless Markup Language (wml)",
                "Wireless Markup Language (wap)",
                "XML (xml)",
                "XML Paper Specification (xps)",
                "Markdown (md)",
                "Readme (readme)",
                "Log file (log)",
                "YAML (yml)",
                "YAML (yaml)",
                "TOML (toml)",
                "Jupyter Notebook (ipynb)",
                "SAS (sas)",
                "SQL (sql)",
                "Resource Description Framework (rdf)",
                "AV1 Image File Format (avif)",
                "Audio Video Interleave (avi)",
                "Matroska Multimedia Container (mkv)",
                "QuickTime Movie (mov)",
                "Flash Video (flv)",
                "Advanced Systems Format (asf)",
                "Ogg Video (ogv)"
              ]
            },
            "default": []
          },
          "mobileResults": {
            "title": "📱 Use the mobile SERP layout",
            "type": "boolean",
            "description": "If checked the scraper will return results for mobile version of Google search. Otherwise desktop results are returned.",
            "default": false
          },
          "includeUnfilteredResults": {
            "title": "🔓 Include lower-quality (unfiltered) results",
            "type": "boolean",
            "description": "If checked the lower quality results that Google normally filters out will be included.",
            "default": false
          },
          "saveHtml": {
            "title": "💾 Attach page HTML to each dataset row",
            "type": "boolean",
            "description": "If checked the HTML of the Google Search results pages will be stored to the default dataset, under the html property. This is useful if you need to process the HTML, but it makes the dataset large.",
            "default": false
          },
          "saveHtmlToKeyValueStore": {
            "title": "🗄️ Store page HTML in the key-value store",
            "type": "boolean",
            "description": "If checked the HTML of the Google Search results pages will be stored to the default key-value store and links to the files stored to the dataset under the htmlSnapshotUrl property. This is useful for debugging since you can easily view the pages in the browser. However, the use of this feature may slow down the Actor.",
            "default": true
          },
          "includeIcons": {
            "title": "🖼️ Include result icon data when present",
            "type": "boolean",
            "description": "If checked, all of the results (organicResults, paidResults, suggestedResults) will contain Base64-encoded icon image data if found.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🔒 Proxy",
            "type": "object",
            "description": "Requests always go through a proxy. The run starts on the Google SERP proxy and escalates to residential (3 retries, then sticky) when a response is not a real results page."
          },
          "captureAnswerBox": {
            "title": "🧠 Capture the featured snippet (answer box)",
            "type": "boolean",
            "description": "Parse the featured-snippet block that sits above the ten blue links into answerBox (type, answer, answerHtml, listItems, tableRows and the citation). Google only serves a featured snippet on a minority of queries, so expect hasAnswerBox=false on many rows.",
            "default": true
          },
          "captureKnowledgePanel": {
            "title": "🏢 Capture the right-hand knowledge panel",
            "type": "boolean",
            "description": "Parse the right-hand entity card into knowledgePanel: title, subtitle, entityType, description with its source link, official website, kc: fact rows (CEO, founders, founded, headquarters, customer service phone, ...) and social profiles. Entity queries only - a panel is null when Google does not render one. This reads the #rhs entity card, never the local/map pack.",
            "default": true
          },
          "entityRequestMode": {
            "title": "🔀 How to fetch the panel and snippet",
            "enum": [
              "separate",
              "merged",
              "off"
            ],
            "type": "string",
            "description": "separate (default): one extra udm-free request per search term, page 1 only; the organic request keeps the base actor's exact parameters. merged: drop udm=14 from the single organic request and read everything from one page - cheaper, but the organic result set is the full SERP layout rather than the base's. off: no second request and no entity parsing at all.",
            "default": "separate"
          },
          "maxPanelFacts": {
            "title": "📇 Max knowledge-panel fact rows per query",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Upper bound on knowledgePanel.facts entries. Entity panels typically expose 6-10 rows.",
            "default": 25
          },
          "onlyQueriesWithPanel": {
            "title": "🎛️ Keep only rows that have a panel or an answer box",
            "type": "boolean",
            "description": "When enabled, a page whose row carries neither a knowledge panel nor an answer box is not pushed to the dataset and is not charged. Useful for entity research over a large keyword list.",
            "default": false
          },
          "deduplicateAcrossPages": {
            "title": "🧾 De-duplicate organic results across pages",
            "type": "boolean",
            "description": "Off (default) reproduces the base actor's row shape: the row for page n repeats every organic result from pages 1..n. On, each page row carries only the results first seen on that page. Charging is one row_result per page in both cases.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}