# Yahoo News Scraper (`crawlerbros/yahoo-news-scraper`) Actor

Scrape Yahoo News articles across categories, trending stories, and keyword search. Extracts headline, summary, source, publication date, image, and category from Yahoo News RSS feeds. No proxy required.

- **URL**: https://apify.com/crawlerbros/yahoo-news-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Yahoo News Scraper

Scrape Yahoo News articles — trending stories, category feeds, and keyword search — across 6 Yahoo News regional editions (US, UK, Canada, Australia, Singapore, Japan), with no proxy, no authentication, and no API key required. Uses Yahoo's official RSS feeds for 100% reliability and fresh data updated every 5 minutes.

### What You Can Scrape

- **Trending top stories** — the most important stories for any supported region right now
- **Category news** — articles from region-specific verticals: US covers World, Politics, Finance, Health, Science, Entertainment, Sports, Lifestyle and more; UK/Canada/Australia/Singapore/Japan each expose the subset of categories Yahoo actually publishes for that edition (see Regions below)
- **Keyword search** — every category feed of the selected region filtered by any keyword or phrase, including non-Latin scripts (e.g. Japanese)

### Use Cases

- **News monitoring** — track coverage of your company, brand, or topic across Yahoo News
- **Media research** — analyze news trends across multiple categories
- **Competitive intelligence** — monitor industry news and source coverage
- **Content aggregation** — build news feeds for specific topics
- **Sentiment analysis** — collect news headlines and summaries for NLP pipelines
- **Data journalism** — research how stories break across Yahoo's news network

### Modes

| Mode | Description |
|------|-------------|
| `getTrending` | Top stories from Yahoo News homepage (default) |
| `browseCategory` | Browse one or more news category feeds |
| `search` | Filter all Yahoo News categories by keyword |

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | enum | `getTrending` | getTrending, browseCategory, search |
| `region` | enum | `us` | Yahoo News regional edition: us, uk, ca, au, sg, jp |
| `searchQueries` | string\[] | — | Required for search mode. Keywords to find. |
| `categories` | enum\[] | — | Required for browseCategory. One or more categories valid for the selected region. |
| `maxItems` | integer | 50 | Maximum articles to return (1–1000) |
| `keyword` | string | — | Optional extra keyword filter on title/description |
| `sourceFilter` | string | — | Optional source filter (e.g. `Reuters`, `BBC`) |

#### Regions & Supported Categories

Yahoo does not mirror the full category list on every regional edition — only categories confirmed live are exposed per region. Selecting a category that isn't available for the chosen region is ignored with a warning (the run still proceeds with the remaining valid categories).

| Region | Domain | Categories |
|--------|--------|-------------|
| United States (`us`, default) | news.yahoo.com | topstories, us, world, politics, finance, health, science, entertainment, sports, lifestyle, oddlyenough |
| United Kingdom (`uk`) | uk.news.yahoo.com | topstories, world, finance, sports |
| Canada (`ca`) | ca.news.yahoo.com | topstories, world, finance, sports |
| Australia (`au`) | au.news.yahoo.com | topstories, world |
| Singapore (`sg`) | sg.news.yahoo.com | topstories, world, sports |
| Japan (`jp`) | news.yahoo.co.jp | topstories, domestic, world, business, entertainment, sports, it, science, local |

**Note on Japan:** Yahoo Japan's RSS feeds carry only `title`, `link`, and `pubDate` — no `description`, `sourceName`/`sourceUrl`, or `imageUrl`. Records from the `jp` region will therefore have fewer populated fields than other regions; this reflects what Yahoo's Japanese feeds actually publish, not a scraping limitation.

### Output

Each record is one news article.

```json
{
  "title": "Senate Passes Budget Bill in Late-Night Vote",
  "description": "The Senate voted 52-48 to pass the budget bill after a marathon session.",
  "sourceName": "Associated Press",
  "sourceUrl": "https://apnews.com",
  "link": "https://www.yahoo.com/news/politics/articles/senate-passes-budget-bill-123.html",
  "publishedAt": "2026-05-26T02:10:39Z",
  "imageUrl": "https://media.zenfs.com/en/ap.org/abc123.jpg",
  "imageWidth": 2400,
  "imageHeight": 1350,
  "category": "politics",
  "region": "us",
  "guid": "https://www.yahoo.com/news/politics/articles/senate-passes-budget-bill-123.html",
  "scrapedAt": "2026-05-26T06:00:00Z"
}
```

#### Output Fields

| Field | Type | Description |
|-------|------|-------------|
| `title` | string | Article headline |
| `description` | string | Article summary/excerpt (not present for the `jp` region) |
| `sourceName` | string | Publisher name (e.g. Reuters, AP, BBC) — not present for the `jp` region |
| `sourceUrl` | string | Publisher homepage URL — not present for the `jp` region |
| `link` | string | Full article URL |
| `publishedAt` | string | ISO 8601 UTC publication date/time |
| `imageUrl` | string | Thumbnail image URL (CDN) — not present for the `jp` region |
| `imageWidth` | integer | Image width in pixels |
| `imageHeight` | integer | Image height in pixels |
| `category` | string | Category slug (us, world, politics, etc.) |
| `region` | string | Yahoo News regional edition this record was scraped from (us, uk, ca, au, sg, jp) |
| `guid` | string | Unique article identifier |
| `scrapedAt` | string | ISO 8601 UTC scrape timestamp |

### FAQ

**Does this require a proxy?**
No. Yahoo News RSS feeds are publicly accessible from datacenter IPs with no rate limiting or bot detection.

**How fresh is the data?**
Yahoo News RSS feeds update every 5 minutes.

**How many articles are in each feed?**
Each category RSS feed contains up to roughly 50 articles, depending on the region and category.

**How does search mode work?**
Search mode fetches every category RSS feed of the selected region and filters articles client-side by your keyword(s). Yahoo's dedicated search RSS endpoint is unreliable (it returns HTTP 500), so this actor never calls it — client-side filtering across category feeds is the reliable approach.

**Can I filter by date?**
Use `publishedAt` in the output to filter by date in your own workflow. All articles include a precise ISO 8601 publication timestamp.

**Are all Yahoo News regions supported?**
Six regions are supported: US, UK, Canada, Australia, Singapore, and Japan. Other Yahoo News editions (e.g. Yahoo España, Yahoo Taiwan) were not added because their RSS feed availability wasn't verified reliable at build time — only regions confirmed live are exposed. See the Regions table above for exactly which categories are available per region.

**Why do some `sourceUrl` links return a 401/403 when checked outside a browser?**
`sourceUrl` is the publisher's own homepage (e.g. reuters.com, thehill.com), not a Yahoo URL. Some publishers run bot-protection (e.g. DataDome) that blocks anonymous non-browser requests to their homepage while working normally in a real browser. This is outside the actor's control and does not affect the primary `link` field, which always points to the actual Yahoo-hosted article.

**What sources are included?**
Yahoo News aggregates from thousands of publishers including AP, Reuters, BBC, CNN, Fox News, Bloomberg, The Guardian, and many more.

**How do I get articles from a specific news source only?**
Use the `sourceFilter` input. For example, set `sourceFilter: "Reuters"` to return only Reuters articles. Note it's a literal substring match — `"AP"` will not match `"Associated Press"` since "ap" isn't a substring of that name; use `sourceFilter: "Associated Press"` instead.

# Actor input Schema

## `mode` (type: `string`):

Scraping mode: search by keyword, browse news categories, or get trending top stories.

## `region` (type: `string`):

Yahoo News regional edition to scrape. Each region publishes a different subset of category feeds — see the Categories field for what's available once you pick a region.

## `searchQueries` (type: `array`):

One or more keywords to search for (required for search mode). Articles from all of the selected region's category feeds are filtered by these keywords. E.g. 'AI', 'climate change', 'Apple iPhone'.

## `categories` (type: `array`):

One or more Yahoo News categories to scrape (required for browseCategory mode). Availability depends on the selected Region: US supports all 11; UK/Canada support Top Stories, World, Finance, Sports; Australia supports Top Stories, World; Singapore supports Top Stories, World, Sports; Japan supports Top Stories, Domestic, World, Business, Entertainment, Sports, IT, Science, Local. Categories not available for the chosen region are ignored with a warning.

## `maxItems` (type: `integer`):

Maximum total articles to return across all queries or categories (1–1000).

## `keyword` (type: `string`):

Optional: only return articles whose title or summary contains this keyword (case-insensitive).

## `sourceFilter` (type: `string`):

Optional: only return articles from sources whose name contains this string (case-insensitive). E.g. 'Reuters', 'AP', 'BBC'.

## Actor input object example

```json
{
  "mode": "getTrending",
  "region": "us",
  "searchQueries": [
    "Trump"
  ],
  "categories": [
    "us",
    "world"
  ],
  "maxItems": 20
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset with scraped Yahoo News articles

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "getTrending",
    "region": "us",
    "searchQueries": [
        "Trump"
    ],
    "categories": [
        "us",
        "world"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/yahoo-news-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "getTrending",
    "region": "us",
    "searchQueries": ["Trump"],
    "categories": [
        "us",
        "world",
    ],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/yahoo-news-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "getTrending",
  "region": "us",
  "searchQueries": [
    "Trump"
  ],
  "categories": [
    "us",
    "world"
  ],
  "maxItems": 20
}' |
apify call crawlerbros/yahoo-news-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/yahoo-news-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/jlpq2s9gvV7TypMNo/builds/UQXH3POyFtD7IeN2o/openapi.json
