Brands looking for TikTok creators to work with usually end up copying emails from bios by hand, one profile at a time. Most creators who want brand deals do publish a business email: either in the bio itself, or on the Linktree-style page their bio links to.
This tutorial shows how to collect those contacts at scale without logging in: a no-code route, a few lines of Python that turn this week's trending US TikToks into a creator lead list, and a do-it-yourself script that reads a profile and its bio link directly.
Disclosure: I built the Apify actor used in options 1 and 2 (TikTok Transcript Scraper, which now has a creator-contacts option). Option 3 doesn't use it.
How many creators publish an email?
From my test runs on Apify's cloud on 27 Oct 2026:
- 14 of 25 creators behind this week's trending US videos had an email address in their bio.
- In a second run, 7 of 8 creator profiles produced an email once the bio-link page was checked too:
- 6 had an email in the bio (3 of them repeated it on their link page),
- 1 had no email in the bio, only on the bio-link page (a msha.ke page),
- 1 link page gave a second, different address next to the one in the bio,
- 1 link page (beacons.ai) refused the request with HTTP 403.
- Most addresses were management or talent-agency inboxes rather than personal ones, which is what you want for brand outreach.
- Brands are different: none of the six brand accounts I checked (Scrub Daddy, Duolingo, Gymshark, Ryanair, Liquid Death, Chipotle) published an email in their bio or on their link page. This works for creators, not for companies.
What you get per creator
One row per creator (recordType: "creator"). Real values from the run; handle and email redacted:
| Field | Example |
|---|---|
username, url, nickname, verified
|
<handle>, https://www.tiktok.com/@<handle>
|
followers, following, likes, videoCount
|
133097, 234, 2400000, 133
|
isSeller, businessCategory, isOrganization
|
false, null, false (a TikTok Shop seller in the same run: true, Shopping & Retail) |
bio, bioLink
|
the bio text, https://linktr.ee/<handle>
|
emails |
["<name>@<agency>.com", "<handle>@gmail.com"] |
emailSources |
{"bio": ["<name>@<agency>.com"], "bioLink": ["<handle>@gmail.com"]} (where each address was found) |
bioLinkNote |
HTTP 403 when a link page refused the request, or redirected to <site>
|
creatorSource |
input, or video_author for creators found through videos |
Every video row also carries the author's authorFollowers, authorLikes, authorBio and authorEmails, and you can add the transcript of what they said.
Option 1: No code (Apify Console)
- Open the actor page and click Try for free. Apify's free plan includes monthly platform credit; the actor itself is pay-per-event (current price on the Store page), and unavailable profiles aren't charged.
- Paste profile URLs or @handles into Creator profiles (contacts).
- Keep Scan bio-link pages for emails on.
- Click Start and open the Creator contacts tab of the results: followers, seller flag, category, emails and bio link, ready to export as CSV or Excel for your CRM.
To find creators instead of bringing your own list, turn on Trending US videos and Add a creator row for each video's author: you get this week's trending videos with transcripts plus a contact row for each creator behind them.
Option 2: Python
pip install apify-client, then take your API token from Apify Console → Settings → Integrations.
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("axlymxp/tiktok-transcript-scraper").call(run_input={
"trendingVideos": True, # this week's trending US videos...
"trendingCategories": ["Beauty & Care"],
"creatorsFromVideos": True, # ...plus one contact row per creator
"creatorProfiles": ["@creator_one", "https://www.tiktok.com/@creator_two"],
"scanBioLinks": True,
"maxVideos": 20,
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
creators = [r for r in rows if r["recordType"] == "creator" and r["emails"]]
for c in sorted(creators, key=lambda r: r["followers"] or 0, reverse=True):
print(f'{c["followers"]:>10,} @{c["username"]:<25} {", ".join(c["emails"])} ({", ".join(c["emailSources"])})')
Video rows (recordType: "video") from the same run carry the transcript, so you can check what a creator actually says before you write to them, and mention it in your first line.
Option 3: DIY, profile + bio link with no login
A TikTok profile page embeds its data as JSON (__UNIVERSAL_DATA_FOR_REHYDRATION__ → webapp.user-detail), readable without signing or cookies. With curl_cffi (pip install curl_cffi):
import json, re
from curl_cffi import requests
EMAIL = re.compile(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}")
s = requests.Session(impersonate="chrome124")
handle = "scrubdaddy"
html = s.get(f"https://www.tiktok.com/@{handle}", headers={"Accept-Language": "en-US,en;q=0.9"}).text
m = re.search(r'<script id="__UNIVERSAL_DATA_FOR_REHYDRATION__"[^>]*>(.*?)</script>', html, re.S)
info = json.loads(m.group(1))["__DEFAULT_SCOPE__"]["webapp.user-detail"]["userInfo"]
user, stats = info["user"], info["stats"]
print(user["uniqueId"], stats["followerCount"], "seller:", user.get("ttSeller"),
"category:", (user.get("commerceUserInfo") or {}).get("category"))
print("bio emails:", EMAIL.findall(user.get("signature") or ""))
link = (user.get("bioLink") or {}).get("link")
if link:
r = s.get(link if link.startswith("http") else "https://" + link)
print("bio link:", link, "->", r.url, "emails:", sorted(set(EMAIL.findall(r.text))))
For this brand account it prints scrubdaddy 4400000 seller: True category: Others, then empty email lists for the bio and its likeshop.me link page. Swap in a creator's handle and the emails show up. Things I ran into:
-
The bio is called
signatureand the link isbioLink.link. TikTok Shop sellers havettSeller: trueand acommerceUserInfo.categorysuch asShopping & Retail, which is useful for filtering. - Check where the link page ends up. One creator's link had died and redirected to a creator-marketing company's homepage, which lists that company's own email. Only trust emails from a page that stayed on the host the creator linked.
-
Bios often contain links without
https://(Duolingo.com). Add the scheme before requesting it, or your redirect check will fail. - Not every link page lets you in. Linktree, msha.ke and hoo.be pages loaded fine; beacons.ai answered 403.
-
Unknown or banned users don't return 404: the page loads and
webapp.user-detail.statusCodeis non-zero (10221 for a handle that doesn't exist). -
Filter false positives. An email regex also matches image names like
logo@2x.png, so drop matches that end in a file extension.
Use the contacts responsibly
These addresses are published by the creators for business enquiries, but they're still personal data under GDPR/CCPA. Write to people about something relevant to them, keep it to one or two messages, and honour opt-outs. Don't resell lists or add them to newsletters without consent.
FAQ
Do I need a TikTok account? No. Only public profiles are read, logged out.
Can it search creators by keyword or niche? Not directly: TikTok's search needs signed requests. Use the trending videos and their categories, your own list of handles, or the authors of videos you already collected.
Questions or a profile that doesn't work? Open an issue on the actor page and I'll take a look.
Top comments (0)