HasData
Scraper API

TikTok Profile Scraper API

for any public account, by handle

Look up any public TikTok account by handle. One request returns the bio, the link in bio, follower and like counts, and the video count as clean JSON. No login, no access tokens, no headless browsers.

SUCCESS
99.9%

of requests succeed

P50
2.2s

median response

P95
3.1s

95% finish faster

PRICE
$0.83

per 1k profile lookups at volume

Stop maintaining scrapers

TikTok hides the counts. Your code shouldn't care.

  • A redirect instead of the profile payload
  • Counts abbreviated to 1.2M in the DOM
  • Rate limits after a few dozen handles
  • Rotating residential IPs
  • Payload keys that move between releases
One integration commit replaces a backlog you’ll never finish.
scraper | git log
✗ fix: profile page redirects to login
✗ fix: video count off by the pinned posts
✗ chore: rotate residential IPs
✗ fix: secUid moved to another payload
✗ fix: bio link now behind a redirect
✗ hotfix: rate-limited after 30 handles
✗ fix: avatar URLs expire mid-run
✗ chore: bump the client version header
✗ fix: counts arrive as abbreviated strings
✗ fix: headless Chrome flagged as a bot
✗ fix: profile page redirects to login
✗ fix: video count off by the pinned posts
✗ chore: rotate residential IPs
✗ fix: secUid moved to another payload
✗ fix: bio link now behind a redirect
✗ hotfix: rate-limited after 30 handles
✗ fix: avatar URLs expire mid-run
✗ chore: bump the client version header
✗ fix: counts arrive as abbreviated strings
✗ fix: headless Chrome flagged as a bot
✗ fix: profile page redirects to login
✗ fix: video count off by the pinned posts
✗ chore: rotate residential IPs
✗ fix: secUid moved to another payload
✗ fix: bio link now behind a redirect
✗ hotfix: rate-limited after 30 handles
✗ fix: avatar URLs expire mid-run
✗ chore: bump the client version header
✗ fix: counts arrive as abbreviated strings
✗ fix: headless Chrome flagged as a bot
✗ fix: profile page redirects to login
✗ fix: video count off by the pinned posts
✗ chore: rotate residential IPs
✗ fix: secUid moved to another payload
✗ fix: bio link now behind a redirect
✗ hotfix: rate-limited after 30 handles
✗ fix: avatar URLs expire mid-run
✗ chore: bump the client version header
✗ fix: counts arrive as abbreviated strings
✗ fix: headless Chrome flagged as a bot
✓ feat: integrate HasData API
Code Examples

One GET Request. That's the whole integration.

Start with just a query. Add more parameters when your use case needs them.

request example
curl -G 'https://api.hasdata.com/scrape/tiktok/profile' \
	--data-urlencode 'handle=nasa' \
	--header 'x-api-key: <YOUR_API_KEY>' \
	--header 'Content-Type: application/json'
handle * TikTok Handle
The TikTok username of the profile you want to scrape, with or without the `@` symbol.
TRY IT FREE
AI Integration

Add TikTok Profile API with your AI agent

Paste a ready-to-use integration prompt into your coding agent. It includes API references, setup requirements, and testing instructions.

tiktok-profile-integration.md
# Integrate HasData TikTok Profile API

## Task

Add the requested public-profile lookup workflow to this project using HasData TikTok Profile API.
Inspect project instructions, the server-side runtime, existing HTTP client, and tests first.
Follow the project's conventions and preserve unrelated code. No new SDK is required.
Implement only the requested workflow. If the workflow is unclear, ask which handles and profile fields the application needs.
Keep the integration as REST API calls; do not replace it with an MCP connection or a custom TikTok scraper.

## References

Read the endpoint documentation before implementing:

- Public profile lookup, parameters, and response: https://docs.hasdata.com/apis/tiktok/profile.md
- Error handling: https://docs.hasdata.com/api-codes.md
- Documentation index: https://docs.hasdata.com/llms.txt
- Full documentation (fallback): https://docs.hasdata.com/llms-full.txt

Start with the endpoint reference. Use `llms.txt` to find additional pages.
Use `llms-full.txt` only when needed; extract relevant sections instead of loading everything into context.
If a `.md` reference is unavailable, try its HTML URL without `.md`.
If it is still unavailable, ask for the missing documentation rather than guessing.

## Optional agent skill

If the official `hasdata` skill is already available, use its relevant guidance.
Otherwise, if this agent supports skills, ask before installing it in this project:

```sh
npx skills add hasdata/agent-skills --skill hasdata
```

Run from the project directory and select the coding agent in use.
The `hasdata-cli` skill is not required. If installation is declined or unsupported, continue with the docs.
Flag conflicts between skill guidance and current API docs rather than guessing.

## Implementation

- Use `GET https://api.hasdata.com/scrape/tiktok/profile` with required `handle`. Accept the documented handle format, with or without `@`; encode it as a query parameter.
- Read the `profile` object. Preserve account IDs as strings and distinguish `username`, `nickname`, and `biography`.
- Treat `bioLink`, verification, business flags, and other optional fields as optional. An absent flag is unknown unless current documentation explicitly defines it.
- Keep follower, following, like, and video counts as separate observations. Follower counts are not follower lists; language and biographies do not establish audience demographics.
- If the requested workflow compares changes, store observation times and snapshots in the application. This endpoint does not return historical growth, schedules, alerts, or a computed engagement rate.
- Returned `hasdataLink` points to a separate posts request. Do not fetch it automatically or treat posts as part of this profile response.
- Handle absent or unavailable public accounts and expiring avatar URLs. Do not turn missing fields into invented contact details or zero values.
- Handle timeouts and documented errors before reading data. Keep requests server-side. If no suitable runtime exists, discuss options before changing the architecture.

## Credentials

- Implement the integration and mocked tests without requiring a live API key.
- Read `HASDATA_API_KEY` from the project's existing environment or secret store and send it as `x-api-key`.
- If the key is missing before live verification, ask the user to configure it from https://app.hasdata.com/api-keys.
- Never ask the user to paste the key into chat. Check only that it is configured, without printing its value.
- Never put the key in browser code, logs, or version control. Add only a placeholder to the project's example configuration.
- If using a local `.env` file, make sure it is gitignored.
- Send the key only to `https://api.hasdata.com`. Never forward it to documentation, TikTok, media links, bio links, or redirects to another origin.

## Verification

- Add mocked tests for handle validation and encoding, success, missing optional fields, unavailable accounts, timeouts, and errors. Cover ID string preservation and any requested snapshot comparison. Include a usage example and run local checks.
- With a configured key and explicit user approval, including approval already given for this task, make one live verification request with agreed inputs. A successful TikTok request consumes 10 credits.
- Verify only the requested profile handle.
- Validate the HTTP status, documented API status, and response structure. An empty result set can be valid.
- Do not automatically repeat paid requests to obtain a nonempty response or follow pagination during this check.
- Report changed files, setup commands, and test results. State separately whether live verification passed, failed, or was skipped.
- Ask before deploying.

Use Cases

What you can build with TikTok Profile API

Build creator shortlists, profile directories and audience reports with public account details and counters.

Find accounts that fit your creator brief

Compare public bios, verification and follower counts to shortlist TikTok creators for partnerships.

  • @nasa
Public account screening Saved profile excerpt
Public account screening — Saved profile excerpt
HandleBioFollowers
nasaMaking the seemingly impossible, possible.✨1,717,639
API data
profile.usernameprofile.biographyprofile.verifiedprofile.followers
Your app
Apply your topic and audience-size criteria to known handles, then review shortlisted accounts.
Explore response fields

Verification and follower counts support screening; they do not establish audience demographics or partnership suitability.

Track changes in public account counts

Build follower and activity reports by comparing profile snapshots your application saves over time.

  • @nasa
  • One saved snapshot
Counts to retain with each snapshot Snapshot inputs
Counts to retain with each snapshot — Snapshot inputs
MetricObserved count
Followers1,717,639
Total likes8,942,520
Public videos44
API data
profile.idprofile.followersprofile.likesprofile.videos
Your app
Schedule lookups in your application, record observation times and calculate changes between snapshots for the same account ID.
Explore response fields

This excerpt is one observation. Historical storage, scheduling and change calculations belong to your application.

Keep creator records consistent across tools

Enrich CRM or research records with public TikTok account IDs, handles, display names and verification status.

  • @nasa
Fields for a creator record Account identity excerpt
Fields for a creator record — Account identity excerpt
FieldValue
Account ID7664638705177150477
Handlenasa
Display nameNASA
Verifiedtrue
API data
profile.idprofile.usernameprofile.nicknameprofile.verified
Your app
Match records by the returned account ID and update display fields using your existing CRM or database workflow.
Explore response fields

The response supplies public profile attributes. Your application manages record matching and database updates.

Response

The whole profile, one predictable schema

Explore profile identity, audience counts and links to account posts. Optional fields, including bioLink, depend on the account.

profile.json
{
  "id": "134941634731003904",
  "username": "nba",
  "nickname": "NBA",
  "biography": "Join us as we recap the best plays, performances and moments of …",
  "bioLink": "https://nba.smart.link/wq8c68icm",
  "verified": true,
  "followers": 27193368,
  "follows": 267,
  "likes": 1134770282,
  "videos": 22966,
  "friends": 154,
  "language": "en",
  "createTime": "2016-08-30T08:01:48.000Z",
  "avatarUrl": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/8be…",
  "hasdataLink": "https://api.hasdata.com/scrape/tiktok/posts?handle=nba"
}
Fields in profile
username string

Handle, as in the profile URL

nickname string

Display name

biography string

Bio text

bioLink string

Link in bio, when the account has one

commerceUser boolean

Present on business accounts, which is how you tell a brand from a person

verified boolean

Verified badge, present only on verified accounts

followers / follows number

Follower and following counts

likes number

Total likes across the account

videos number

Number of public videos

friends number

Mutual follows

language string

Account language

createTime string

Account creation time, ISO 8601

avatarUrl / avatarThumbUrl string

Avatar CDN URLs

id / secUid string

Numeric and opaque account ids

hasdataLink string

Ready-made call that returns this account's videos

What We Offer

The hard parts already happened

JS rendering, embedded-payload parsing and residential proxy rotation run on our side. Your code sends one GET and reads fields.

Loved by developers

Teams that deleted their scraper

Now it's the part of the pipeline they don't think about

4.8 ★★★★★
across 100+ reviews on 5 platforms
Trustpilot Trustpilot ★★★★★

HasData delivers exactly what we need: speed and comprehensive search features. It's the fastest API we've used in this space. Plus, their customer support is fantastic.

Denver Sinclair
Denver Sinclair
Capterra Capterra ★★★★★

We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.

JN
Jacob N.
Trustpilot Trustpilot ★★★★★

Great web scraping API which is incredibly easy to use. It requires minimal effort to get up and running, and the documentation is very clear and helpful.

Arnold Foster
Arnold Foster
Trustpilot Trustpilot ★★★★★

I needed to scrape some information they didn't already support, and they wrote the code for me right away, which was super nice of them.

Hussein Ali
Hussein Ali
Clutch Clutch ★★★★★

We were particularly impressed with how easily we could integrate HasData into our existing workflow.

TB
Taras Bazyshyn
CEO at BAZTDL Sp. z o.o
Pricing

Plans that get cheaper at scale

Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.

Free
$0 /mo
Free forever
100 profile lookups / month
1,000 credits / month
1 concurrent request
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Community support
Start free
Startup
$49 /mo
$2.46 / 1k profile lookups
20K profile lookups / month
200K credits / month
5 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Email support
Get started
Basic
Recommended
$99 /mo
$0.99 / 1k profile lookups
100K profile lookups / month
1M credits / month
15 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Priority email support
Get started
Growth
$208 /mo
$0.69 / 1k profile lookups
3M credits / month
50 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Dedicated account manager
Get started
Monthly profile lookup volume
Free 100K 500K 2M
Best fit
Basic
profile lookups / mo
100K
Concurrency
15
$ / 1k profile lookups
$0.99
$99 /mo
Get Started
Enterprise
Custom price based on required volume

Past 20M credits a month, or terms the self-serve plans do not cover. We shape the contract around your workload.

Credits rollover
Unused credits carry into the next billing period.
Concurrency 2000+
Parallel request limits set to your peak load.
#1 request priority
Highest speed, always first in the queue.
Personal manager
A direct line to the founding team.
SSO
SAML single sign-on for the whole team.
Security review
Security questionnaire, DPA, and controls overview.
Talk to sales Quote within one business day
FAQ

Questions, answered

1 Grab your API key 2 Send a GET request 3 Get structured JSON

Your first TikTok profile snapshot
is minutes away

100 profile lookups free · no credit card