# TikTok Hashtag Scraper — Videos, Stats & Creators, No Login (`memo23/tiktok-hashtag-scraper`) Actor

Scrape every video posted under any TikTok hashtag — no login, no cookies. Get video URL, description, play/like/comment/share counts, posting date, creator handle with follower count, music, co-tagged hashtags, and caption languages for every video. Multiple hashtags per run.

- **URL**: https://apify.com/memo23/tiktok-hashtag-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, AI, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

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

## TikTok Hashtag Scraper

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/tiktok-hashtag-logo.png" alt="TikTok Hashtag Scraper" width="240" />
</p>

**Scrape the video feed of any TikTok hashtag — no login, no cookies.** Paste one or more hashtags and get back every video with URL, description, posting date, play / like / comment / share / save counts, **the creator's handle and follower count**, music, co-tagged hashtags, and caption languages. From **$0.49 per 1,000 videos**. Export as JSON, CSV, or Excel.

### Why Use This Scraper?

- **No TikTok account needed** — no cookies, no session, no 2FA. Your account is never involved.
- **Full engagement stats per video** — plays, likes, comments, shares, and saves on every row.
- **Creator context built in** — each video carries its author's handle, ID, verification flag, and follower count, so you can separate big-creator posts from small-creator posts without extra lookups.
- **Music and co-tag data** — track which sounds and hashtag combinations drive a trend.
- **Sponsored-content flag** — the `isAd` field marks paid placements in the feed.
- **Coming soon: watermark-free video downloads** — an optional `downloadVideos` add-on ($2 per 1,000 videos) is rolling out now; once live, every row also gets a `downloadedVideoUrl` pointing at the clean MP4 saved to your run's storage.
- **Multiple hashtags per run** — every row is tagged with its source hashtag.
- **Clean, flat output** — one row per video, ready for trend dashboards, influencer discovery, or content research.

### Overview

This Actor returns **one dataset row per video** in each requested hashtag's feed. For each hashtag it first resolves the tag to its TikTok challenge ID, then walks the video feed page by page in the order TikTok serves it. Data is retrieved through a third-party TikTok data provider, so no TikTok credentials are ever required.

### Supported Inputs

| Input | What you get |
|---|---|
| A plain tag (e.g. `fitness`) | That hashtag's video feed |
| A `#`-prefixed tag (e.g. `#gymtok`) | Same — the `#` is stripped automatically |
| A tag URL (e.g. `https://www.tiktok.com/tag/homeworkout`) | Same — the tag is extracted from the URL |

- Multiple hashtags per run are fine; every row is tagged with its source `hashtag`.
- **Not supported:** profile URLs, video URLs, keyword search (use the TikTok Search Scraper for keywords).

> Pure HTTP. No browser, no CAPTCHA solver, no cookies.

### Use Cases

| Audience | How they use it |
|---|---|
| Trend / content researchers | Track what's being posted under a tag right now, with engagement to rank it |
| Influencer marketers | Discover creators actually posting in a niche, pre-filtered by follower count |
| Brands / agencies | Monitor campaign and branded-hashtag activity, including `isAd` placements |
| Musicians / labels | See which sounds dominate a hashtag via the music fields |

### How It Works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-tiktok-hashtag.png" alt="How the TikTok Hashtag Scraper works" width="900" />
</p>

1. **Resolve** — each input hashtag is looked up to get its TikTok challenge ID.
2. **Paginate** — the tag's video feed is walked cursor by cursor until TikTok stops returning videos (or until your cap).
3. **Emit** — every video is pushed to the dataset as its own row with engagement stats, creator info, music, and co-tags.

### Input Configuration

| Field | Type | Required | Notes |
|---|---|---|---|
| `hashtags` | array of strings | Yes | Tags to scrape — plain, `#`-prefixed, or tag URLs. |
| `maxResultsPerHashtag` | integer | No | Cap videos per hashtag. Omit to walk the feed until TikTok stops returning videos. |

#### Example input

```json
{
    "hashtags": ["fitness", "#gymtok"],
    "maxResultsPerHashtag": 500
}
```

### Output Overview

Each item is a flat object describing one video in a hashtag's feed. Runs stream to the default dataset, exportable as JSON, CSV, Excel, or via the API.

### Output Samples

```json
{
    "hashtag": "fitness",
    "hashtagId": "9261",
    "videoId": "7064703044331523375",
    "url": "https://www.tiktok.com/@shereinabdelhady/video/7064703044331523375",
    "description": "there's alot of emotions in this video 😂 #fyp #gym",
    "createTime": "2022-02-14T22:55:57.000Z",
    "isAd": false,
    "authorUsername": "shereinabdelhady",
    "authorNickname": "shoosh",
    "authorVerified": false,
    "authorFollowerCount": 914400,
    "playCount": 43800000,
    "likeCount": 8700000,
    "commentCount": 34300,
    "shareCount": 66600,
    "collectCount": 176700,
    "durationSec": 26,
    "coverUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast5-p-0068-...",
    "musicTitle": "without me",
    "musicAuthor": "favsoundds",
    "hashtags": ["fyp", "gym", "Fitness"],
    "captionLanguages": []
}
```

### Key Output Fields

| Field | Description |
|---|---|
| `hashtag` / `hashtagId` | The input tag this row came from and its TikTok challenge ID |
| `videoId` / `url` | Video ID and direct TikTok link |
| `description` / `createTime` | Caption text and posting date (ISO 8601) |
| `isAd` | Whether the video is a sponsored placement |
| `authorUsername` / `authorNickname` / `authorId` / `authorSecUid` | The creator's identifiers |
| `authorVerified` / `authorFollowerCount` | The creator's badge and audience size |
| `playCount` / `likeCount` / `commentCount` / `shareCount` / `collectCount` | Engagement counters |
| `durationSec` / `coverUrl` | Video length and thumbnail |
| `musicId` / `musicTitle` / `musicAuthor` | The sound used |
| `hashtags` | All hashtags on the video (co-tags) |
| `captionLanguages` | Language codes of available caption tracks (empty if none) |

### FAQ

**Do I need to log in or provide cookies?**
No. The Actor never touches your TikTok account.

**How many videos can I get per hashtag?**
The Actor walks the feed until TikTok stops serving pages — typically hundreds to a few thousand videos for active tags, in the same order the app shows them. It is a feed, not a complete historical archive of every video ever tagged.

**Does it return the hashtag's total view count?**
No. TikTok's public API often reports zeroed counters for hashtag totals, so the Actor doesn't promise them — per-video stats are always present instead.

**Are the results sorted by views?**
They arrive in TikTok's own feed order (a popularity mix). Sort the dataset by `playCount` or `likeCount` after export if you need a strict ranking.

**Can I download the videos themselves?**
Video download is rolling out now as an optional add-on: watermark-free MP4s saved to the run's key-value store, $2 per 1,000 videos on top of the per-result price. The `downloadVideos` toggle appears in the input as soon as billing for it is enabled.

**What does it cost?**
Pay per result: from **$0.49 per 1,000 videos**, plus a small per-run start fee. No subscription.

### Support

Found a bug or need a field added? Open an issue on the Actor's **Issues** tab in Apify Console, or email <muhamed.didovic@gmail.com>.

### Additional Services

Need a custom TikTok or social-media scraper, enrichment pipeline, or a private version of this Actor? Custom builds available — reach out at <muhamed.didovic@gmail.com>.

### Explore More Scrapers

- **[TikTok Followers & Following Scraper](https://apify.com/memo23/tiktok-followers-scraper)** — followers, following, and suggested accounts with per-account stats
- **[TikTok Search Scraper](https://apify.com/memo23/tiktok-search-scraper)** — TikTok's ranked search results for any keyword
- **[Social Video Transcript Scraper](https://apify.com/memo23/tiktok-profile-videos-cheerio)** — captions and AI transcripts for TikTok and Instagram videos
- **[TikTok Keyword Suggestions Scraper](https://apify.com/memo23/tiktok-suggestions-scraper)** — autocomplete and keyword expansion

Browse the full portfolio: [muhamed-didovic.github.io](https://muhamed-didovic.github.io/)

### 🤖 For AI Agents & LLM Apps

**Purpose:** Return the videos posted under TikTok hashtags, with engagement stats and creator info.

**Minimal tested input:**

```json
{ "hashtags": ["fitness"], "maxResultsPerHashtag": 50 }
```

**Output:** array of flat objects, one per video. Fields: `hashtag`, `hashtagId`, `videoId`, `url`, `description`, `createTime`, `isAd`, `textLanguage`, `authorUsername`, `authorNickname`, `authorId`, `authorSecUid`, `authorVerified`, `authorAvatarUrl`, `authorFollowerCount`, `playCount`, `likeCount`, `commentCount`, `shareCount`, `collectCount`, `durationSec`, `coverUrl`, `musicId`, `musicTitle`, `musicAuthor`, `hashtags`, `captionLanguages`.

**Behavior & billing:** Pay-per-event — one charge per result. Unknown hashtags yield one error item instead of rows. Multiple hashtags allowed per call; each result carries its source `hashtag`. No login/cookies required.

### ⚠️ Disclaimer

This Actor accesses publicly available data on TikTok for legitimate research, market-intelligence, and business-analysis purposes. It does not log in, bypass authentication, or access private content. Use of this Actor must comply with TikTok's Terms of Service and all applicable laws, including data-protection regulations (GDPR, CCPA, etc.). The authors are not responsible for any misuse. Users must:

- Respect rate limits and avoid overloading TikTok's infrastructure
- Not use scraped data to violate user privacy or platform terms
- Process any personal data only with a lawful basis and in compliance with their jurisdiction
- Not republish scraped content in violation of copyright

We do not store scraped data; the Actor returns it directly to your Apify dataset for your authorized use. TikTok is a trademark of ByteDance Ltd.; this Actor is not affiliated with or endorsed by TikTok or ByteDance.

### SEO Keywords

tiktok hashtag scraper, scrape tiktok hashtag, tiktok hashtag videos export, tiktok hashtag feed scraper, tiktok challenge scraper, tiktok hashtag analytics, tiktok trend research tool, tiktok hashtag monitoring, tiktok videos by hashtag, tiktok hashtag to csv, tiktok hashtag api, tiktok viral video tracker, tiktok content research, tiktok influencer discovery, tiktok creator finder by niche, tiktok sound tracking, tiktok music trend scraper, no login tiktok scraper, tiktok data extraction, social media trend analysis, branded hashtag monitoring, tiktok campaign tracking, apify tiktok scraper

# Actor input Schema

## `hashtags` (type: `array`):

Hashtags whose video feeds you want to scrape. Accepts plain tags (fitness), #-prefixed (#fitness), or tag URLs (https://www.tiktok.com/tag/fitness) — one per line, mixed formats are fine. Unknown hashtags return an error item. Example: \["fitness", "#gymtok"]. Required, no default.

## `maxResultsPerHashtag` (type: `integer`):

Maximum number of videos to collect per hashtag. Use it to cap cost or sample a feed. Leave empty to keep walking the feed until TikTok stops returning videos. Example: 500. Default: unlimited.

## Actor input object example

```json
{
  "hashtags": [
    "fitness",
    "#gymtok",
    "https://www.tiktok.com/tag/homeworkout"
  ]
}
```

# 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 = {
    "hashtags": [
        "fitness"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/tiktok-hashtag-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 = { "hashtags": ["fitness"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/tiktok-hashtag-scraper").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 '{
  "hashtags": [
    "fitness"
  ]
}' |
apify call memo23/tiktok-hashtag-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/tiktok-hashtag-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/UEs1Cz8Ctj33wLu1w/builds/cWomeyQjXFwdtgNPp/openapi.json
