TikTok Influencer Scraper
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
PaxIQ
Maintained by CommunityActor stats
4
Bookmarked
289
Total users
15
Monthly active users
2.7 days
Issues response
2 days ago
Last modified
Categories
Features
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
Pay per result, with a startup charge. Proxy usage for Store customer runs is included in these prices, not charged separately. Owner test runs consume the owner's platform credits.
A pricing increase is scheduled with Apify's required notice period. The effective date and currently active prices are shown in the Actor's Pricing tab. Until the new pricing becomes effective, previous rates remain applicable.
Scheduled rates:
- Start: $0.25 per allocated GB of RAM ($0.50 at the default 2 GB; $1.00 at 4 GB).
- Returned creator: $0.025 ($25 per 1,000 returned creators).
- The start fee applies even if filters yield no matching creators or TikTok blocks the run.
- The run spending limit is a ceiling, not a minimum charge. Collection is capped to the number of results that fit the remaining spending limit.
- A requested result count is a maximum, not a guarantee; availability and filters
can produce fewer results. Email presence is not guaranteed unless
require_emailis enabled.
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
Discovery reliability update (November 2026)
The actor uses Apify residential proxies by default with a Netherlands exit and a
stable session per attempt. country_hint remains an annotation, not a country
filter. You can override proxyConfiguration using the Apify proxy editor;
proxy costs are included in Store customer event prices. Owner tests incur platform usage costs.
TikTok may return HTTP 200 with an empty body even when a hashtag has content. Such responses, malformed discovery data, and navigation failures now fail explicitly instead of reporting a successful empty scrape. Up to three attempts use fresh proxy sessions. Structured, successful API responses containing no profiles are still treated as legitimate empty searches. No login cookies are required or collected by this update.
Bandwidth and cost controls
Images, video, and fonts are not downloaded. Results are filtered and enriched as they arrive, and collection stops at the requested or affordable count. Completed hashtags and collected results are retained across bounded proxy retries.