# TikTok Profile Scraper: Followers, Posts, Bio Email, $2.5/1K (`transparent_meteorite/tiktok-public-profile-scraper`) Actor

TikTok public profiles and latest posts: followers, likes, video count, bio, bio link, emails and links in bio, verified, business category, plus each recent video's plays, likes, comments, shares, saves, hashtags, music and engagement rate. Video URLs too. No login.

- **URL**: https://apify.com/transparent_meteorite/tiktok-public-profile-scraper.md
- **Developed by:** [Detroit Web Agent - Open Data](https://apify.com/transparent_meteorite) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.48 / 1,000 result rows

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 Profile Scraper: followers, latest posts, bio links and emails

![TikTok Profile Scraper: features, price and a real output row](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/sf-tiktok-public-profile-scraper-banner-10132140.png)

[![Run it free on Apify](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/sf-cta.png)](https://console.apify.com/actors/8O6RGrfKC0dOdpACm/input)

| Price per 1,000 results | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
| **This Actor** | **$2.50** | **$2.00** | **$1.60** | **$0.48** |
| Most-used alternative | $3.70 | $3.00 | $2.30 | $1.70 |

<sub>Pay per event, no monthly rental. Prices read from each Actor's public Apify pricing on 2026-10-13; check the Pricing tab for the current figure.</sub>

![TikTok Profile Scraper sample output table from a real run](https://api.apify.com/v2/key-value-stores/9BAn0msnxToXlD9TO/records/sf-tiktok-public-profile-scraper-output-10132140.png)

Turn any public TikTok account into clean rows: followers, following, total likes, video count, verified badge, bio, link in bio, emails and links written in the bio, business category and account creation date, plus the latest posts with views, likes, comments, shares, saves, post date, hashtags, mentions, music, duration and engagement rate. Paste usernames, profile URLs or video URLs. Public pages only. No login, no cookies.

- **In short:** TikTok Profile Scraper (Apify actor `transparent_meteorite/tiktok-public-profile-scraper`) reads public TikTok profiles, their latest posts and single video URLs, and returns one row per post (author data included) or one row per profile.
- **Who it is for:** influencer marketers, agencies, brands vetting creators, social media analysts, lead generation (bio emails and links), researchers.
- **Input:** usernames or profile URLs; video URLs (short links too); output type (posts, profiles, both); latest posts per profile (up to about 10-13, TikTok's public limit); full post stats on/off; date and minimum-views filters; skip pinned; max rows; monitor mode; proxy.
- **Output:** post rows with 25+ fields and nested author data, or profile rows with 30+ fields including average and median views, engagement rate and posting frequency. JSON, CSV or Excel.
- **Pricing:** pay per event. Per row delivered: $0.0025 free plan, $0.002 Bronze, $0.0016 Silver, $0.00048 Gold, Platinum and Diamond. Plus a start event of $0.00005 per GB of run memory.
- **Limits:** TikTok's logged-out view exposes about the latest 10-13 posts per profile. Hashtag feeds are not read (they need a signed-in session).

**Paste a username, press Start, get the profile and its latest posts as a table in about 10 seconds.**

### Run in 30 seconds

1. Open the actor in [Apify Console](https://console.apify.com/actors?search=transparent_meteorite%2Ftiktok-public-profile-scraper) (a free Apify account is enough).
2. Press **Start** with the prefilled input: the 10 latest posts of @natgeo and @nba with full stats, 20 rows, about $0.05 on the free plan.
3. Open the **Output** tab: the **Posts** view is a table, the **Profiles** view lists the accounts. Download as CSV, Excel or JSON.

```json
{
  "profiles": ["natgeo", "nba"],
  "resultsPerPage": 10,
  "resultsType": "posts",
  "includeVideoDetails": true
}
```

An empty input `{}` also works: it reads @natgeo as an example.

### Why choose this over alternatives

| | This actor | Typical TikTok profile scrapers |
|---|---|---|
| Price per row (free plan) | **$0.0025** | $0.003 or more |
| Price per row (Gold, Platinum, Diamond) | **$0.00048** | $0.0017 / $0.001 / $0.0005 |
| Date range + likes filters together | **Yes** (`oldestPostDate` + `newestPostDate` + `leastDiggs`/`mostDiggs` + `minPlayCount`) | Often one at a time |
| Emails and links found in the bio | **Yes** (`bioEmails`, `bioUrls`) | Usually no |
| Link in bio as a full URL | Yes | Sometimes |
| Engagement rate per post | **Yes** | Usually no |
| Profile summary (avg + median views, engagement, posts per week) | **Yes** | No |
| Pinned post detection | Yes | Some |
| Monitor mode (only new posts, follower change) | **Yes** | No |
| Unknown accounts, failed pages, filtered rows | **Not charged** | Varies |
| Login or cookies needed | No | No |

### What it does and who it is for

- **Influencer vetting:** follower count, real reach (median views of recent posts, not just followers), engagement rate and posting frequency in one row per creator.
- **Lead generation:** many creator and business bios carry a contact email or a link-in-bio page. The actor pulls them into `bioEmails`, `bioUrls` and `bioLink`.
- **Competitor tracking:** schedule monitor mode daily on competitor accounts and get only their new posts, with follower change since the last run.
- **Content research:** captions, hashtags, music, duration and performance of the latest posts.
- **Single videos:** paste video URLs to get stats and author data for each.

### What you get: output fields

Post rows (`type: "post"`):

| Field | Meaning |
|---|---|
| `id`, `webVideoUrl` | Video ID and public URL |
| `text` | Caption |
| `createTime`, `createTimeISO` | When it was posted |
| `playCount`, `diggCount`, `commentCount`, `shareCount`, `collectCount` | Views, likes, comments, shares, saves |
| `engagementRate` | (likes + comments + shares) / views, percent |
| `hashtags`, `mentions` | From the caption |
| `likelyPinned` | Post looks pinned (older than the posts after it) |
| `isAd`, `isSlideshow`, `isAiGenerated`, `textLanguage`, `locationCreated` | Flags TikTok publishes |
| `videoMeta` | duration, height, width, definition, format, coverUrl, subtitle languages |
| `musicMeta` | musicId, musicName, musicAuthor, musicOriginal, musicAlbum |
| `authorMeta` | The full author profile (see below) |
| `detailsLoaded`, `input`, `scrapedAt` | Row provenance |

Profile rows (`type: "profile"`, or nested as `authorMeta`):

| Field | Meaning |
|---|---|
| `username` / `name`, `nickName`, `id`, `secUid`, `profileUrl` | Identity |
| `fans`, `following`, `heart`, `video`, `digg`, `friends` | Followers, following, total likes, videos, liked videos, friends |
| `verified`, `privateAccount`, `isOrganization`, `ttSeller`, `commerceCategory` | Account flags and business category |
| `signature` | Bio text |
| `bioLink` | Link in bio as a full URL |
| `bioEmails`, `bioUrls` | Emails and other links written in the bio |
| `avatar`, `accountCreateTimeISO`, `language` | Avatar URL, account creation date, language |
| `avgPlaysLatest`, `medianPlaysLatest`, `avgEngagementRateLatest` | Performance of the latest posts read |
| `lastPostTimeISO`, `postsPerWeekLatest` | Activity |
| `latestPosts` | id, url, caption, views and date of each latest post |
| `fansChange`, `heartChange`, `fansLastRun`, `lastRunAt` | Monitor mode only |

### Sample output

A post row (real data, read 2026-10-13, nested objects shortened):

```json
{
  "type": "post",
  "id": "7696278835628870926",
  "text": "For several weeks each fall and winter, schools of migrating mullet can be seen along Flor...",
  "webVideoUrl": "https://www.tiktok.com/@natgeo/video/7696278835628870926",
  "createTimeISO": "2026-10-13T22:12:45.000Z",
  "playCount": 4848,
  "diggCount": 347,
  "commentCount": 11,
  "shareCount": 2,
  "collectCount": 9,
  "engagementRate": 7.43,
  "likelyPinned": false,
  "videoMeta": { "duration": 35, "height": 1024, "width": 576, "definition": "540p" },
  "musicMeta": { "musicName": "original sound", "musicAuthor": "National Geographic", "musicOriginal": true },
  "authorMeta": { "name": "natgeo", "nickName": "National Geographic", "verified": true, "fans": 9674690, "heart": 55485674, "video": 1535, "bioLink": "https://spr.ly/natgeotiktok", "bioEmails": [] },
  "detailsLoaded": true,
  "input": "natgeo"
}
```

A profile row (shortened):

```json
{
  "type": "profile",
  "username": "natgeo",
  "nickName": "National Geographic",
  "verified": true,
  "fans": 9674690,
  "following": 62,
  "heart": 55485674,
  "video": 1535,
  "bioLink": "https://spr.ly/natgeotiktok",
  "commerceCategory": "Shopping & Retail",
  "accountCreateTimeISO": "2020-01-10T16:08:37.000Z",
  "avgPlaysLatest": 43690,
  "medianPlaysLatest": 18400,
  "avgEngagementRateLatest": 9.33,
  "lastPostTimeISO": "2026-10-13T22:12:45.000Z"
}
```

### Input options

| Option | Default | What it does |
|---|---|---|
| `profiles` | `["natgeo"]` | Usernames (with or without @) or profile URLs. Video URLs pasted here also work. |
| `postURLs` | none | Video or photo post URLs, including vm.tiktok.com short links |
| `resultsType` | `posts` | `posts` (one row per video), `profiles` (one row per account) or `both` |
| `resultsPerPage` | 10 | Latest posts per profile, 0 to 30 (TikTok's public view shows about 10-13) |
| `includeVideoDetails` | true | Full stats per post (likes, comments, shares, saves, date, music, hashtags). Off: caption, views and cover only, faster |
| `oldestPostDate` | none | `2026-10-01`, `7 days`, `2 weeks`, `3 months` |
| `newestPostDate` | none | Drop posts after this date; with `oldestPostDate` gives an exact from-to window |
| `minPlayCount` | none | Skip posts with fewer views |
| `leastDiggs` / `mostDiggs` | none | Minimum / maximum likes (same names and meaning as the most-used TikTok actor). All filters combine |
| `profileSorting` | `latest` | `latest`, `popular` (most played) or `oldest` |
| `excludePinnedPosts` | false | Skip pinned posts |
| `maxItems` | 1000 | Hard cap on rows for the run |
| `monitorMode` | false | Only new posts since the last run; follower change on profile rows |
| `monitorStoreName` | `tiktok-profile-monitor` | One name per watch list |
| `proxyConfiguration` | Apify Proxy | Residential fallback is automatic |

### Pricing

Pay per event. No subscription, no rental fee.

| Event | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Result row (one post or one profile delivered) | $0.0025 | $0.002 | $0.0016 | $0.00048 | $0.00048 | $0.00048 |
| Actor start (per GB of run memory, minimum one) | $0.00005 | $0.00005 | $0.00005 | $0.00005 | $0.00005 | $0.00005 |

| Rows | Free | Bronze | Silver | Gold+ |
|---|---|---|---|---|
| 100 (10 creators x 10 posts) | $0.25 | $0.20 | $0.16 | $0.048 |
| 1,000 | $2.50 | $2.00 | $1.60 | $0.48 |
| 10,000 | $25 | $20 | $16 | $4.80 |

Not charged: accounts that do not exist, pages that stay blocked after retries, rows removed by a filter, and posts already delivered in monitor mode. Full post stats cost the same as basic rows. Apify's free plan includes $5 of monthly credit, about 2,000 rows here.

### How to run it

- **Console:** fill the form, press Start.
- **API:** `POST https://api.apify.com/v2/acts/transparent_meteorite~tiktok-public-profile-scraper/run-sync-get-dataset-items?token=<TOKEN>` with the input JSON as the body.
- **Python:** `ApifyClient(token).actor("transparent_meteorite/tiktok-public-profile-scraper").call(run_input={"profiles": ["natgeo"]})`
- **Schedules and integrations:** run daily with monitor mode on and send new posts to Google Sheets, Slack, Make, Zapier or n8n.

### Reliability and blocking

The actor reads three public sources: the profile page, TikTok's official creator embed (the widget websites use to show a creator's latest videos), and each public video page. Every request is retried on a fresh session, and after repeated blocks it switches to residential IPs by itself. If the profile page cannot be read, the creator embed still supplies followers, likes and bio. The run summary (`OUTPUT` record) lists requests, retries, failures and warnings.

### Limits and honest caveats

- **Latest posts only.** TikTok shows logged-out visitors about the latest 10-13 posts of a profile. Full post history needs a signed-in session, which this actor does not use. For older videos, paste their URLs.
- **No hashtag or keyword feeds.** TikTok only serves those to signed-in sessions or cryptographically signed app requests. A `hashtags` input is accepted but ignored with a clear log message.
- **Private accounts** return the profile row (counts, bio) but no posts.
- `likelyPinned` is inferred from post dates, because the public pages do not flag pins.
- TikTok rounds some counters on the creator embed (for example 9.7M). With full post stats on, exact numbers from the video page are used.
- Each row is a snapshot at `scrapedAt`.

### Worked examples

**Vet five creators for a campaign: one summary row each**

```json
{
  "profiles": ["natgeo", "nba", "nasa", "redbull", "gordonramsay"],
  "resultsType": "profiles",
  "resultsPerPage": 10,
  "includeVideoDetails": true
}
```

Profile rows carry `avgPlaysLatest`, `medianPlaysLatest`, `avgEngagementRateLatest` and `postsPerWeekLatest`. Sort the table by median views to see real reach rather than follower count.

**Find recent breakout posts: a date window plus a likes ceiling**

```json
{
  "profiles": ["natgeo"],
  "resultsType": "posts",
  "resultsPerPage": 30,
  "oldestPostDate": "30 days",
  "mostDiggs": 50000,
  "profileSorting": "popular",
  "excludePinnedPosts": true
}
```

All filters combine. Posts removed by a filter are not delivered and not charged.

**Watch competitors every morning: monitor mode**

```json
{
  "profiles": ["nba", "nfl"],
  "resultsType": "both",
  "monitorMode": true,
  "monitorStoreName": "sports-watch-list"
}
```

The first run delivers the current latest posts and remembers them. Later runs return only posts not seen before, and the profile rows carry `fansChange` since the previous run. Use one store name per watch list.

### Tips to reduce cost and runtime

- Set `resultsPerPage` to 0 when only profile data is needed: no posts are opened.
- Switch `includeVideoDetails` off for a quick look at captions and views. It is faster, but likes, comments, shares, saves, dates and music are then not filled.
- Use `maxItems` as a hard budget for the run. With monitor mode on, repeated runs on the same list cost nothing for posts already delivered.
- Keep one watch list per store name, so a small list is not slowed down by a large one.
- Paste video URLs into `postURLs` instead of raising `resultsPerPage` when only a few specific older videos are needed.

New to Apify? [Create a free account](https://console.apify.com/sign-up?fpr=rnmakg) and run this Actor in under a minute. Some links are affiliate links.

### Related actors

More tools from the same publisher that fit this workflow:

- [Company Enrichment by Domain](https://apify.com/transparent_meteorite/company-enrichment-by-domain): enrich a domain with socials, emails and tech stack
- [Website Email Extractor](https://apify.com/transparent_meteorite/website-contact-extractor): pull emails, phones and socials from each business website
- [Website Tech Stack Detector](https://apify.com/transparent_meteorite/website-tech-stack-detector): detect the CMS, frameworks and hosting behind any site
- [Local Business Leads](https://apify.com/transparent_meteorite/local-business-leads): find local businesses with no website from OpenStreetMap, a cheap complement to Maps data
- [Shopify Leads & Store Scraper](https://apify.com/transparent_meteorite/shopify-store-leads): Shopify store leads with apps, products and contacts
- [WHOIS & Domain Lookup](https://apify.com/transparent_meteorite/domain-intelligence-lookup): WHOIS/RDAP, DNS, subdomains and SSL for a domain

Use from AI agents: every actor here is callable through the Apify MCP server (mcp.apify.com).

### FAQ

**Do I need a TikTok account or cookies?** No. Only public pages are read.

**How many posts per profile?** Up to about 10-13, TikTok's public limit. Set `resultsPerPage` lower to save money.

**Can I get emails?** If the creator wrote an email in the bio, it is in `bioEmails`. The link in bio is in `bioLink`. Nothing hidden is accessed.

**What is engagement rate?** (likes + comments + shares) / views, in percent, per post; profile rows average it over the latest posts.

**How do I track a creator?** Turn on monitor mode and schedule the actor daily. You get only new posts, and profile rows carry `fansChange` since the last run.

**Does it download videos?** No. It returns cover image URLs and metadata only.

### Terms and responsible use

The actor reads only data TikTok shows publicly to logged-out visitors. You are responsible for using it lawfully (GDPR, CCPA, TikTok's terms) and for how you store and use personal data such as bio emails. Do not use it for spam or harassment.

### Use it from AI assistants (MCP)

TikTok Profile Scraper works as a tool for AI assistants through the official Apify MCP server. Add this URL to any MCP client (Claude Desktop, Claude Code, Cursor, ChatGPT connectors, VS Code):

```
https://mcp.apify.com/?actors=transparent_meteorite/tiktok-public-profile-scraper
```

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?actors=transparent_meteorite/tiktok-public-profile-scraper",
      "headers": { "Authorization": "Bearer <YOUR_APIFY_TOKEN>" }
    }
  }
}
```

Then ask, for example: "Get the latest 10 posts of @natgeo and tell me which got the best engagement."

### Changelog

- 0.1.2 (2026-10-13): from-to date window (`newestPostDate`), min/max likes, post sorting; all filters combine. Gold+ price $0.00048 per row.
- 0.1 (2026-10-13): first release. Profiles, latest posts, video URLs, bio emails and links, engagement, monitor mode.

### Support

Found a bug or need a field? Open an issue on the Issues tab with the run URL. We reply there.

# Actor input Schema

## `profiles` (type: `array`):

TikTok usernames (with or without @) or profile URLs like https://www.tiktok.com/@natgeo. Video URLs pasted here work too.

## `postURLs` (type: `array`):

Individual TikTok video or photo post URLs (vm.tiktok.com short links too). Each returns one post row with full stats and author data.

## `resultsType` (type: `string`):

What each dataset row is. Profile rows add average and median views, engagement rate and posting frequency of the latest posts.

## `resultsPerPage` (type: `integer`):

How many of the newest posts to read per profile. TikTok's public (logged-out) view shows about the latest 10-13 posts, so that is the practical ceiling. 0 = profile data only.

## `includeVideoDetails` (type: `boolean`):

Opens each post's public page for the complete stats. Off = faster, only caption, views and cover.

## `oldestPostDate` (type: `string`):

A date (2026-10-01) or a period (7 days, 2 weeks, 3 months). Older posts are skipped and not charged.

## `newestPostDate` (type: `string`):

Optional. Drops posts published after this date ("2026-09-30", or relative like "7 days"). Combine with the oldest date for an exact from-to window. Dropped posts are not charged.

## `minPlayCount` (type: `integer`):

Skip posts with fewer views (not charged).

## `leastDiggs` (type: `integer`):

Optional. Only posts with at least this many likes. Works together with the date and play filters.

## `mostDiggs` (type: `integer`):

Optional. Only posts with at most this many likes (find small, rising posts).

## `profileSorting` (type: `string`):

Order of the post rows for each profile.

## `excludePinnedPosts` (type: `boolean`):

Pinned posts are usually old. Needs full post stats on.

## `maxItems` (type: `integer`):

Hard cap on rows (and cost) for the whole run.

## `monitorMode` (type: `boolean`):

Remembers posts already delivered (named key-value store) and returns only new ones next run; profile rows get follower change since the last run. Already-seen posts are not charged. Schedule it daily.

## `monitorStoreName` (type: `string`):

Use a different name per watch list.

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

Apify Proxy (default) works. The actor switches to residential IPs by itself after repeated blocks.

## Actor input object example

```json
{
  "profiles": [
    "natgeo",
    "nba"
  ],
  "resultsType": "posts",
  "resultsPerPage": 10,
  "includeVideoDetails": true,
  "profileSorting": "latest",
  "excludePinnedPosts": false,
  "maxItems": 1000,
  "monitorMode": false,
  "monitorStoreName": "tiktok-profile-monitor",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `profiles` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "profiles": [
        "natgeo",
        "nba"
    ],
    "resultsPerPage": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("transparent_meteorite/tiktok-public-profile-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 = {
    "profiles": [
        "natgeo",
        "nba",
    ],
    "resultsPerPage": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("transparent_meteorite/tiktok-public-profile-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 '{
  "profiles": [
    "natgeo",
    "nba"
  ],
  "resultsPerPage": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call transparent_meteorite/tiktok-public-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,transparent_meteorite/tiktok-public-profile-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/8O6RGrfKC0dOdpACm/builds/IteFPxfJxDjcVMB5D/openapi.json
