# 🎵 TikTok Profile & Video Scraper - Followers, Likes, Views (`renzomacar/tiktok-scraper`) Actor

Scrape TikTok profiles and videos without an API key or login. Follower counts, view/like/comment/share counts, video descriptions, hashtags and music. Input by profile URL or hashtag. For influencer research and competitor tracking. Pay per result.

- **URL**: https://apify.com/renzomacar/tiktok-scraper.md
- **Developed by:** [Renzo Madueno](https://apify.com/renzomacar) (community)
- **Categories:** Social media, Videos, AI
- **Features:** Limited permissions
- **Stats:** 231 total users, 7 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 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/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 Profile & Post Scraper

### Collect TikTok Creator Profiles and Video Data Without the API

Extract structured data from any public TikTok profile or hashtag in minutes. This scraper pulls follower counts, engagement metrics, video captions, view counts, hashtags, and more -- giving you the data you need for influencer marketing, competitive analysis, and trend research without navigating TikTok's restrictive API.

Whether you are vetting creators for brand partnerships, monitoring competitor accounts, or tracking which hashtags are driving the most engagement in your industry, this actor delivers clean, structured data you can export to JSON, CSV, or Excel with a single click.

### What data can you extract?

#### Profile data

| Field | Type | Description |
|-------|------|-------------|
| `dataType` | string | Record type identifier (`profile`) |
| `username` | string | TikTok handle (without the @) |
| `displayName` | string | Creator's display name |
| `profileUrl` | string | Full URL to the TikTok profile |
| `followerCount` | string | Number of followers (e.g., "80.5M") |
| `followingCount` | string | Number of accounts the creator follows |
| `likeCount` | string | Total likes received across all videos |
| `videoCount` | integer | Total number of videos posted |
| `bio` | string | Profile bio text |
| `isVerified` | boolean | Whether the account has a verified badge |
| `profileImageUrl` | string | URL of the profile avatar image |
| `scrapedAt` | string | ISO 8601 timestamp of when the data was collected |

#### Video data

| Field | Type | Description |
|-------|------|-------------|
| `dataType` | string | Record type identifier (`video`) |
| `username` | string | Creator who posted the video |
| `videoDescription` | string | Video caption and text overlay content |
| `videoUrl` | string | Direct link to the TikTok video |
| `videoViewCount` | string | Number of views on the video |
| `videoLikeCount` | string | Number of likes on the video |
| `videoCommentCount` | string | Number of comments on the video |
| `videoShareCount` | string | Number of times the video was shared |
| `musicTitle` | string | Name of the sound or music used |
| `hashtags` | array | List of hashtags used in the caption |
| `createTime` | string | When the video was posted |
| `scrapedAt` | string | ISO 8601 timestamp of when the data was collected |

### Use cases

- **Influencer marketing** -- Vet creators with real follower counts, engagement rates, and content history before committing to paid partnerships.
- **Competitive monitoring** -- Track competitor TikTok accounts to see what content formats, posting cadences, and hashtag strategies drive their growth.
- **Hashtag and trend research** -- Discover top-performing videos for any hashtag to understand what resonates with audiences in your market.
- **Social media reporting** -- Automate the collection of profile and video metrics for recurring client reports instead of pulling data manually.
- **Content ideation** -- Analyze high-performing videos across creators in your niche to identify patterns in captions, hashtags, and video styles.

### Finding creators in a niche by hashtag

Pass `hashtags` instead of profile URLs and the Actor works the discovery side: it collects the videos ranking for that tag, each with the account behind it.

That inverts the usual research order. You do not need a list of creators to start — you start from the topic your product lives in, read who is actually getting views on it right now, and the creator list falls out of the data. `maxResultsPerHashtag` controls how deep you go.

Every video row carries `username` and `profileUrl`, so deduplicating by username turns a hashtag sweep into a shortlist of accounts working that niche this week, not the ones who ranked for it last year.

### Creator data for influencer outreach

Run with `profileUrls` and the first row for each account is the profile: `followerCount`, `videoCount`, `bio`, `isVerified` and `profileImageUrl`. The rows after it are that creator's recent videos.

The profile row tells you the size. The video rows tell you whether the size is real, and that is the number that decides a deal: compare `videoViewCount` across recent uploads against the follower count. A creator whose typical video reaches a solid share of their following has an audience that watches. A large follower count with thin views is a media kit, not a channel.

`bio` is where creators put booking emails and management contacts, so it is worth reading rather than counting.

One field to know about: a handful of very large accounts overflow TikTok's own like counter and it comes back unusable. The Actor returns that cell empty instead of a wrong number, so an empty profile-level `likeCount` on a huge account means "TikTok did not report it", not zero.

### Exporting video engagement metrics

Four counters come back on every video row: `videoViewCount`, `videoLikeCount`, `videoCommentCount` and `videoShareCount`, in TikTok's own display format (`"1.5M"`, `"428.9K"`).

Shares are the column most people skip and the one that predicts reach. A video with high views and low shares was pushed by the algorithm; one with a high share-to-view ratio is being passed around by humans, which is what you want to study before copying a format.

`musicTitle` and `hashtags` explain the why behind the numbers. Sorting a creator's uploads by `videoViewCount` and reading the hashtags on the top five is the fastest read of what actually works on that account.

### Profile stats without logging in

No account, no session cookie and no app registration. The Actor reads what TikTok serves to an anonymous visitor, so there is no login to keep alive and no risk to a personal account.

`proxyCountry` matters more here than on most sites: TikTok tailors what it serves by region, so setting it to the market you sell into gives you the view your customers get rather than a generic one.

Counts arrive as display strings (`"159.3M"`) because that is what TikTok publishes. For sorting in a spreadsheet, convert them on your side — or sort within a single order of magnitude, where the string sort already holds.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `profileUrls` | array | No | `[]` | TikTok profile URLs to scrape (e.g., `https://www.tiktok.com/@tiktok`) |
| `hashtags` | array | No | `[]` | Hashtags to search (without the # symbol) |
| `maxPostsPerProfile` | integer | No | `30` | Maximum videos to extract per profile (1--200) |
| `maxResultsPerHashtag` | integer | No | `50` | Maximum videos to extract per hashtag search (1--200) |
| `maxConcurrency` | integer | No | `1` | Number of browser pages to run in parallel (1--3) |

At least one profile URL or hashtag must be provided.

### Example output

```json
{
    "dataType": "profile",
    "username": "charlidamelio",
    "displayName": "Charli D'Amelio",
    "profileUrl": "https://www.tiktok.com/@charlidamelio",
    "followerCount": "155.6M",
    "followingCount": "1,284",
    "likeCount": "11.8B",
    "videoCount": 2480,
    "bio": "don't you dare",
    "isVerified": true,
    "profileImageUrl": "https://p16-sign-va.tiktokcdn.com/tos-maliva...",
    "scrapedAt": "2026-03-01T12:00:00.000Z"
}
```

```json
{
    "dataType": "video",
    "username": "charlidamelio",
    "displayName": "Charli D'Amelio",
    "profileUrl": "https://www.tiktok.com/@charlidamelio",
    "videoDescription": "new dance trend who's trying this? #dance #trending #fyp",
    "videoUrl": "https://www.tiktok.com/@charlidamelio/video/7338291045...",
    "videoViewCount": "42.1M",
    "videoLikeCount": "6.3M",
    "videoCommentCount": "84.2K",
    "videoShareCount": "312K",
    "musicTitle": "original sound - Charli D'Amelio",
    "hashtags": ["dance", "trending", "fyp"],
    "createTime": "2026-02-15T18:30:00Z",
    "scrapedAt": "2026-03-01T12:00:00.000Z"
}
```

### How much does it cost?

This actor uses a pay-per-event pricing model. You are charged a small start fee per run plus a fee for each data record (profile or video) that is successfully extracted. Current rates are shown on the Pricing tab of the Actor page.

There are no monthly subscriptions or minimum commitments. You only pay for the data you extract.

### Tips and tricks

- **Keep concurrency low.** TikTok has aggressive anti-bot protections. The default concurrency of 1 is recommended for the most reliable results. Increasing to 2 or 3 may speed up large runs but can trigger blocks.
- **Use hashtag search for discovery.** If you do not have specific profile URLs, enter industry-relevant hashtags to discover top-performing videos and the creators behind them.
- **Combine profiles and hashtags in one run.** You can scrape specific creator profiles and hashtag search results in a single actor run to maximize efficiency.
- **Schedule weekly runs for ongoing tracking.** Set up a recurring schedule on Apify to monitor how creator follower counts and engagement metrics change over time. Connect the output to Google Sheets or a data warehouse via Apify integrations.

### FAQ

**How do I scrape TikTok videos and creator profiles?**
Paste one or more TikTok profile URLs (like `https://www.tiktok.com/@tiktok`) or enter hashtags without the `#`, set how many videos you want per profile or hashtag, and click Start. You get follower counts, engagement metrics, video captions, view counts, and hashtags as a clean dataset you can export to JSON, CSV, or Excel.

**Do I need an API key or TikTok login to use this TikTok scraper?**
No. There is no TikTok API key, developer account, or login required. Provide profile URLs or hashtags and the actor returns public profile and video data directly.

**Why use this instead of the official TikTok API?**
TikTok's official Research and Content Posting APIs are gated behind an application and approval process, are limited to certain regions and use cases, and omit many fields. This scraper works on any public profile or hashtag with no approval, no developer registration, and returns engagement metrics the API restricts.

**What is a good TikTok API alternative for influencer research?**
This actor is a no-login TikTok API alternative: instead of applying for Research API access, you immediately get real follower counts, video view and like counts, and hashtag performance — exactly the data you need to vet creators for brand partnerships.

**Can I scrape TikTok hashtags to find trending videos?**
Yes. Enter industry-relevant hashtags without the `#` and the actor returns top-performing videos and the creators behind them, so you can spot trends and discover new creators in your niche.

**Is scraping public TikTok data legal?**
This tool collects only publicly available profile and video data. You are responsible for complying with TikTok's terms, applicable laws such as GDPR and CCPA, and using the data ethically. Do not collect personal data without a lawful basis.

### Automate it

Add this TikTok scraper to an Apify **Schedule** to track creator follower counts, video engagement, or a hashtag automatically every day or week — perfect for ongoing influencer monitoring and trend research. Connect the output to **Make, n8n, Zapier, Google Sheets, Slack, or a webhook** through Apify integrations so fresh TikTok data flows straight into your reports, dashboards, or alerts. Recurring runs are how you catch a trend or a creator's growth while it is still rising.

### Related actors

- [YouTube Channel & Video Scraper](https://apify.com/renzomacar/youtube-scraper) -- Extract YouTube channel statistics and video metadata for cross-platform creator analysis.
- [Reddit Sentiment Scraper](https://apify.com/renzomacar/reddit-scraper) -- Collect Reddit discussions and community sentiment to complement your TikTok research with audience insights.
- [Instagram Scraper](https://apify.com/renzomacar/instagram-scraper) -- Pull Instagram profiles and posts so you can vet creators across both short-video platforms in one workflow.
- [Telegram Channel Scraper](https://apify.com/renzomacar/telegram-channel-scraper) -- Monitor public Telegram channels (messages, views, media) alongside your TikTok trend tracking.
- [Website Contact Finder](https://apify.com/renzomacar/website-contact-finder) -- Turn the websites linked in creator bios into emails and contact details for influencer outreach.

# Actor input Schema

## `profileUrls` (type: `array`):

TikTok profile URLs (e.g., 'https://www.tiktok.com/@username').

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

Hashtags to search (without #). Results will include top videos for each hashtag.

## `maxPostsPerProfile` (type: `integer`):

Maximum videos to extract per profile.

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

Maximum videos to extract per hashtag search.

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

Number of profiles to process in parallel. The run is billed by wall-clock time, so processing in parallel costs less than one by one. Lower it to 1 only if you start seeing blocks.

## `proxyCountry` (type: `string`):

Two-letter country code for the residential proxy (e.g. US, GB, DE). Residential IPs are required for the video feed.

## Actor input object example

```json
{
  "profileUrls": [
    "https://www.tiktok.com/@tiktok"
  ],
  "maxPostsPerProfile": 12,
  "maxResultsPerHashtag": 15,
  "maxConcurrency": 3,
  "proxyCountry": "US"
}
```

# Actor output Schema

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

One row per profile or video with its stats.

# 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 = {
    "profileUrls": [
        "https://www.tiktok.com/@tiktok"
    ],
    "maxPostsPerProfile": 12,
    "maxResultsPerHashtag": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("renzomacar/tiktok-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 = {
    "profileUrls": ["https://www.tiktok.com/@tiktok"],
    "maxPostsPerProfile": 12,
    "maxResultsPerHashtag": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("renzomacar/tiktok-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 '{
  "profileUrls": [
    "https://www.tiktok.com/@tiktok"
  ],
  "maxPostsPerProfile": 12,
  "maxResultsPerHashtag": 15
}' |
apify call renzomacar/tiktok-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,renzomacar/tiktok-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/bJcTanV4ZFGvqyhY5/builds/DyS09mI24lYCcibc2/openapi.json
