# YouTube Shorts Scraper - Keyword Search, Views & Date Filter (`dz_omar/youtube-shorts-trend-finder`) Actor

Find popular YouTube Shorts by keyword, creator or hashtag. Get exact views, likes, comments, publish dates, views per day and a viral score - then filter to a real date range and rank by what is actually trending.

- **URL**: https://apify.com/dz\_omar/youtube-shorts-trend-finder.md
- **Developed by:** [FlowExtract API](https://apify.com/dz_omar) (community)
- **Categories:** Social media, Videos, Marketing
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

## YouTube Shorts Scraper — Keyword Search, Views & Date Filter

Find the YouTube Shorts that are actually **popular**, for any keyword, creator, or hashtag — and only the ones published inside the window you care about.

Most Shorts scrapers take a channel URL and hand back everything that channel ever posted. This one starts from **what you are searching for**, checks every Short it finds, and returns them ranked by real numbers.

***

### What makes it different

**Search by keyword, not just by channel.** Type `IShowSpeed`, `Kai Cenat`, `mrbeast challenge`, or any topic. You do not need to know the channel first.

**"Popular" means exact view counts.** Every Short is enriched to its precise view count — `25,939,392`, not `26M`. Ranking on rounded numbers puts thousands of Shorts in the same bucket; this returns a true order.

**Likes and comments on every row.** Not just views — you also get exact like and comment counts, plus an engagement rate per 1,000 views that stays comparable across Shorts of wildly different reach.

**The date filter is real.** Every Short carries its exact publish timestamp, and the timeframe is applied against that. When you ask for the last 7 days, you get the last 7 days.

**Four ways to rank:**

| Rank by | Finds |
|---|---|
| **Views** | The biggest all-time hits |
| **Views per day** | What is popping *right now* |
| **Viral score** | Fast climbers, weighted toward recent uploads |
| **Newest** | Most recently published |

Every row also carries `engagementRate` (likes + comments per 1,000 views), so you can separate a Short that got reach from one that got a reaction.

Views per day is usually what people mean by "trending": a 3-day-old Short on 2M views beats a 2-year-old Short on 5M.

**Results arrive while the run is still going.** Rows are written to the dataset as each Short is checked, best candidates first — you are not waiting for the whole run to finish before you see anything. Ask for 1,000 Shorts and the first ones show up in seconds.

**Depth on creators.** When your keyword matches a creator, the Actor also reads that creator's full Shorts catalogue — so a search for a big name returns hundreds of candidates to rank, not the handful that fit on one page of results.

***

### Input

Everything is auto-detected. You never pick a mode.

| Input | Example |
|---|---|
| Keyword | `IShowSpeed`, `kai cenat rage` |
| Channel handle or URL | `@MrBeast`, `youtube.com/@MrBeast` |
| Hashtag | `#gaming` |
| Direct Shorts URL | `youtube.com/shorts/...` |

```json
{
  "queries": ["IShowSpeed", "Kai Cenat"],
  "timeframe": "last30d",
  "sortBy": "views",
  "maxResults": 50,
  "minViews": 0
}
```

| Field | What it does |
|---|---|
| `queries` | Keywords, channels, hashtags, or Shorts URLs |
| `timeframe` | `last24h`, `last7d`, `last30d`, `last90d`, `lastYear`, `allTime` |
| `sortBy` | `views`, `velocity`, `viralScore`, `newest` |
| `maxResults` | How many Shorts to return after ranking |
| `minViews` | Drop anything below this exact view count |
| `includeChannelShorts` | Also read a matched creator's Shorts tab (default on) |
| `country` | Region used for results and locale |

***

### Output

One row per Short:

```json
{
  "videoId": "-KUPXrRQ93w",
  "title": "LIFTING THE HEAVIEST BLOCK IN THE WORLD",
  "url": "https://www.youtube.com/shorts/-KUPXrRQ93w",
  "views": 25939392,
  "likes": 916278,
  "comments": 15583,
  "engagementRate": 35.92,
  "viewsPerDay": 1329147,
  "viralScore": 1756955,
  "publishedAt": "2026-08-15T04:00:26-07:00",
  "ageDays": 19.6,
  "durationSeconds": 40,
  "channelName": "IShowSpeed",
  "channelId": "UCWsDFcIhY2DBi3GB5uykGXA",
  "channelUrl": "https://www.youtube.com/channel/UCWsDFcIhY2DBi3GB5uykGXA",
  "description": "...",
  "keywords": ["ishowspeed"],
  "category": "Gaming",
  "thumbnail": "https://i.ytimg.com/vi/-KUPXrRQ93w/sardefault.jpg"
}
```

Export as JSON, CSV, Excel, or XML, or pull it straight from the API.

***

### Use it for

- **Content research** — see which formats and hooks are working in your niche this week
- **Engagement benchmarking** — compare like/comment rates, not just raw view counts
- **Trend spotting** — catch Shorts climbing fast before they peak
- **Competitor tracking** — monitor any creator's Shorts performance over time
- **Sponsorship and talent scouting** — find creators whose Shorts consistently land
- **Datasets** — feed short-form video performance data into your own models

***

### Good to know

- Returns **public data only** — no login, no cookies, no account required.
- Rows stream out as they are found, ordered best-first by whatever you chose in `sortBy`. Because rows cannot be reordered once written, treat that order as best-effort: every row carries its exact `views`, `viewsPerDay`, `viralScore` and `engagementRate`, so sort the finished dataset on those if you need a guaranteed order.
- The run stops as soon as `maxResults` is reached, so you are never charged for Shorts beyond what you asked for.
- Every returned Short is confirmed to be a Short by its actual duration, so long-form videos never leak into your results.
- A Short whose publish date cannot be established is excluded from a filtered run rather than guessed at.
- Widen `timeframe` or lower `minViews` if a narrow search returns fewer rows than you expected — very recent windows genuinely contain fewer Shorts.

***

### Support

🌐 Website [flowextractapi.com](https://flowextractapi.com) · 📧 flowextractapi@outlook.com · 💬 GitHub [FlowExtractAPI](https://github.com/FlowExtractAPI) · 💼 LinkedIn [flowextract-api](https://www.linkedin.com/in/flowextract-api/) · 🐦 X [@FlowExtractAPI](https://x.com/FlowExtractAPI) · 📱 Facebook [flowextractapi](https://www.facebook.com/flowextractapi) · 🎵 TikTok [@flowextractapi](https://www.tiktok.com/@flowextractapi)

### Legal & compliance

Public data only · respects source rate limits and terms · no storage of personal information · suitable for commercial use · No affiliation with or endorsement by YouTube is implied.

*YouTube Shorts Scraper — by FlowExtract API. Turn any website into structured data.*

# Actor input Schema

## `queries` (type: `array`):

What to search. Each entry is auto-detected — you never pick a mode. Keyword ("IShowSpeed", "kai cenat"), channel handle (@MrBeast) or channel URL, hashtag (#gaming), or a direct Shorts URL. Keyword searches also read the matching creator's Shorts tab, which is where the depth is.

## `timeframe` (type: `string`):

Only return Shorts published inside this window. Applied against each Short's exact publish date after enrichment, not YouTube's coarse filter — so "last 7 days" means the last 7 days.

## `sortBy` (type: `string`):

Views = biggest all-time hits. Views per day = what is popping right now. Viral score = fast climbers, weighted toward recent uploads. Newest = most recently published.

## `maxResults` (type: `integer`):

How many Shorts to return after filtering and ranking. The Actor searches wider than this so the ranking has a real pool to choose from.

## `minViews` (type: `integer`):

Drop Shorts below this exact view count. Leave at 0 for no floor.

## `includeChannelShorts` (type: `boolean`):

When a keyword matches a creator, also collect that channel's Shorts. This is the difference between a couple of dozen Shorts and the creator's full catalogue. Turn off to search only.

## `country` (type: `string`):

Region used for results and locale. Affects which Shorts YouTube surfaces for a keyword.

## Actor input object example

```json
{
  "queries": [
    "IShowSpeed",
    "Kai Cenat"
  ],
  "timeframe": "last30d",
  "sortBy": "views",
  "maxResults": 50,
  "minViews": 0,
  "includeChannelShorts": true,
  "country": "US"
}
```

# Actor output Schema

## `allResults` (type: `string`):

Every Short returned by this run, with all metrics.

## `overview` (type: `string`):

The ranking columns only — views, likes, comments, views per day, viral score and engagement rate.

## `csv` (type: `string`):

The same rows as a spreadsheet-ready CSV file.

# 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 = {
    "queries": [
        "IShowSpeed",
        "Kai Cenat"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dz_omar/youtube-shorts-trend-finder").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 = { "queries": [
        "IShowSpeed",
        "Kai Cenat",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("dz_omar/youtube-shorts-trend-finder").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 '{
  "queries": [
    "IShowSpeed",
    "Kai Cenat"
  ]
}' |
apify call dz_omar/youtube-shorts-trend-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dz_omar/youtube-shorts-trend-finder"
        }
    }
}

```

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/k7CXfvitKomWGI5qa/builds/HazR3PZt1o0WISfwR/openapi.json
