# TikTok Viral Videos & Explore Scraper (`s_actors/tiktok-explore-scraper`) Actor

Viral TikTok videos from the Explore page in any country and 21 categories: plays, likes, comments, shares, saves, engagement, plays per hour, hashtags, sound, creator with bio email. Filter fresh or big videos. New-video alerts. No login.

- **URL**: https://apify.com/s_actors/tiktok-explore-scraper.md
- **Developed by:** [Superior Actors](https://apify.com/s_actors) (community)
- **Categories:** Social media, Marketing, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 videos

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

### TikTok Viral Videos & Explore Scraper

Get the **viral TikTok videos the Explore page is pushing right now, in any country and any of its 21 categories**: plays, likes, comments, shares, saves, **engagement rate**, **plays per hour since posting**, hashtags, sound, language and the creator with followers and the **email from their bio**. TikTok shows every country its own Explore feed, so the Actor loads each country through a **residential IP in that country**: Brazil gets Brazilian videos in Portuguese, Japan gets Japanese ones, Kenya gets Kenyan ones.

```json
{ "countries": ["US", "BR"], "categories": ["All", "Food"] }
```

No TikTok login, no cookies, no browser. Use it as a **TikTok viral videos finder** or a **TikTok Explore API**: filter to videos posted in the last few days with a minimum number of plays, and schedule it with **Only new videos** to get every new viral video in your niche.

#### What you get

Real example, 4 October 2026, Explore feed in the United States, category All:

| # | author | plays | likes | shares | plays per hour | posted |
|---|---|---|---|---|---|---|
| 1 | menlegende | 126,200,000 | 4,300,000 | 334,600 | 69,613 | 21 Jul 2026 |
| 2 | agentoflaughter | 20,300,000 | 3,300,000 | 186,100 | 17,688 | 17 Aug 2026 |
| 3 | lianaparmezana | 49,300,000 | 8,900,000 | 251,400 | 33,018 | 3 Aug 2026 |
| 4 | mw10.03 | 46,600,000 | 9,800,000 | 3,200,000 | 26,261 | 22 Jul 2026 |

The same run, Brazil, category Food (the feed is local: Portuguese videos from the last two weeks):

| # | author | plays | likes | plays per hour | posted |
|---|---|---|---|---|---|
| 1 | senhoritadoce | 878,600 | 121,900 | 3,402 | 23 Sep 2026 |
| 2 | piuecabelo | 8,100,000 | 286,100 | 59,676 | 28 Sep 2026 |
| 3 | stephany27.07 | 3,200,000 | 620,000 | 10,586 | 21 Sep 2026 |

| Field | Description |
|---|---|
| `country`, `category`, `position` | Country of the feed, Explore category, place in the feed as TikTok served it |
| `videoUrl`, `videoId`, `videoDescription`, `videoCreatedAt` | The video |
| `videoPlayCount`, `videoLikeCount`, `videoCommentCount`, `videoShareCount`, `videoSaveCount` | Current numbers (TikTok itself rounds them from 10,000: 1.2M) |
| `engagementRate` | (likes + comments + shares + saves) / plays, % |
| `ageHours`, `playsPerHour` | Hours since posting and plays per hour since then: how fast it is spreading |
| `hashtags`, `mentions`, `language`, `durationSeconds`, `subtitleLanguages` | Hashtags, mentioned accounts, language, length, available subtitles |
| `musicTitle`, `musicAuthor`, `musicUrl`, `musicAudioUrl`, `musicIsOriginal`, `musicId` | The sound used |
| `videoAuthorUsername`, `videoAuthorName`, `videoAuthorFollowerCount`, `videoAuthorLikeCount`, `videoAuthorVideoCount`, `videoAuthorVerified`, `videoAuthorBio`, `videoAuthorEmail` | The creator, with an email found in the bio |
| `isAd`, `isAiGenerated`, `isPhotoPost` | Ad, AI-generated content and photo post flags |
| `coverUrl`, `width`, `height`, `placeName`, `alsoInCategories` | Cover image, video size, tagged place, other categories the video was found in |
| `isNew`, `scrapedAt` | Not in the previous run of this monitor (empty on the first run), run time |

#### How it works

1. Add **countries** as two-letter codes (US, GB, DE, BR, IN, NG, KE...): any country works
2. Choose **categories**: All (the main feed) or any of Singing & Dancing, Comedy, Sports, Anime & Comics, Relationship, Shows, Lipsync, Daily Life, Beauty Care, Games, Society, Outfit, Cars, Food, Animals, Family, Drama, Fitness & Health, Education, Technology
3. Optional: **Posted within (days)** and **Minimum plays** to keep only fresh or big videos, **Only new videos** for scheduled runs
4. Run, then download the dataset as CSV, Excel, JSON or HTML. Three tabs: **Explore videos**, **Engagement, hashtags, sound** and **Creators**

#### Why this Actor

| | |
|---|---|
| 📇 **Creator contacts** | Find creators to work with: the viral videos of a niche and country, and how to reach their authors: email, website, Telegram, Instagram, YouTube in one table |
| 🌍 **Any country, really local** | Each country's feed is loaded through a residential IP in that country. A cloud IP gets an empty Explore feed, and a single IP gets one country's feed for every "country" setting |
| 🧭 **All 21 categories** | The same categories as the Explore page, a video found in several of them is returned once |
| 🚀 **Plays per hour** | Spot what is spreading now, not only what is big: a 2-day-old video with 50,000 plays per hour beats a 2-month-old one with more plays |
| 🔎 **Viral filters** | Posted within N days, minimum plays. Videos that do not pass are free |
| 👤 **Creators with emails** | Followers, total likes, bio and the email in it: ready for influencer outreach |
| 🔔 **New-video alerts** | `isNew` on every row; **Only new videos** returns just the videos that appeared since the previous run |
| 💰 **$0.99 per 1,000 videos** | No subscription, no paid start |

#### Get new viral videos every day

1. Choose the countries and categories, set **Posted within** to 3 days and turn on **Only new videos**
2. Save as a task and add a schedule, e.g. every morning
3. The **first run** returns the feed as a baseline. **Every later run** returns only videos not seen before: send them to [Google Sheets](https://apify.com/s_actors/google-sheets-import-export), Slack or email with an integration

The memory is kept in your account (key-value store `tiktok-explore-state`). Use a different **Monitor name** for each task.

#### Creator contacts (leads)

Turn on **Creator contacts (leads)** (input section **Leads**) and every row gets the contacts of its account in the **Leads** tab of the results, plus a table of the creators of the viral videos, **one row per account** (contacts are not repeated on every row): exact followers, bio, business category, **email**, **website**, **Telegram**, **Instagram**, **YouTube**, X, Facebook, LinkedIn, WhatsApp, Twitch. The Actor opens each TikTok profile and the website or link-in-bio page (Linktree, Taplink, Beacons, Stan...) linked in it, with its contact page, and reads handles like `TG: @name` in the bio. The one-row-per-account table is in the run's **Output** tab → **Authors (CSV)** (also `AUTHORS` as JSON). Each account is looked up once per run. Real example, October 2026 (Explore US, Beauty Care, 60 videos: 53 creators, 39 with contacts, 19 with an email):

| username | followerCount | email | emailSource | website | instagram |
|---|---|---|---|---|---|
| lavdysheva | 1,375,464 | lavdyshevaa@gmail.com | bio | | instagram.com/lavdyshevaa |
| laurasiburian | 3,876,468 | | | | instagram.com/laurasiburiann |
| ibrahiiim.11 | 7,233,312 | | | dkhoonemirates.com | instagram.com/dkhoni__official |

**Max accounts for contacts** (default 500) takes the most frequent accounts first; `0` = all. Accounts without any contact are listed for free.

#### Pricing

Pay per video, no subscription needed. Apify Scale and Business plans pay less:

| Event | Free and Starter plans | Scale plan | Business plan |
|---|---|---|---|
| Run start | $0.001 | $0.001 | $0.001 |
| Video (one row) | $0.00099 | $0.00079 | $0.00049 |
| Account with contacts, no email (Creator contacts) | $0.0005 | $0.00045 | $0.0004 |
| Account with an email (Creator contacts) | $0.00399 | $0.00359 | $0.00319 |

| Task | Cost |
|---|---|
| 100 Explore videos of one country | ~$0.10 |
| 5 countries × 4 categories × 100 videos | ~$2.00 |
| Daily alert, one country and category (~30 new a day) | ~$0.95 per month |

#### Ready-made tasks

Open it, change the countries, and run:

| Task | What you get |
|---|---|
| [TikTok Viral Videos Today](https://apify.com/s_actors/tiktok-explore-scraper/examples/tiktok-viral-videos-today) | Explore videos posted in the last 3 days in the US and the UK |

#### FAQ

**What is the Explore feed?** The Explore page of TikTok on the web (tiktok.com/explore): a feed of popular videos chosen by TikTok for the visitor's country, with category tabs. A logged-out visitor sees it the same way the Actor does, so the feed is not personalized to anybody's watch history.

**Are these the newest videos?** No, these are the videos TikTok promotes: most are a few days to a few weeks old, with hundreds of thousands to hundreds of millions of plays. Use **Posted within (days)** for the fresh ones and sort by `playsPerHour`.

**How many videos can I get?** Up to 2,000 per category and country. Every load of the feed gives up to 30 videos and the next load gives others: a test run asked for 1,000 US Comedy videos and got 987 different ones. The Actor stops early if the feed starts repeating itself.

**Why are numbers like 1,200,000 round?** TikTok shows plays, likes, comments and shares from 10,000 rounded, on its site and in its own data. Saves are exact.

**Is this the For You page?** The For You feed is personal and needs a logged-in account. Explore is the public, country-level version of it.

**Do I need a TikTok account or cookies?** No.

#### Use with the API and AI agents

Run it via the [Apify API](https://docs.apify.com/api/v2) from Python, Node.js or any HTTP client, or connect it to Claude, ChatGPT and other AI agents through the [Apify MCP server](https://mcp.apify.com): "Which food videos are going viral on TikTok in Brazil this week, and who made them?"

#### Other tools

| Tool | What it does |
|---|---|
| [TikTok Trending Videos Scraper](https://apify.com/s_actors/tiktok-trending-videos-scraper) | Top TikTok videos by country: ~80 per country (not just the top 4), period and organic views, engagement, likes, creators, new-video alerts |
| [TikTok Trending Hashtags Scraper](https://apify.com/s_actors/tiktok-trending-hashtags-scraper) | Trending TikTok hashtags by country: ~45 per country (not just the top 3), views, trend curve, top creators, new-trend alerts |
| [TikTok Video Scraper](https://apify.com/s_actors/tiktok-video-scraper) | Views, likes, shares, hashtags and sound of TikTok videos, MP4 download, views tracker |
| [TikTok Comments Scraper](https://apify.com/s_actors/tiktok-comments-scraper) | Comments and replies of TikTok videos and profiles, keyword filter, only-new alerts |
| [TikTok Transcript Scraper](https://apify.com/s_actors/tiktok-transcript-scraper) | Transcripts and subtitles of TikTok videos and profiles: text, SRT, VTT, translations |
| [TikTok Followers Scraper](https://apify.com/s_actors/tiktok-followers-scraper) | Followers and following lists of TikTok profiles: bio emails, follow time, new followers and unfollows |
| [TikTok Trending Sounds & Songs Scraper](https://apify.com/s_actors/tiktok-trending-sounds-scraper) | Trending TikTok sounds and songs by country and Explore category: videos using each sound, plays, creators, commercial use, MP3 |
| [YouTube Search Scraper](https://apify.com/s_actors/youtube-search-scraper) | YouTube search results with filters: videos, Shorts, channels, playlists |
| [Google Sheets Import & Export](https://apify.com/s_actors/google-sheets-import-export) | Send the videos to a Google Sheet |

# Actor input Schema

## `countries` (type: `array`):

Two-letter country codes, one per line (US, GB, DE, BR, IN, NG, KE...). Any country: TikTok shows each country its own Explore feed, and the Actor loads it through a residential IP in that country.

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

Explore page categories. All = the main Explore feed. A video found in several categories is returned once (alsoInCategories lists the others).

## `maxVideos` (type: `integer`):

Different videos to collect per category and country. TikTok gives new videos on every load of the feed (a test got 987 different US Comedy videos out of 1,000).

## `postedWithinDays` (type: `integer`):

Only videos posted in the last N days (e.g. 3 = viral right now). Empty or 0 = any age. Most Explore videos are 1-4 weeks old, so a short window returns fewer videos than asked (US and UK, 3 days: about 35 per country).

## `minPlays` (type: `integer`):

Only videos with at least this many plays (e.g. 1000000). Empty or 0 = no minimum.

## `onlyNew` (type: `boolean`):

For scheduled runs (save the input as a task and add a schedule). The first run returns the feed and remembers it; every later run returns only videos that were not in it before. Without it, every row still has isNew.

## `monitorName` (type: `string`):

Name of the memory used by isNew and Only new videos. Use a different name for each task.

## `findLeads` (type: `boolean`):

Open the TikTok profile of each of the creators of the videos and the website or link-in-bio page (Linktree, Taplink, Beacons...) linked in it, and add to every row exact followers, bio, business category, email, website, Telegram, Instagram, YouTube, X, Facebook, LinkedIn, WhatsApp, Twitch. See the Leads tab of the results; one row per account: Output tab → Authors (CSV). Charged per account with contacts (more with an email, see Pricing); accounts without any contact are listed for free. Contacts are not repeated on every row.

## `maxLeads` (type: `integer`):

At most this many accounts get contacts, the most frequent creators first. 0 = all accounts of the run.

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

How many categories and countries are read at the same time.

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

Explore always goes through Apify residential proxies in the chosen country (TikTok gives cloud IPs an empty Explore feed); this setting is only a fallback. The default works.

## `debugLog` (type: `boolean`):

Log every refused request (for troubleshooting).

## Actor input object example

```json
{
  "countries": [
    "US"
  ],
  "categories": [
    "All"
  ],
  "maxVideos": 100,
  "onlyNew": false,
  "monitorName": "default",
  "findLeads": false,
  "maxLeads": 500,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "debugLog": false
}
```

# Actor output Schema

## `videos` (type: `string`):

Videos with plays, likes, comments, shares and plays per hour.

## `leads` (type: `string`):

With Creator contacts: email, website, Telegram, Instagram, YouTube of each account, on its rows.

## `authors` (type: `string`):

With Creator contacts: one row per account of the creators of the videos: followers, email, website, Telegram, Instagram, YouTube.

## `engagement` (type: `string`):

Saves, engagement rate, age, hashtags, sound, language.

## `creators` (type: `string`):

The creators with followers, bio and email.

## `all` (type: `string`):

Every field of every row.

# 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 = {
    "countries": [
        "US"
    ],
    "categories": [
        "All"
    ]
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "countries": ["US"],
    "categories": ["All"],
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/tiktok-explore-scraper").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 '{
  "countries": [
    "US"
  ],
  "categories": [
    "All"
  ]
}' |
apify call s_actors/tiktok-explore-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,s_actors/tiktok-explore-scraper"
        }
    }
}
```

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/xODWo9p7comzFmcgu/builds/TJMkiP2pNGkh0ayHQ/openapi.json
