TikTok Public Profile Scraper
Pricing
from $2.99 / 1,000 profiles
TikTok Public Profile Scraper
Extract source-backed public TikTok profile fields from one or more usernames.
Pricing
from $2.99 / 1,000 profiles
Rating
0.0
(0)
Developer
w3crawler
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 minutes ago
Last modified
Categories
Share
What does TikTok Public Profile Scraper do?
TikTok Public Profile Scraper reads bounded public TikTok profile representations and returns source-backed profile identity, public statistics, biography, avatar, external links, and visible video URLs. It keeps profile identity, video identity, and source provenance together so downstream systems can distinguish a usable profile record from a blocked or empty response.
Why use TikTok Public Profile Scraper?
Use this Actor for permitted public-profile snapshots, creator research, and source-traceable public profile metadata. It is a bounded public sampler, not an authenticated TikTok API, a complete archive, or a guarantee that every visible profile field is available on every run.
The Actor requests the public profile page first. If no access block is detected, it may use the public text reader, TikTok's public embed surface, and the public profile oEmbed endpoint to fill missing fields. A CAPTCHA, security challenge, or HTTP 401, 403, or 429 produces an ACCESS_BLOCK diagnostic and stops requests for that profile without switching routes or proxies. The profile page and the embed surface both carry the public profile card (bio, avatar, follower/following/like counts, verification) and the embed surface adds the visible video grid; the oEmbed fallback can provide a canonical identity-only record. CAPTCHA, login, challenge, timeout, generic shell, or a reachable page without canonical profile state is reported explicitly.
Scope and limits
- Provide one or more public TikTok usernames or canonical profile URLs. Duplicate targets are removed before processing.
maxItemsis a global maximum of 1–100 unique profiles; it defaults to20.- Normal records require
source: "tiktok.com", matching canonicalprofileUrlandsourceUrlvalues onwww.tiktok.com/@username,mentionsAvailable: false, and useful source-backed profile evidence. - Visible video URLs are bounded to canonical official TikTok URLs for the requested profile. When
videoIds,visibleVideoCount, orvideosAvailableare present, they must agree with those URLs. - The Actor does not log in, use account cookies, open private profiles, download media, enumerate mentions, fetch every video page, or infer hidden statistics.
- Arbitrary TikTok subdomains, generic page chrome, mismatched video identities, non-TikTok profile sources, and malformed asset URLs are discarded.
OUTPUT_SUMMARYcontains canonical run status and numeric diagnostic/attempt counts. Technical request details stay in Actor logs, not dataset records or summary arrays.
What data can it extract?
| Group | Fields |
|---|---|
| Identity | username, profileUrl, displayName, bio, verified |
| Public metrics | followers, following, likes, videoCount |
| Profile links | avatarUrl, externalLinks |
| Visible videos | videoUrls, videoIds, visibleVideoCount, videosAvailable |
| Provenance | mentionsAvailable, source, sourceUrl, scrapedAt |
| Run diagnostics | Numeric diagnostic and attempt counts in OUTPUT_SUMMARY; no diagnostic detail arrays or dataset rows |
Counts are numeric only when the public representation exposes a safe count or an unambiguous compact value such as 12K. The Actor does not silently invent values.
How to use it
Apify Console
- Open the Actor in Apify Console and click Try for free or Start.
- Add public usernames, or paste canonical public profile URLs.
- Leave developer options at their defaults unless you need bounded timeout, retries, delay, or a public-request proxy.
- Start the run, inspect the Dataset, and open
OUTPUT_SUMMARYin the default key-value store.
API
Send a JSON object to the Actor's input endpoint. Console and API runs use the same fields and bounds. Unknown properties, private/authentication fields, and arbitrary target URLs fail validation instead of silently changing the run.
Input
| Field | Type | Default | Bounds or accepted values |
|---|---|---|---|
usernames | string array | omitted | Public usernames with optional @; each is 1–50 ASCII letters, numbers, ., _, or - |
profileUrls | string array | omitted | HTTPS https://tiktok.com/@username or https://www.tiktok.com/@username, with optional query/hash removed during normalization |
maxItems | integer | 20 | 1–100; maximum unique profiles processed |
requestTimeoutSecs | integer | 15 | 10–120 seconds per bounded request |
maxRequestRetries | integer | 1 | 0–2 retries for direct public requests |
requestDelayMs | integer | 250 | 0–5000 milliseconds between profiles |
proxyConfiguration | object | omitted | Set useApifyProxy: true, or provide non-empty HTTP(S) proxyUrls; do not combine them |
At least one of usernames or profileUrls is required. When both are supplied, targets are combined and de-duplicated; maxItems limits the processed prefix.
Minimal input
{"usernames": ["tiktok"]}
Profile URL input
{"profileUrls": ["https://www.tiktok.com/@tiktok?lang=en"],"maxItems": 1}
Developer-options input
{"usernames": ["tiktok", "creator"],"maxItems": 2,"requestTimeoutSecs": 30,"maxRequestRetries": 0,"requestDelayMs": 500,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["BUYPROXIES94952"],"apifyProxyCountry": "US"}}
startUrls, arbitrary URLs, pagination, login/cookie fields, mention feeds, video-detail options, and custom sorting or filtering are not supported.
Output
Normal profile record
Normal records are emitted only when the public profile identity, source provenance, mention limitation, and visible-video contract agree.
{"username": "creator","profileUrl": "https://www.tiktok.com/@creator","displayName": "Creator","bio": "Public creator profile","avatarUrl": "https://cdn.example/avatar.jpg","followers": 12000,"following": 180,"likes": 45000,"videoCount": 42,"verified": false,"externalLinks": ["https://creator.example/"],"videoUrls": ["https://www.tiktok.com/@creator/video/7000000000000000001"],"videoIds": ["7000000000000000001"],"visibleVideoCount": 1,"videosAvailable": true,"mentionsAvailable": false,"source": "tiktok.com","sourceUrl": "https://www.tiktok.com/@creator","scrapedAt": "2026-09-08T00:00:00.000Z"}
The Actor does not fetch or download the media behind videoUrls; these are only canonical URLs exposed by the public profile representation.
Diagnostics
The dataset contains source-backed profile records only.
Run summary
Every run writes OUTPUT_SUMMARY to the default key-value store. attemptCount reports the number of public profile route attempts.
{"status": "SUCCEEDED","runStatus": "SUCCEEDED","dataStatus": "COMPLETE","source": "tiktok.com","requestedTargetCount": 1,"processedTargetCount": 1,"requestedMaxItems": 20,"normalCount": 1,"diagnosticCount": 0,"attemptCount": 1,"visibleVideoUrlsOnly": true,"mentionsAvailable": false,"postCrawl": false,"readerFallback": false,"transport": "proxy","transports": ["proxy"],"completedAt": "2026-09-08T00:00:00.000Z"}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Cost and performance
Apify compute and storage charges depend on run duration, memory, dataset size, and any proxy usage. Resolver, fallback, retries, and multiple profiles increase public traffic and runtime. A smaller maxItems, modest timeout, and low retry count reduce work but cannot remove TikTok access restrictions. Check the current Apify Console estimate and your plan for exact pricing.
Tips and advanced options
- Start with one username and a small timeout while checking a new integration.
- Use
OUTPUT_SUMMARY.status,dataStatus, and numeric failure counts to distinguish a failed run from an empty result. - Inspect
OUTPUT_SUMMARYbefore comparing counts;statusisSUCCEEDEDorFAILED, whiledataStatusidentifies complete, partial, no-results, or failed data. - Keep retries low for scheduled sampling and respect TikTok rate limits.
Troubleshooting
The run is blocked or has no profile record
Inspect OUTPUT_SUMMARY.status, dataStatus, and numeric counts. Technical request details remain in Actor logs. An official oEmbed success is intentionally limited to source-backed public identity fields when richer profile state is unavailable.
The dataset has fewer records than maxItems
maxItems is a maximum, not a guarantee. Public pages can expose fewer profiles, generic shells, incomplete identities, duplicate targets, or no source-backed profile state.
Visible video fields are empty
The profile page may expose the profile card without the video grid. The Actor then asks TikTok's public embed surface for the visible video list; if that surface is unavailable, the record is kept with videosAvailable: false. This Actor never invents video URLs from opaque IDs and never treats arbitrary media URLs as TikTok posts.
A proxy did not change the result
Proxy configuration applies to requests sent directly to TikTok. The Actor records an access block and stops without rotating to another proxy. The public text reader is a separate transport, is not used after an access block, and does not guarantee profile fields.
Privacy, legal, and affiliation
Use this Actor only for public, permitted data and follow TikTok's terms, robots guidance, rate limits, and applicable law. Do not use it to collect private information, evade access controls, download media, or infer information people did not make public. This Actor is not affiliated with, endorsed by, or sponsored by TikTok.
Support and issues
For a reproducible issue, include the input JSON, run ID, OUTPUT_SUMMARY, and relevant run logs without sharing credentials or private data. Use the Actor's Issues or API tabs in Apify Console for platform-specific support and integration details.