Assembling a list of creator emails by hand means three browser tabs, three different column layouts and a lot of copy-paste. None of TikTok, Instagram or YouTube publishes a contact email field, so every address has to be read out of a bio or found on the website the creator links to. And once you have it, you still do not know whether the domain behind it accepts mail at all.
Running three single-platform scrapers is not much better: you get three exports with three different column sets, three separate crawls over the same websites, and no way to see that a brand's TikTok row and its YouTube row are the same business. This post walks through Creator Leads Scraper, an Apify actor by flash_scraper that scrapes TikTok, Instagram and YouTube profiles in a single run, with one row per creator and the same 54 columns on every row, and shows how to pull YouTube creator emails by keyword with one Python call. YouTube is the discovery platform here; TikTok and Instagram enrich the handles you supply.
What you get
Every row has the same 54 columns whichever platform it came from — 48 builder columns plus 6 derived ones appended at the end, so a header-mapped import never shifts. A column a platform cannot supply is null, never missing and never an empty string. The eight columns you will filter on most:
| Column | Label | What it holds |
|---|---|---|
platform |
Platform |
tiktok, instagram or youtube
|
followers |
Followers | Followers or subscribers — the column every follower filter uses |
followers_estimated |
Followers rounded |
true when the platform rounds the number (YouTube always does) |
email |
The best address found for the creator, from bio text or the linked website | |
email_source |
Email source | Whether the address came from bio or website
|
email_status |
Email status | The verification grade of the best address: deliverable / risky / undeliverable / unknown when an email exists, missing when none does |
lead_score |
Lead score | 0–100 score, computed as points earned divided by the platform's maximum |
discovered_via |
Found via |
input, youtube_search, youtube_link or instagram_related
|
A few more are worth knowing. also_on_platforms (Also on) names every other platform this creator was found on, matched_keyword records the searchKeywords entry whose search returned a YouTube channel, and six social URL columns (instagram_url through linkedin_url) form a complete social card. Every run downloads as CSV, JSON or Excel with five saved views.
The verification behind email_status is four checks over DNS and none over SMTP: syntax, an MX record on the domain, a role-address check (a role alias grades risky), and a bundled list of about 8,000 disposable domains that grades undeliverable. No mailbox is ever probed, so read deliverable as "the domain accepts mail and the address is not a known-bad shape", not as proof that the mailbox exists.
A real run
Here is the receipt from a throwaway run on 2026-09-21, using the actor's own "paste and run" input:
input: { "platforms": ["youtube"], "searchKeywords": ["home barista"], "maxCreators": 10 }
run: SUCCEEDED 38.0s
status: Done — 10 creator leads delivered for "home barista" (YouTube 10); 5 carry an email.
Ten creators asked for, ten delivered, five of them with an email, in 38.0 seconds. maxCreators counts creators delivered, not scraped: filters run before the count, and with an email filter set the run keeps discovering in waves (at most 3 extra) until the number you asked for is delivered or every candidate was tried. A blocked or empty platform is reported in the status message by name, never silently skipped, and every run also writes a machine-readable RUN_SUMMARY record to its key-value store.
The Python call
This is the "smallest useful call" from the README, using the apify-client package. The same JSON works in the Console, the REST API and n8n/Make/Zapier.
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("flash_scraper/creator-leads-scraper").call(run_input={"platforms": ["youtube"], "searchKeywords": ["home barista"], "maxCreators": 5, "enrichEmails": False})
rows = client.dataset(run["defaultDatasetId"]).list_items().items
rows is a list of dicts, one per creator, with all 54 keys present. Two knobs turn this into a pipeline:
-
enrichEmailsisFalseabove to keep the call minimal. Its default istrue, and it is the main email source on all three platforms: every creator's linked site is visited (home,/contact,/about) for emails and social profiles. -
onlyWithEmail: truedrops creators with no email found, before billing. The README's keyword recipe is{ "platforms": ["youtube"], "searchKeywords": ["vegan meal prep"], "maxCreators": 30, "onlyWithEmail": true }.
To run it as a monitor, schedule it in Apify Console and set onlyNewCreators: true. The first run is your baseline; every run after it delivers, and bills, only the creators that have appeared since, and a quiet week returns zero rows and charges nothing.
What it costs
You are charged per creator lead delivered after filtering. At the live free-plan rate (measured 2026-08-29) that is $0.002 per lead — $2 per 1,000 creator leads, so $5 buys 2,500 leads. The only other billable event is $0.002 per AI opener, which exists only when you turn writeOpeners on with your own LLM key.
A free Apify account's $5 monthly platform credit therefore covers up to 2,500 creator leads at this rate, less the run's own compute usage. Rows removed by your filters cost nothing, handles that were blocked or do not exist cost nothing, and a run that delivers zero rows charges nothing. The Store Pricing tab is authoritative if the rate changes, and paid plans pay less.
Honest limits
The README has a section called "What this Actor does not do". Its points, in short:
-
No TikTok or Instagram keyword/hashtag search. Logged-out HTTP exposes no
/tag/data on TikTok and Instagram's search endpoints answer 302/401 (probed 2026-08-09). You supply the handles; YouTube keyword search is the discovery path, optionally hopping to the Instagram/TikTok profiles those channels link to viacrossPlatformDiscovery. - No phone numbers, on any platform. None of the three publishes one, so no phone column exists.
-
No engagement rate on TikTok or YouTube rows. TikTok's public payload carries no play counts (28 of 28 profiles probed) and YouTube's About page carries no per-video likes or comments. Instagram rows carry real engagement metrics from ~12 recent posts; YouTube rows carry lifetime
avg_views_per_videoinstead, plus an approximate posting cadence. - No guaranteed email per row. Emails exist only where the creator published one (bio or linked site). In the 2026-08-09 verification runs, 3 of 9 TikTok creators, 1 of 5 Instagram creators and 6 of 9 YouTube channels on one keyword (4 of 8 on another) ended up with an email after enrichment. Those are small samples; read them as an order of magnitude.
- No audience demographics, follower lists, post scraping or DM sending. One row per creator profile is the entire product.
One more caveat from the same README: the email behind YouTube's "View email address" button is not read. That button needs a Google login, a reCAPTCHA and a small daily reveal quota, and the actor stays keyless and logged-out. The row does say whether the button exists, in has_business_email.
Try it
If you want to see the output before writing any code, the example task Find fitness YouTube creators with emails runs a ready-made input. The actor page and pricing are at apify.com/flash_scraper/creator-leads-scraper.
Top comments (0)