Fast Tiktok Profile Scraper 🚀
Pricing
from $0.75 / 1,000 results
Fast Tiktok Profile Scraper 🚀
Extract public TikTok profile data from usernames or profile URLs. Collect bios, avatars, follower and following counts, total likes, video counts, and verification status when available. Compare creator accounts and build profile directories.
Pricing
from $0.75 / 1,000 results
Rating
0.0
(0)
Developer
AimScrape
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 minutes ago
Last modified
Categories
Share
What does TikTok Profile Scraper do?
TikTok Profile Scraper extracts profile metadata from TikTok usernames and profile URLs. Get bios, avatars, follower and following counts, total likes, video counts, and verification status in a structured dataset you can export or retrieve through the Apify API.
The Actor reads publicly returned profile information without logging in to TikTok. It collects profile metadata only; it does not download videos or collect follower lists.
How to scrape TikTok profiles
- Open the Input tab and add usernames or full profile URLs to TikTok usernames or profile URLs.
- Start the Actor. For your first run, use a few profiles to check the available data.
- Follow progress in the run log, then open Profiles in the Output tab to review the results.
- Download the dataset as JSON, CSV, or Excel, or another format supported by Apify.
Use the Actor's API tab for programmatic runs and Apify scheduling for recurring collection. Each run captures the data returned at collection time; compare datasets from separate runs to track changes.
Why use TikTok Profile Scraper?
- Compare creator accounts: review audience size, total likes, video counts, and verification status.
- Maintain a profile directory: collect consistent usernames, account IDs, bios, avatars, and public bio links.
- Track account statistics: schedule repeat runs and use the collection timestamps in your reports.
Input
{"usernames": ["https://www.tiktok.com/@tiktok","@example_user"],"skipInvalidInputs": true}
usernames is required and accepts 1 to 100,000 entries. You can mix these formats in the same list:
| Format | Example |
|---|---|
| Username | tiktok |
Username with an @ prefix | @tiktok |
| HTTPS profile URL | https://www.tiktok.com/@tiktok |
Profile URLs must use tiktok.com or www.tiktok.com; a trailing slash is allowed. Video URLs, short links, URLs with query parameters or fragments, numeric user-ID lookup, surrounding spaces, and other websites are not supported. A numeric string is interpreted as a username.
The Actor validates each string locally before creating requests. Valid and invalid entries can coexist in one list: valid targets continue normally, while invalid entries never make TikTok requests. By default, skipInvalidInputs is true, so invalid entries are omitted from the Dataset. Set it to false to store one invalid_input row per distinct invalid string. Recognizable credentials in stored invalid strings are redacted before output.
Usernames are normalized to lowercase and duplicate targets are collected once per new run, including different input forms for the same account. For example, tiktok, @TikTok, and https://www.tiktok.com/@tiktok identify one target. See Stopping and resuming a run for recovery limitations.
What data can TikTok Profile Scraper extract?
| Field | Type | Meaning |
|---|---|---|
status | string | ok, not_found, restricted, or invalid_input. |
id | string or null | TikTok user ID, preserved as text. |
username | string | Normalized requested username, or the redacted submitted string for an invalid_input row. |
url | string or null | Canonical profile URL, or null for an invalid_input row. |
nickname, bio | string or null | Display name and profile biography. |
secUid | string or null | Secondary public user identifier. |
avatarUrl | string or null | Best available profile avatar URL. |
verified, privateAccount | boolean or null | Account flags returned by TikTok. |
followerCount, followingCount | integer or null | Follower and following counts. |
heartCount | integer or null | Total likes reported for the account. |
videoCount, friendCount | integer or null | Video and friend counts when returned. |
bioLink, region | string or null | Public bio link and reported region, when available. Region is not an inferred location. |
crawledAt | string | UTC collection timestamp in ISO 8601 format. |
Every row includes all fields, including not_found and restricted rows. Missing optional values are null; reported zero counts remain zero. Keep id as text when importing results into spreadsheets or databases to preserve its precision.
Output example
The following is synthetic example data, not a captured live account. It shows the complete profile record. The Profiles table highlights account identity and counts; JSON includes all fields.
{"status": "ok","id": "1234567890123456789","username": "example_user","url": "https://www.tiktok.com/@example_user","nickname": "Example Creator","bio": "Cooking and travel","secUid": "example-sec-uid","avatarUrl": "https://example.com/avatar.jpg","verified": false,"privateAccount": false,"followerCount": 12500,"followingCount": 120,"heartCount": 450000,"videoCount": 85,"friendCount": 30,"bioLink": "https://example.com","region": "SG","crawledAt": "2026-10-25T09:00:00Z"}
Availability and partial results
| Status | Meaning |
|---|---|
ok | TikTok returned profile data matching the requested account, including public metadata from private accounts. Private accounts have privateAccount: true; available fields are preserved and private videos are not accessed. |
not_found | TikTok explicitly reported that the account could not be found or was unavailable, without returning user data. This does not distinguish a deleted account from a banned account or establish that the username is available to register. |
restricted | TikTok reported region, age, audience, or Family Pairing controls that prevent profile access. The Actor records the outcome without extracting account metadata or attempting to access restricted content. |
invalid_input | The submitted string was not a supported TikTok username or profile URL. This row is stored only when skipInvalidInputs is false; no TikTok request is made. |
The Actor always stores ok, not_found, and restricted results. A
not_found or restricted row includes the requested username, profile URL, and
collection time; account fields are null. An invalid_input row contains the
redacted submitted string in username, sets url and all account fields to
null, and includes the collection time. These outcomes do not trigger retries
or dedicated warning/error logs.
A blank page, verification challenge, malformed response, rate limit, or HTTP error is retried rather than treated as not_found. Failed profile requests are retried up to 3 times, for a maximum of 4 attempts per profile. If all attempts fail, the profile is counted as failed in the run log and no result row is written. A completed run can therefore contain fewer rows than the number of unique usernames submitted.
Unrecognized TikTok business status codes are logged once as errors and skipped without retries or dataset rows. The run continues with the remaining profiles.
Fields and counts depend on what TikTok returns for the account and request location. Some values may be unavailable even when you can see them in a browser. The Actor does not solve verification challenges or access private videos. Avatar URLs may expire.
How much does it cost to scrape TikTok profiles?
Check the Actor's Pricing tab for current rates and review your run limits before starting. On pay-per-event runs, each stored dataset row counts toward dataset-item charges, including not_found, restricted, and any invalid_input rows not omitted with skipInvalidInputs. These statuses are results, even when account details are unavailable.
If a result or charge budget is reached, the Actor stops with partial results and a status message. To continue unfinished work, increase the applicable budget and resurrect the same run. Keep the same set of normalized target usernames. When skipInvalidInputs is false, also keep the same invalid input strings. You can reorder inputs or change the run memory without changing their saved task identities.
When cleanup can finish, completed profiles that could not fit within the result budget are saved for recovery. After you increase the budget and resurrect the run, those results are written first without scraping those profiles again. The Actor checks actual dataset records before restoring saved results, including when a previous write had an uncertain outcome. Resurrecting without additional budget stops again with partial results.
Stopping and resuming a run
Use a graceful abort when you intend to resume later. It gives the Actor time to settle active requests, save completed results, and record unfinished work. Apify provides a 30-second cleanup window; cleanup may still be interrupted if it takes longer.
During graceful abort or migration, the Actor stops taking new tasks from the queue. Tasks already taken continue through their normal processing and retries. Completed results are written and their tasks are confirmed while the remaining tasks finish. Completed results awaiting storage are saved for recovery, and each confirmed failed profile is recorded with its completed task. The Actor checks actual dataset rows and recorded task outcomes when resuming. If the platform terminates the process before all active tasks finish, confirmed results and completed tasks remain available for recovery; unfinished tasks may need another attempt. A forced stop can interrupt persistence, so duplicate-free results cannot be guaranteed.
To continue an existing run, use Actions > Resurrect in Apify Console. Re-run creates a new run rather than continuing the existing one.
After resuming, compare dataset usernames with your input and check the failed count and retry logs. Recovery depends on the saved state and actual dataset records; a forced stop can interrupt persistence.
FAQ
Can I collect videos or follower lists?
This Actor collects profile metadata only. videoCount is a count, not a video list.
Why are some profiles missing from the dataset?
Invalid inputs are omitted by default; set skipInvalidInputs to false if you need an invalid_input row for each distinct rejected string. For valid targets, check the failed count and retry logs. Temporary upstream errors or verification pages can exhaust retries. Missing rows are different from explicit not_found results.
Can I check whether a TikTok username is available?
The Actor checks profile responses, not username registration availability. A not_found result does not mean that TikTok will let you register that username.
Where can I report an issue?
Use the Actor's Issues tab when available. Include the affected public username, run URL, and expected behavior. For problems after resuming a run, also mention how the earlier execution was stopped.
More Actors by AimScrape
Explore other public-data tools from AimScrape:
| Actor | Best for |
|---|---|
| Fast YouTube Channel Video Scraper 🚀 | Exporting public video metadata from a YouTube channel's Videos tab. |
| Fast TikTok Profile Scraper 🚀 | Collecting public TikTok profile details, audience counts, likes, and verification. |
| Fast YouTube Channel Scraper | Collecting public YouTube channel metadata, counts, verification, and external links. |
| Snapchat Profile Scraper | Collecting public Snapchat profile metadata, subscriber counts, verification, and Snapcodes. |
| GitHub Profile Scraper | Collecting public GitHub user, organization, and bot profile metadata. |
Legal & ethical notice
This is an independent, third-party tool. It is not affiliated with, endorsed by, or sponsored by TikTok.
You are responsible for ensuring your use of this Actor and the collected data complies with:
- TikTok's Terms of Service applicable to your region.
- Applicable laws and regulations, including privacy and data protection requirements.
Only collect data you are authorized to access, and ensure you have a lawful basis for collecting and using personal data where required by applicable law. Public availability alone does not establish permission to collect or reuse data. Respect users' privacy and do not use the collected data for harassment, spam, or other abusive purposes.