TikTok Profile Scraper
Pricing
Pay per event
TikTok Profile Scraper
Scrape TikTok user profiles to get follower counts, total likes, bio, verification status, and engagement statistics. Just paste usernames or profile URLs โ no login or browser needed. Fast HTTP-only extraction. Ideal for influencer research and social media audits.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape TikTok user profiles at scale. Get follower counts, following counts, total likes, bio, video count, verified status, account age, and more โ with no browser, no Playwright, no Selenium. Pure HTTP scraping using TikTok's own page data, served fast at 256 MB memory.
Paste in a list of usernames or profile URLs and get structured JSON in seconds. Works with any public TikTok account.
What Does It Do?
TikTok Profile Scraper fetches the public profile data from any TikTok user page. For each profile it returns:
- ๐ค Identity fields โ user ID, username (
uniqueId), display name, bio text, and profile URL - ๐ผ๏ธ Avatar โ high-resolution avatar image URL
- โ Account flags โ verified badge, private account status, organization flag, seller/commerce flag
- ๐ Engagement stats โ follower count, following count, total likes received, video count, friend count
- ๐ Bio link โ the external URL the user has set in their profile
- ๐ Language โ account language code (e.g.
en,fr,pt) - ๐
Account creation date โ formatted as
YYYY-MM-DD
Who Is It For?
- ๐ฏ Influencer marketers vetting creators before sponsorships โ check follower count, verified status, engagement ratio, and whether the account is a seller in one request
- ๐ Market researchers benchmarking competitors or mapping niche creators at scale
- ๐งโ๐ป Data scientists building social media datasets, influence graphs, or audience segmentation models
- ๐ต๏ธ Brand safety teams auditing whether brand-tagged accounts are legitimate, public, and not private
- ๐ฐ Journalists and investigators verifying the public identity and reach of accounts in news stories
- ๐๏ธ E-commerce teams researching TikTok Shop sellers and their organic audience size
- ๐ง Developers integrating TikTok profile data into CRMs, influencer platforms, or analytics dashboards
Why Use This Scraper?
- ๐ No browser required โ HTTP-only scraping with
got-scraping, 256 MB memory, fast startup - ๐ Flexible input formats โ accepts
@username, plainusername, or fullhttps://www.tiktok.com/@usernameURLs interchangeably in the same run - ๐ฆ Batch processing โ scrape hundreds of profiles in a single run, each processed sequentially with polite delays
- ๐ข Accurate like counts โ reads the
heartfield (notheartCountwhich overflows 32-bit integers on mega-accounts) - ๐๏ธ Account age included โ
accountCreatedis formatted as an ISO date string so you can sort and filter directly - ๐ฐ Pay-per-profile pricing โ you pay only for profiles successfully extracted, not for compute time or failed lookups
- ๐ข Organization and seller detection โ
isOrganizationandisSellerflags identify business accounts and TikTok Shop sellers
How Much Does It Cost to Scrape TikTok Profiles?
This actor uses pay-per-event (PPE) pricing โ you only pay for what you extract:
| Event | Price | Description |
|---|---|---|
| Run start | $0.005 | One-time charge when the actor starts |
| Profile scraped | $0.003 | Per TikTok profile successfully extracted |
Example costs:
- 10 profiles (quick influencer check): $0.005 + (10 ร $0.003) = $0.035
- 100 profiles (niche research): $0.005 + (100 ร $0.003) = $0.305
- 500 profiles (bulk audit): $0.005 + (500 ร $0.003) = $1.505
- 1,000 profiles (large campaign): $0.005 + (1,000 ร $0.003) = $3.005
Compute costs are minimal โ no browser means near-zero infrastructure overhead. Private or not-found profiles are skipped and not charged.
How to Use
- Open the actor on Apify Store
- Add profiles to the "TikTok Profiles" field โ one per line. Accepts
@username,username, or full profile URLs - Click Start โ the actor runs in seconds for small batches, a few minutes for hundreds of profiles
- Download results as JSON, CSV, or Excel from the dataset tab
Input Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
profiles | array of strings | Yes | TikTok profiles to scrape. Accepts multiple input formats (see below). |
Accepted Input Formats
All of the following are valid entries in the profiles array:
@charlidameliocharlidameliohttps://www.tiktok.com/@charlidameliohttps://www.tiktok.com/@charlidamelio?lang=en
The actor normalizes all formats to a canonical username before fetching. Invalid or unrecognizable entries are logged and skipped.
Data Fields
Every item in the output dataset is a profile object with the following fields:
| Field | Type | Description |
|---|---|---|
type | string | Always "profile" |
userId | string | Internal TikTok numeric user ID |
username | string | TikTok username (unique handle, e.g. charlidamelio) |
displayName | string | Display name shown on the profile (e.g. charli d'amelio) |
bio | string | Profile biography / signature text |
profileUrl | string | Canonical TikTok profile URL |
avatarUrl | string | URL of the user's large profile avatar image |
isVerified | boolean | Whether the account has a verified badge |
isPrivate | boolean | Whether the account is set to private |
followerCount | number | Number of followers |
followingCount | number | Number of accounts the user follows |
likesCount | number | Total cumulative likes received across all videos |
videoCount | number | Total number of posted videos |
friendCount | number | Number of mutual follows (friends) |
bioLink | string | External URL set in the profile bio link (empty string if none) |
language | string | Account language code (e.g. en, pt, fr) |
isOrganization | boolean | Whether the account is flagged as an organization |
isSeller | boolean | Whether the account is a TikTok Shop seller |
accountCreated | string | Account creation date in YYYY-MM-DD format |
Output Example
{"type": "profile","userId": "5831967","username": "charlidamelio","displayName": "charli d'amelio","bio": "","profileUrl": "https://www.tiktok.com/@charlidamelio","avatarUrl": "https://p16-common-sign.tiktokcdn-eu.com/...","isVerified": true,"isPrivate": false,"followerCount": 156500000,"followingCount": 1356,"likesCount": 12000000000,"videoCount": 3019,"friendCount": 1187,"bioLink": "https://youtube.com/@charlidamelio","language": "en","isOrganization": false,"isSeller": false,"accountCreated": "2015-11-14"}
Tips and Best Practices
Mixing input formats in one run
- The
profilesarray accepts@username, plain username, and full URLs in any combination. You can paste a raw export from a spreadsheet without pre-processing โ the actor normalizes everything before fetching.
Detecting influencer tiers
- Use
followerCountto segment profiles into nano (1Kโ10K), micro (10Kโ100K), macro (100Kโ1M), and mega (1M+) tiers directly in the dataset. Filter and sort the CSV export in Google Sheets with no extra tooling.
Identifying business vs. creator accounts
- Filter
isOrganization: trueto isolate brand accounts. FilterisSeller: trueto find TikTok Shop merchants. Combine both to target commerce-focused accounts for partnership or competitive research.
Checking engagement ratio
- TikTok does not expose per-video average views in profile data, but
likesCount / videoCountgives a rough all-time likes-per-video ratio. Combined withfollowerCount, this is a useful first-pass engagement proxy.
Handling private accounts
- Private accounts (
isPrivate: true) are scraped and charged โ the public profile metadata is still accessible. Only videos and detailed stats are hidden. You will still receive follower count, verified status, bio, and avatar for private accounts.
Scaling to hundreds of profiles
- The actor adds a 500 ms polite delay between requests to avoid rate limiting. A batch of 200 profiles typically completes in 2โ3 minutes. For very large batches (1,000+), consider splitting across multiple runs using the Apify scheduler.
Integrations
Google Sheets โ influencer database
Push scraped profiles directly into a Google Sheet using the Apify โ Google Sheets integration. Go to the Integrations tab after a run โ connect Google Sheets โ map dataset fields to columns. Schedule weekly runs to refresh follower counts and track growth over time.
Zapier / Make โ CRM enrichment
Use a webhook trigger to push new profiles into HubSpot, Airtable, or Notion as the run completes. Set up a Zap: Apify dataset item โ map username, followerCount, isVerified, bioLink โ create or update a CRM record.
n8n โ influencer scoring pipeline
Connect the scraper to an n8n workflow: scrape profiles โ calculate engagement score per profile โ write ranked results to a Google Sheet or database. Fully automated, no server required.
Scheduled monitoring
Use Apify's built-in scheduler to run this actor weekly on a fixed set of usernames. Track follower growth, detect account changes (verified status, bio link), and get alerted when an account goes private.
Export formats
All results are available for download as JSON, CSV, Excel (XLSX), and XML from the dataset tab. Use CSV or Excel for spreadsheet tools, JSON for programmatic processing.
API Usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/tiktok-profile-scraper').call({profiles: ['@charlidamelio','https://www.tiktok.com/@mrbeast','khaby.lame',],});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Scraped ${items.length} profiles`);console.log(items[0].username, 'โ', items[0].followerCount.toLocaleString(), 'followers');
Python
from apify_client import ApifyClientclient = ApifyClient(token="YOUR_API_TOKEN")run = client.actor("automation-lab/tiktok-profile-scraper").call(run_input={"profiles": ["@charlidamelio","https://www.tiktok.com/@mrbeast","khaby.lame",],})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"@{item['username']}: {item['followerCount']:,} followers, verified={item['isVerified']}")
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~tiktok-profile-scraper/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"profiles": ["@charlidamelio", "mrbeast", "https://www.tiktok.com/@khaby.lame"]}'
Use with Claude AI (MCP)
This actor is available as a tool in Claude AI through the Model Context Protocol (MCP). Add it to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.
Setup for Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/tiktok-profile-scraper"
Setup for Claude Desktop, Cursor, or VS Code
Add this to your MCP config file:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/tiktok-profile-scraper"}}}
Example prompts
- "Scrape these 10 TikTok profiles and tell me which ones are verified and have over 1 million followers."
- "Get profile stats for @mrbeast and @charlidamelio and compare their follower counts and total likes."
- "Check if these TikTok usernames from my list are still active and return their follower counts."
Learn more in the Apify MCP documentation.
Legal and Ethical Use
This actor accesses publicly available TikTok profile data using the same page data that TikTok's own web client serves to any visitor. All fields extracted are visible to any unauthenticated user visiting the profile page.
Important notes:
- ๐ Only public profile metadata is extracted โ private video lists and private account content are not accessible
- ๐ซ This actor does not bypass authentication, CAPTCHA, or any access control mechanism
- โ๏ธ Do not use this tool for harassment, stalking, doxxing, or bulk-tracking individuals without a legitimate business or research purpose
- ๐ Comply with TikTok's Terms of Service and applicable privacy and data protection laws in your jurisdiction (GDPR, CCPA, etc.)
- ๐ข For commercial use cases involving EU residents, ensure you have a lawful basis for processing the collected data
FAQ
Q: The actor skipped one of my profiles โ what happened? A: The actor logs a warning and continues when a profile cannot be fetched. Common causes: the username does not exist, the account was banned or deleted, the TikTok page returned a non-200 status, or the input string could not be parsed as a valid username. Check the actor log for the specific warning message per skipped entry. Skipped profiles are not charged.
Q: I'm getting empty results for some accounts โ is the scraper broken? A: A small number of TikTok profiles return a non-zero status code in the page data even though the profile appears to exist. This usually indicates the account is banned, shadow-restricted, or temporarily unavailable on TikTok's side. The actor logs the TikTok status code per profile. Try the same username directly in a browser โ if the profile page shows an error there too, the account is not accessible.
Q: Does this work for private accounts?
A: Yes โ public profile metadata (follower count, bio, avatar, verified status) is available for private accounts. The isPrivate: true flag will be set in the output. Private accounts do not expose their video list, but all profile-level fields are returned.
Q: How fresh is the data? A: Data is fetched live at run time directly from TikTok's servers. There is no caching layer โ every run returns the current state of the profile at the moment of the request.
Related Scrapers
- TikTok Scraper โ Scrape TikTok videos, trending content, and hashtag feeds with full engagement metrics
- Instagram Scraper โ Extract Instagram posts, profiles, reels, and hashtag data
- Twitter/X Scraper โ Scrape Twitter/X user profiles, tweets, and search results
- Bluesky Scraper โ Scrape Bluesky posts, profiles, and follower data
- Social Media Profile Finder โ Find social media profiles across platforms from a list of websites