TikTok Public Profile Scraper avatar

TikTok Public Profile Scraper

Pricing

from $2.99 / 1,000 profiles

Go to Apify Store
TikTok Public Profile Scraper

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

w3crawler

Maintained by Community

Actor 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.
  • maxItems is a global maximum of 1–100 unique profiles; it defaults to 20.
  • Normal records require source: "tiktok.com", matching canonical profileUrl and sourceUrl values on www.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, or videosAvailable are 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_SUMMARY contains 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?

GroupFields
Identityusername, profileUrl, displayName, bio, verified
Public metricsfollowers, following, likes, videoCount
Profile linksavatarUrl, externalLinks
Visible videosvideoUrls, videoIds, visibleVideoCount, videosAvailable
ProvenancementionsAvailable, source, sourceUrl, scrapedAt
Run diagnosticsNumeric 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

  1. Open the Actor in Apify Console and click Try for free or Start.
  2. Add public usernames, or paste canonical public profile URLs.
  3. Leave developer options at their defaults unless you need bounded timeout, retries, delay, or a public-request proxy.
  4. Start the run, inspect the Dataset, and open OUTPUT_SUMMARY in 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

FieldTypeDefaultBounds or accepted values
usernamesstring arrayomittedPublic usernames with optional @; each is 1–50 ASCII letters, numbers, ., _, or -
profileUrlsstring arrayomittedHTTPS https://tiktok.com/@username or https://www.tiktok.com/@username, with optional query/hash removed during normalization
maxItemsinteger201–100; maximum unique profiles processed
requestTimeoutSecsinteger1510–120 seconds per bounded request
maxRequestRetriesinteger10–2 retries for direct public requests
requestDelayMsinteger2500–5000 milliseconds between profiles
proxyConfigurationobjectomittedSet 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_SUMMARY before comparing counts; status is SUCCEEDED or FAILED, while dataStatus identifies 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.

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.