TikTok Profile Scraper API
Our TikTok profile scraper takes any @username or profile URL and returns structured JSON: follower count, following count, total hearts, video count, the bio, avatar, and verified flag, plus the exact string counts in one request.
Why TikTok Profile data fights back
A TikTok profile page ships its numbers inside an embedded JSON blob that hydrates after load, so raw HTML holds placeholders and hand-written selectors break within weeks. TikTok also verify-walls datacenter and cloud IPs, so the same request that works from a laptop returns an empty shell from a server.
Fire your first TikTok Profile Scraper API call
curl "https://api.tiktokscraperapi.com/api/v1/tiktok/profile?username=nba&api_key=$API_KEY" import requests
BASE = "https://api.tiktokscraperapi.com/api/v1"
API_KEY = "YOUR_API_KEY"
# Pass a bare @username, or a full profile URL via the url param.
data = requests.get(
f"{BASE}/tiktok/profile",
params={"username": "nba", "api_key": API_KEY},
timeout=30,
).json()
print(data["nickname"], "-", data["stats"]["followerCount"], "followers")
print("hearts:", data["stats"]["heartCount"], "| videos:", data["stats"]["videoCount"])
# statsV2 carries the exact string counts when TikTok ships them.
print("exact followers:", data["statsV2"]["followerCount"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
username | optional | - | The @handle, with or without the leading @, e.g. nba. Required unless you pass url. |
url | optional | - | A full TikTok profile URL, e.g. https://www.tiktok.com/@nba. The handle is parsed out of it. One of username or url is required. |
country | optional | us | Two-letter country code for the exit region the request is routed through. Defaults to US, where TikTok serves the populated page. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
What the TikTok Profile Scraper API hands back
{
"uniqueId": "nba",
"nickname": "NBA",
"signature": "NBA Summer action tips off Friday, July 3!\n\nCalifornia Classic: 7/3 - 7/6\nSalt Lake City: 7/4 - 7/7\nNBA Summer League in Las Vegas: 7/9 - 7/19",
"verified": true,
"secUid": "MS4wLjABAAAAsny0dcfyctb1_fdyyiu7JOLnblf8y3jd64yTHQLQoc9O5m57HhjT94OdgfSmNgaG",
"id": "134941634731003904",
"create_time": 1472544108,
"created_at": "2016-08-30T08:01:48.000Z",
"avatar": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/8beb8b849e725f2776a11575b1e7aebf~tplv-tiktokx-cropcenter:1080:1080.jpeg?x-expires=1783051200&x-signature=...",
"url": "https://www.tiktok.com/@nba",
"socialPlatform": "tiktok",
"stats": {
"followerCount": 27100000,
"followingCount": 266,
"heartCount": 1100000000,
"videoCount": 22600
},
"statsV2": {
"followerCount": "27067298",
"followingCount": "266",
"heartCount": "1119255388",
"videoCount": "22608"
},
"price": null,
"currency": "USD",
"rating": null,
"reviews_count": null
} | Field | Type | Description |
|---|---|---|
uniqueId | string | The creator @handle, e.g. nba. |
nickname | string | The display name shown on the profile. |
signature | string | The profile bio text, newlines preserved. |
verified | boolean | True when the account carries TikTok's verified badge. |
secUid | string | The stable secondary user id TikTok keys its APIs by (never changes for the account). |
id | string | The numeric user id. |
create_time | integer | Account creation time as a Unix timestamp. |
created_at | string | Account creation time as an ISO 8601 string. |
avatar | string | URL of the largest available profile picture. |
stats | object | Numeric engagement: followerCount, followingCount, heartCount (total likes across videos), and videoCount. |
statsV2 | object | The exact counts as strings (followerCount, followingCount, heartCount, videoCount) when TikTok ships them, else null. |
url | string | The canonical profile URL. |
Where teams put TikTok Profile data to work
Influencer discovery
Competitor tracking
Creator databases
Audience history graphs
Verification and vetting
CRM enrichment
Why build on our TikTok Profile Scraper API
Pass a bare @username or a full URL and we resolve it for you, no login, no device registration, and no signature to mint. Every request runs through residential proxies with anti-bot handling and retries, returning validated JSON with the numeric stats and the exact string counts at a 2.6s median.
Username or URL input
Exact and rounded counts
Residential anti-bot
Auto-retry across pools
Validated JSON schema
Contact fields on tap
TikTok Profile Scraper API vs rolling your own
| Our API | DIY (requests / headless) | TikTok official API | |
|---|---|---|---|
| Input by handle or URL | Yes, username or url | Manual page fetch and parse | Research API, keyed by handle, US academics only |
| Follower and heart counts | Numeric plus exact strings | Possible but parser breaks often | Available to approved researchers |
| Setup | API key only | Proxies, headless browser, JSON parser | Application and approval process |
| Anti-bot and proxies | Built in, US residential | You build and maintain it | Not applicable |
| Access | Open, any public profile | Bound by your proxy pool | Gated to vetted use cases |
| Output | Flat JSON, stable schema | Raw HTML blob you parse | JSON, restricted fields |
Start free, then pay per call
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
A TikTok profile scraper is a tool that reads a creator's public profile and returns it in a structured format. Our TikTok profile scraper API takes an @username or profile URL and returns the nickname, handle, bio, avatar, verified flag, follower count, following count, total hearts, and video count as JSON from a single request.
Send one GET request to our tiktok/profile endpoint with the username (or a profile url) and your API key. We route through US residential IPs, render nothing you have to script, handle anti-bot checks, retry on failure, and parse the embedded profile blob, so you get clean JSON back without maintaining selectors against TikTok's changing markup.
Yes. The stats block returns a rounded numeric followerCount (for example 27100000), and statsV2 carries the exact string count (for example "27067298") when TikTok includes it in the page. The same applies to heartCount and videoCount, so you can store either the rounded or the precise figure.
No. You only need a tiktokscraperapi key, passed as the api_key query parameter. TikTok's own Research API is gated to approved academic and non-profit use, but our endpoint reads the public profile a logged-out visitor sees, so there is no application to file. The free tier includes 1,000 requests per month.
TikTok verify-walls datacenter and cloud IP ranges, so a request from AWS, GCP, or Azure often returns a CSR shell or a CAPTCHA page with no profile data, even though the identical request from a home connection works. Our API routes through US residential proxies so the user-detail blob actually hydrates, which is why the profile fields come back populated.
Median end-to-end response is about 2.6 seconds, which includes residential proxy routing, anti-bot handling, retries, and parsing. One call returns the full profile, so you do not chain extra requests just to assemble the stats.