{
  "data": {
    "id": "bIH7aBp5p44Lvpppe",
    "actId": "7LV8qekDbhuvsPtdv",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-10-25T15:39:35.758Z",
    "finishedAt": "2026-10-25T15:39:54.722Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 18872,
      "runTimeSecs": 18.872,
      "computeUnits": 0.020968888888888888,
      "imageSizeBytes": 389563904
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Google News Scraper Input\",\n  \"description\": \"Search Google News by keyword or browse topics, convert Google News URLs, read RSS feeds, or extract full text from article URLs.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to scrape. Each mode reads its own list field below.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"keyword\",\n        \"topic\",\n        \"newsUrl\",\n        \"rss\",\n        \"articleUrls\"\n      ],\n      \"enumTitles\": [\n        \"Keyword search\",\n        \"Browse a topic\",\n        \"Google News URL\",\n        \"RSS / Atom feed\",\n        \"Direct article URLs (full text)\"\n      ],\n      \"default\": \"keyword\",\n      \"prefill\": \"keyword\"\n    },\n    \"queries\": {\n      \"title\": \"Search queries (mode=keyword)\",\n      \"type\": \"array\",\n      \"description\": \"One or more keyword queries. Google operators such as site:, intitle: and OR are supported. Results are deduplicated across queries.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": [\n        \"artificial intelligence\"\n      ]\n    },\n    \"topics\": {\n      \"title\": \"Topics (mode=topic)\",\n      \"type\": \"array\",\n      \"description\": \"Topic names (WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH), TOP for top stories, Google News topic hashes/section URLs, or topic URLs. Topic feeds ignore server-side date filters; results are filtered after download.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"newsUrls\": {\n      \"title\": \"Google News URLs (mode=newsUrl)\",\n      \"type\": \"array\",\n      \"description\": \"Google News search URLs, topic URLs, RSS search/topic URLs, or RSS/Atom feed URLs to convert into a feed.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"rssUrls\": {\n      \"title\": \"RSS / Atom feeds (mode=rss)\",\n      \"type\": \"array\",\n      \"description\": \"Any public RSS or Atom feed. Google News links inside the feed are resolved to publisher URLs automatically.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"articleUrls\": {\n      \"title\": \"Article URLs (mode=articleUrls)\",\n      \"type\": \"array\",\n      \"description\": \"Publisher article URLs or Google News article URLs. Every page is fetched and full text is extracted, with a per-record status when a publisher blocks or paywalls it.\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"description\": \"Language of the Google News edition. Combined with country in the edition token (for example US:en, DE:de, JP:ja).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"en\",\n        \"de\",\n        \"fr\",\n        \"es\",\n        \"it\",\n        \"pt\",\n        \"nl\",\n        \"pl\",\n        \"ru\",\n        \"uk\",\n        \"tr\",\n        \"ar\",\n        \"he\",\n        \"fa\",\n        \"hi\",\n        \"bn\",\n        \"ur\",\n        \"ta\",\n        \"te\",\n        \"ml\",\n        \"mr\",\n        \"gu\",\n        \"kn\",\n        \"pa\",\n        \"ja\",\n        \"ko\",\n        \"zh\",\n        \"th\",\n        \"vi\",\n        \"id\",\n        \"ms\",\n        \"fil\",\n        \"sv\",\n        \"no\",\n        \"da\",\n        \"fi\",\n        \"cs\",\n        \"sk\",\n        \"hu\",\n        \"ro\",\n        \"bg\",\n        \"el\",\n        \"hr\",\n        \"sr\",\n        \"sl\",\n        \"lt\",\n        \"lv\",\n        \"et\",\n        \"ca\",\n        \"eu\",\n        \"gl\",\n        \"af\",\n        \"sw\",\n        \"am\",\n        \"az\",\n        \"kk\",\n        \"uz\",\n        \"ne\",\n        \"si\",\n        \"my\",\n        \"km\",\n        \"lo\",\n        \"mn\",\n        \"ka\",\n        \"hy\",\n        \"is\",\n        \"ga\",\n        \"mt\",\n        \"mk\",\n        \"sq\",\n        \"bs\",\n        \"be\",\n        \"ky\",\n        \"tg\"\n      ],\n      \"enumTitles\": [\n        \"English\",\n        \"German\",\n        \"French\",\n        \"Spanish\",\n        \"Italian\",\n        \"Portuguese\",\n        \"Dutch\",\n        \"Polish\",\n        \"Russian\",\n        \"Ukrainian\",\n        \"Turkish\",\n        \"Arabic\",\n        \"Hebrew\",\n        \"Persian\",\n        \"Hindi\",\n        \"Bengali\",\n        \"Urdu\",\n        \"Tamil\",\n        \"Telugu\",\n        \"Malayalam\",\n        \"Marathi\",\n        \"Gujarati\",\n        \"Kannada\",\n        \"Punjabi\",\n        \"Japanese\",\n        \"Korean\",\n        \"Chinese\",\n        \"Thai\",\n        \"Vietnamese\",\n        \"Indonesian\",\n        \"Malay\",\n        \"Filipino\",\n        \"Swedish\",\n        \"Norwegian\",\n        \"Danish\",\n        \"Finnish\",\n        \"Czech\",\n        \"Slovak\",\n        \"Hungarian\",\n        \"Romanian\",\n        \"Bulgarian\",\n        \"Greek\",\n        \"Croatian\",\n        \"Serbian\",\n        \"Slovenian\",\n        \"Lithuanian\",\n        \"Latvian\",\n        \"Estonian\",\n        \"Catalan\",\n        \"Basque\",\n        \"Galician\",\n        \"Afrikaans\",\n        \"Swahili\",\n        \"Amharic\",\n        \"Azerbaijani\",\n        \"Kazakh\",\n        \"Uzbek\",\n        \"Nepali\",\n        \"Sinhala\",\n        \"Burmese\",\n        \"Khmer\",\n        \"Lao\",\n        \"Mongolian\",\n        \"Georgian\",\n        \"Armenian\",\n        \"Icelandic\",\n        \"Irish\",\n        \"Maltese\",\n        \"Macedonian\",\n        \"Albanian\",\n        \"Bosnian\",\n        \"Belarusian\",\n        \"Kyrgyz\",\n        \"Tajik\"\n      ],\n      \"default\": \"en\",\n      \"prefill\": \"en\"\n    },\n    \"country\": {\n      \"title\": \"Country / edition\",\n      \"type\": \"string\",\n      \"description\": \"Country edition for Google News. The actor always pins the edition so results do not change with the machine's IP.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"US\",\n        \"GB\",\n        \"CA\",\n        \"AU\",\n        \"NZ\",\n        \"IE\",\n        \"IN\",\n        \"PK\",\n        \"BD\",\n        \"LK\",\n        \"NP\",\n        \"DE\",\n        \"FR\",\n        \"ES\",\n        \"IT\",\n        \"PT\",\n        \"NL\",\n        \"BE\",\n        \"AT\",\n        \"CH\",\n        \"SE\",\n        \"NO\",\n        \"DK\",\n        \"FI\",\n        \"IS\",\n        \"PL\",\n        \"CZ\",\n        \"SK\",\n        \"HU\",\n        \"RO\",\n        \"BG\",\n        \"GR\",\n        \"HR\",\n        \"RS\",\n        \"SI\",\n        \"UA\",\n        \"RU\",\n        \"TR\",\n        \"IL\",\n        \"SA\",\n        \"AE\",\n        \"EG\",\n        \"QA\",\n        \"KW\",\n        \"BH\",\n        \"OM\",\n        \"JO\",\n        \"LB\",\n        \"IQ\",\n        \"IR\",\n        \"MA\",\n        \"DZ\",\n        \"TN\",\n        \"NG\",\n        \"KE\",\n        \"ZA\",\n        \"GH\",\n        \"ET\",\n        \"TZ\",\n        \"UG\",\n        \"MX\",\n        \"BR\",\n        \"AR\",\n        \"CL\",\n        \"CO\",\n        \"PE\",\n        \"VE\",\n        \"EC\",\n        \"UY\",\n        \"PY\",\n        \"BO\",\n        \"CR\",\n        \"PA\",\n        \"DO\",\n        \"GT\",\n        \"HN\",\n        \"SV\",\n        \"NI\",\n        \"PR\",\n        \"JP\",\n        \"KR\",\n        \"CN\",\n        \"HK\",\n        \"TW\",\n        \"SG\",\n        \"MY\",\n        \"ID\",\n        \"TH\",\n        \"VN\",\n        \"PH\",\n        \"KH\",\n        \"MM\",\n        \"LA\",\n        \"MN\",\n        \"KZ\",\n        \"UZ\",\n        \"AZ\",\n        \"GE\",\n        \"AM\"\n      ],\n      \"enumTitles\": [\n        \"United States\",\n        \"United Kingdom\",\n        \"Canada\",\n        \"Australia\",\n        \"New Zealand\",\n        \"Ireland\",\n        \"India\",\n        \"Pakistan\",\n        \"Bangladesh\",\n        \"Sri Lanka\",\n        \"Nepal\",\n        \"Germany\",\n        \"France\",\n        \"Spain\",\n        \"Italy\",\n        \"Portugal\",\n        \"Netherlands\",\n        \"Belgium\",\n        \"Austria\",\n        \"Switzerland\",\n        \"Sweden\",\n        \"Norway\",\n        \"Denmark\",\n        \"Finland\",\n        \"Iceland\",\n        \"Poland\",\n        \"Czechia\",\n        \"Slovakia\",\n        \"Hungary\",\n        \"Romania\",\n        \"Bulgaria\",\n        \"Greece\",\n        \"Croatia\",\n        \"Serbia\",\n        \"Slovenia\",\n        \"Ukraine\",\n        \"Russia\",\n        \"Turkey\",\n        \"Israel\",\n        \"Saudi Arabia\",\n        \"United Arab Emirates\",\n        \"Egypt\",\n        \"Qatar\",\n        \"Kuwait\",\n        \"Bahrain\",\n        \"Oman\",\n        \"Jordan\",\n        \"Lebanon\",\n        \"Iraq\",\n        \"Iran\",\n        \"Morocco\",\n        \"Algeria\",\n        \"Tunisia\",\n        \"Nigeria\",\n        \"Kenya\",\n        \"South Africa\",\n        \"Ghana\",\n        \"Ethiopia\",\n        \"Tanzania\",\n        \"Uganda\",\n        \"Mexico\",\n        \"Brazil\",\n        \"Argentina\",\n        \"Chile\",\n        \"Colombia\",\n        \"Peru\",\n        \"Venezuela\",\n        \"Ecuador\",\n        \"Uruguay\",\n        \"Paraguay\",\n        \"Bolivia\",\n        \"Costa Rica\",\n        \"Panama\",\n        \"Dominican Republic\",\n        \"Guatemala\",\n        \"Honduras\",\n        \"El Salvador\",\n        \"Nicaragua\",\n        \"Puerto Rico\",\n        \"Japan\",\n        \"South Korea\",\n        \"China\",\n        \"Hong Kong\",\n        \"Taiwan\",\n        \"Singapore\",\n        \"Malaysia\",\n        \"Indonesia\",\n        \"Thailand\",\n        \"Vietnam\",\n        \"Philippines\",\n        \"Cambodia\",\n        \"Myanmar\",\n        \"Laos\",\n        \"Mongolia\",\n        \"Kazakhstan\",\n        \"Uzbekistan\",\n        \"Azerbaijan\",\n        \"Georgia\",\n        \"Armenia\"\n      ],\n      \"default\": \"US\",\n      \"prefill\": \"US\"\n    },\n    \"dateRange\": {\n      \"title\": \"Date range\",\n      \"type\": \"string\",\n      \"description\": \"Recency window. Every item is post-filtered by its real publication time, so items newer than the window never leak. 'custom' uses startDate/endDate. Multi-day ranges can be walked day by day to collect more than one feed page.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"1h\",\n        \"6h\",\n        \"12h\",\n        \"1d\",\n        \"7d\",\n        \"30d\",\n        \"1y\",\n        \"custom\"\n      ],\n      \"enumTitles\": [\n        \"Any time\",\n        \"Past hour\",\n        \"Past 6 hours\",\n        \"Past 12 hours\",\n        \"Past day\",\n        \"Past week\",\n        \"Past 30 days\",\n        \"Past year\",\n        \"Custom dates\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"startDate\": {\n      \"title\": \"Start date\",\n      \"type\": \"string\",\n      \"description\": \"Custom range start (YYYY-MM-DD, inclusive). Also used when dateRange=custom.\",\n      \"editor\": \"textfield\"\n    },\n    \"endDate\": {\n      \"title\": \"End date\",\n      \"type\": \"string\",\n      \"description\": \"Custom range end (YYYY-MM-DD, inclusive). Items published after the end are dropped client-side.\",\n      \"editor\": \"textfield\"\n    },\n    \"maxResultsPerQuery\": {\n      \"title\": \"Max results per query window\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum records taken from each Google News feed request (1-100, Google's own cap is about 100). When a date range spans several days, the actor walks day windows and can collect more than 100 for one query, up to maxItems.\",\n      \"default\": 20,\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"prefill\": 3\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on unique records emitted by the run (1-5000).\",\n      \"default\": 500,\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"prefill\": 3\n    },\n    \"extractFullText\": {\n      \"title\": \"Extract full text\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch each publisher page and extract its article body, description, author, and image. Default off for fast metadata-only runs. The articleUrls mode always extracts.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxFullText\": {\n      \"title\": \"Max full-text extractions\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum pages fetched for full text per run (1-500). Records beyond this cap are still returned with fullTextStatus=skipped_cap.\",\n      \"default\": 100,\n      \"minimum\": 1,\n      \"maximum\": 500,\n      \"prefill\": 100\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional. No proxy is needed by default; Google News RSS and publisher pages work without one. Residential proxies can make Google rate-limit more, so leave this off unless you need it.\",\n      \"editor\": \"proxy\",\n      \"default\": {\n        \"useApifyProxy\": false\n      },\n      \"prefill\": {\n        \"useApifyProxy\": false\n      }\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Google News Keyword & Full-Text Article Scraper\r\n\r\nScrape **Google News** without a login, API key, or browser. Search by keyword, browse a topic, convert a Google News link, read any RSS/Atom feed, or send publisher article URLs for full-text extraction. Every record carries a clean headline, the real publisher URL instead of a Google redirect, a canonical-URL dedupe key, and an honest extraction status when a publisher refuses the page.\r\n\r\n## What this actor does\r\n\r\n- **Five input modes:** `keyword`, `topic`, `newsUrl`, `rss`, and `articleUrls`.\r\n- **Real publisher links:** Google News article tokens are resolved in batches, with the Google link kept as a fallback if the token ever changes.\r\n- **Date-correct results:** every item is filtered against its actual `publishedAt` time, so a \"past day\" run cannot leak a newer or older article. In keyword mode, multi-day ranges are walked day by day, which also gets past Google's ~100-item feed cap; topic and RSS modes return the feed's available items.\r\n- **Clean, deduplicated records:** the ` - Publisher` suffix is removed from titles, and the same story is deduplicated by canonical publisher URL across queries and day windows.\r\n- **Optional, honest full text:** page text, description, author, and image are extracted only when requested (always in `articleUrls` mode). A blocked, paywalled, timed-out, or short page becomes a record with `fullTextStatus` instead of a silent null.\r\n- **Empty fields are omitted** from every record.\r\n\r\n## Output per article\r\n\r\n- `title` — headline with Google's publisher suffix removed\r\n- `url` — the publisher's article URL; the Google News link when resolution fails\r\n- `source` — publisher name from the feed or page\r\n- `domain` — publisher hostname, e.g. `bbc.com`\r\n- `publishedAt` — ISO 8601 UTC publication time from the feed\r\n- `snippet` — publisher description when a page was fetched; omitted for metadata-only runs because Google's RSS \"description\" only repeats the title\r\n- `author` — byline from page metadata when available\r\n- `imageUrl` — article image from the publisher page or feed\r\n- `language` — edition language used for the run\r\n- `fullText` — extracted article body when full text was requested and available\r\n- `fullTextStatus` — `ok`, `short`, `empty`, `blocked`, `paywalled`, `rate_limited`, `not_found`, `timeout`, `error`, `unresolved`, or `skipped_cap`\r\n- `query` — the keyword, topic, feed URL, or article URL that produced the row\r\n- `recordType` — always `article`\r\n- `sourceUrl` — the Google News or feed link the record came from\r\n- `scrapedAt` — UTC timestamp when the run assembled the record\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | string | `keyword` | `keyword`, `topic`, `newsUrl`, `rss`, or `articleUrls` |\r\n| `queries` | array | – | Keywords for `keyword` mode; Google operators such as `site:` and `OR` work |\r\n| `topics` | array | – | Topic names (`WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH`), `TOP`, topic hashes, or Google News topic URLs (`topic` mode) |\r\n| `newsUrls` | array | – | Google News search/topic URLs or RSS/Atom feeds (`newsUrl` mode) |\r\n| `rssUrls` | array | – | Any public RSS or Atom feed (`rss` mode) |\r\n| `articleUrls` | array | – | Publisher or Google News article URLs (`articleUrls` mode); full text is always attempted |\r\n| `language` | string | `en` | Edition language, e.g. `en`, `de`, `ja`, `hi` |\r\n| `country` | string | `US` | Edition country, e.g. `US`, `GB`, `DE`, `IN` |\r\n| `dateRange` | string | `any` | `any`, `1h`, `6h`, `12h`, `1d`, `7d`, `30d`, `1y`, or `custom` |\r\n| `startDate` | string | – | Custom range start, `YYYY-MM-DD`, inclusive |\r\n| `endDate` | string | – | Custom range end, `YYYY-MM-DD`, inclusive |\r\n| `maxResultsPerQuery` | integer | `20` | Records taken from each feed request (1–100, Google's feed cap is about 100) |\r\n| `maxItems` | integer | `500` | Hard cap on unique records in the run (1–5000) |\r\n| `extractFullText` | boolean | `false` | Fetch publisher pages for body text, description, author, and image |\r\n| `maxFullText` | integer | `100` | Maximum pages fetched per run (1–500); later records get `fullTextStatus=skipped_cap` |\r\n| `proxyConfiguration` | object | off | Optional; no proxy is needed or recommended by default |\r\n\r\n### Dates and caps\r\n\r\n- Relative ranges use Google's recency operator and are then post-filtered against the real publication time.\r\n- A custom `startDate`/`endDate` is inclusive. Items published after the end are always dropped, even if Google's search operator returns them.\r\n- When a date range spans several days and you ask for more than one feed page, the actor walks day windows (newest first) and collects up to `maxItems`. Full windows are reported with a truncation signal in the run status.\r\n- A single Google News feed returns roughly 100 items. `maxResultsPerQuery` caps each feed window; `maxItems` caps the whole run.\r\n- Full text is capped per run so a large metadata pull cannot turn into thousands of publisher requests.\r\n\r\n## Examples\r\n\r\n### Keyword scan, fastest mode\r\n\r\n```json\r\n{\r\n  \"mode\": \"keyword\",\r\n  \"queries\": [\"artificial intelligence\", \"semiconductor policy\"],\r\n  \"dateRange\": \"7d\",\r\n  \"maxResultsPerQuery\": 20,\r\n  \"maxItems\": 100\r\n}\r\n```\r\n\r\n### Topic feed with full text\r\n\r\n```json\r\n{\r\n  \"mode\": \"topic\",\r\n  \"topics\": [\"TECHNOLOGY\", \"SCIENCE\"],\r\n  \"extractFullText\": true,\r\n  \"maxFullText\": 50,\r\n  \"maxItems\": 50\r\n}\r\n```\r\n\r\n### Custom date range and real publisher URLs\r\n\r\n```json\r\n{\r\n  \"mode\": \"keyword\",\r\n  \"queries\": [\"central bank interest rates\"],\r\n  \"dateRange\": \"custom\",\r\n  \"startDate\": \"2026-10-01\",\r\n  \"endDate\": \"2026-10-20\",\r\n  \"maxResultsPerQuery\": 100,\r\n  \"maxItems\": 500\r\n}\r\n```\r\n\r\n### Backfill known article URLs\r\n\r\n```json\r\n{\r\n  \"mode\": \"articleUrls\",\r\n  \"articleUrls\": [\r\n    \"https://example.com/news/story-one\",\r\n    \"https://example.com/news/story-two\"\r\n  ],\r\n  \"maxFullText\": 20\r\n}\r\n```\r\n\r\n### Read an existing RSS feed\r\n\r\n```json\r\n{\r\n  \"mode\": \"rss\",\r\n  \"rssUrls\": [\"https://feeds.bbci.co.uk/news/rss.xml\"],\r\n  \"maxResultsPerQuery\": 30,\r\n  \"maxItems\": 30\r\n}\r\n```\r\n\r\n## Use cases\r\n\r\n- **Media monitoring** — track brand, competitor, or industry coverage across thousands of publishers.\r\n- **Newsletter and digest curation** — pull a dated, deduplicated story list for a daily or weekly issue.\r\n- **NLP and RAG corpora** — collect headlines now and full article bodies for the subset that matters.\r\n- **Market and event research** — build a date-bounded dataset around an earnings call, election, or product launch.\r\n- **PR and communications reporting** — measure coverage volume and collect the underlying links.\r\n- **Academic and policy research** — export a reproducible, date-correct news sample with publisher URLs.\r\n\r\n## FAQ\r\n\r\n### Does this return the real article URL or a Google redirect?\r\n\r\nThe real publisher URL. Google News tokens are resolved through Google's own article endpoint. If Google changes the token format, the actor keeps the Google News link rather than losing the record, and says so in the run status.\r\n\r\n### Why is `snippet` missing on a metadata-only run?\r\n\r\nGoogle News RSS does not contain a real summary — its description is just the headline plus the publisher name. Returning that as a snippet would duplicate `title`. A real snippet comes from the publisher page, so it appears only when `extractFullText` is on or in `articleUrls` mode.\r\n\r\n### What do the `fullTextStatus` values mean?\r\n\r\n`ok` means a substantial body was extracted; `short` means a small body was found; `empty` means no body; `blocked`, `rate_limited`, `not_found`, `timeout`, and `error` describe publisher responses; `paywalled` means a subscription wall was detected; `unresolved` means the publisher URL could not be resolved; `skipped_cap` means the record was beyond `maxFullText`.\r\n\r\n### Can full text read paywalled articles?\r\n\r\nNo. The actor reads only what a publisher serves publicly. It does not bypass paywalls, logins, or consent walls, and it never claims 100% full-text coverage. Premium publishers may return a short preview or a blocked status.\r\n\r\n### Why did I get fewer than 100 results for one query?\r\n\r\nGoogle News returns roughly 100 items per feed request and has no working pagination parameter. The actor splits multi-day ranges into day windows to collect more, up to `maxItems`. If a window hits the feed cap, the run reports a truncation signal.\r\n\r\n### How does the date filter work?\r\n\r\nGoogle's own date operators are day-granular and timezone-fuzzy. The actor adds the operator to the search, then drops every item whose real `publishedAt` falls outside your window. That is why a \"past day\" run does not include tomorrow's articles or yesterday's late items.\r\n\r\n### Are results deduplicated?\r\n\r\nYes. The same story is deduplicated by canonical publisher URL after resolution, with a Google article ID and a title/source key as fallbacks. Tracking parameters, `www.`, fragments, and trailing slashes do not create duplicate rows.\r\n\r\n### Does a blocked publisher stop the run?\r\n\r\nNo. A 401, 403, 429, timeout, or paywall produces a normal record with the RSS metadata and a `fullTextStatus`. The rest of the run continues. If the whole run produces zero records, the actor fails loudly with the feed errors instead of pretending it succeeded.\r\n\r\n### Do I need a proxy or an API key?\r\n\r\nNo. Google News RSS and publisher pages are reached directly. A proxy is optional and usually unnecessary; residential proxies can actually make Google rate-limit more.\r\n\r\n### Is this affiliated with Google?\r\n\r\nNo. This is an independent, third-party actor that reads publicly available Google News feeds and publisher pages. It is not affiliated with or endorsed by Google. You are responsible for respecting publisher terms when storing or redistributing article text.\r\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "google-news-keyword-and-full-text-article-scraper",
      "title": "Google News Keyword & Full-Text Article Scraper",
      "description": "Search Google News by keyword or topic, convert Google News URLs and RSS feeds, and extract article text. Returns clean titles, real publisher URLs, canonical-URL deduplication, date-correct results, and a per-record extraction status instead of silent nulls.",
      "version": "2.0",
      "buildTag": "latest",
      "readme": "# Google News Keyword & Full-Text Article Scraper\r\n\r\nScrape **Google News** without a login, API key, or browser. Search by keyword, browse a topic, convert a Google News link, read any RSS/Atom feed, or send publisher article URLs for full-text extraction. Every record carries a clean headline, the real publisher URL instead of a Google redirect, a canonical-URL dedupe key, and an honest extraction status when a publisher refuses the page.\r\n\r\n## What this actor does\r\n\r\n- **Five input modes:** `keyword`, `topic`, `newsUrl`, `rss`, and `articleUrls`.\r\n- **Real publisher links:** Google News article tokens are resolved in batches, with the Google link kept as a fallback if the token ever changes.\r\n- **Date-correct results:** every item is filtered against its actual `publishedAt` time, so a \"past day\" run cannot leak a newer or older article. In keyword mode, multi-day ranges are walked day by day, which also gets past Google's ~100-item feed cap; topic and RSS modes return the feed's available items.\r\n- **Clean, deduplicated records:** the ` - Publisher` suffix is removed from titles, and the same story is deduplicated by canonical publisher URL across queries and day windows.\r\n- **Optional, honest full text:** page text, description, author, and image are extracted only when requested (always in `articleUrls` mode). A blocked, paywalled, timed-out, or short page becomes a record with `fullTextStatus` instead of a silent null.\r\n- **Empty fields are omitted** from every record.\r\n\r\n## Output per article\r\n\r\n- `title` — headline with Google's publisher suffix removed\r\n- `url` — the publisher's article URL; the Google News link when resolution fails\r\n- `source` — publisher name from the feed or page\r\n- `domain` — publisher hostname, e.g. `bbc.com`\r\n- `publishedAt` — ISO 8601 UTC publication time from the feed\r\n- `snippet` — publisher description when a page was fetched; omitted for metadata-only runs because Google's RSS \"description\" only repeats the title\r\n- `author` — byline from page metadata when available\r\n- `imageUrl` — article image from the publisher page or feed\r\n- `language` — edition language used for the run\r\n- `fullText` — extracted article body when full text was requested and available\r\n- `fullTextStatus` — `ok`, `short`, `empty`, `blocked`, `paywalled`, `rate_limited`, `not_found`, `timeout`, `error`, `unresolved`, or `skipped_cap`\r\n- `query` — the keyword, topic, feed URL, or article URL that produced the row\r\n- `recordType` — always `article`\r\n- `sourceUrl` — the Google News or feed link the record came from\r\n- `scrapedAt` — UTC timestamp when the run assembled the record\r\n\r\n## Input\r\n\r\n| Field | Type | Default | Description |\r\n|---|---|---|---|\r\n| `mode` | string | `keyword` | `keyword`, `topic`, `newsUrl`, `rss`, or `articleUrls` |\r\n| `queries` | array | – | Keywords for `keyword` mode; Google operators such as `site:` and `OR` work |\r\n| `topics` | array | – | Topic names (`WORLD`, `NATION`, `BUSINESS`, `TECHNOLOGY`, `ENTERTAINMENT`, `SPORTS`, `SCIENCE`, `HEALTH`), `TOP`, topic hashes, or Google News topic URLs (`topic` mode) |\r\n| `newsUrls` | array | – | Google News search/topic URLs or RSS/Atom feeds (`newsUrl` mode) |\r\n| `rssUrls` | array | – | Any public RSS or Atom feed (`rss` mode) |\r\n| `articleUrls` | array | – | Publisher or Google News article URLs (`articleUrls` mode); full text is always attempted |\r\n| `language` | string | `en` | Edition language, e.g. `en`, `de`, `ja`, `hi` |\r\n| `country` | string | `US` | Edition country, e.g. `US`, `GB`, `DE`, `IN` |\r\n| `dateRange` | string | `any` | `any`, `1h`, `6h`, `12h`, `1d`, `7d`, `30d`, `1y`, or `custom` |\r\n| `startDate` | string | – | Custom range start, `YYYY-MM-DD`, inclusive |\r\n| `endDate` | string | – | Custom range end, `YYYY-MM-DD`, inclusive |\r\n| `maxResultsPerQuery` | integer | `20` | Records taken from each feed request (1–100, Google's feed cap is about 100) |\r\n| `maxItems` | integer | `500` | Hard cap on unique records in the run (1–5000) |\r\n| `extractFullText` | boolean | `false` | Fetch publisher pages for body text, description, author, and image |\r\n| `maxFullText` | integer | `100` | Maximum pages fetched per run (1–500); later records get `fullTextStatus=skipped_cap` |\r\n| `proxyConfiguration` | object | off | Optional; no proxy is needed or recommended by default |\r\n\r\n### Dates and caps\r\n\r\n- Relative ranges use Google's recency operator and are then post-filtered against the real publication time.\r\n- A custom `startDate`/`endDate` is inclusive. Items published after the end are always dropped, even if Google's search operator returns them.\r\n- When a date range spans several days and you ask for more than one feed page, the actor walks day windows (newest first) and collects up to `maxItems`. Full windows are reported with a truncation signal in the run status.\r\n- A single Google News feed returns roughly 100 items. `maxResultsPerQuery` caps each feed window; `maxItems` caps the whole run.\r\n- Full text is capped per run so a large metadata pull cannot turn into thousands of publisher requests.\r\n\r\n## Examples\r\n\r\n### Keyword scan, fastest mode\r\n\r\n```json\r\n{\r\n  \"mode\": \"keyword\",\r\n  \"queries\": [\"artificial intelligence\", \"semiconductor policy\"],\r\n  \"dateRange\": \"7d\",\r\n  \"maxResultsPerQuery\": 20,\r\n  \"maxItems\": 100\r\n}\r\n```\r\n\r\n### Topic feed with full text\r\n\r\n```json\r\n{\r\n  \"mode\": \"topic\",\r\n  \"topics\": [\"TECHNOLOGY\", \"SCIENCE\"],\r\n  \"extractFullText\": true,\r\n  \"maxFullText\": 50,\r\n  \"maxItems\": 50\r\n}\r\n```\r\n\r\n### Custom date range and real publisher URLs\r\n\r\n```json\r\n{\r\n  \"mode\": \"keyword\",\r\n  \"queries\": [\"central bank interest rates\"],\r\n  \"dateRange\": \"custom\",\r\n  \"startDate\": \"2026-10-01\",\r\n  \"endDate\": \"2026-10-20\",\r\n  \"maxResultsPerQuery\": 100,\r\n  \"maxItems\": 500\r\n}\r\n```\r\n\r\n### Backfill known article URLs\r\n\r\n```json\r\n{\r\n  \"mode\": \"articleUrls\",\r\n  \"articleUrls\": [\r\n    \"https://example.com/news/story-one\",\r\n    \"https://example.com/news/story-two\"\r\n  ],\r\n  \"maxFullText\": 20\r\n}\r\n```\r\n\r\n### Read an existing RSS feed\r\n\r\n```json\r\n{\r\n  \"mode\": \"rss\",\r\n  \"rssUrls\": [\"https://feeds.bbci.co.uk/news/rss.xml\"],\r\n  \"maxResultsPerQuery\": 30,\r\n  \"maxItems\": 30\r\n}\r\n```\r\n\r\n## Use cases\r\n\r\n- **Media monitoring** — track brand, competitor, or industry coverage across thousands of publishers.\r\n- **Newsletter and digest curation** — pull a dated, deduplicated story list for a daily or weekly issue.\r\n- **NLP and RAG corpora** — collect headlines now and full article bodies for the subset that matters.\r\n- **Market and event research** — build a date-bounded dataset around an earnings call, election, or product launch.\r\n- **PR and communications reporting** — measure coverage volume and collect the underlying links.\r\n- **Academic and policy research** — export a reproducible, date-correct news sample with publisher URLs.\r\n\r\n## FAQ\r\n\r\n### Does this return the real article URL or a Google redirect?\r\n\r\nThe real publisher URL. Google News tokens are resolved through Google's own article endpoint. If Google changes the token format, the actor keeps the Google News link rather than losing the record, and says so in the run status.\r\n\r\n### Why is `snippet` missing on a metadata-only run?\r\n\r\nGoogle News RSS does not contain a real summary — its description is just the headline plus the publisher name. Returning that as a snippet would duplicate `title`. A real snippet comes from the publisher page, so it appears only when `extractFullText` is on or in `articleUrls` mode.\r\n\r\n### What do the `fullTextStatus` values mean?\r\n\r\n`ok` means a substantial body was extracted; `short` means a small body was found; `empty` means no body; `blocked`, `rate_limited`, `not_found`, `timeout`, and `error` describe publisher responses; `paywalled` means a subscription wall was detected; `unresolved` means the publisher URL could not be resolved; `skipped_cap` means the record was beyond `maxFullText`.\r\n\r\n### Can full text read paywalled articles?\r\n\r\nNo. The actor reads only what a publisher serves publicly. It does not bypass paywalls, logins, or consent walls, and it never claims 100% full-text coverage. Premium publishers may return a short preview or a blocked status.\r\n\r\n### Why did I get fewer than 100 results for one query?\r\n\r\nGoogle News returns roughly 100 items per feed request and has no working pagination parameter. The actor splits multi-day ranges into day windows to collect more, up to `maxItems`. If a window hits the feed cap, the run reports a truncation signal.\r\n\r\n### How does the date filter work?\r\n\r\nGoogle's own date operators are day-granular and timezone-fuzzy. The actor adds the operator to the search, then drops every item whose real `publishedAt` falls outside your window. That is why a \"past day\" run does not include tomorrow's articles or yesterday's late items.\r\n\r\n### Are results deduplicated?\r\n\r\nYes. The same story is deduplicated by canonical publisher URL after resolution, with a Google article ID and a title/source key as fallbacks. Tracking parameters, `www.`, fragments, and trailing slashes do not create duplicate rows.\r\n\r\n### Does a blocked publisher stop the run?\r\n\r\nNo. A 401, 403, 429, timeout, or paywall produces a normal record with the RSS metadata and a `fullTextStatus`. The rest of the run continues. If the whole run produces zero records, the actor fails loudly with the feed errors instead of pretending it succeeded.\r\n\r\n### Do I need a proxy or an API key?\r\n\r\nNo. Google News RSS and publisher pages are reached directly. A proxy is optional and usually unnecessary; residential proxies can actually make Google rate-limit more.\r\n\r\n### Is this affiliated with Google?\r\n\r\nNo. This is an independent, third-party actor that reads publicly available Google News feeds and publisher pages. It is not affiliated with or endorsed by Google. You are responsible for respecting publisher terms when storing or redistributing article text.\r\n",
      "meta": {
        "templateId": "python-http"
      },
      "input": {
        "title": "Google News Scraper Input",
        "description": "Search Google News by keyword or browse topics, convert Google News URLs, read RSS feeds, or extract full text from article URLs.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to scrape. Each mode reads its own list field below.",
            "editor": "select",
            "enum": [
              "keyword",
              "topic",
              "newsUrl",
              "rss",
              "articleUrls"
            ],
            "enumTitles": [
              "Keyword search",
              "Browse a topic",
              "Google News URL",
              "RSS / Atom feed",
              "Direct article URLs (full text)"
            ],
            "default": "keyword",
            "prefill": "keyword"
          },
          "queries": {
            "title": "Search queries (mode=keyword)",
            "type": "array",
            "description": "One or more keyword queries. Google operators such as site:, intitle: and OR are supported. Results are deduplicated across queries.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": [
              "artificial intelligence"
            ]
          },
          "topics": {
            "title": "Topics (mode=topic)",
            "type": "array",
            "description": "Topic names (WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH), TOP for top stories, Google News topic hashes/section URLs, or topic URLs. Topic feeds ignore server-side date filters; results are filtered after download.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": []
          },
          "newsUrls": {
            "title": "Google News URLs (mode=newsUrl)",
            "type": "array",
            "description": "Google News search URLs, topic URLs, RSS search/topic URLs, or RSS/Atom feed URLs to convert into a feed.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": []
          },
          "rssUrls": {
            "title": "RSS / Atom feeds (mode=rss)",
            "type": "array",
            "description": "Any public RSS or Atom feed. Google News links inside the feed are resolved to publisher URLs automatically.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": []
          },
          "articleUrls": {
            "title": "Article URLs (mode=articleUrls)",
            "type": "array",
            "description": "Publisher article URLs or Google News article URLs. Every page is fetched and full text is extracted, with a per-record status when a publisher blocks or paywalls it.",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": []
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Language of the Google News edition. Combined with country in the edition token (for example US:en, DE:de, JP:ja).",
            "editor": "select",
            "enum": [
              "en",
              "de",
              "fr",
              "es",
              "it",
              "pt",
              "nl",
              "pl",
              "ru",
              "uk",
              "tr",
              "ar",
              "he",
              "fa",
              "hi",
              "bn",
              "ur",
              "ta",
              "te",
              "ml",
              "mr",
              "gu",
              "kn",
              "pa",
              "ja",
              "ko",
              "zh",
              "th",
              "vi",
              "id",
              "ms",
              "fil",
              "sv",
              "no",
              "da",
              "fi",
              "cs",
              "sk",
              "hu",
              "ro",
              "bg",
              "el",
              "hr",
              "sr",
              "sl",
              "lt",
              "lv",
              "et",
              "ca",
              "eu",
              "gl",
              "af",
              "sw",
              "am",
              "az",
              "kk",
              "uz",
              "ne",
              "si",
              "my",
              "km",
              "lo",
              "mn",
              "ka",
              "hy",
              "is",
              "ga",
              "mt",
              "mk",
              "sq",
              "bs",
              "be",
              "ky",
              "tg"
            ],
            "enumTitles": [
              "English",
              "German",
              "French",
              "Spanish",
              "Italian",
              "Portuguese",
              "Dutch",
              "Polish",
              "Russian",
              "Ukrainian",
              "Turkish",
              "Arabic",
              "Hebrew",
              "Persian",
              "Hindi",
              "Bengali",
              "Urdu",
              "Tamil",
              "Telugu",
              "Malayalam",
              "Marathi",
              "Gujarati",
              "Kannada",
              "Punjabi",
              "Japanese",
              "Korean",
              "Chinese",
              "Thai",
              "Vietnamese",
              "Indonesian",
              "Malay",
              "Filipino",
              "Swedish",
              "Norwegian",
              "Danish",
              "Finnish",
              "Czech",
              "Slovak",
              "Hungarian",
              "Romanian",
              "Bulgarian",
              "Greek",
              "Croatian",
              "Serbian",
              "Slovenian",
              "Lithuanian",
              "Latvian",
              "Estonian",
              "Catalan",
              "Basque",
              "Galician",
              "Afrikaans",
              "Swahili",
              "Amharic",
              "Azerbaijani",
              "Kazakh",
              "Uzbek",
              "Nepali",
              "Sinhala",
              "Burmese",
              "Khmer",
              "Lao",
              "Mongolian",
              "Georgian",
              "Armenian",
              "Icelandic",
              "Irish",
              "Maltese",
              "Macedonian",
              "Albanian",
              "Bosnian",
              "Belarusian",
              "Kyrgyz",
              "Tajik"
            ],
            "default": "en",
            "prefill": "en"
          },
          "country": {
            "title": "Country / edition",
            "type": "string",
            "description": "Country edition for Google News. The actor always pins the edition so results do not change with the machine's IP.",
            "editor": "select",
            "enum": [
              "US",
              "GB",
              "CA",
              "AU",
              "NZ",
              "IE",
              "IN",
              "PK",
              "BD",
              "LK",
              "NP",
              "DE",
              "FR",
              "ES",
              "IT",
              "PT",
              "NL",
              "BE",
              "AT",
              "CH",
              "SE",
              "NO",
              "DK",
              "FI",
              "IS",
              "PL",
              "CZ",
              "SK",
              "HU",
              "RO",
              "BG",
              "GR",
              "HR",
              "RS",
              "SI",
              "UA",
              "RU",
              "TR",
              "IL",
              "SA",
              "AE",
              "EG",
              "QA",
              "KW",
              "BH",
              "OM",
              "JO",
              "LB",
              "IQ",
              "IR",
              "MA",
              "DZ",
              "TN",
              "NG",
              "KE",
              "ZA",
              "GH",
              "ET",
              "TZ",
              "UG",
              "MX",
              "BR",
              "AR",
              "CL",
              "CO",
              "PE",
              "VE",
              "EC",
              "UY",
              "PY",
              "BO",
              "CR",
              "PA",
              "DO",
              "GT",
              "HN",
              "SV",
              "NI",
              "PR",
              "JP",
              "KR",
              "CN",
              "HK",
              "TW",
              "SG",
              "MY",
              "ID",
              "TH",
              "VN",
              "PH",
              "KH",
              "MM",
              "LA",
              "MN",
              "KZ",
              "UZ",
              "AZ",
              "GE",
              "AM"
            ],
            "enumTitles": [
              "United States",
              "United Kingdom",
              "Canada",
              "Australia",
              "New Zealand",
              "Ireland",
              "India",
              "Pakistan",
              "Bangladesh",
              "Sri Lanka",
              "Nepal",
              "Germany",
              "France",
              "Spain",
              "Italy",
              "Portugal",
              "Netherlands",
              "Belgium",
              "Austria",
              "Switzerland",
              "Sweden",
              "Norway",
              "Denmark",
              "Finland",
              "Iceland",
              "Poland",
              "Czechia",
              "Slovakia",
              "Hungary",
              "Romania",
              "Bulgaria",
              "Greece",
              "Croatia",
              "Serbia",
              "Slovenia",
              "Ukraine",
              "Russia",
              "Turkey",
              "Israel",
              "Saudi Arabia",
              "United Arab Emirates",
              "Egypt",
              "Qatar",
              "Kuwait",
              "Bahrain",
              "Oman",
              "Jordan",
              "Lebanon",
              "Iraq",
              "Iran",
              "Morocco",
              "Algeria",
              "Tunisia",
              "Nigeria",
              "Kenya",
              "South Africa",
              "Ghana",
              "Ethiopia",
              "Tanzania",
              "Uganda",
              "Mexico",
              "Brazil",
              "Argentina",
              "Chile",
              "Colombia",
              "Peru",
              "Venezuela",
              "Ecuador",
              "Uruguay",
              "Paraguay",
              "Bolivia",
              "Costa Rica",
              "Panama",
              "Dominican Republic",
              "Guatemala",
              "Honduras",
              "El Salvador",
              "Nicaragua",
              "Puerto Rico",
              "Japan",
              "South Korea",
              "China",
              "Hong Kong",
              "Taiwan",
              "Singapore",
              "Malaysia",
              "Indonesia",
              "Thailand",
              "Vietnam",
              "Philippines",
              "Cambodia",
              "Myanmar",
              "Laos",
              "Mongolia",
              "Kazakhstan",
              "Uzbekistan",
              "Azerbaijan",
              "Georgia",
              "Armenia"
            ],
            "default": "US",
            "prefill": "US"
          },
          "dateRange": {
            "title": "Date range",
            "type": "string",
            "description": "Recency window. Every item is post-filtered by its real publication time, so items newer than the window never leak. 'custom' uses startDate/endDate. Multi-day ranges can be walked day by day to collect more than one feed page.",
            "editor": "select",
            "enum": [
              "any",
              "1h",
              "6h",
              "12h",
              "1d",
              "7d",
              "30d",
              "1y",
              "custom"
            ],
            "enumTitles": [
              "Any time",
              "Past hour",
              "Past 6 hours",
              "Past 12 hours",
              "Past day",
              "Past week",
              "Past 30 days",
              "Past year",
              "Custom dates"
            ],
            "default": "any",
            "prefill": "any"
          },
          "startDate": {
            "title": "Start date",
            "type": "string",
            "description": "Custom range start (YYYY-MM-DD, inclusive). Also used when dateRange=custom.",
            "editor": "textfield"
          },
          "endDate": {
            "title": "End date",
            "type": "string",
            "description": "Custom range end (YYYY-MM-DD, inclusive). Items published after the end are dropped client-side.",
            "editor": "textfield"
          },
          "maxResultsPerQuery": {
            "title": "Max results per query window",
            "type": "integer",
            "description": "Maximum records taken from each Google News feed request (1-100, Google's own cap is about 100). When a date range spans several days, the actor walks day windows and can collect more than 100 for one query, up to maxItems.",
            "default": 20,
            "minimum": 1,
            "maximum": 100,
            "prefill": 3
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on unique records emitted by the run (1-5000).",
            "default": 500,
            "minimum": 1,
            "maximum": 5000,
            "prefill": 3
          },
          "extractFullText": {
            "title": "Extract full text",
            "type": "boolean",
            "description": "Fetch each publisher page and extract its article body, description, author, and image. Default off for fast metadata-only runs. The articleUrls mode always extracts.",
            "default": false,
            "prefill": false
          },
          "maxFullText": {
            "title": "Max full-text extractions",
            "type": "integer",
            "description": "Maximum pages fetched for full text per run (1-500). Records beyond this cap are still returned with fullTextStatus=skipped_cap.",
            "default": 100,
            "minimum": 1,
            "maximum": 500,
            "prefill": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. No proxy is needed by default; Google News RSS and publisher pages work without one. Residential proxies can make Google rate-limit more, so leave this off unless you need it.",
            "editor": "proxy",
            "default": {
              "useApifyProxy": false
            },
            "prefill": {
              "useApifyProxy": false
            }
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Google News Keyword & Full-Text Article Scraper Output",
        "description": "Unique news articles with clean title, real publisher URL, source, domain, publication time, optional full text, author, image, and a machine-readable fullTextStatus. Empty fields are omitted.",
        "properties": {
          "overview": {
            "type": "string",
            "title": "Articles overview",
            "description": "Dataset view with one row per article: query, title, source, domain, publishedAt, url, fullTextStatus.",
            "template": "{{links.apiDefaultDatasetUrl}}/items?view=overview"
          },
          "fullText": {
            "type": "string",
            "title": "Full text",
            "description": "Dataset view focused on extracted article bodies, authors, images, and extraction status.",
            "template": "{{links.apiDefaultDatasetUrl}}/items?view=fullText"
          },
          "errors": {
            "type": "string",
            "title": "Extraction issues",
            "description": "Dataset view of blocked, paywalled, timed-out, or unresolved article pages.",
            "template": "{{links.apiDefaultDatasetUrl}}/items?view=errors"
          },
          "results": {
            "type": "string",
            "title": "All articles",
            "description": "All scraped articles in one dataset.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "dockerfile": "../Dockerfile",
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "title": "News Articles",
          "views": {
            "overview": {
              "title": "Articles Overview",
              "transformation": {
                "fields": [
                  "query",
                  "title",
                  "source",
                  "domain",
                  "publishedAt",
                  "url",
                  "fullTextStatus",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "query": {
                    "label": "Query",
                    "format": "text"
                  },
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "source": {
                    "label": "Source",
                    "format": "text"
                  },
                  "domain": {
                    "label": "Domain",
                    "format": "text"
                  },
                  "publishedAt": {
                    "label": "Published",
                    "format": "text"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "fullTextStatus": {
                    "label": "Full text",
                    "format": "text"
                  },
                  "scrapedAt": {
                    "label": "Scraped at",
                    "format": "text"
                  }
                }
              }
            },
            "fullText": {
              "title": "Full Text",
              "transformation": {
                "fields": [
                  "title",
                  "url",
                  "source",
                  "author",
                  "imageUrl",
                  "fullTextStatus",
                  "fullText"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "source": {
                    "label": "Source",
                    "format": "text"
                  },
                  "author": {
                    "label": "Author",
                    "format": "text"
                  },
                  "imageUrl": {
                    "label": "Image",
                    "format": "link"
                  },
                  "fullTextStatus": {
                    "label": "Status",
                    "format": "text"
                  },
                  "fullText": {
                    "label": "Full text",
                    "format": "text"
                  }
                }
              }
            },
            "errors": {
              "title": "Extraction Issues",
              "transformation": {
                "fields": [
                  "fullTextStatus",
                  "title",
                  "url",
                  "source",
                  "domain",
                  "publishedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "fullTextStatus": {
                    "label": "Status",
                    "format": "text"
                  },
                  "title": {
                    "label": "Title",
                    "format": "text"
                  },
                  "url": {
                    "label": "URL",
                    "format": "link"
                  },
                  "source": {
                    "label": "Source",
                    "format": "text"
                  },
                  "domain": {
                    "label": "Domain",
                    "format": "text"
                  },
                  "publishedAt": {
                    "label": "Published",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      }
    },
    "buildNumber": "2.0.1",
    "imageDigest": "92d9b77d40f446a60b673fe3527863d9221a0ab89b1b2f53eab62c5ec748a17d",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.020968888888888888
    }
  }
}