# YouTube Search & Rank Tracker (`getdataforu/youtube-search-rank`) Actor

YouTube search results for any keywords - rank position, exact views, channel, upload age and length - in any country, with channel rank tracking and a keyword competition report. A YouTube SEO tool, no API key.

- **URL**: https://apify.com/getdataforu/youtube-search-rank.md
- **Developed by:** [EMT Crawler](https://apify.com/getdataforu) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 1,000 results

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

## YouTube Search & Rank Tracker

Type in keywords. Get back the **YouTube search results** for each one — **rank position, exact views**, title, channel, upload age and length — in the country and language you choose. Add your own channels and see **where they rank** for every keyword.

A YouTube SEO tool with no API key, no Google account and no quota.

### What it's for

- **YouTube SEO** — find out where your videos rank for the keywords that matter, and track it week by week on a schedule.
- **Keyword research** — see how many results a topic has, how many views the top videos get, and how old they are. Old top results with modest views = an opening.
- **Competitor analysis** — which channels own the first page for your niche, and how many spots each one holds.
- **Influencer discovery** — find the creators who rank for your product category, with real view counts.
- **Market research by country** — rankings differ in the US, UK, Germany or Japan; compare them side by side.

### What you get for each result

| | |
|---|---|
| **Ranking** | Keyword, rank position (1, 2, 3...), whether it belongs to one of your tracked channels |
| **Performance** | Exact views (not "6.9M"), plus exact likes and like rate with details on |
| **Video** | Title, length, upload age and date, badges (4K, CC, New), description snippet, thumbnail, link |
| **Channel** | Name, @handle, channel ID, verified badge |

Real rows from a test run:

| Keyword | Rank | Title | Channel | Views | Likes |
|---|---|---|---|---|---|
| iphone 17 review | 1 | iPhone 17 Review: No Asterisks! | Marques Brownlee | 6,947,658 | 174,900 |
| home workout no equipment | 1 | 25 MIN FULL BODY HIIT for Beginners | growingannanas | 33,885,425 | 515,072 |
| mars rover | 1 | How does a Mars Rover work? | Jared Owen | 6,150,371 | 67,780 |

### The keyword report

Every run writes a **`KEYWORD_REPORT`** to the key-value store, one entry per keyword: YouTube's estimated number of results, median and total views of the collected results, the **channels holding the most spots**, the top 3 videos — and for your tracked channels, their **best rank**, how many of their videos are in the top 10, and every position they hold. From the test run:

| Keyword | Estimated results | Median views | Channels with most spots | Tracked best rank |
|---|---|---|---|---|
| iphone 17 review | 2.5 million | 197,836 | Nick Ackerman (4), Marques Brownlee (3) | #1 |
| how to start a podcast | 11.4 million | 97,365 | Think Media (11), Podcasting with Hiwi G (6) | — |
| mars rover | 8.7 million | 495,740 | NASA JPL (5), ElderFox Documentaries (4) | #21 |

### Input

```json
{
  "queries": ["iphone 17 review", "best running shoes 2026"],
  "maxResultsPerQuery": 50,
  "country": "US",
  "language": "en",
  "trackChannels": ["@mkbhd", "UCXuqSBlHAE6Xw-yeJA0Tunw"],
  "includeDetails": true
}
```

| Field | Default | Notes |
|---|---|---|
| `queries` | — | **Required.** One search per line. |
| `maxResultsPerQuery` | `50` | Up to 1,000 ranked videos per keyword. |
| `sortBy` | relevance | `relevance` (what people see — use for rank tracking), `upload_date`, `view_count`, `rating`. |
| `uploadDate` | any | `hour`, `today`, `week`, `month`, `year`. |
| `country` / `language` | US / en | Results as people in that country see them. |
| `trackChannels` | — | Your channels (or competitors') to flag and rank. |
| `includeDetails` | `false` | Exact likes and exact upload dates (slower). Views are exact either way. |

**Tip:** schedule the actor daily or weekly with the same keywords to build a rank history.

### Speed and cost

Measured: **5 keywords × 50 results = 250 ranked videos with likes and exact dates in 3 minutes**, every one complete. Without details, a keyword's top 20 comes back in a single request. The actor talks to YouTube directly and only uses a proxy if YouTube refuses a request.

### Limitations

- **Videos only.** Shorts shelves, channels, playlists and ads that appear in search are not ranked results and are skipped.
- Rankings are what a logged-out visitor sees in the chosen country; YouTube personalises results for signed-in users.
- Without details, upload dates are worked out from "3 weeks ago" and are approximate (`publishedDateExact` says which).

### Legal

Reads only what YouTube shows any visitor without logging in. You are responsible for how you use the data.

# Actor input Schema

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

One search per line, exactly as people type it into YouTube.

## `maxResultsPerQuery` (type: `integer`):

Ranked videos to collect for each keyword. YouTube serves 20 per page.

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

Relevance is YouTube's default order - use it for rank tracking.

## `uploadDate` (type: `string`):

Only videos uploaded in this period.

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

The country whose results you want - rankings differ by country.

## `language` (type: `string`):

Two-letter language code such as en, es, de, ja. It affects result titles and dates.

## `trackChannels` (type: `array`):

Channels to watch for: @handles, channel links or UC... IDs. Their videos are flagged, and the report shows their best rank for each keyword.

## `includeDetails` (type: `boolean`):

Read every result's watch data for exact likes and the exact upload date. Slower; search alone already gives exact views.

## `maxConcurrency` (type: `integer`):

Only used with likes and exact dates.

## `proxyConfiguration` (type: `object`):

Requests go out directly. This proxy is only used when YouTube refuses one.

## Actor input object example

```json
{
  "queries": [
    "iphone 17 review",
    "best running shoes 2026",
    "how to start a podcast"
  ],
  "maxResultsPerQuery": 50,
  "sortBy": "relevance",
  "uploadDate": "any",
  "country": "US",
  "language": "en",
  "trackChannels": [
    "@mkbhd",
    "UCXuqSBlHAE6Xw-yeJA0Tunw"
  ],
  "includeDetails": false,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Every ranked video: keyword, rank, title, channel, exact views, upload age, length and whether it belongs to a tracked channel.

## `keywordReport` (type: `string`):

Per keyword: estimated results, median views, the channels holding the most spots, the top 3, and the best rank of your tracked channels.

# 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": [
        "iphone 17 review",
        "best running shoes 2026"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("getdataforu/youtube-search-rank").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": [
        "iphone 17 review",
        "best running shoes 2026",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("getdataforu/youtube-search-rank").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": [
    "iphone 17 review",
    "best running shoes 2026"
  ]
}' |
apify call getdataforu/youtube-search-rank --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getdataforu/youtube-search-rank"
        }
    }
}
```

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/XbPyCmyBNbmur6YxJ/builds/SFCs6T4c4Mnz6EN2t/openapi.json
