# YouTube Trending & Hype Pulse — Rising Videos by Region (`sian.agency/youtube-trending-hype-pulse`) Actor

Scrape YouTube Trending plus the new Hype leaderboard by region and category. The only Apify actor exposing YouTube's Hype tab — catch rising videos before they peak. Multi-region scan, multi-niche cuts, clean structured rows. Built for trend forecasters, news outlets, and content strategists.

- **URL**: https://apify.com/sian.agency/youtube-trending-hype-pulse.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Videos, Social media, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 hype video rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## YouTube Trending & Hype Pulse — Rising Videos by Region 🔥📊

[![Store-SIÁN Agency](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store-YouTube Query Suggestions](https://img.shields.io/badge/Store-YouTube%20Query%20Suggestions-FF0000)](https://apify.com/sian.agency/youtube-auto-complete-and-query-suggestion?fpr=sian) [![Store-YouTube Shorts Transcript](https://img.shields.io/badge/Store-YouTube%20Shorts%20Transcript-FF0000)](https://apify.com/sian.agency/youtube-shorts-ai-transcript-and-metadata-extractor?fpr=sian) [![Store-YouTube Comments Scraper](https://img.shields.io/badge/Store-YouTube%20Comments%20Scraper-FF0000)](https://apify.com/sian.agency/cheapest-youtube-comments-scraper?fpr=sian)

#### 🔥 The only Apify actor exposing YouTube's new Hype leaderboard tab
##### For trend forecasters, news outlets, and content strategists who need rising-video signals before mainstream metrics catch up.

---

### 📋 Overview

**Catch rising YouTube videos before they peak.** This actor scrapes YouTube's Trending tab plus the **new Hype leaderboard** — a surface no other Apify actor exposes — across any region and niche category. Multi-region scan, multi-niche cuts, clean structured JSON rows.

**Why trend teams choose us:**
- 🔥 **Hype leaderboard, exclusively here**: YouTube's brand-new "Hype" tab surfaces rising videos before they hit standard Trending. Every Hype row carries the unique `hypeRank` field (1-100 leaderboard position). Zero competitors on Apify expose this surface.
- 🌍 **Multi-region scan in one input**: Drop in `regions: "US,GB,DE,JP,BR,IN"` and get one unified dataset with every row tagged by source region. Saves 5+ separate runs vs single-region scrapers.
- 🎭 **Multi-niche cuts per region**: Pass `niches: "Music,Gaming,Sports"` and the actor iterates every region × niche combo. Same input — more data slices.
- 📊 **Three feeds, one tool**: `trending` (canonical tab), `hype` (rising leaderboard), `home` (region home feed with personalized + topical mix). Or combine `trending` and `hype` in one run with `trendingAndHype`.
- 💰 **Honest mid-tier pricing**: $0.005 per Hype row (the USP data), $0.004 per Trending row, $0.003 per Home row. Cheaper than commodity single-row scrapers at $0.02 — fairer than per-query scrapers that don't expose row-level pricing.
- ✨ **Production-ready output**: ISO timestamps, integer view/like/comment counts, canonical YouTube URLs, ads filtered out of Home, HTTPS-normalized image URLs.

---

### ✨ Features

- 🔥 **Hype Leaderboard Mode** *(differentiator)*: Pull YouTube's rising-videos surface for any region. Each row carries `hypeText` ("#1 hyped") and a parsed integer `hypeRank` you can sort on.
- 📊 **Trending Tab Mode**: Canonical 30-50 row YouTube Trending pull per region. Optional `type: music | gaming` category filter.
- 🏠 **Home Feed Mode**: Region home-feed mix with the rich personalization YouTube algorithmically surfaces. Ads + shorts-listing entries filtered out before charging — you never pay for an ad row.
- 📊+🔥 **Trending + Hype Combined**: Run both in one shot — best for daily-cron dashboards covering both surfaces.
- 🌍 **Multi-Region Scan**: Pass `regions: "US,GB,DE,JP,BR,IN,MX,FR,KR,CA"` to scan up to 25 regions per run. Every row tagged with `_sourceRegion`.
- 🎭 **Multi-Niche Cuts**: Pass `niches: "Music,Gaming,Sports"` (up to 10 per run). Hype niche taxonomy varies by region — actor auto-discovers and logs available filters per region.
- 🛡 **Pre-Charge Input Validation**: Invalid region codes and unavailable niches return a clear `invalid_region` / `invalid_niche` error row — and you are NEVER charged for it.
- 📦 **Clean JSON Output**: ISO 8601 timestamps, integer counts, canonical URLs, HTTPS-normalized image URLs, ads/shorts-listing rows dropped from Home feed.
- 📑 **HTML Run Report**: Each run writes a styled summary report (success counts, region+niche breakdown, source-feed split, duration) to the key-value store — even on fatal crash.

---

### 🎬 Quick Start

Pull the canonical YouTube Trending tab for the US in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~youtube-trending-hype-pulse/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"operation":"trending","region":"US"}'
````

Or pull the new Hype leaderboard — the surface no other Apify actor exposes:

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~youtube-trending-hype-pulse/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"operation":"hype","region":"US","maxPages":1}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick your operation

Choose `trending` (canonical YouTube Trending tab), `hype` (the new rising-videos leaderboard — the USP), `home` (region home feed with personalized mix), or `trendingAndHype` (both in one run, best for daily monitoring).

#### Step 2: Provide region + optional niche

Drop in `region: "US"` or scan many at once with `regions: "US,GB,DE,JP,BR"`. Optional: `niche: "Music"` (or `niches: "Music,Gaming,Sports"` for a multi-cut run). Default region is `US`, default niche is `All`.

#### Step 3: Run and review

Hit Start. Results stream into the Apify dataset as they come in. Filter by `_sourceFeed`, `_sourceRegion`, or `_sourceNiche` to slice rows. The HTML run summary shows region+niche breakdown, source-feed split, and pagination depth.

**That's it! In under three minutes, you'll have:**

- A clean dataset of trending and/or rising videos with view counts, channels, lengths, and (Hype-only) leaderboard ranks
- Every row tagged with source feed, region, and niche for easy filtering
- A styled HTML report you can share with your team

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string (enum) | Yes | One of `trending`, `hype`, `home`, `trendingAndHype` |
| `region` | string | No (default `US`) | Uppercase 2-letter ISO country code (e.g. `US`, `GB`, `JP`) |
| `regions` | string | No | Comma- or newline-separated list of region codes (e.g. `US,GB,DE,JP,BR`). Overrides `region`. Max 25. |
| `niche` | string | No (default `All`) | Category filter. Trending: `music` or `gaming`. Hype/Home: free-string label (e.g. `Music`, `Gaming`, `Sports`, `Food`, `DIY`). Use `All` or omit for catch-all. |
| `niches` | string | No | Comma- or newline-separated list of niche labels. Overrides `niche`. Max 10. |
| `maxPages` | integer | No (default `1`) | Max paginated pages per region+niche pair for `hype` and `home`. Trending has no pagination — silently ignored. Range 1-10. |
| `lang` | string | No | Language code (e.g. `en`, `es`, `ja`) for result language. |

**Single-region Trending example:**

```json
{
  "operation": "trending",
  "region": "US"
}
```

**Hype leaderboard example (USP):**

```json
{
  "operation": "hype",
  "region": "US",
  "niche": "Gaming",
  "maxPages": 2
}
```

**Multi-region Trending + Hype combined:**

```json
{
  "operation": "trendingAndHype",
  "regions": "US,GB,DE,JP,BR",
  "maxPages": 1
}
```

**Home feed with niche filter:**

```json
{
  "operation": "home",
  "region": "JP",
  "niche": "Music",
  "maxPages": 2
}
```

**Multi-niche scan in one region:**

```json
{
  "operation": "hype",
  "region": "US",
  "niches": "Music\nGaming\nSports",
  "maxPages": 1
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **25+ fields** all rows of `rowKind: video`, tagged by `_sourceFeed` (`trending` | `hype` | `home`), `_sourceRegion`, and `_sourceNiche`. Filter on these to slice cleanly.

#### Top fields by use case

| Field | Type | Description |
|-------|------|-------------|
| `_operation` | string | Which operation produced this row (`trending`, `hype`, `home`, `trendingAndHype`) |
| `_sourceFeed` | string | Which YouTube surface (`trending`, `hype`, `home`) — split rows by this after a combined run |
| `_sourceRegion` | string | Uppercase ISO-2 country code (e.g. `US`, `JP`) |
| `_sourceNiche` | string | Niche / category filter active for this row (e.g. `Music`, `Gaming`, `All`) |
| `videoId` | string | YouTube 11-char video ID |
| `videoPageUrl` | string | Canonical `https://www.youtube.com/watch?v=...` URL |
| `videoTitle` | string | Video title |
| `videoDescription` | string | First paragraph (Trending + Home only — Hype returns lean rows) |
| `channelId` | string | UC… channel ID (Trending + Home only) |
| `channelTitle` | string | Channel display name |
| `channelPageUrl` | string | Canonical channel URL (when `channelId` present) |
| `viewCount` | integer | Integer view count (Trending + Home only — Hype doesn't expose) |
| `likeCount` | integer | Integer like count (Trending + Home only) |
| `commentCount` | integer | Integer comment count (Trending + Home only) |
| `lengthText` | string | Length string (e.g. `3:00`, `0:32`) — all feeds |
| `publishedTimeText` | string | Relative time string (e.g. `2 weeks ago`) — Trending + Home |
| `publishedAt` | string | ISO 8601 published timestamp — Trending + Home |
| `thumbnailUrl` | string | Best-resolution thumbnail URL — all feeds |
| `hypeText` | string | **Hype-only** — raw rank label (e.g. `#1 hyped`, `#47 hyped`) |
| `hypeRank` | integer | **Hype-only** — parsed integer rank 1-100. Sort by this for the rising-videos leaderboard. |

**Example Hype leaderboard row (THE USP):**

```json
{
  "_operation": "hype",
  "_sourceFeed": "hype",
  "_sourceRegion": "US",
  "_sourceNiche": "All",
  "rowKind": "video",
  "videoId": "Ve4EeGrewvY",
  "videoPageUrl": "https://www.youtube.com/watch?v=Ve4EeGrewvY",
  "videoTitle": "PARTYOF2 - PUNK B!TCH (OFFICIAL VIDEO)",
  "channelTitle": "PARTYOF2",
  "lengthText": "2:50",
  "thumbnailUrl": "https://i.ytimg.com/vi/Ve4EeGrewvY/sddefault.jpg",
  "hypeText": "#1 hyped",
  "hypeRank": 1,
  "status": "success"
}
```

**Example Trending row (rich metadata):**

```json
{
  "_operation": "trending",
  "_sourceFeed": "trending",
  "_sourceRegion": "US",
  "_sourceNiche": "",
  "rowKind": "video",
  "videoId": "SD4yRDY9mek",
  "videoPageUrl": "https://www.youtube.com/watch?v=SD4yRDY9mek",
  "videoTitle": "Drake - Janice STFU",
  "channelId": "UCQznUf1SjfDqx65hX3zRDiA",
  "channelTitle": "DrakeVEVO",
  "channelPageUrl": "https://www.youtube.com/channel/UCQznUf1SjfDqx65hX3zRDiA",
  "viewCount": 5601461,
  "likeCount": 179400,
  "commentCount": 14965,
  "lengthText": "3:57",
  "publishedTimeText": "7 days ago",
  "publishedAt": "2026-05-15T09:07:39Z",
  "thumbnailUrl": "https://i.ytimg.com/vi/SD4yRDY9mek/maxresdefault.jpg"
}
```

***

### 💼 Use Cases & Examples

#### 1. Trend Forecasting Team — Catch Rising Videos Before They Peak

**Tom runs the trend desk at a strategy agency. His clients pay for early-signal reports — he needs to spot rising videos 2-4 weeks before they hit mainstream Trending lists.**

**Input:** `hype` mode with `regions: "US,GB,DE,JP,BR"` on a daily cron, `maxPages: 1`.
**Output:** ~500 Hype rows per day, each carrying `hypeRank` (1-100 leaderboard position) and `_sourceRegion`.
**Use:** Tom sorts by `hypeRank ascending` per region. Videos appearing in the top 10 of multiple regions get flagged in his weekly forecast. Zero other Apify actor exposes this leaderboard surface.

#### 2. News Outlet — Monitor Viral Video Discovery in Real Time

**Priya runs the digital desk at a national newsroom. The viral video beat used to require 30 minutes of manual YouTube clicking each morning — she needs the entire region's Trending + Hype landscape in a JSON feed by 8 a.m.**

**Input:** `trendingAndHype` with `region: "US"` on a 7 a.m. cron.
**Output:** ~150 rows daily (50 Trending + 100 Hype), tagged by `_sourceFeed` for easy split.
**Use:** Priya pipes the dataset into the newsroom's editorial dashboard. Her team's morning meeting opens with "what's trending AND rising" — generated in 3 minutes instead of 30.

#### 3. Content Strategy — Regional + Niche Audience Targeting

**Marcus heads content at a global gaming brand. They publish in 8 countries and need to know which gaming-niche videos travel across borders vs which are hyper-local — every week.**

**Input:** `trending` with `regions: "US,GB,DE,JP,BR,IN,MX,KR"` and `niche: "gaming"`.
**Output:** ~400 trending-gaming rows tagged by region.
**Use:** Marcus diffs `videoId` overlap across regions. Videos appearing in 5+ regions go into the brand's "global drop" content calendar; region-unique videos go into per-market campaigns.

#### 4. Brand Safety Audit — What's Trending Alongside Your Brand

**Jen runs brand safety at a CPG ad-buying team. Before approving Trending placements, she needs a daily snapshot of what's actually on the Trending tab in the 4 markets they buy.**

**Input:** `trending` with `regions: "US,GB,CA,AU"` on a daily morning cron.
**Output:** ~200 rows of trending videos with channel name, title, and length.
**Use:** Jen runs each row's title + channel through her brand-safety blocklist before signing off on the day's placements. Bonus: she filters `lengthText > 5:00` to flag long-form adjacent inventory.

#### 5. Music Discovery — Category Trending by Region for Label A\&R

**Diego scouts emerging artists at an indie label. He listens to ~50 tracks a day and needs YouTube's "music trending" data per region to source candidates before mainstream charts catch on.**

**Input:** `trending` with `niche: "music"` across `regions: "US,GB,DE,FR,KR,JP,BR,MX"`, plus a parallel `hype` run with `niche: "Music"` on the same regions.
**Output:** ~400 music rows (Trending + Hype combined) tagged by region.
**Use:** Diego cross-references `channelId` against the label's blocklist (already-signed artists), then surfaces 10-15 unsigned artists per day for the A\&R team's listen pile. Hype rows with `hypeRank < 20` get fast-tracked.

***

### 🔗 Integration Examples

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/youtube-trending-hype-pulse').call({
  operation: 'hype',
  region: 'US',
  maxPages: 1,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
// → { _sourceFeed: 'hype', videoId: 'Ve4EeGrewvY', hypeRank: 1, hypeText: '#1 hyped', ... }
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/youtube-trending-hype-pulse').call(
    run_input={
        'operation': 'trendingAndHype',
        'regions': 'US,GB,JP',
        'maxPages': 1,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['_sourceFeed'], item['_sourceRegion'], item['videoTitle'])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~youtube-trending-hype-pulse/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"operation":"trending","region":"JP","niche":"music"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Daily 7 a.m. schedule, webhook, or upstream event
2. **HTTP Request**: Call the actor's run endpoint with your region+niche payload as JSON
3. **Process**: Fetch the dataset items via `/datasets/{id}/items`
4. **Action**: Post the day's Top-10 Hype rows to Slack, push into Notion/Airtable, or pipe into your editorial dashboard

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- Full feature access — same operations, same quality, same fields
- Perfect for sampling one region or one Hype pull before scaling
- No credit card required

#### PAID Tier (Production Ready)

- Unlimited regions per run (up to the 25-per-run input cap)
- Unlimited niches per run (up to the 10-per-run input cap)
- Pay-per-row: only billed for successful row pushes (invalid regions, unavailable niches, and ads are NEVER charged)
- Auto-laddered pricing — BRONZE through DIAMOND tier discounts apply automatically as you scale

💰 **Honest tiered pricing**: $0.005/Hype row (USP data) · $0.004/Trending row · $0.003/Home-feed row. Below the saturated $0.02/result mid-market. Above the loss-leader $0.00005 commodity tier (fragile, no metadata).

🔗 [View current pricing](https://apify.com/sian.agency/youtube-trending-hype-pulse?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: What is YouTube's "Hype" tab and why is it the USP?**
A: Hype is a YouTube product surface that ranks rising videos before they hit standard Trending — think of it as YouTube's "what's about to go viral" leaderboard. Every Hype row carries a unique `hypeText` field (`"#1 hyped"`, `"#47 hyped"`) which we parse into an integer `hypeRank` (1-100). No other Apify actor exposes this surface — we verified across all 27 YouTube trending-related actors on the Store as of May 2026. If you want early-warning signals for emerging content, this is the only way to get the data programmatically.

**Q: Why does this exist alongside other YouTube trending scrapers?**
A: Two reasons. **First**: nobody else has the Hype leaderboard. **Second**: we combine three feeds (Trending + Hype + Home) and let you scan multi-region + multi-niche in one input — most other actors are single-region single-page tools that charge per-query. For daily-cron use cases pulling 5+ regions, our pay-per-row model is materially cheaper than per-query competitors charging $0.025+ each.

**Q: How does the multi-region scan work?**
A: Pass `regions: "US,GB,DE,JP,BR,IN"` (comma- or newline-separated, up to 25). The actor iterates each region for the chosen operation and tags every row with `_sourceRegion`. Each region costs one upstream call per niche — so 5 regions × 1 niche = 5 calls × charge per row.

**Q: How do Hype rows differ from Trending rows?**
A: Hype rows are LEAN — only `videoId`, `videoTitle`, `channelTitle`, `lengthText`, `thumbnailUrl`, `hypeText`, `hypeRank`. The Hype surface itself doesn't expose `viewCount`, `likeCount`, `commentCount`, `publishedAt`, or `description`. We don't fabricate fields YouTube doesn't return. Trending and Home rows carry the full rich-metadata schema.

**Q: What niches can I pass?**
A: For `trending`: `music` or `gaming` only (YouTube only routes these to `/trending?type=`). For `hype` and `home`: any free-string label (`Music`, `Gaming`, `Sports`, `Food`, `DIY`, `Style`, `Books`, `Podcast` for US Hype — varies by region). When you pass a niche that doesn't exist for the region, you get one `invalid_niche` row listing the available filters, and you are NOT charged. The actor logs available filters per region on every run.

**Q: Why is `maxPages` ignored for Trending?**
A: YouTube's Trending tab doesn't paginate — it's a fixed 30-50 row snapshot. Setting `maxPages: 5` for Trending is harmless but wastes nothing. Hype and Home both paginate (Hype only when a specific niche is passed; Home always when `continuation` is returned).

**Q: Are ads charged in Home feed?**
A: No. The Home feed returns mixed types: `video`, `shorts_listing`, and `ad`. The actor filters everything except `video` at flatten time. You only pay for video rows — ads and shorts-listing entries are dropped before charging.

**Q: What happens on invalid region or unavailable niche?**
A: One row is pushed with `status: 'invalid_region'` or `status: 'invalid_niche'` and a clear `errorMessage`. You are NOT charged for it. Your run continues processing the other regions / niches in your input list.

**Q: Is the data live or cached?**
A: Live — every run pulls fresh data from YouTube's Trending, Hype, and Home endpoints. No caching layer between you and YouTube.

**Q: Is this legal?**
A: Yes — we only access publicly visible YouTube data (the same data YouTube serves to any logged-out browser visiting the Trending or Hype tabs). See our [legal section](#-is-it-legal-to-scrape-data) below.

*YouTube® is a trademark of Google LLC. This actor is an independent discovery tool. It is not affiliated with, endorsed by, or sponsored by Google LLC or YouTube.*

***

### 🐛 Troubleshooting

**"Invalid region" error before run starts**

- Use uppercase 2-letter ISO 3166-1 alpha-2 codes (e.g. `US`, `GB`, `JP`, `BR`). Lowercase (`us`) and 3-letter codes (`USA`) are rejected. The actor normalizes input to uppercase but rejects malformed values before charging.

**`invalid_niche` row in dataset, no other data for that region**

- Your requested niche doesn't exist for that region+feed combo. The error row lists the available niches — copy one of those into your next run. (Hype niche taxonomy varies by region: US has `Podcast` and `Books`, JP may have different labels.)

**Only 1 page of Hype data even though `maxPages > 1`**

- You requested the catch-all "All" Hype view — YouTube returns 100 rows once but no continuation token. To get more rows, pass a specific `niche` (e.g. `niche: "Gaming"`) — per-niche Hype DOES paginate (50 rows per page).

**Home feed returning fewer rows than expected**

- Normal — Home feed responses contain mixed types (`video`, `shorts_listing`, `ad`). The actor drops everything except `video` and only charges for kept rows. Typical Home page = 25-30 mixed types → ~15-25 video rows after filter.

**Trending and Hype rows have different fields**

- This is upstream behavior, not a bug. YouTube's Trending response includes rich metadata (`viewCount`, `likeCount`, `commentCount`, `publishedAt`, `description`). The Hype response is intentionally lean (`hypeText` + thumbnail + minimal context). We surface what each endpoint actually returns; we don't fabricate fields.

**`type=movies` returns no data**

- Not exposed in input — YouTube's `/trending?type=movies` endpoint is broken upstream (returns `Internal error`). The actor's INPUT\_SCHEMA only allows `music` and `gaming` for the Trending category filter to spare you from a broken endpoint.

***

### ⚖ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

[![Telegram Support](https://img.shields.io/badge/Telegram-Support%20Group-0088cc?logo=telegram)](https://t.me/+vyh1sRE08sAxMGRi)

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Actor input Schema

## `operation` (type: `string`):

Which operation to run. **`trending`** pulls the canonical YouTube Trending tab for a region (single page, 30-50 rows). **`hype`** pulls the new Hype leaderboard for a region — UNIQUE TO THIS ACTOR, surfaces rising videos before they peak (100 rows per page, paginated by niche). **`home`** pulls the region home-feed with personalized + topical mixes. **`trendingAndHype`** runs both in one input — best for daily-cron dashboards.

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

Uppercase 2-letter ISO 3166-1 alpha-2 country code (e.g. `US`, `GB`, `DE`, `JP`, `BR`, `IN`, `MX`, `FR`, `KR`, `CA`). Determines which country's Trending / Hype / Home feed to pull. Defaults to `US` when omitted. Use **`regions`** below to scan multiple regions in one run.

## `regions` (type: `string`):

Optional — for multi-region scans. Comma-separated OR newline-separated uppercase 2-letter ISO codes (e.g. `US,GB,DE,JP,BR`). When provided, the actor iterates each region for the chosen `operation` and tags every row with its source region. Max 25 regions per run. Overrides `region` when set.

## `niche` (type: `string`):

Optional category filter. For **`trending`** mode: one of `music` or `gaming` (omit for the catch-all Trending tab). For **`hype`** mode: free-string filter label such as `All`, `Gaming`, `Sports`, `Music`, `Food`, `DIY`, `Style`, `Books`, `Podcast` (varies by region). For **`home`** mode: free-string label from YouTube's region-dynamic filter list. Omit for the default (`All`). Use **`niches`** below to scan multiple cuts in one run.

## `niches` (type: `string`):

Optional — for multi-niche scans. Comma-separated OR newline-separated niche labels (e.g. `Music,Gaming,Sports`). When provided, the actor iterates each niche for the chosen `operation` + `region` and tags every row with its source niche. Max 10 niches per run. Overrides `niche` when set.

## `maxPages` (type: `integer`):

Max paginated pages to fetch PER region+niche pair (for `hype` and `home` operations). Each Hype page returns ~100 rows (All) or ~50 rows (per-niche). Each Home page returns ~25 video rows (ads filtered out). Set to `1` for cheap sampling, `2-3` for a quality dataset. Range 1-10. **Has no effect on `trending` mode** (single page only — YouTube doesn't paginate Trending).

## `lang` (type: `string`):

Optional language code (e.g. `en`, `es`, `ja`, `ar`, `pt`) to localize result language. Pairs well with `region`. Omit for region default.

## Actor input object example

```json
{
  "operation": "trending",
  "region": "US",
  "regions": "US,GB,DE,JP,BR",
  "niche": "Music",
  "niches": "Music\nGaming\nSports",
  "maxPages": 1,
  "lang": "en"
}
```

# Actor output Schema

## `output` (type: `string`):

Video rows with `videoId`, `videoTitle`, `channelTitle`, `viewCount`, `likeCount`, `commentCount`, `publishedAt`, `lengthText`, `thumbnailUrl`. Hype rows also include `hypeText` + `hypeRank`. Every row is tagged with `_sourceFeed`, `_sourceRegion`, `_sourceNiche`.

## `report` (type: `string`):

HTML report with run status, success/error counts, region+niche breakdown, pages fetched, duration, and inputs — written even on fatal crash.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/youtube-trending-hype-pulse").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/youtube-trending-hype-pulse").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 '{}' |
apify call sian.agency/youtube-trending-hype-pulse --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sian.agency/youtube-trending-hype-pulse",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Trending & Hype Pulse — Rising Videos by Region",
        "description": "Scrape YouTube Trending plus the new Hype leaderboard by region and category. The only Apify actor exposing YouTube's Hype tab — catch rising videos before they peak. Multi-region scan, multi-niche cuts, clean structured rows. Built for trend forecasters, news outlets, and content strategists.",
        "version": "1.0",
        "x-build-id": "ztrH405t3SW42VqfX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sian.agency~youtube-trending-hype-pulse/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sian.agency-youtube-trending-hype-pulse",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/sian.agency~youtube-trending-hype-pulse/runs": {
            "post": {
                "operationId": "runs-sync-sian.agency-youtube-trending-hype-pulse",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/sian.agency~youtube-trending-hype-pulse/run-sync": {
            "post": {
                "operationId": "run-sync-sian.agency-youtube-trending-hype-pulse",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "operation"
                ],
                "properties": {
                    "operation": {
                        "title": "🎯 Operation",
                        "enum": [
                            "trending",
                            "hype",
                            "home",
                            "trendingAndHype"
                        ],
                        "type": "string",
                        "description": "Which operation to run. **`trending`** pulls the canonical YouTube Trending tab for a region (single page, 30-50 rows). **`hype`** pulls the new Hype leaderboard for a region — UNIQUE TO THIS ACTOR, surfaces rising videos before they peak (100 rows per page, paginated by niche). **`home`** pulls the region home-feed with personalized + topical mixes. **`trendingAndHype`** runs both in one input — best for daily-cron dashboards.",
                        "default": "trending"
                    },
                    "region": {
                        "title": "🌍 Region (single)",
                        "type": "string",
                        "description": "Uppercase 2-letter ISO 3166-1 alpha-2 country code (e.g. `US`, `GB`, `DE`, `JP`, `BR`, `IN`, `MX`, `FR`, `KR`, `CA`). Determines which country's Trending / Hype / Home feed to pull. Defaults to `US` when omitted. Use **`regions`** below to scan multiple regions in one run.",
                        "default": "US"
                    },
                    "regions": {
                        "title": "🌎 Regions (multi-region scan)",
                        "type": "string",
                        "description": "Optional — for multi-region scans. Comma-separated OR newline-separated uppercase 2-letter ISO codes (e.g. `US,GB,DE,JP,BR`). When provided, the actor iterates each region for the chosen `operation` and tags every row with its source region. Max 25 regions per run. Overrides `region` when set."
                    },
                    "niche": {
                        "title": "🎭 Niche / Category (single)",
                        "type": "string",
                        "description": "Optional category filter. For **`trending`** mode: one of `music` or `gaming` (omit for the catch-all Trending tab). For **`hype`** mode: free-string filter label such as `All`, `Gaming`, `Sports`, `Music`, `Food`, `DIY`, `Style`, `Books`, `Podcast` (varies by region). For **`home`** mode: free-string label from YouTube's region-dynamic filter list. Omit for the default (`All`). Use **`niches`** below to scan multiple cuts in one run."
                    },
                    "niches": {
                        "title": "🎨 Niches (multi-niche scan)",
                        "type": "string",
                        "description": "Optional — for multi-niche scans. Comma-separated OR newline-separated niche labels (e.g. `Music,Gaming,Sports`). When provided, the actor iterates each niche for the chosen `operation` + `region` and tags every row with its source niche. Max 10 niches per run. Overrides `niche` when set."
                    },
                    "maxPages": {
                        "title": "📄 Max pages per region+niche",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Max paginated pages to fetch PER region+niche pair (for `hype` and `home` operations). Each Hype page returns ~100 rows (All) or ~50 rows (per-niche). Each Home page returns ~25 video rows (ads filtered out). Set to `1` for cheap sampling, `2-3` for a quality dataset. Range 1-10. **Has no effect on `trending` mode** (single page only — YouTube doesn't paginate Trending).",
                        "default": 1
                    },
                    "lang": {
                        "title": "🗣 Language (optional)",
                        "type": "string",
                        "description": "Optional language code (e.g. `en`, `es`, `ja`, `ar`, `pt`) to localize result language. Pairs well with `region`. Omit for region default."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
