Pricing
from $4.00 / 1,000 results
TikTok Influencer Scraper
Scrape TikTok creators by hashtag. Returns handle, name, follower count, bio, and email address. Filter by follower range. Supports email-only results, bio link following, and country annotation. Ideal for influencer outreach and lead generation.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
Actor stats
4
Bookmarked
138
Total users
25
Monthly active users
4 months ago
Last modified
Categories
Share
An Apify actor that scrapes TikTok creators by hashtag, extracts profile data + emails, and outputs a clean list ready for influencer outreach.
What It Does
- Hashtag β Creators β Navigates to
https://www.tiktok.com/tag/{hashtag}, intercepts TikTok's internal API calls, and collects creator handles while scrolling to load more content. - Profile Data β Visits each creator's profile (
@handle) and intercepts the user-detail API response to capture followers, following, likes, bio, and bio link. - Email Extraction β Regex-scans the bio text for email addresses, and optionally follows bio links (Linktree, Beacons, solo.to, etc.) to find hidden emails.
- Filter + Normalize β Applies a
min_followersfilter and outputs a clean 14-field schema.
No fragile TikTokApi library used. This actor uses Playwright with stealth settings to behave like a real browser.
Supported Use Cases
- Influencer outreach β Find creators in a niche, get their emails directly
- Market research β Understand which creators dominate a hashtag
- Agency prospecting β Build creator lists by vertical or geography
- Competitor analysis β See who's posting in your space
Input Schema
| Field | Type | Default | Description |
|---|---|---|---|
hashtags | string[] | required | Hashtags to scrape (without #). E.g. ["dutchfashion", "sportmode"] |
min_followers | integer | 5000 | Skip creators with fewer followers |
max_results | integer | 1000 | Maximum total creators returned |
extract_emails | boolean | true | Regex-scan bio text for email addresses |
follow_bio_links | boolean | true | Follow Linktree / Beacons / solo.to links to find hidden emails |
country_hint | string | "" | Optional ISO country code to annotate results (e.g. "NL", "DE") β best-effort, not a hard filter |
Example Input (input.json)
{"hashtags":["dutchfashion","sportmode"],"min_followers":5000,"max_results":1000,"extract_emails":true,"follow_bio_links":true,"country_hint":"NL"}
Output Schema (14 fields)
| Field | Type | Description |
|---|---|---|
handle | string | TikTok username (without @) |
display_name | string | Full display name |
first_name | string | First word of display_name, emojis stripped |
followers | integer | Follower count |
following | integer | Following count |
likes | integer | Total likes (heart count) |
bio | string | Bio text |
email | string | First email found in bio or bio link page |
bio_link | string | URL in the creator's bio |
profile_url | string | https://www.tiktok.com/@{handle} |
platform | string | Always "tiktok" |
country_hint | string | Passed through from input |
hashtag_source | string | Which hashtag surfaced this creator |
scraped_at | string | ISO 8601 UTC timestamp |
Example Output Record
{"handle":"fashiongirl_nl","display_name":"Sophie π· Fashion","first_name":"Sophie","followers":48200,"following":312,"likes":1450000,"bio":"Dutch fashion & lifestyle π· collabs: sophie@fashiongirl.nl","email":"sophie@fashiongirl.nl","bio_link":"https://linktr.ee/fashiongirl_nl","profile_url":"https://www.tiktok.com/@fashiongirl_nl","platform":"tiktok","country_hint":"NL","hashtag_source":"dutchfashion","scraped_at":"2026-03-03T14:31:00Z"}
Pricing
| Component | Rate |
|---|---|
| Actor start | $0.00005 |
| Per result | $0.003 |
| 1,000 creators | β $3.00 |
How It Works (Technical)
Scraping Strategy
Rather than using the fragile TikTokApi library (which breaks frequently), this actor uses Playwright with Chromium to:
- Navigate to
https://www.tiktok.com/tag/{hashtag} - Intercept XHR/fetch responses matching TikTok's internal API patterns:
/api/challenge/item_list//api/post/item_list//api/search/item/full/
- Scroll the page to trigger lazy-loading and collect more creator handles
- For each unique creator, navigate to
https://www.tiktok.com/@{handle}and intercept/api/user/detail/ - Run email extraction on bio + optionally follow
bio_link
Anti-Detection
- Realistic Chrome user-agent string
navigator.webdriverproperty hiddenplaywright-stealthpatches applied- Random delays between requests (0.5β2s)
- No automation flags in browser args
Email Extraction
email_extractor.py handles two strategies:
- Bio regex β standard
[a-z]+@[domain]pattern, with spam filtering - Bio link follow β
httpx(not Playwright) fetches the linked page and scans its HTML
Supported bio link aggregators: Linktree, linktr.ee, Beacons, solo.to, Bio.link, Campsite, lnk.bio, AllMyLinks, WithKoji, Carrd, About.me, TapLink.
Local Development
Prerequisites
pip install playwright playwright-stealth httpx apify apify-client beautifulsoup4playwright install chromium
Run Locally
- Create
input.jsonin the project root:
{"hashtags":["dutchfashion"],"min_followers":1000,"max_results":20,"extract_emails":true,"follow_bio_links":true,"country_hint":"NL"}
- Run the actor:
$python src/main.py
- Results are written to
output.jsonin the project root.
Docker (matches Apify environment)
docker build -t tiktok-scraper .docker run --rm\-v$(pwd)/input.json:/usr/src/app/input.json \-v$(pwd)/output:/usr/src/app/output \tiktok-scraper
Notes & Limitations
- TikTok changes its internal API frequently. The XHR interception patterns may need updating if TikTok changes its API endpoint structure.
- Rate limiting β TikTok may throttle or CAPTCHA at high request rates. Add delays or use Apify proxies for large runs.
- Email coverage β Only creators who publicly share their email (in bio or bio link pages) will have emails populated. Expect ~10β30% email coverage depending on the niche.
- Country hint β TikTok does not expose user location in most API responses.
country_hintis passed through from your input, not scraped from TikTok.
License
MIT
