TikTok Influencer Scraper avatar

TikTok Influencer Scraper

Pricing

from $4.00 / 1,000 results

Go to Apify Store
TikTok Influencer Scraper

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

PaxIQ

Maintained by Community

Actor stats

4

Bookmarked

289

Total users

15

Monthly active users

2.7 days

Issues response

2 days ago

Last modified

Features

Limited permissions

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

  1. 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.
  2. Profile Data — Visits each creator's profile (@handle) and intercepts the user-detail API response to capture followers, following, likes, bio, and bio link.
  3. Email Extraction — Regex-scans the bio text for email addresses, and optionally follows bio links (Linktree, Beacons, solo.to, etc.) to find hidden emails.
  4. Filter + Normalize — Applies a min_followers filter 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

FieldTypeDefaultDescription
hashtagsstring[]requiredHashtags to scrape (without #). E.g. ["dutchfashion", "sportmode"]
min_followersinteger5000Skip creators with fewer followers
max_resultsinteger1000Maximum total creators returned
extract_emailsbooleantrueRegex-scan bio text for email addresses
follow_bio_linksbooleantrueFollow Linktree / Beacons / solo.to links to find hidden emails
country_hintstring""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)

FieldTypeDescription
handlestringTikTok username (without @)
display_namestringFull display name
first_namestringFirst word of display_name, emojis stripped
followersintegerFollower count
followingintegerFollowing count
likesintegerTotal likes (heart count)
biostringBio text
emailstringFirst email found in bio or bio link page
bio_linkstringURL in the creator's bio
profile_urlstringhttps://www.tiktok.com/@{handle}
platformstringAlways "tiktok"
country_hintstringPassed through from input
hashtag_sourcestringWhich hashtag surfaced this creator
scraped_atstringISO 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_email is enabled.

How It Works (Technical)

Scraping Strategy

Rather than using the fragile TikTokApi library (which breaks frequently), this actor uses Playwright with Chromium to:

  1. Navigate to https://www.tiktok.com/tag/{hashtag}
  2. Intercept XHR/fetch responses matching TikTok's internal API patterns:
    • /api/challenge/item_list/
    • /api/post/item_list/
    • /api/search/item/full/
  3. Scroll the page to trigger lazy-loading and collect more creator handles
  4. For each unique creator, navigate to https://www.tiktok.com/@{handle} and intercept /api/user/detail/
  5. Run email extraction on bio + optionally follow bio_link

Anti-Detection

  • Realistic Chrome user-agent string
  • navigator.webdriver property hidden
  • playwright-stealth patches applied
  • Random delays between requests (0.5–2s)
  • No automation flags in browser args

Email Extraction

email_extractor.py handles two strategies:

  1. Bio regex — standard [a-z]+@[domain] pattern, with spam filtering
  2. 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 beautifulsoup4
playwright install chromium

Run Locally

  1. Create input.json in the project root:
{
"hashtags": ["dutchfashion"],
"min_followers": 1000,
"max_results": 20,
"extract_emails": true,
"follow_bio_links": true,
"country_hint": "NL"
}
  1. Run the actor:
$python src/main.py
  1. Results are written to output.json in 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_hint is 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.

⌂ 换网址