# Yahoo News Trending, Category & Keyword Feed by Region (`vexaloom-labs/yahoo-news-trending-category-and-keyword-feed`) Actor

Get Yahoo News trending top stories, category feeds, or keyword-filtered headlines across six regional editions, with source, publish date, image, and category for each article.

- **URL**: https://apify.com/vexaloom-labs/yahoo-news-trending-category-and-keyword-feed.md
- **Developed by:** [vexaloom-labs](https://apify.com/vexaloom-labs) (community)
- **Categories:** News, Social media, Other
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Yahoo News Trending, Category & Keyword Feed by Region

Yahoo News publishes thousands of headlines every day from wire services, newspapers, broadcasters, and digital publishers. This actor collects them from six Yahoo News editions — US, UK, Canada, Australia, Singapore, and Japan — through three modes: trending top stories, browsable category feeds, or a keyword search. Each article comes with its exact publication time, publisher, author, summary, section, and image.

### What this actor does

- Reads the live Yahoo News section pages as they exist today (the old `/rss/<section>` feeds mostly return 404 or frozen data)
- Follows pagination (`/2/`, `/3/` … for sections; `b=11`, `b=21` … for search) until `maxItems` or the source is exhausted
- Opens each article's detail page to fill exact dates, author, publisher URL, keywords, and image dimensions
- Deduplicates across categories and across multiple search queries
- Falls back to Yahoo's news search or a live RSS feed when a section page is temporarily blocked
- Omits every field an article genuinely lacks — no nulls, empty strings, or placeholders

### Modes

| Mode | What it returns | Pagination |
|---|---|---|
| `getTrending` | The selected edition's front-page top stories | Section pages, up to 25 pages |
| `browseCategory` | One or more category feeds, e.g. Politics + World | Section pages, per-region depth |
| `search` | Yahoo News keyword search results across all Yahoo properties | 10 results per page, up to 50 pages |

`search` queries the whole Yahoo News index rather than a single regional front page, so it can surface articles from any Yahoo edition. The `region` value still labels the run and is written to each record.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `getTrending` | `getTrending`, `browseCategory`, or `search` |
| `region` | string | `us` | `us`, `uk`, `ca`, `au`, `sg`, or `jp` |
| `searchQueries` | array | – | Keywords or phrases for `search` mode. Multiple queries are interleaved fairly. |
| `categories` | array | – | Category slugs for `browseCategory`; availability varies by region (below) |
| `maxItems` | integer | `50` | Total articles to return (1–1000) |
| `keyword` | string | – | Keep only articles whose title or summary contains this text |
| `sourceFilter` | string | – | Keep only articles whose publisher name contains this text, e.g. `Reuters` |
| `includeArticleDetails` | boolean | `true` | Open each article page for exact dates/author/publisher URL/keywords. Turn off for faster list-only records. |

#### Regions and available categories

| Region | Categories |
|---|---|
| United States (`us`) | Top Stories, US, World, Politics, Science, Weather, Entertainment, Lifestyle, Health, Sports, Finance |
| United Kingdom (`uk`) | Top Stories, UK, World, Politics, Science & Tech, Weather, Finance, Sports |
| Canada (`ca`) | Top Stories, Canada, World, Politics, US, Science & Tech, Weather, Sports, Finance |
| Australia (`au`) | Top Stories, Australia, World, Politics, Environment, Sport, Weather, Finance |
| Singapore (`sg`) | Top Stories, Singapore, World, Politics, Sports, Personal Finance, Weather |
| Japan (`jp`) | Top Picks, Domestic, World, Business, Entertainment, Sports, IT, Science, Local |

A category that does not exist for the chosen region is skipped with a warning; the run continues with the valid ones.

#### Examples

Trending stories for the UK:

```json
{ "mode": "getTrending", "region": "uk", "maxItems": 20 }
```

Browse two Canadian categories, paginated to 100 articles:

```json
{
  "mode": "browseCategory",
  "region": "ca",
  "categories": ["canada", "politics"],
  "maxItems": 100
}
```

Search two topics across Yahoo News, only from one publisher:

```json
{
  "mode": "search",
  "region": "us",
  "searchQueries": ["AI regulation", "semiconductor exports"],
  "sourceFilter": "Reuters",
  "maxItems": 30
}
```

### Output per article

| Field | Meaning |
|---|---|
| `title` | Exact headline (from the article page when details are enabled) |
| `description` | Summary/excerpt |
| `link` | Canonical article URL (Yahoo-hosted, or the publisher when Yahoo links out directly) |
| `publishedAt` | Exact publication time in UTC ISO 8601 |
| `updatedAt` | Last update time, when different from publication |
| `author` | Byline, when the article names one |
| `sourceName` | Original publisher, e.g. `Reuters`, `Associated Press`, `BBC` |
| `sourceUrl` | Publisher's homepage |
| `section` | Human-readable section, e.g. `Politics` or `U.S.` |
| `category` | Category slug used by the run; `search` for search-mode records |
| `searchQuery` | The query that produced a search-mode record |
| `yahooProperty` | `News`, `Finance`, or `Sports` when search identifies the Yahoo property |
| `region` | Edition requested (`us`, `uk`, `ca`, `au`, `sg`, `jp`) |
| `imageUrl`, `imageWidth`, `imageHeight` | Lead image and its dimensions |
| `keywords` | Article keywords, when the publisher supplies them |
| `guid` | Stable article identifier |
| `scrapedAt` | When the record was collected |

### Pagination and limits

- Category and trending modes paginate through Yahoo's section pages (about 50 cards per page; page 20 is populated and page 21 is empty, so roughly 1,000 recent articles per large section). `maxItems` stops the run as soon as enough unique articles are collected.
- Search mode follows Yahoo's 10-results-per-page offset (up to 50 pages). Yahoo's search index exposes roughly 500 results per query (offset 501 returns only a couple, offset 1001 returns none), so very broad `maxItems` values can return fewer results than requested; the run reports the actual count.
- Yahoo Japan topic pages paginate with `?page=N` (up to 9 pages per topic).
- Some lanes (Yahoo Sports and Yahoo Finance) expose a single page rather than paginated sections; their natural inventory is smaller.
- `includeArticleDetails=false` keeps the run fast and avoids one request per article, but exact dates, authors, and full summaries require details. List-only search dates come from Yahoo's relative-time labels and are approximate.

### Use cases

- **News monitoring** — track a brand, person, or topic across Yahoo's syndicated network
- **Media research** — see which publishers cover a story and how headlines are framed
- **Regional feeds** — build a US, UK, Canadian, Australian, Singaporean, or Japanese news stream
- **NLP datasets** — collect headlines, summaries, publishers, sections, and timestamps for classification or sentiment work
- **Data journalism** — compare coverage across editions and categories

### Data source

The actor reads Yahoo News's public HTML pages and Yahoo's public news search results. No login, cookie, API key, or proxy configuration is required. It does not bypass paywalls or access controls.

### FAQ

**Is this affiliated with Yahoo?** No. It is an independent third-party actor that reads publicly accessible Yahoo News pages.

**Why did US category results used to be empty?** Yahoo retired the old `news.yahoo.com/rss/<section>` feeds in 2026. The revamp reads the live `www.yahoo.com/news/<section>` pages instead, so categories work again.

**Why does search sometimes return fewer than `maxItems`?** Yahoo's news search index exposes a finite number of results per query. The actor also drops duplicates and non-article cards, so the final count can be below the requested maximum. The status message reports the real count.

**How current is the data?** Section and search pages show whatever Yahoo is serving at run time. With details enabled, `publishedAt` is the exact timestamp from the article page.

**Can I filter by date?** Not as an input, but every record has `publishedAt`, so you can filter downstream.

**Why do a few search results point outside Yahoo?** Yahoo News search occasionally links straight to a publisher instead of a Yahoo-hosted copy. Those records keep the search-card fields; detail enrichment only opens Yahoo-hosted article pages.

**Why are some fields absent on some records?** Yahoo and its publishers do not provide every field for every story (for example, not all articles name an author). Those fields are omitted rather than filled with placeholders.

**Does search respect `region`?** Search queries Yahoo's global news index, which can include any Yahoo edition. The `region` value labels the run; each result keeps its canonical Yahoo URL so you can see which edition hosted it.

# Actor input Schema

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

What to collect: trending top stories, one or more category feeds, or a keyword search across Yahoo News.

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

Yahoo News edition used for trending and category feeds. Search mode queries all of Yahoo News; this value labels the run.

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

One or more keywords or phrases to search across Yahoo News (required for search mode). Results are paginated and deduplicated. E.g. 'AI regulation', 'climate change', 'Apple iPhone'.

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

One or more category feeds to scrape (required for browseCategory mode). Availability depends on Region: US supports topstories, us, world, politics, science, weather, entertainment, lifestyle, health, sports, finance; UK supports topstories, uk, world, politics, science, weather, finance, sports; Canada supports topstories, canada, world, politics, us, science, weather, sports, finance; Australia supports topstories, australia, world, politics, science, sports, weather, finance; Singapore supports topstories, singapore, world, politics, sports, finance, weather; Japan supports topstories, domestic, world, business, entertainment, sports, it, science, local. Categories not available for the chosen region are skipped with a warning.

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

Maximum total articles to return across all queries or categories (1–1000). Pagination stops at this number or when the source is exhausted.

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

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

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

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

## `includeArticleDetails` (type: `boolean`):

Open each article page to fill exact publication date, author, publisher URL, keywords, image dimensions, and the full summary. Turn off for the fastest, list-only records (dates may be approximate in search mode).

## Actor input object example

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

# Actor output Schema

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

Dataset containing all 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": 5,
    "includeArticleDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("vexaloom-labs/yahoo-news-trending-category-and-keyword-feed").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": 5,
    "includeArticleDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("vexaloom-labs/yahoo-news-trending-category-and-keyword-feed").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": 5,
  "includeArticleDetails": true
}' |
apify call vexaloom-labs/yahoo-news-trending-category-and-keyword-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vexaloom-labs/yahoo-news-trending-category-and-keyword-feed"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/YkMeMqDdvMJhuhRbD/builds/D6ShUHLetEYspb7u7/openapi.json
