Nimbryxo Studio

Google News Keyword & Full-Text Article Scraper

Search Google News by keyword with real resolved article links, headlines, sources, and dates, plus optional full article text and image extraction, filterable by date, language, and publisher.

Input schema

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

FieldTypeRequiredDescription
modestringrequiredWhat to scrape. Each mode reads its own list field below.
queriesarrayoptionalOne or more keyword queries. Google operators such as site:, intitle: and OR are supported. Results are deduplicated across queries.
topicsarrayoptionalTopic 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.
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhat to scrape. Each mode reads its own list field below.
queriesarrayoptionalOne or more keyword queries. Google operators such as site:, intitle: and OR are supported. Results are deduplicated across queries.
topicsarrayoptionalTopic 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.
newsUrlsarrayoptionalGoogle News search URLs, topic URLs, RSS search/topic URLs, or RSS/Atom feed URLs to convert into a feed.
rssUrlsarrayoptionalAny public RSS or Atom feed. Google News links inside the feed are resolved to publisher URLs automatically.
articleUrlsarrayoptionalPublisher 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.
languagestringoptionalLanguage of the Google News edition. Combined with country in the edition token (for example US:en, DE:de, JP:ja).
countrystringoptionalCountry edition for Google News. The actor always pins the edition so results do not change with the machine's IP.
dateRangestringoptionalRecency 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.
startDatestringoptionalCustom range start (YYYY-MM-DD, inclusive). Also used when dateRange=custom.
endDatestringoptionalCustom range end (YYYY-MM-DD, inclusive). Items published after the end are dropped client-side.
maxResultsPerQueryintegeroptionalMaximum 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.
maxItemsintegeroptionalHard cap on unique records emitted by the run (1-5000).
extractFullTextbooleanoptionalFetch each publisher page and extract its article body, description, author, and image. Default off for fast metadata-only runs. The articleUrls mode always extracts.
maxFullTextintegeroptionalMaximum pages fetched for full text per run (1-500). Records beyond this cap are still returned with fullTextStatus=skipped_cap.
proxyConfigurationobjectoptionalOptional. 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.

Download the published input schema

View complete JSON
{
  "description": "Search Google News by keyword or browse topics, convert Google News URLs, read RSS feeds, or extract full text from article URLs.",
  "properties": {
    "articleUrls": {
      "default": [],
      "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"
      },
      "prefill": [],
      "title": "Article URLs (mode=articleUrls)",
      "type": "array"
    },
    "country": {
      "default": "US",
      "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"
      ],
      "prefill": "US",
      "title": "Country / edition",
      "type": "string"
    },
    "dateRange": {
      "default": "any",
      "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"
      ],
      "prefill": "any",
      "title": "Date range",
      "type": "string"
    },
    "endDate": {
      "description": "Custom range end (YYYY-MM-DD, inclusive). Items published after the end are dropped client-side.",
      "editor": "textfield",
      "title": "End date",
      "type": "string"
    },
    "extractFullText": {
      "default": false,
      "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.",
      "prefill": false,
      "title": "Extract full text",
      "type": "boolean"
    },
    "language": {
      "default": "en",
      "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"
      ],
      "prefill": "en",
      "title": "Language",
      "type": "string"
    },
    "maxFullText": {
      "default": 100,
      "description": "Maximum pages fetched for full text per run (1-500). Records beyond this cap are still returned with fullTextStatus=skipped_cap.",
      "maximum": 500,
      "minimum": 1,
      "prefill": 100,
      "title": "Max full-text extractions",
      "type": "integer"
    },
    "maxItems": {
      "default": 500,
      "description": "Hard cap on unique records emitted by the run (1-5000).",
      "maximum": 5000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max items",
      "type": "integer"
    },
    "maxResultsPerQuery": {
      "default": 20,
      "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.",
      "maximum": 100,
      "minimum": 1,
      "prefill": 3,
      "title": "Max results per query window",
      "type": "integer"
    },
    "mode": {
      "default": "keyword",
      "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)"
      ],
      "prefill": "keyword",
      "title": "Mode",
      "type": "string"
    },
    "newsUrls": {
      "default": [],
      "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"
      },
      "prefill": [],
      "title": "Google News URLs (mode=newsUrl)",
      "type": "array"
    },
    "proxyConfiguration": {
      "default": {
        "useApifyProxy": false
      },
      "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",
      "prefill": {
        "useApifyProxy": false
      },
      "title": "Proxy configuration",
      "type": "object"
    },
    "queries": {
      "default": [],
      "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"
      },
      "prefill": [
        "artificial intelligence"
      ],
      "title": "Search queries (mode=keyword)",
      "type": "array"
    },
    "rssUrls": {
      "default": [],
      "description": "Any public RSS or Atom feed. Google News links inside the feed are resolved to publisher URLs automatically.",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "RSS / Atom feeds (mode=rss)",
      "type": "array"
    },
    "startDate": {
      "description": "Custom range start (YYYY-MM-DD, inclusive). Also used when dateRange=custom.",
      "editor": "textfield",
      "title": "Start date",
      "type": "string"
    },
    "topics": {
      "default": [],
      "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"
      },
      "prefill": [],
      "title": "Topics (mode=topic)",
      "type": "array"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Google News Scraper Input",
  "type": "object"
}

Output schema

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

FieldTypeRequiredDescription
overviewstringoptionalDataset view with one row per article: query, title, source, domain, publishedAt, url, fullTextStatus.
fullTextstringoptionalDataset view focused on extracted article bodies, authors, images, and extraction status.
errorsstringoptionalDataset view of blocked, paywalled, timed-out, or unresolved article pages.
resultsstringoptionalAll scraped articles in one dataset.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "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": {
    "errors": {
      "description": "Dataset view of blocked, paywalled, timed-out, or unresolved article pages.",
      "template": "{{links.apiDefaultDatasetUrl}}/items?view=errors",
      "title": "Extraction issues",
      "type": "string"
    },
    "fullText": {
      "description": "Dataset view focused on extracted article bodies, authors, images, and extraction status.",
      "template": "{{links.apiDefaultDatasetUrl}}/items?view=fullText",
      "title": "Full text",
      "type": "string"
    },
    "overview": {
      "description": "Dataset view with one row per article: query, title, source, domain, publishedAt, url, fullTextStatus.",
      "template": "{{links.apiDefaultDatasetUrl}}/items?view=overview",
      "title": "Articles overview",
      "type": "string"
    },
    "results": {
      "description": "All scraped articles in one dataset.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "All articles",
      "type": "string"
    }
  },
  "title": "Google News Keyword & Full-Text Article Scraper Output"
}

Dataset schema

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

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "title": "News Articles",
  "views": {
    "errors": {
      "display": {
        "component": "table",
        "properties": {
          "domain": {
            "format": "text",
            "label": "Domain"
          },
          "fullTextStatus": {
            "format": "text",
            "label": "Status"
          },
          "publishedAt": {
            "format": "text",
            "label": "Published"
          },
          "source": {
            "format": "text",
            "label": "Source"
          },
          "title": {
            "format": "text",
            "label": "Title"
          },
          "url": {
            "format": "link",
            "label": "URL"
          }
        }
      },
      "title": "Extraction Issues",
      "transformation": {
        "fields": [
          "fullTextStatus",
          "title",
          "url",
          "source",
          "domain",
          "publishedAt"
        ]
      }
    },
    "fullText": {
      "display": {
        "component": "table",
        "properties": {
          "author": {
            "format": "text",
            "label": "Author"
          },
          "fullText": {
            "format": "text",
            "label": "Full text"
          },
          "fullTextStatus": {
            "format": "text",
            "label": "Status"
          },
          "imageUrl": {
            "format": "link",
            "label": "Image"
          },
          "source": {
            "format": "text",
            "label": "Source"
          },
          "title": {
            "format": "text",
            "label": "Title"
          },
          "url": {
            "format": "link",
            "label": "URL"
          }
        }
      },
      "title": "Full Text",
      "transformation": {
        "fields": [
          "title",
          "url",
          "source",
          "author",
          "imageUrl",
          "fullTextStatus",
          "fullText"
        ]
      }
    },
    "overview": {
      "display": {
        "component": "table",
        "properties": {
          "domain": {
            "format": "text",
            "label": "Domain"
          },
          "fullTextStatus": {
            "format": "text",
            "label": "Full text"
          },
          "publishedAt": {
            "format": "text",
            "label": "Published"
          },
          "query": {
            "format": "text",
            "label": "Query"
          },
          "scrapedAt": {
            "format": "text",
            "label": "Scraped at"
          },
          "source": {
            "format": "text",
            "label": "Source"
          },
          "title": {
            "format": "text",
            "label": "Title"
          },
          "url": {
            "format": "link",
            "label": "URL"
          }
        }
      },
      "title": "Articles Overview",
      "transformation": {
        "fields": [
          "query",
          "title",
          "source",
          "domain",
          "publishedAt",
          "url",
          "fullTextStatus",
          "scrapedAt"
        ]
      }
    }
  }
}

Key-value schema

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

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

Published README

Read the full published documentation

Google News Keyword & Full-Text Article Scraper

Scrape 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.

What this actor does

  • Five input modes: keyword, topic, newsUrl, rss, and articleUrls.
  • Real publisher links: Google News article tokens are resolved in batches, with the Google link kept as a fallback if the token ever changes.
  • 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.
  • 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.
  • 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.
  • Empty fields are omitted from every record.

Output per article

  • title — headline with Google's publisher suffix removed
  • url — the publisher's article URL; the Google News link when resolution fails
  • source — publisher name from the feed or page
  • domain — publisher hostname, e.g. bbc.com
  • publishedAt — ISO 8601 UTC publication time from the feed
  • snippet — publisher description when a page was fetched; omitted for metadata-only runs because Google's RSS "description" only repeats the title
  • author — byline from page metadata when available
  • imageUrl — article image from the publisher page or feed
  • language — edition language used for the run
  • fullText — extracted article body when full text was requested and available
  • fullTextStatus — ok, short, empty, blocked, paywalled, rate_limited, not_found, timeout, error, unresolved, or skipped_cap
  • query — the keyword, topic, feed URL, or article URL that produced the row
  • recordType — always article
  • sourceUrl — the Google News or feed link the record came from
  • scrapedAt — UTC timestamp when the run assembled the record

Input

Field Type Default Description
mode string keyword keyword, topic, newsUrl, rss, or articleUrls
queries array – Keywords for keyword mode; Google operators such as site: and OR work
topics array – Topic names (WORLD, NATION, BUSINESS, TECHNOLOGY, ENTERTAINMENT, SPORTS, SCIENCE, HEALTH), TOP, topic hashes, or Google News topic URLs (topic mode)
newsUrls array – Google News search/topic URLs or RSS/Atom feeds (newsUrl mode)
rssUrls array – Any public RSS or Atom feed (rss mode)
articleUrls array – Publisher or Google News article URLs (articleUrls mode); full text is always attempted
language string en Edition language, e.g. en, de, ja, hi
country string US Edition country, e.g. US, GB, DE, IN
dateRange string any any, 1h, 6h, 12h, 1d, 7d, 30d, 1y, or custom
startDate string – Custom range start, YYYY-MM-DD, inclusive
endDate string – Custom range end, YYYY-MM-DD, inclusive
maxResultsPerQuery integer 20 Records taken from each feed request (1–100, Google's feed cap is about 100)
maxItems integer 500 Hard cap on unique records in the run (1–5000)
extractFullText boolean false Fetch publisher pages for body text, description, author, and image
maxFullText integer 100 Maximum pages fetched per run (1–500); later records get fullTextStatus=skipped_cap
proxyConfiguration object off Optional; no proxy is needed or recommended by default

Dates and caps

  • Relative ranges use Google's recency operator and are then post-filtered against the real publication time.
  • A custom startDate/endDate is inclusive. Items published after the end are always dropped, even if Google's search operator returns them.
  • 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.
  • A single Google News feed returns roughly 100 items. maxResultsPerQuery caps each feed window; maxItems caps the whole run.
  • Full text is capped per run so a large metadata pull cannot turn into thousands of publisher requests.

Examples

Keyword scan, fastest mode

{
  "mode": "keyword",
  "queries": ["artificial intelligence", "semiconductor policy"],
  "dateRange": "7d",
  "maxResultsPerQuery": 20,
  "maxItems": 100
}

Topic feed with full text

{
  "mode": "topic",
  "topics": ["TECHNOLOGY", "SCIENCE"],
  "extractFullText": true,
  "maxFullText": 50,
  "maxItems": 50
}

Custom date range and real publisher URLs

{
  "mode": "keyword",
  "queries": ["central bank interest rates"],
  "dateRange": "custom",
  "startDate": "2026-10-01",
  "endDate": "2026-10-20",
  "maxResultsPerQuery": 100,
  "maxItems": 500
}

Backfill known article URLs

{
  "mode": "articleUrls",
  "articleUrls": [
    "https://example.com/news/story-one",
    "https://example.com/news/story-two"
  ],
  "maxFullText": 20
}

Read an existing RSS feed

{
  "mode": "rss",
  "rssUrls": ["https://feeds.bbci.co.uk/news/rss.xml"],
  "maxResultsPerQuery": 30,
  "maxItems": 30
}

Use cases

  • Media monitoring — track brand, competitor, or industry coverage across thousands of publishers.
  • Newsletter and digest curation — pull a dated, deduplicated story list for a daily or weekly issue.
  • NLP and RAG corpora — collect headlines now and full article bodies for the subset that matters.
  • Market and event research — build a date-bounded dataset around an earnings call, election, or product launch.
  • PR and communications reporting — measure coverage volume and collect the underlying links.
  • Academic and policy research — export a reproducible, date-correct news sample with publisher URLs.

FAQ

Does this return the real article URL or a Google redirect?

The 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.

Why is snippet missing on a metadata-only run?

Google 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.

What do the fullTextStatus values mean?

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.

Can full text read paywalled articles?

No. 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.

Why did I get fewer than 100 results for one query?

Google 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.

How does the date filter work?

Google'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.

Are results deduplicated?

Yes. 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.

Does a blocked publisher stop the run?

No. 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.

Do I need a proxy or an API key?

No. 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.

Is this affiliated with Google?

No. 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.

Python quickstart

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

Open the step-by-step Python guide →

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