{
  "data": {
    "id": "NG6Y2OAdaEEnxj85d",
    "actId": "PlIxbe9L7Qn7c76R7",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-10-24T19:51:29.553Z",
    "finishedAt": "2026-10-24T19:51:58.303Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 28690,
      "runTimeSecs": 28.69,
      "computeUnits": 0.031877777777777776,
      "imageSizeBytes": 3137529856
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Google Search Results (SERP) Scraper Input\",\n  \"description\": \"Scrape Google web, news, image and video results with country/language targeting, time filters, operators and optional AI Overview or real destination URLs.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"queries\": {\n      \"title\": \"Search Queries\",\n      \"type\": \"array\",\n      \"description\": \"Google search queries. Each is searched separately; blank entries are dropped with a warning.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"minItems\": 1,\n      \"prefill\": [\n        \"Hotels in NYC\"\n      ]\n    },\n    \"searchType\": {\n      \"title\": \"Search type\",\n      \"type\": \"string\",\n      \"description\": \"Which Google surface to scrape: web organic results, news cards, images, or videos.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"web\",\n        \"news\",\n        \"images\",\n        \"videos\"\n      ],\n      \"enumTitles\": [\n        \"Web results\",\n        \"News\",\n        \"Images\",\n        \"Videos\"\n      ],\n      \"default\": \"web\",\n      \"prefill\": \"web\"\n    },\n    \"maxResults\": {\n      \"title\": \"Max results per query\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum items to return per query. Web results stop at Google's own ceiling of roughly 70-100; images return 50-100 per query and news/videos paginate in pages of 10.\",\n      \"default\": 100,\n      \"prefill\": 3,\n      \"minimum\": 1,\n      \"maximum\": 200\n    },\n    \"countryCode\": {\n      \"title\": \"Country\",\n      \"type\": \"string\",\n      \"description\": \"Country for the Google domain and searcher-location (gl) signal. Leave empty for US (google.com); if Precise Location is set and this is empty, the country is derived from it.\",\n      \"editor\": \"select\",\n      \"default\": \"\",\n      \"prefill\": \"us\",\n      \"enum\": [\n        \"\",\n        \"us\",\n        \"uk\",\n        \"ca\",\n        \"au\",\n        \"de\",\n        \"fr\",\n        \"es\",\n        \"it\",\n        \"br\",\n        \"mx\",\n        \"in\",\n        \"jp\",\n        \"kr\",\n        \"nl\",\n        \"be\",\n        \"at\",\n        \"ch\",\n        \"se\",\n        \"no\",\n        \"dk\",\n        \"fi\",\n        \"pl\",\n        \"cz\",\n        \"pt\",\n        \"ie\",\n        \"nz\",\n        \"za\",\n        \"sg\",\n        \"hk\",\n        \"tw\",\n        \"ph\",\n        \"th\",\n        \"id\",\n        \"my\",\n        \"vn\",\n        \"ar\",\n        \"cl\",\n        \"co\",\n        \"pe\",\n        \"tr\",\n        \"ru\",\n        \"ua\",\n        \"il\",\n        \"ae\",\n        \"sa\",\n        \"eg\",\n        \"ng\",\n        \"ke\"\n      ],\n      \"enumTitles\": [\n        \"United States (default)\",\n        \"United States\",\n        \"United Kingdom\",\n        \"Canada\",\n        \"Australia\",\n        \"Germany\",\n        \"France\",\n        \"Spain\",\n        \"Italy\",\n        \"Brazil\",\n        \"Mexico\",\n        \"India\",\n        \"Japan\",\n        \"South Korea\",\n        \"Netherlands\",\n        \"Belgium\",\n        \"Austria\",\n        \"Switzerland\",\n        \"Sweden\",\n        \"Norway\",\n        \"Denmark\",\n        \"Finland\",\n        \"Poland\",\n        \"Czech Republic\",\n        \"Portugal\",\n        \"Ireland\",\n        \"New Zealand\",\n        \"South Africa\",\n        \"Singapore\",\n        \"Hong Kong\",\n        \"Taiwan\",\n        \"Philippines\",\n        \"Thailand\",\n        \"Indonesia\",\n        \"Malaysia\",\n        \"Vietnam\",\n        \"Argentina\",\n        \"Chile\",\n        \"Colombia\",\n        \"Peru\",\n        \"Turkey\",\n        \"Russia\",\n        \"Ukraine\",\n        \"Israel\",\n        \"UAE\",\n        \"Saudi Arabia\",\n        \"Egypt\",\n        \"Nigeria\",\n        \"Kenya\"\n      ]\n    },\n    \"restrictResultsCountry\": {\n      \"title\": \"Restrict results to country (cr)\",\n      \"type\": \"string\",\n      \"description\": \"Only return pages whose content originates from this country (Google's cr parameter), independent of Country/gl. Leave empty for no restriction.\",\n      \"editor\": \"select\",\n      \"default\": \"\",\n      \"prefill\": \"\",\n      \"enum\": [\n        \"\",\n        \"us\",\n        \"uk\",\n        \"ca\",\n        \"au\",\n        \"de\",\n        \"fr\",\n        \"es\",\n        \"it\",\n        \"br\",\n        \"mx\",\n        \"in\",\n        \"jp\",\n        \"kr\",\n        \"nl\",\n        \"be\",\n        \"at\",\n        \"ch\",\n        \"se\",\n        \"no\",\n        \"dk\",\n        \"fi\",\n        \"pl\",\n        \"cz\",\n        \"pt\",\n        \"ie\",\n        \"nz\",\n        \"za\",\n        \"sg\",\n        \"hk\",\n        \"tw\",\n        \"ph\",\n        \"th\",\n        \"id\",\n        \"my\",\n        \"vn\",\n        \"ar\",\n        \"cl\",\n        \"co\",\n        \"pe\",\n        \"tr\",\n        \"ru\",\n        \"ua\",\n        \"il\",\n        \"ae\",\n        \"sa\",\n        \"eg\",\n        \"ng\",\n        \"ke\"\n      ],\n      \"enumTitles\": [\n        \"Any country (default)\",\n        \"United States\",\n        \"United Kingdom\",\n        \"Canada\",\n        \"Australia\",\n        \"Germany\",\n        \"France\",\n        \"Spain\",\n        \"Italy\",\n        \"Brazil\",\n        \"Mexico\",\n        \"India\",\n        \"Japan\",\n        \"South Korea\",\n        \"Netherlands\",\n        \"Belgium\",\n        \"Austria\",\n        \"Switzerland\",\n        \"Sweden\",\n        \"Norway\",\n        \"Denmark\",\n        \"Finland\",\n        \"Poland\",\n        \"Czech Republic\",\n        \"Portugal\",\n        \"Ireland\",\n        \"New Zealand\",\n        \"South Africa\",\n        \"Singapore\",\n        \"Hong Kong\",\n        \"Taiwan\",\n        \"Philippines\",\n        \"Thailand\",\n        \"Indonesia\",\n        \"Malaysia\",\n        \"Vietnam\",\n        \"Argentina\",\n        \"Chile\",\n        \"Colombia\",\n        \"Peru\",\n        \"Turkey\",\n        \"Russia\",\n        \"Ukraine\",\n        \"Israel\",\n        \"UAE\",\n        \"Saudi Arabia\",\n        \"Egypt\",\n        \"Nigeria\",\n        \"Kenya\"\n      ]\n    },\n    \"languageCode\": {\n      \"title\": \"Interface language (hl)\",\n      \"type\": \"string\",\n      \"description\": \"Language of Google's own interface, e.g. en, de, fr, es. This does not restrict the language of the matched pages.\",\n      \"default\": \"\",\n      \"prefill\": \"en\",\n      \"editor\": \"textfield\"\n    },\n    \"restrictResultsLanguage\": {\n      \"title\": \"Restrict results language (lr)\",\n      \"type\": \"string\",\n      \"description\": \"Only return pages written in this language, e.g. en or en,fr for either. Leave empty for no restriction.\",\n      \"default\": \"\",\n      \"prefill\": \"\",\n      \"editor\": \"textfield\"\n    },\n    \"maxPagesPerQuery\": {\n      \"title\": \"Max pages per query\",\n      \"type\": \"integer\",\n      \"description\": \"Result pages to crawl per query for web, news and videos. Images are a single page. Web results stop at Google's own ceiling of roughly 7-10 pages.\",\n      \"default\": 1,\n      \"prefill\": 1,\n      \"minimum\": 1,\n      \"maximum\": 10\n    },\n    \"timePeriod\": {\n      \"title\": \"Time period\",\n      \"type\": \"string\",\n      \"description\": \"Filter results by relative time. Leave empty for any time.\",\n      \"editor\": \"select\",\n      \"default\": \"\",\n      \"prefill\": \"\",\n      \"enum\": [\n        \"\",\n        \"hour\",\n        \"day\",\n        \"week\",\n        \"month\",\n        \"year\"\n      ],\n      \"enumTitles\": [\n        \"Any time\",\n        \"Past hour\",\n        \"Past 24 hours\",\n        \"Past week\",\n        \"Past month\",\n        \"Past year\"\n      ]\n    },\n    \"safeSearch\": {\n      \"title\": \"SafeSearch\",\n      \"type\": \"string\",\n      \"description\": \"Filter explicit content (safe=). Leave empty for Google's default.\",\n      \"editor\": \"select\",\n      \"default\": \"\",\n      \"prefill\": \"\",\n      \"enum\": [\n        \"\",\n        \"active\",\n        \"off\"\n      ],\n      \"enumTitles\": [\n        \"Default\",\n        \"Filter explicit results\",\n        \"Do not filter\"\n      ]\n    },\n    \"includeAiOverview\": {\n      \"title\": \"Include AI Overview (slower, best-effort)\",\n      \"type\": \"boolean\",\n      \"description\": \"Opt-in browser-rendered AI Overview for web searches. Slower and not guaranteed: Google may not show one, and the text is best-effort. Only applies to web search.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeDestinationUrl\": {\n      \"title\": \"Resolve real result URLs\",\n      \"type\": \"boolean\",\n      \"description\": \"Add a destinationUrl field with the real destination behind Google's redirect link. Adds one lookup per organic result. Only applies to web search.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"csvFriendlyOutput\": {\n      \"title\": \"CSV friendly output (one result per row)\",\n      \"type\": \"boolean\",\n      \"description\": \"For web search, output one organic/paid result per row instead of one SERP page per row. Other SERP features are not included in this layout.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"includeExtraBoxes\": {\n      \"title\": \"Include extra info boxes\",\n      \"type\": \"boolean\",\n      \"description\": \"For web search, also extract weather, time zone, currency/unit converter, stock, jobs, videos, shopping and dictionary boxes when present.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"uule\": {\n      \"title\": \"Precise location (uule)\",\n      \"type\": \"string\",\n      \"description\": \"Optional Google-encoded location for city-level targeting. Best-effort: country targeting is reliable, city precision is not guaranteed. Leave empty to use Country only.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"dateFrom\": {\n      \"title\": \"Date from\",\n      \"type\": \"string\",\n      \"description\": \"Only include results published on or after this date (YYYY-MM-DD). Must be used with Date to.\",\n      \"editor\": \"datepicker\",\n      \"prefill\": \"\"\n    },\n    \"dateTo\": {\n      \"title\": \"Date to\",\n      \"type\": \"string\",\n      \"description\": \"Only include results published on or before this date (YYYY-MM-DD). Must be used with Date from.\",\n      \"editor\": \"datepicker\",\n      \"prefill\": \"\"\n    },\n    \"exactPhrase\": {\n      \"title\": \"Exact phrase match\",\n      \"type\": \"boolean\",\n      \"description\": \"Wrap each query in quotes so Google matches it as an exact phrase.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"site\": {\n      \"title\": \"Site (site: operator)\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to this domain, e.g. nike.com. Every organic result is checked against it; off-domain results Google slips in are dropped.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"intitle\": {\n      \"title\": \"Word in title (intitle:)\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to pages containing this word in the title. Sent to Google as-is.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"intext\": {\n      \"title\": \"Word in text (intext:)\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to pages containing this word in the body text. Sent to Google as-is.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"inurl\": {\n      \"title\": \"Word in URL (inurl:)\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to pages containing this word in the URL. Sent to Google as-is.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"fileType\": {\n      \"title\": \"File type (filetype:)\",\n      \"type\": \"string\",\n      \"description\": \"Restrict results to a file type, e.g. pdf, doc, xls. Sent to Google as-is.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    },\n    \"excludeTerms\": {\n      \"title\": \"Exclude terms (-word)\",\n      \"type\": \"string\",\n      \"description\": \"Words to exclude, comma- or space-separated, e.g. jaguar, cats.\",\n      \"editor\": \"textfield\",\n      \"prefill\": \"\"\n    }\n  },\n  \"required\": [\n    \"queries\"\n  ]\n}",
    "readme": "# Google Search Results Scraper: Web, News, Images & Videos\n\nRun any search term through Google and get back structured results for the surface you need: classic web results with ads and SERP features, the News tab, the Images tab, or the Videos tab. Point it at a list of queries, choose a country and language, and it returns one structured record per query/page.\n\n## What this actor does\n\n- Searches web, news, images or videos with one `searchType` choice\n- Web results: organic results, ads, People Also Ask, related searches, knowledge panel, local pack, top stories, sports tables and optional extra boxes\n- Images: title, source, page URL, thumbnail, original image URL and dimensions\n- News: headline, source, link, published time and snippet\n- Videos: title, link, video ID, publisher/channel, duration and thumbnail\n- Country/language targeting, time filters, custom date ranges, city-level `uule` hints and Google search operators\n- Optional real destination URLs for web organic results, and an optional browser-rendered AI Overview\n- No proxy setup or credentials required: the actor handles its own access\n\n## Output per search result page\n\nEach run produces one record per query (per page, if `maxPagesPerQuery` > 1). Fields that Google does not render for a query are omitted, not filled with placeholders.\n\n**Web (`searchType: \"web\"`):**\n- `searchQuery` — term, page, country, language, search type and results-per-page metadata\n- `organicResults` — `{position, title, url, displayedUrl, destinationUrl, snippet, siteLinks}`. `url` is the working Google result link; set `includeDestinationUrl` to add the real destination.\n- `paidResults` — ad slots, when Google renders any\n- `peopleAlsoAsk` — related questions\n- `relatedQueries` — suggested searches\n- `knowledgePanel` — entity panel for people, places and organizations\n- `localPack` — local business results with rating, review count and address\n- `topStories` — news carousel results\n- `sportsTable` — standings when Google renders a real table (best-effort; current grid layouts may not populate it)\n- `aiOverview` — only when `includeAiOverview` is enabled and Google renders one\n- `resultsTotal` — Google's own rough estimate, which fluctuates between pages and renders; treat it as volatile, not a stable volume metric\n- `hasNextPage` — whether another page is available\n- `weatherBox`, `stockBox`, `timeZoneBox`, `currencyConverterBox`, `unitConverterBox`, `jobsPack`, `videoPack`, `shoppingPack`, `dictionaryBox` — opt-in via `includeExtraBoxes`\n\n**News (`searchType: \"news\"`):** `newsResults[]` with `position`, `title`, `url`, `source`, `publishedAt` (ISO 8601 when Google exposes a timestamp), `publishedTimeText` and `snippet`.\n\n**Images (`searchType: \"images\"`):** `imageResults[]` with `position`, `title`, `source`, `pageUrl`, `thumbnailUrl`, `originalImageUrl`, `width` and `height`. Original URLs come from the publisher as Google reports them; some hosts block hotlinks or let URLs expire, so validate before fetching. The thumbnail is returned independently.\n\n**Videos (`searchType: \"videos\"`):** `videoResults[]` with `position`, `title`, `url`, `videoId`, `publisher`, `channel`, `duration` and `thumbnailUrl`.\n\n**Error rows:** a query that fails outright, or is blocked on every attempt, produces `{\"type\": \"error\", \"query\": ..., \"reason\": ...}` instead of page records.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `queries` | array | – | Search terms; each is searched separately. |\n| `searchType` | string | `web` | `web`, `news`, `images` or `videos`. |\n| `maxResults` | integer | `100` | Maximum items per query (1–200). Web results stop at Google's own ~70–100 ceiling; images return 50–100; news/videos paginate in 10-result steps (news pages may render 10–22 cards). |\n| `countryCode` | string | *(empty = US)* | Country for the Google domain and searcher-location signal. |\n| `restrictResultsCountry` | string | *(empty = any)* | Only return pages targeting this country (Google's `cr`). |\n| `languageCode` | string | *(empty)* | Google interface language (e.g. `en`, `de`). |\n| `restrictResultsLanguage` | string | *(empty)* | Only return pages written in this language (e.g. `en` or `en,fr`). |\n| `maxPagesPerQuery` | integer | `1` | Pages to crawl per query for web/news/videos (1–10). Images are one page. |\n| `timePeriod` | string | *(empty = any)* | `hour`, `day`, `week`, `month` or `year`. |\n| `safeSearch` | string | *(empty = default)* | `active` or `off`. |\n| `includeAiOverview` | boolean | `false` | Opt-in browser-rendered AI Overview for web. Slower; not guaranteed. |\n| `includeDestinationUrl` | boolean | `false` | Resolve web organic links to their real destination. Adds one lookup per result. |\n| `csvFriendlyOutput` | boolean | `false` | Web only: one organic/paid result per row. |\n| `includeExtraBoxes` | boolean | `false` | Web only: weather, time zone, converter, stock, jobs, videos, shopping, dictionary boxes. |\n| `uule` | string | *(empty)* | Google-encoded location for city-level targeting; best-effort. |\n| `dateFrom` / `dateTo` | string | *(empty)* | Custom date range (`YYYY-MM-DD`), set together. Overrides `timePeriod`. |\n| `exactPhrase` | boolean | `false` | Wrap each query in quotes. |\n| `site` | string | *(empty)* | `site:` operator; results are checked against the domain and off-domain ones are dropped. |\n| `intitle` / `intext` / `inurl` / `fileType` | string | *(empty)* | Search operators sent to Google as-is. |\n| `excludeTerms` | string | *(empty)* | Words to exclude, comma- or space-separated. |\n\n### Examples\n\nWeb rank check with a time filter:\n\n```json\n{\n  \"queries\": [\"best running shoes 2026\"],\n  \"searchType\": \"web\",\n  \"countryCode\": \"us\",\n  \"maxResults\": 30,\n  \"maxPagesPerQuery\": 4,\n  \"timePeriod\": \"month\",\n  \"includeDestinationUrl\": true\n}\n```\n\nNews monitoring:\n\n```json\n{\n  \"queries\": [\"tesla\"],\n  \"searchType\": \"news\",\n  \"countryCode\": \"us\",\n  \"maxResults\": 20,\n  \"maxPagesPerQuery\": 2\n}\n```\n\nImage research:\n\n```json\n{\n  \"queries\": [\"tesla cybertruck\"],\n  \"searchType\": \"images\",\n  \"countryCode\": \"us\",\n  \"maxResults\": 50\n}\n```\n\n## Use cases\n\n- **SEO monitoring** — track web ranking positions across countries and languages\n- **News monitoring** — collect headlines, sources and publication times\n- **Visual research** — gather image thumbnails, sources and dimensions\n- **Video research** — collect video titles, channels and durations\n- **SERP feature tracking** — monitor ads, PAA, knowledge panels, local packs and AI Overviews\n- **Content research** — mine related searches and questions\n\n## FAQ\n\n**Is this an official Google product?**\nNo. This is an independent actor that reads publicly available Google result pages. It is not affiliated with, endorsed by, or sponsored by Google.\n\n**Do I need a proxy or Google account?**\nNo. The actor handles its own access and needs no cookies, logins, API keys or proxy configuration.\n\n**How many results can I get per query?**\nWeb results stop at Google's own ceiling of roughly 70–100, even if you ask for 200. Images return 50–100 per query. News and videos paginate in 10-result steps and stop when Google stops returning results; a news page may render 10–22 cards.\n\n**Why is `resultsTotal` sometimes a small number?**\nIt is Google's own estimate on that specific render. It fluctuates between pages and query types, so use it as a rough signal rather than a stable search-volume metric.\n\n**Why are `paidResults`, `knowledgePanel`, `localPack` or `topStories` often empty?**\nGoogle only renders those features for some queries. Ads are sparse even on commercial terms; local packs need local intent; knowledge panels need an entity. Their absence is normal, not an extraction failure.\n\n**Why is `aiOverview` empty?**\nAI Overview is opt-in because it requires a slower browser-rendered fetch, and Google still may not show one for a given query. The text is best-effort and headings/bullets may be flattened.\n\n**What is `destinationUrl`?**\nGoogle usually wraps organic links in a redirect. With `includeDestinationUrl` enabled, the actor follows that redirect and adds the real destination. If the lookup fails, `destinationUrl` is omitted and the working Google link remains in `url`.\n\n**Why did `site:` return fewer results than expected?**\nGoogle silently widens `site:` searches once the restricted corpus runs out. The actor checks each result against your domain and drops ones that do not belong, so a smaller but accurate set is expected. Social cards with follower counts are recognized as on-domain.\n\n**Does CSV mode include news, images or videos?**\nNo. `csvFriendlyOutput` is a web-only reshape. Use the default JSON layout for the other search types.\n\n**Are image URLs permanent?**\nThumbnail URLs are served by Google and are reliable. Original image URLs come from the publisher and may expire or be hotlink-protected; the actor returns the URL Google provides and does not runtime-validate every original, so a few may return 403/404.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "google-search-results-scraper-organic-and-serp",
      "title": "Google Search Results Scraper: Web, News, Images & Videos",
      "description": "Scrape Google web, news, image and video results for any query and country: organic results, ads, People Also Ask, related searches, knowledge panel, local pack, images, news and videos.",
      "version": "1.0",
      "meta": {
        "templateId": "python-playwright"
      },
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 2048
      },
      "input": {
        "title": "Google Search Results (SERP) Scraper Input",
        "description": "Scrape Google web, news, image and video results with country/language targeting, time filters, operators and optional AI Overview or real destination URLs.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "queries": {
            "title": "Search Queries",
            "type": "array",
            "description": "Google search queries. Each is searched separately; blank entries are dropped with a warning.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "prefill": [
              "Hotels in NYC"
            ]
          },
          "searchType": {
            "title": "Search type",
            "type": "string",
            "description": "Which Google surface to scrape: web organic results, news cards, images, or videos.",
            "editor": "select",
            "enum": [
              "web",
              "news",
              "images",
              "videos"
            ],
            "enumTitles": [
              "Web results",
              "News",
              "Images",
              "Videos"
            ],
            "default": "web",
            "prefill": "web"
          },
          "maxResults": {
            "title": "Max results per query",
            "type": "integer",
            "description": "Maximum items to return per query. Web results stop at Google's own ceiling of roughly 70-100; images return 50-100 per query and news/videos paginate in pages of 10.",
            "default": 100,
            "prefill": 3,
            "minimum": 1,
            "maximum": 200
          },
          "countryCode": {
            "title": "Country",
            "type": "string",
            "description": "Country for the Google domain and searcher-location (gl) signal. Leave empty for US (google.com); if Precise Location is set and this is empty, the country is derived from it.",
            "editor": "select",
            "default": "",
            "prefill": "us",
            "enum": [
              "",
              "us",
              "uk",
              "ca",
              "au",
              "de",
              "fr",
              "es",
              "it",
              "br",
              "mx",
              "in",
              "jp",
              "kr",
              "nl",
              "be",
              "at",
              "ch",
              "se",
              "no",
              "dk",
              "fi",
              "pl",
              "cz",
              "pt",
              "ie",
              "nz",
              "za",
              "sg",
              "hk",
              "tw",
              "ph",
              "th",
              "id",
              "my",
              "vn",
              "ar",
              "cl",
              "co",
              "pe",
              "tr",
              "ru",
              "ua",
              "il",
              "ae",
              "sa",
              "eg",
              "ng",
              "ke"
            ],
            "enumTitles": [
              "United States (default)",
              "United States",
              "United Kingdom",
              "Canada",
              "Australia",
              "Germany",
              "France",
              "Spain",
              "Italy",
              "Brazil",
              "Mexico",
              "India",
              "Japan",
              "South Korea",
              "Netherlands",
              "Belgium",
              "Austria",
              "Switzerland",
              "Sweden",
              "Norway",
              "Denmark",
              "Finland",
              "Poland",
              "Czech Republic",
              "Portugal",
              "Ireland",
              "New Zealand",
              "South Africa",
              "Singapore",
              "Hong Kong",
              "Taiwan",
              "Philippines",
              "Thailand",
              "Indonesia",
              "Malaysia",
              "Vietnam",
              "Argentina",
              "Chile",
              "Colombia",
              "Peru",
              "Turkey",
              "Russia",
              "Ukraine",
              "Israel",
              "UAE",
              "Saudi Arabia",
              "Egypt",
              "Nigeria",
              "Kenya"
            ]
          },
          "restrictResultsCountry": {
            "title": "Restrict results to country (cr)",
            "type": "string",
            "description": "Only return pages whose content originates from this country (Google's cr parameter), independent of Country/gl. Leave empty for no restriction.",
            "editor": "select",
            "default": "",
            "prefill": "",
            "enum": [
              "",
              "us",
              "uk",
              "ca",
              "au",
              "de",
              "fr",
              "es",
              "it",
              "br",
              "mx",
              "in",
              "jp",
              "kr",
              "nl",
              "be",
              "at",
              "ch",
              "se",
              "no",
              "dk",
              "fi",
              "pl",
              "cz",
              "pt",
              "ie",
              "nz",
              "za",
              "sg",
              "hk",
              "tw",
              "ph",
              "th",
              "id",
              "my",
              "vn",
              "ar",
              "cl",
              "co",
              "pe",
              "tr",
              "ru",
              "ua",
              "il",
              "ae",
              "sa",
              "eg",
              "ng",
              "ke"
            ],
            "enumTitles": [
              "Any country (default)",
              "United States",
              "United Kingdom",
              "Canada",
              "Australia",
              "Germany",
              "France",
              "Spain",
              "Italy",
              "Brazil",
              "Mexico",
              "India",
              "Japan",
              "South Korea",
              "Netherlands",
              "Belgium",
              "Austria",
              "Switzerland",
              "Sweden",
              "Norway",
              "Denmark",
              "Finland",
              "Poland",
              "Czech Republic",
              "Portugal",
              "Ireland",
              "New Zealand",
              "South Africa",
              "Singapore",
              "Hong Kong",
              "Taiwan",
              "Philippines",
              "Thailand",
              "Indonesia",
              "Malaysia",
              "Vietnam",
              "Argentina",
              "Chile",
              "Colombia",
              "Peru",
              "Turkey",
              "Russia",
              "Ukraine",
              "Israel",
              "UAE",
              "Saudi Arabia",
              "Egypt",
              "Nigeria",
              "Kenya"
            ]
          },
          "languageCode": {
            "title": "Interface language (hl)",
            "type": "string",
            "description": "Language of Google's own interface, e.g. en, de, fr, es. This does not restrict the language of the matched pages.",
            "default": "",
            "prefill": "en",
            "editor": "textfield"
          },
          "restrictResultsLanguage": {
            "title": "Restrict results language (lr)",
            "type": "string",
            "description": "Only return pages written in this language, e.g. en or en,fr for either. Leave empty for no restriction.",
            "default": "",
            "prefill": "",
            "editor": "textfield"
          },
          "maxPagesPerQuery": {
            "title": "Max pages per query",
            "type": "integer",
            "description": "Result pages to crawl per query for web, news and videos. Images are a single page. Web results stop at Google's own ceiling of roughly 7-10 pages.",
            "default": 1,
            "prefill": 1,
            "minimum": 1,
            "maximum": 10
          },
          "timePeriod": {
            "title": "Time period",
            "type": "string",
            "description": "Filter results by relative time. Leave empty for any time.",
            "editor": "select",
            "default": "",
            "prefill": "",
            "enum": [
              "",
              "hour",
              "day",
              "week",
              "month",
              "year"
            ],
            "enumTitles": [
              "Any time",
              "Past hour",
              "Past 24 hours",
              "Past week",
              "Past month",
              "Past year"
            ]
          },
          "safeSearch": {
            "title": "SafeSearch",
            "type": "string",
            "description": "Filter explicit content (safe=). Leave empty for Google's default.",
            "editor": "select",
            "default": "",
            "prefill": "",
            "enum": [
              "",
              "active",
              "off"
            ],
            "enumTitles": [
              "Default",
              "Filter explicit results",
              "Do not filter"
            ]
          },
          "includeAiOverview": {
            "title": "Include AI Overview (slower, best-effort)",
            "type": "boolean",
            "description": "Opt-in browser-rendered AI Overview for web searches. Slower and not guaranteed: Google may not show one, and the text is best-effort. Only applies to web search.",
            "default": false,
            "prefill": false
          },
          "includeDestinationUrl": {
            "title": "Resolve real result URLs",
            "type": "boolean",
            "description": "Add a destinationUrl field with the real destination behind Google's redirect link. Adds one lookup per organic result. Only applies to web search.",
            "default": false,
            "prefill": false
          },
          "csvFriendlyOutput": {
            "title": "CSV friendly output (one result per row)",
            "type": "boolean",
            "description": "For web search, output one organic/paid result per row instead of one SERP page per row. Other SERP features are not included in this layout.",
            "default": false,
            "prefill": false
          },
          "includeExtraBoxes": {
            "title": "Include extra info boxes",
            "type": "boolean",
            "description": "For web search, also extract weather, time zone, currency/unit converter, stock, jobs, videos, shopping and dictionary boxes when present.",
            "default": false,
            "prefill": false
          },
          "uule": {
            "title": "Precise location (uule)",
            "type": "string",
            "description": "Optional Google-encoded location for city-level targeting. Best-effort: country targeting is reliable, city precision is not guaranteed. Leave empty to use Country only.",
            "editor": "textfield",
            "prefill": ""
          },
          "dateFrom": {
            "title": "Date from",
            "type": "string",
            "description": "Only include results published on or after this date (YYYY-MM-DD). Must be used with Date to.",
            "editor": "datepicker",
            "prefill": ""
          },
          "dateTo": {
            "title": "Date to",
            "type": "string",
            "description": "Only include results published on or before this date (YYYY-MM-DD). Must be used with Date from.",
            "editor": "datepicker",
            "prefill": ""
          },
          "exactPhrase": {
            "title": "Exact phrase match",
            "type": "boolean",
            "description": "Wrap each query in quotes so Google matches it as an exact phrase.",
            "default": false,
            "prefill": false
          },
          "site": {
            "title": "Site (site: operator)",
            "type": "string",
            "description": "Restrict results to this domain, e.g. nike.com. Every organic result is checked against it; off-domain results Google slips in are dropped.",
            "editor": "textfield",
            "prefill": ""
          },
          "intitle": {
            "title": "Word in title (intitle:)",
            "type": "string",
            "description": "Restrict results to pages containing this word in the title. Sent to Google as-is.",
            "editor": "textfield",
            "prefill": ""
          },
          "intext": {
            "title": "Word in text (intext:)",
            "type": "string",
            "description": "Restrict results to pages containing this word in the body text. Sent to Google as-is.",
            "editor": "textfield",
            "prefill": ""
          },
          "inurl": {
            "title": "Word in URL (inurl:)",
            "type": "string",
            "description": "Restrict results to pages containing this word in the URL. Sent to Google as-is.",
            "editor": "textfield",
            "prefill": ""
          },
          "fileType": {
            "title": "File type (filetype:)",
            "type": "string",
            "description": "Restrict results to a file type, e.g. pdf, doc, xls. Sent to Google as-is.",
            "editor": "textfield",
            "prefill": ""
          },
          "excludeTerms": {
            "title": "Exclude terms (-word)",
            "type": "string",
            "description": "Words to exclude, comma- or space-separated, e.g. jaguar, cats.",
            "editor": "textfield",
            "prefill": ""
          }
        },
        "required": [
          "queries"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Google Search Results Scraper: Web, News, Images & Videos Output",
        "description": "One record per search query/page with web organic results, news cards, images, videos, AI Overview, People Also Ask, local pack, related queries and paid results.",
        "properties": {
          "results": {
            "type": "string",
            "description": "Dataset with scraped SERP data",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "Google Search Results",
          "views": {
            "overview": {
              "title": "Results Overview",
              "transformation": {
                "fields": [
                  "searchQuery",
                  "resultsTotal",
                  "hasNextPage",
                  "organicResults"
                ],
                "flatten": [
                  "searchQuery"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "searchQuery.term": {
                    "label": "Search Query",
                    "format": "text"
                  },
                  "searchQuery.page": {
                    "label": "Page",
                    "format": "number"
                  },
                  "searchQuery.countryCode": {
                    "label": "Country",
                    "format": "text"
                  },
                  "resultsTotal": {
                    "label": "Total Results",
                    "format": "number"
                  },
                  "hasNextPage": {
                    "label": "Has Next Page",
                    "format": "boolean"
                  },
                  "organicResults": {
                    "label": "Organic Results",
                    "format": "array"
                  }
                }
              }
            },
            "detailed": {
              "title": "Detailed View",
              "transformation": {
                "fields": [
                  "searchQuery",
                  "hasNextPage",
                  "resultsTotal",
                  "organicResults",
                  "aiOverview",
                  "knowledgePanel",
                  "peopleAlsoAsk",
                  "relatedQueries",
                  "localPack",
                  "topStories",
                  "sportsTable",
                  "paidResults",
                  "imageResults",
                  "newsResults",
                  "videoResults"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "searchQuery": {
                    "label": "Search Query",
                    "format": "object"
                  },
                  "hasNextPage": {
                    "label": "Has Next Page",
                    "format": "boolean"
                  },
                  "resultsTotal": {
                    "label": "Total Results",
                    "format": "number"
                  },
                  "organicResults": {
                    "label": "Organic Results",
                    "format": "array"
                  },
                  "aiOverview": {
                    "label": "AI Overview",
                    "format": "object"
                  },
                  "knowledgePanel": {
                    "label": "Knowledge Panel",
                    "format": "object"
                  },
                  "peopleAlsoAsk": {
                    "label": "People Also Ask",
                    "format": "array"
                  },
                  "relatedQueries": {
                    "label": "Related Queries",
                    "format": "array"
                  },
                  "localPack": {
                    "label": "Local Pack",
                    "format": "array"
                  },
                  "topStories": {
                    "label": "Top Stories",
                    "format": "array"
                  },
                  "sportsTable": {
                    "label": "Sports Table",
                    "format": "object"
                  },
                  "paidResults": {
                    "label": "Paid Results",
                    "format": "array"
                  },
                  "imageResults": {
                    "label": "Image Results",
                    "format": "array"
                  },
                  "newsResults": {
                    "label": "News Results",
                    "format": "array"
                  },
                  "videoResults": {
                    "label": "Video Results",
                    "format": "array"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# Google Search Results Scraper: Web, News, Images & Videos\n\nRun any search term through Google and get back structured results for the surface you need: classic web results with ads and SERP features, the News tab, the Images tab, or the Videos tab. Point it at a list of queries, choose a country and language, and it returns one structured record per query/page.\n\n## What this actor does\n\n- Searches web, news, images or videos with one `searchType` choice\n- Web results: organic results, ads, People Also Ask, related searches, knowledge panel, local pack, top stories, sports tables and optional extra boxes\n- Images: title, source, page URL, thumbnail, original image URL and dimensions\n- News: headline, source, link, published time and snippet\n- Videos: title, link, video ID, publisher/channel, duration and thumbnail\n- Country/language targeting, time filters, custom date ranges, city-level `uule` hints and Google search operators\n- Optional real destination URLs for web organic results, and an optional browser-rendered AI Overview\n- No proxy setup or credentials required: the actor handles its own access\n\n## Output per search result page\n\nEach run produces one record per query (per page, if `maxPagesPerQuery` > 1). Fields that Google does not render for a query are omitted, not filled with placeholders.\n\n**Web (`searchType: \"web\"`):**\n- `searchQuery` — term, page, country, language, search type and results-per-page metadata\n- `organicResults` — `{position, title, url, displayedUrl, destinationUrl, snippet, siteLinks}`. `url` is the working Google result link; set `includeDestinationUrl` to add the real destination.\n- `paidResults` — ad slots, when Google renders any\n- `peopleAlsoAsk` — related questions\n- `relatedQueries` — suggested searches\n- `knowledgePanel` — entity panel for people, places and organizations\n- `localPack` — local business results with rating, review count and address\n- `topStories` — news carousel results\n- `sportsTable` — standings when Google renders a real table (best-effort; current grid layouts may not populate it)\n- `aiOverview` — only when `includeAiOverview` is enabled and Google renders one\n- `resultsTotal` — Google's own rough estimate, which fluctuates between pages and renders; treat it as volatile, not a stable volume metric\n- `hasNextPage` — whether another page is available\n- `weatherBox`, `stockBox`, `timeZoneBox`, `currencyConverterBox`, `unitConverterBox`, `jobsPack`, `videoPack`, `shoppingPack`, `dictionaryBox` — opt-in via `includeExtraBoxes`\n\n**News (`searchType: \"news\"`):** `newsResults[]` with `position`, `title`, `url`, `source`, `publishedAt` (ISO 8601 when Google exposes a timestamp), `publishedTimeText` and `snippet`.\n\n**Images (`searchType: \"images\"`):** `imageResults[]` with `position`, `title`, `source`, `pageUrl`, `thumbnailUrl`, `originalImageUrl`, `width` and `height`. Original URLs come from the publisher as Google reports them; some hosts block hotlinks or let URLs expire, so validate before fetching. The thumbnail is returned independently.\n\n**Videos (`searchType: \"videos\"`):** `videoResults[]` with `position`, `title`, `url`, `videoId`, `publisher`, `channel`, `duration` and `thumbnailUrl`.\n\n**Error rows:** a query that fails outright, or is blocked on every attempt, produces `{\"type\": \"error\", \"query\": ..., \"reason\": ...}` instead of page records.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `queries` | array | – | Search terms; each is searched separately. |\n| `searchType` | string | `web` | `web`, `news`, `images` or `videos`. |\n| `maxResults` | integer | `100` | Maximum items per query (1–200). Web results stop at Google's own ~70–100 ceiling; images return 50–100; news/videos paginate in 10-result steps (news pages may render 10–22 cards). |\n| `countryCode` | string | *(empty = US)* | Country for the Google domain and searcher-location signal. |\n| `restrictResultsCountry` | string | *(empty = any)* | Only return pages targeting this country (Google's `cr`). |\n| `languageCode` | string | *(empty)* | Google interface language (e.g. `en`, `de`). |\n| `restrictResultsLanguage` | string | *(empty)* | Only return pages written in this language (e.g. `en` or `en,fr`). |\n| `maxPagesPerQuery` | integer | `1` | Pages to crawl per query for web/news/videos (1–10). Images are one page. |\n| `timePeriod` | string | *(empty = any)* | `hour`, `day`, `week`, `month` or `year`. |\n| `safeSearch` | string | *(empty = default)* | `active` or `off`. |\n| `includeAiOverview` | boolean | `false` | Opt-in browser-rendered AI Overview for web. Slower; not guaranteed. |\n| `includeDestinationUrl` | boolean | `false` | Resolve web organic links to their real destination. Adds one lookup per result. |\n| `csvFriendlyOutput` | boolean | `false` | Web only: one organic/paid result per row. |\n| `includeExtraBoxes` | boolean | `false` | Web only: weather, time zone, converter, stock, jobs, videos, shopping, dictionary boxes. |\n| `uule` | string | *(empty)* | Google-encoded location for city-level targeting; best-effort. |\n| `dateFrom` / `dateTo` | string | *(empty)* | Custom date range (`YYYY-MM-DD`), set together. Overrides `timePeriod`. |\n| `exactPhrase` | boolean | `false` | Wrap each query in quotes. |\n| `site` | string | *(empty)* | `site:` operator; results are checked against the domain and off-domain ones are dropped. |\n| `intitle` / `intext` / `inurl` / `fileType` | string | *(empty)* | Search operators sent to Google as-is. |\n| `excludeTerms` | string | *(empty)* | Words to exclude, comma- or space-separated. |\n\n### Examples\n\nWeb rank check with a time filter:\n\n```json\n{\n  \"queries\": [\"best running shoes 2026\"],\n  \"searchType\": \"web\",\n  \"countryCode\": \"us\",\n  \"maxResults\": 30,\n  \"maxPagesPerQuery\": 4,\n  \"timePeriod\": \"month\",\n  \"includeDestinationUrl\": true\n}\n```\n\nNews monitoring:\n\n```json\n{\n  \"queries\": [\"tesla\"],\n  \"searchType\": \"news\",\n  \"countryCode\": \"us\",\n  \"maxResults\": 20,\n  \"maxPagesPerQuery\": 2\n}\n```\n\nImage research:\n\n```json\n{\n  \"queries\": [\"tesla cybertruck\"],\n  \"searchType\": \"images\",\n  \"countryCode\": \"us\",\n  \"maxResults\": 50\n}\n```\n\n## Use cases\n\n- **SEO monitoring** — track web ranking positions across countries and languages\n- **News monitoring** — collect headlines, sources and publication times\n- **Visual research** — gather image thumbnails, sources and dimensions\n- **Video research** — collect video titles, channels and durations\n- **SERP feature tracking** — monitor ads, PAA, knowledge panels, local packs and AI Overviews\n- **Content research** — mine related searches and questions\n\n## FAQ\n\n**Is this an official Google product?**\nNo. This is an independent actor that reads publicly available Google result pages. It is not affiliated with, endorsed by, or sponsored by Google.\n\n**Do I need a proxy or Google account?**\nNo. The actor handles its own access and needs no cookies, logins, API keys or proxy configuration.\n\n**How many results can I get per query?**\nWeb results stop at Google's own ceiling of roughly 70–100, even if you ask for 200. Images return 50–100 per query. News and videos paginate in 10-result steps and stop when Google stops returning results; a news page may render 10–22 cards.\n\n**Why is `resultsTotal` sometimes a small number?**\nIt is Google's own estimate on that specific render. It fluctuates between pages and query types, so use it as a rough signal rather than a stable search-volume metric.\n\n**Why are `paidResults`, `knowledgePanel`, `localPack` or `topStories` often empty?**\nGoogle only renders those features for some queries. Ads are sparse even on commercial terms; local packs need local intent; knowledge panels need an entity. Their absence is normal, not an extraction failure.\n\n**Why is `aiOverview` empty?**\nAI Overview is opt-in because it requires a slower browser-rendered fetch, and Google still may not show one for a given query. The text is best-effort and headings/bullets may be flattened.\n\n**What is `destinationUrl`?**\nGoogle usually wraps organic links in a redirect. With `includeDestinationUrl` enabled, the actor follows that redirect and adds the real destination. If the lookup fails, `destinationUrl` is omitted and the working Google link remains in `url`.\n\n**Why did `site:` return fewer results than expected?**\nGoogle silently widens `site:` searches once the restricted corpus runs out. The actor checks each result against your domain and drops ones that do not belong, so a smaller but accurate set is expected. Social cards with follower counts are recognized as on-domain.\n\n**Does CSV mode include news, images or videos?**\nNo. `csvFriendlyOutput` is a web-only reshape. Use the default JSON layout for the other search types.\n\n**Are image URLs permanent?**\nThumbnail URLs are served by Google and are reliable. Original image URLs come from the publisher and may expire or be hotlink-protected; the actor returns the URL Google provides and does not runtime-validate every original, so a few may return 403/404.\n"
    },
    "buildNumber": "1.0.2",
    "imageDigest": "afc545b477685190c51b258f58cf5d794f203a4cc31ebb8acbc1ee794498c0be",
    "actVersion": {
      "sourceType": "TARBALL",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.031877777777777776
    }
  }
}