YouTube TikTok Creator Emails - Instagram Leads & Socials
Pricing
from $1.60 / 1,000 creator leads
YouTube TikTok Creator Emails - Instagram Leads & Socials
Creator leads scraper and creator email finder for TikTok, Instagram and YouTube in one run: TikTok creator emails, YouTube creator emails and Instagram influencer leads - one row per creator with bio, followers, links, verified flag, business email and a 0-100 lead score. Only-new monitoring.
Pricing
from $1.60 / 1,000 creator leads
Rating
5.0
(2)
Developer
Flash Scrape
Maintained by CommunityActor stats
5
Bookmarked
10
Total users
9
Monthly active users
a day ago
Last modified
Categories
Share
Creator Leads Scraper is a pay-per-result creator email finder that scrapes TikTok, Instagram and YouTube profiles in a single run — one row per creator with 51 identical columns, an MX-verified contact email wherever the creator published one, no login and no API key, at $2 per 1,000 leads.
Try it: Find fitness YouTube creators with emails

Creator leads scraper and creator email finder — TikTok creator emails, YouTube creator emails and Instagram influencer leads in one run.
Find creators on TikTok, Instagram and YouTube in a single run, enrich them with a contact email from the site they link to, score them, and get one clean row per creator. Every row has the same 51 columns whichever platform it came from, so a mixed list opens as one spreadsheet instead of three.
No login, no API key, no cookie, and no dependency on any other Actor. YouTube keyword search discovers new creators; TikTok and Instagram enrich the handles you supply.
At a glance (for humans and AI agents alike):
-
Smallest useful input — paste and run:
{ "platforms": ["youtube"], "searchKeywords": ["home barista"], "maxCreators": 10 } -
What comes back: one row per creator, 51 identical columns (handle, bio, followers, email + source + an MX-verified
email_status, website, six social URLs, 0–100 lead score, the keyword that found it) — full table below. Rows land in the dataset wave by wave, so a run that hits its timeout keeps everything delivered before it. -
What it costs: $0.002 per creator lead delivered — $2 per 1,000 leads, 2,500 leads per $5 at the live rate (measured 2026-08-29; the Store Pricing tab is authoritative). Filtered-out, blocked and nonexistent handles are never billed.
-
What it does NOT do: no TikTok or Instagram keyword/hashtag search (handles only — YouTube is the discovery platform), no phone numbers, no engagement rate outside Instagram. Details in What this Actor does not do.
-
Exports & alerts: every run downloads as CSV, JSON or Excel with five saved views;
onlyNewCreators: trueon a schedule delivers only creators that appeared since the last run, andwebhookUrlposts a digest to Slack, Discord or any webhook when new rows land.
Quick recipes for the three most-asked jobs
TikTok email finder by username — you have handles, you want whoever published a contact:
{ "platforms": ["tiktok"], "profiles": ["handle1", "handle2"], "onlyWithEmail": true }
Emails come only from the bio or the creator's linked site — read the TikTok fill rates before expecting a full sheet.
YouTube channel email finder by keyword — discover channels in a niche and extract their About-page and website emails:
{ "platforms": ["youtube"], "searchKeywords": ["vegan meal prep"], "maxCreators": 30, "onlyWithEmail": true }
Find micro influencers with emails — keyword discovery plus a follower band:
{"platforms": ["tiktok", "instagram", "youtube"],"searchKeywords": ["home coffee gear"],"crossPlatformDiscovery": true,"minFollowers": 5000,"maxFollowers": 50000,"onlyWithEmail": true,"maxCreators": 50}
crossPlatformDiscovery: true also pulls the Instagram and TikTok profiles those channels link to (keep all three platforms listed — the hop only scrapes platforms you selected), so one keyword builds a cross-platform micro-influencer contact list.
Why one Actor instead of three
An influencer-marketing agency buys an outcome — creator leads with emails — not a source. Running three single-platform scrapers gives you 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 Actor does the website crawl once for all three platforms and cross-links the result in also_on_platforms.
What it does, step by step
- Pick platforms and targets — a YouTube keyword, YouTube channels, TikTok usernames, Instagram usernames, or any mix.
- YouTube discovery first — each keyword returns roughly 30 channels, and every channel's About page is parsed for its description, links, counts, country, join date and verified badge.
- Optional cross-platform hop — the Instagram and TikTok profiles linked from those About pages are scraped too (off by default, because each one is an extra billed row).
- TikTok and Instagram profiles — fetched over HTTP/2 through a rotating residential proxy.
- One shared email pass — every creator's linked site is visited (home,
/contact,/about; a Linktree-style page is resolved by brand-name match, and when the first link is a link-in-bio page or storefront the creator's own domain further down their published links is crawled too) for emails and social profiles. A link-shortener (bit.ly,geni.us, …) is followed to its destination and only that destination's own site is crawled; if it does not resolve to a real site the creator is left with no email rather than somebody else's. - Verify, filter, score, cross-link — every best email is graded
deliverable/risky/undeliverable/unknownwith an MX lookup over DNS (see How emails are verified), your quality filters run before billing, every lead is scored 0–100 and graded A–F, and rows that resolve to the same creator on another platform are cross-linked. - Export — a sortable table with five saved views, downloadable as CSV, JSON or Excel.
What each platform can and cannot deliver
None of these three platforms publishes a contact email field. Every email in your export was either typed into a bio by the creator or found on the website they link to. Read the fill rates below before you buy.
TikTok
- CAN: full public profile — nickname, bio, bio-link, exact follower / following / likes / video counts (from TikTok's precise
statsV2, not the rounded display numbers), verified badge, business-account flag and category, TikTok Shop seller flag, account creation date. - THIS ACTOR DOES NOT DISCOVER ON TIKTOK. Logged-out HTTP exposes no
/tag/data — probed 2026-08-09:/tag/<hashtag>,/search?q=and/search/user?q=render a rehydration blob containing zero usernames, and the search API answers 200 with an empty body without TikTok's signed parameters. Browser-based scrapers exist but are slower and pricier; this Actor stays HTTP-only. You must supply the handles. - NO ENGAGEMENT RATE. The profile payload's
itemListwas empty on 28 of 28 profiles probed and no play count appears anywhere in it, so a per-video engagement rate cannot be computed. Those columns are null on every TikTok row rather than fabricated. - NO PHONE. TikTok publishes none.
- Email fill: the standalone TikTok Actor measured an email in the bio itself on 1 of 28 profiles (3.6%) and a bio link present on 15 of 28 (54%). In this Actor's own verification runs on 2026-08-09, 3 of 9 distinct TikTok creators ended up with an email after enrichment (an earlier build-test pass measured 2 of 7). A creator who links their own domain usually yields an address; a Linktree or a link-shortener usually does not.
- Needs a residential proxy in practice: the standalone TikTok Actor measured 34 of 34 handles returning data through Apify Proxy RESIDENTIAL with a fresh session per attempt (1.4 attempts average), against 3 of 15 from one un-proxied IP once it went hot. TikTok answers a hot IP with an empty JavaScript shell and HTTP 200, not an error — which is why every retry rotates the exit IP instead of just trying again. (In this Actor's own verification runs from a fresh un-proxied laptop IP, 15 of 16 handles still came back, most of them on the second to fourth attempt, and 1 was refused on all six. An earlier build-test pass measured 8 of 9. The un-proxied path works until the IP goes hot — which is exactly why the default is residential.)
- CAN: the public profile record — bio, follower / following / post counts, verified, private and business flags, every link in bio with Instagram's
l.instagram.comwrapper resolved, and the only engagement metrics in this Actor: average likes, average comments, engagement rate and posting cadence computed from the ~12 recent posts the public endpoint returns.posts_sampledreports that denominator on every row. - CANNOT DISCOVER by keyword or hashtag. The only expansion is Instagram's own related-accounts list (
discoverRelated), which starts from a handle you already have. - NO BUSINESS EMAIL.
business_email,business_phone_numberandcategorycame back None even on large verified business accounts (checked on@gymshark). The only email sources on Instagram are the bio text and the linked website — the same two sources as the other platforms. There is no phone column in this Actor for the same reason. - PARTIAL DELIVERY AT VOLUME IS NORMAL, not a fault. Instagram rate-limits shared residential pools hard: the standalone Instagram Actor measured two consecutive 5-handle runs on 2026-08-09 delivering 2 of 5 profiles each, and this Actor's verification runs delivered 11 of 16 handles (the other 5 split between Instagram-side HTTP 400s and handles that do not exist). Ask for a handful of handles per run, expect some to be refused, and know that a refused handle is never billed.
- Instagram also answers HTTP 429 to every HTTP/1.1 request; this Actor speaks HTTP/2 (0/6 versus 5/6 through the same proxy in the same minute).
- Instagram occasionally answers HTTP 400 for one specific account (a broken business-category asset on their side, reproducible per account). Those handles are reported by name and skipped, not retried forever — 3 of the 16 handles in this Actor's verification runs hit it.
- Email fill: in this Actor's own verification runs on 2026-08-09, 1 of 5 distinct Instagram creators ended up with an email after enrichment (an earlier build-test pass measured 2 of 5). Both are tiny samples; treat them as an order of magnitude, not a guarantee.
YouTube
- The only platform here that discovers. A keyword search returns about 30 unique channels — measured 28, 27 and 36 for three keywords on 2026-08-09, combining YouTube's plain results page with its channel-filtered one. More volume comes from more keywords, not from a bigger number in the box;
maxResultsis capped at 40 for that reason. Channels that recur across a keyword's result pages (several videos in the results, or listed by more than one keyword) are fetched first, so under a creator cap the recurring channels are the ones delivered rather than whichever YouTube rendered first;matched_keywordrecords which keyword(s) found each row andkeyword_in_biowhether one of your keywords appears in its About text. - CAN: About-page description, the channel's published links (website plus socials), subscriber count, exact total views, exact video count — and from those two exact numbers,
avg_views_per_video, the channel's lifetime average views per video (e.g. 433,406,980 views over 2,599 videos = 166,759), country, join date, channel id, verified badge. - The email behind YouTube's "View email address" button is NOT read. That button needs a Google login, a reCAPTCHA and carries a small daily reveal quota — this Actor stays keyless and logged-out. A YouTube email comes from the About text, the channel's published links and the linked site instead, which is where the fill rates below were measured.
- SUBSCRIBER COUNTS ARE ROUNDED by YouTube itself ("91.6K", "4.37M"). Every YouTube row carries
followers_estimated: trueso you can see which numbers are exact. Total views and video counts are exact. - NO CATEGORY and NO BUSINESS FLAG. YouTube publishes neither, so
category,is_businessandis_shop_sellerare null on YouTube rows — and the lead score is normalised per platform so YouTube leads are not structurally ranked below TikTok ones for a signal YouTube does not emit. - Link and email fill varies a lot by keyword, so here are two independent samples taken on 2026-08-09, one from the build pass and one from the verification pass that followed it. Sample A (9 channels, keyword
home baristaplus one named channel): 5 of 9 had an email in the About text, rising to 6 of 9 after website enrichment; 4 of 9 published a non-social website; 7 of 9 an Instagram link; 3 of 9 a TikTok link. Sample B, re-measured independently (8 channels, keywordvegan meal prepplus two named channels): 3 of 8 in the About text, 4 of 8 after enrichment; 5 of 8 published a website; 6 of 8 an Instagram link; 3 of 8 a TikTok link. A broad keyword returns small channels that publish nothing — expect the low end. Reading the About page rather than just the channel description is what makes those link rates possible, and it is what makes cross-platform discovery work at all. - YouTube answered every About-page request it made un-proxied from a laptop — 30 of 30 across five build-test runs and 78 of 78 across eight verification runs on 2026-08-09. On-platform the Actor fetches YouTube direct from the container as well (measured: the same 8 channels took 665 s through Apify Proxy and 21 s direct, identical rows), so a YouTube-heavy run spends no proxy traffic at all; supply
proxyUrlsonly if your own network requires it.
Across all three
- One row per creator ACCOUNT. A brand that runs TikTok, Instagram and YouTube comes back as three rows and is billed as three leads, because the follower counts, the bios and often the emails differ per platform and collapsing them would destroy data you paid for. Rows that resolve to the same email or the same domain are cross-linked with
also_on_platformsso you can group them yourself in one spreadsheet step. also_on_platformsfills on single-platform runs too: it also names every platform the creator's own links point at (their published bio/About links, plus what the website crawl found), so a YouTube-only run still tells you which channels have an Instagram, a TikTok, a Facebook page, an X account or a LinkedIn — without paying for those platforms' rows.- Every row carries
discovered_via, so you can always see whether a lead came from your input, from a YouTube keyword, from a link on a YouTube channel, or from Instagram's related accounts. - Filters run before billing. Rows removed by your filters, handles that do not exist and handles that were blocked are never charged, and a run that delivers zero rows charges nothing.
- No phone column exists anywhere in the output, because none of the three platforms publishes one.
- The AI cold-opener is optional, runs on your own OpenAI or Anthropic key, is used once per run and is never stored.
What data you get
One row per creator, best leads first within each delivery wave, with the same 51 columns on every row. A column a platform cannot supply is null — never missing, never an empty string — so your CSV has stable headers whichever platforms you ran. The Platforms column below says honestly which platforms can fill each column — read it before filtering on one.
| Column | What it is | Platforms |
|---|---|---|
platform | tiktok, instagram or youtube | all |
handle, name, profile_url | Username, display name, direct profile link | all |
user_id, avatar_url | Platform user/channel id and profile picture | all |
bio | Bio text (TikTok signature, Instagram biography, YouTube About text) | all |
category | The platform's own business category | TikTok, Instagram |
country | Channel country | YouTube |
account_created_at | Account creation / channel join date | TikTok, YouTube |
followers | Followers or subscribers — the column every follower filter uses | all |
followers_estimated | true when the platform rounds the number (YouTube always does) | all |
following, posts_count | Following count; posts on Instagram, videos on TikTok/YouTube | see note |
total_likes | Lifetime likes | TikTok |
total_views | Lifetime channel views (exact) | YouTube |
avg_views_per_video | Lifetime average views per video: total_views / posts_count, both exact. Derived, so it is appended after the 48 builder columns and never shifts your existing header mapping | YouTube |
avg_likes, avg_comments, engagement_rate_pct, posts_per_week, posts_sampled, last_post_at | Engagement over the ~12 recent posts, with the sample size | |
verified, is_private, is_business, is_shop_seller | Account-type flags; is_shop_seller means a TikTok Shop seller | see note |
email, email_source, extra_emails, email_status, has_email | Best address, whether it came from bio or website, extras, and the verification grade of the best address: deliverable / risky / undeliverable / unknown when an email exists, missing when none does (see How emails are verified). has_email is presence only | all |
website, domain, has_website | The first non-social link the creator published, and its bare domain | all |
other_links | Every other published link (Patreon, Reddit, a second site) | all |
instagram_url, tiktok_url, youtube_url, facebook_url, twitter_url, linkedin_url | A complete social card, merged from the profile's own links, the crawled website, and the link-in-bio page behind it | all |
lead_score, lead_grade, lead_tier | 0–100 score, A–F grade, hot/warm/cold | all |
also_on_platforms | Every other platform this creator was found on: the platforms their own published/crawled links point at (the six social columns), plus any rows in this run that resolve to the same email or domain | all |
discovered_via | input, youtube_search, youtube_link or instagram_related | all |
icebreaker | The AI cold-opener, when writeOpeners is on | all |
scraped_at | Timestamp of the scrape | all |
matched_keyword | The searchKeywords entry (or entries, comma-joined) whose search returned this channel; null on rows you supplied by handle and on TikTok/Instagram rows. Appended derived column | YouTube |
keyword_in_bio | true when one of your search keywords appears in the row's bio text, false when none does, null when the run searched no keyword. Appended derived column, last in the CSV | all |
following is TikTok + Instagram. posts_count is all three (videos on TikTok/YouTube, posts on Instagram). is_private and is_business are TikTok + Instagram; is_shop_seller is TikTok only.
How to read the output
The Output tab opens on Overview; the other views are one click away in the same dropdown. Every view is a column selection over the same rows — nothing is hidden from the export.
- Overview — the first look: avatar, Name, Handle, Platform, Followers, Engagement (Instagram only), Email, Email status, Lead score, Grade, Matched keyword (YouTube keyword rows), Profile link. Best-scored first within each delivery wave.
- Email-ready — only what a cold-email campaign needs: Email, Email source (bio or website), Other emails, Email status, Website, Domain, Lead score, the AI opener when
writeOpenersis on, Profile link. - By platform — the per-platform detail and the columns only some platforms can fill (Total views, Avg views per video and Country are YouTube-only; Engagement and Posts sampled are Instagram-only; Total likes and Shop seller are TikTok-only; Category and Business are TikTok + Instagram), plus Found via and Also on.
- Social card — every social profile found for the creator: Instagram, TikTok, YouTube, Facebook, X / Twitter, LinkedIn, Other links.
- All columns — all 51 columns, labeled, in CSV order.
Derived columns (computed by the Actor, appended after the 48 builder columns so an existing header-mapped import never shifts): avg_views_per_video (YouTube: exact lifetime views ÷ videos), matched_keyword (the search keyword that found a YouTube channel), keyword_in_bio (whether one of your keywords appears in the bio). Followers are numbers (YouTube rounds them — see followers_estimated), verified and the other flags are true/false/null, and every date column (account_created_at, last_post_at, scraped_at) is an ISO 8601 string.
Export just one view: the sure way is the API — add ?view=email_ready (or overview, by_platform, socials, all_columns) to the dataset items URL, e.g. https://api.apify.com/v2/datasets/<datasetId>/items?view=email_ready&format=csv; the view parameter applies that view's column selection to the download. In Console, select the view, then Export — Apify documents views as an Output-tab display setting, so if the file you get still has all 51 columns, pick the columns in the export dialog or use the API URL above.
How emails are verified
Four checks on every row's best email, all over DNS and none over SMTP: syntax, a mail-server lookup on the domain (an MX record, or the implicit-MX A record of RFC 5321) over DNS-over-HTTPS (dns.google, falling back to cloudflare-dns.com), a role-address check (info@, hello@, press@ and the like grade risky), and a disposable-domain list of about 8,000 temp-mail providers (grades undeliverable). The result is the email_status column: deliverable, risky, undeliverable, unknown when the lookup itself never completed, and missing when the row has no email. No mailbox is ever probed — that is what keeps verification proxy-free, fast and included in the price — and it is also what it cannot see: an address on a catch-all domain, or a mailbox that was deleted while the domain kept its mail servers, can still grade deliverable. Read deliverable as "the domain accepts mail and the address is not a known-bad shape", and warm a new list with a soft first send. When the MX lookup fails or does not fit the run's budget the row grades unknown rather than undeliverable, so a busy resolver never deletes a good lead; the status message says how many addresses that affected.
What it costs you: nothing extra. Verification never changes the row count or the bill — only onlyVerifiedEmail does, and like every filter it runs before billing. Its budget is bounded on purpose: one lookup per domain per run (cached across discovery waves), at most 2 seconds per domain, at most 600 lookups per run, and never inside the last 30 seconds of the run's time budget. Only the best address is graded; extra_emails are delivered unverified. The lead score does not yet weight email_status — an undeliverable address still earns the email points, so sort or filter on the column when deliverability matters. RUN_SUMMARY.email_verification carries the per-run counts by status and reason and the DNS lookups spent.
How the lead score works
Raw points, identical on every platform:
| Signal | Points |
|---|---|
| Email found | 45 |
| Website / link found | 20 |
| Business or commerce account | 10 |
| TikTok Shop seller | 5 |
| Verified | 5 |
| Follower band: 5k–500k | 15 |
| Follower band: 1k–5k or 500k–2M | 10 |
| Follower band: any other non-zero | 5 |
The three platforms cannot earn the same maximum, because YouTube publishes no business flag and no shop flag and Instagram no shop flag:
| Platform | Maximum earnable |
|---|---|
| TikTok | 100 |
| 95 | |
| YouTube | 85 |
lead_score = round(earned / platform_maximum * 100). Without that normalisation a YouTube row could never exceed 85, and anyone sorting a mixed sheet by score would see every YouTube lead below every comparable TikTok lead for a signal YouTube simply does not publish. Grades: A ≥ 80, B ≥ 65, C ≥ 50, D ≥ 35, else F. Tiers: hot ≥ 75, warm ≥ 50, else cold.
Input
| Field | Type | Description |
|---|---|---|
platforms | array | Which platforms to pull from. Default all three. A platform left out is skipped even if its handle list is filled, and the log names the ignored input. |
searchKeywords | array | YouTube keyword search — the only discovery path. One per line. Channels recurring across a keyword's result pages, or found by several keywords, are fetched first; matched_keyword says which keyword found each row. |
channels | array | Specific YouTube channels: @handles, bare UC… channel ids (routed to /channel/<id>) or channel URLs. A handle that answers HTTP 404 is reported as not found in the status message and never billed. |
profiles | array | TikTok creators: usernames, @handles or profile URLs. |
usernames | array | Instagram creators: usernames, @handles or profile URLs. |
crossPlatformDiscovery | boolean | Also scrape the Instagram/TikTok profiles linked on the YouTube channels found. Default false — it adds billed rows. |
discoverRelated | boolean | Follow Instagram's related-accounts list. Default false. |
maxRelatedPerProfile | integer | Related accounts queued per Instagram profile. Default 10. |
maxCreators | integer | How many creators you want delivered across all platforms. Default 10 (cheap first run), max 300. Creators removed by minFollowers / maxFollowers / onlyVerified / skipPrivate / onlyWithWebsite, and creators an onlyNewCreators watch already delivered, do not use up a slot. With onlyWithEmail, onlyVerifiedEmail, minScore or emailDomains set, the run keeps discovering in extra waves until this many leads are delivered (see Ask for 30 leads, get 30). Handles you supply are reserved first, so discovery can never starve them. |
maxResults | integer | YouTube channels per keyword. Default 20, max 40. |
delaySeconds | integer | Pause between TikTok/Instagram profiles. Default 1. |
minFollowers / maxFollowers | integer | Follower (or subscriber) range. 0 = no filter. |
onlyVerified | boolean | Verified accounts only. Works on all three platforms. |
onlyBusiness | boolean | Business/commerce accounts only. YouTube rows are kept unfiltered — YouTube publishes no such flag — and the log says how many. |
skipPrivate | boolean | Drop private accounts (TikTok, Instagram). |
onlyWithWebsite | boolean | Drop creators with no external link. |
onlyWithEmail | boolean | Drop creators with no email found. Read the fill rates above first. |
onlyVerifiedEmail | boolean | Keep only creators whose best email graded deliverable or risky in the MX check — drops creators with no email and undeliverable addresses (no mail server, disposable domain, bad syntax) before billing. An unknown grade (the lookup could not complete) is kept, so a resolver outage never deletes a good lead; filter the email_status column yourself for the strict set. Judged after the website crawl, so it turns on wave mode like onlyWithEmail. Default false. |
emailDomains | array | Keep only creators whose best email or any extra_emails entry ends with one of these domains, case-insensitive — e.g. ["@gmail.com"] for personal inboxes, ["@yourbrand.com"] for a brand. gmail.com and @Gmail.com both mean @gmail.com. Judged after the website crawl and before billing (like onlyWithEmail), so a matching address found on the linked site counts, and the run keeps discovering in waves until maxCreators matching leads are delivered. Empty = no filtering. |
minScore | integer | Keep only leads at or above this score. |
enrichEmails | boolean | Visit each linked site for emails and socials. Default true — the main email source on all three platforms. |
writeOpeners | boolean | Write an AI cold-opener per lead. Default false. |
llmProvider, llmApiKey, llmModel | string | Your own OpenAI/Anthropic key, used once per run and never stored. |
proxyConfiguration | object | Defaults to Apify Proxy RESIDENTIAL for TikTok and Instagram. YouTube is fetched direct with no proxy, so a YouTube-heavy run spends no proxy traffic at all. |
Saved tasks from the three single-platform Actors keep working. maxProfiles, minSubscribers, maxSubscribers, onlyWithContact, onlyWithLink, onlyCommerce, onlyBusinessAccounts and keywords are all accepted as aliases, and the run log names each one it used. A legacy name wins over the modern one whenever the modern one is absent or still on its default, so pasting an old input never silently drops your cap or your filters and never bills you for the rows they should have removed. alsoEmitPosts, maxPostsPerProfile, hashtags and searchQueries are retired: this Actor delivers exactly one row per creator, and it does not do TikTok hashtag/keyword discovery (see the FAQ).
Example input:
{"platforms": ["tiktok", "instagram", "youtube"],"searchKeywords": ["home barista"],"profiles": ["gymshark"],"usernames": ["gymshark"],"crossPlatformDiscovery": true,"maxResults": 20,"maxCreators": 30,"enrichEmails": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
JSON output sample
A real row from a run on 2026-08-09, re-rendered with the current column set and trimmed to the filled columns (the other columns are present and null; also_on_platforms and avg_views_per_video are computed from the row's own links and exact counts, matched_keyword and keyword_in_bio from the keyword that found it; email_status is the grade the MX check gave grow@sevenmiles.com.au on 2026-08-29 — the domain's mail is on Microsoft 365 and grow is not a role alias):
{"platform": "youtube","handle": "SevenMilesCoffeeRoasters","name": "Seven Miles Coffee Roasters","profile_url": "https://www.youtube.com/@SevenMilesCoffeeRoasters","user_id": "UCZQQDp_XZL1AkZ36ToAU_mw","bio": "Comes from a Good Place, Takes you to a Better one. Roasted in Sydney and brewed in cafés and homes across Australia.","country": "Australia","account_created_at": "2016-12-13","followers": 207000,"followers_estimated": true,"posts_count": 68,"total_views": 21965248,"verified": false,"email": "grow@sevenmiles.com.au","email_source": "website","extra_emails": "hello@sevenmiles.com.au, ramona.taxis@sevenmiles.com.au, training@sevenmiles.com.au","email_status": "deliverable","has_email": true,"website": "https://www.sevenmiles.com.au","domain": "sevenmiles.com.au","instagram_url": "https://www.instagram.com/sevenmilescoffeeroasters/","facebook_url": "https://www.facebook.com/sevenmilescoffeeroasters","linkedin_url": "https://www.linkedin.com/company/sevenmilescoffeeroasters","lead_score": 94,"lead_grade": "A","lead_tier": "hot","also_on_platforms": "facebook,instagram,linkedin","discovered_via": "youtube_search","scraped_at": "2026-08-09T16:42:10.380780+00:00","avg_views_per_video": 323018,"matched_keyword": "home barista","keyword_in_bio": false}
Ask for 30 leads, get 30
maxCreators counts creators delivered, not scraped. The cheap filters run inside the fetch loops, so a creator they remove never takes a slot. onlyWithEmail, onlyVerifiedEmail, minScore and emailDomains can only be judged after the website crawl, so with any of them set the run works in waves: the first pass fetches maxCreators candidates, enriches and filters them, and if fewer than you asked for survive, a further wave fetches candidates the run has not tried yet (YouTube re-searches every keyword at the 40-channel ceiling and skips channels already fetched; TikTok and Instagram continue with the untried handles and related accounts), enriches only the new rows, and appends the ones that pass. A run of {"searchKeywords": ["vegan meal prep"], "maxCreators": 30, "onlyWithEmail": true} that used to end at ~12 now ends at 30.
Each wave is delivered as soon as it passes the filters (30-day run stats read on 2026-08-29: 2 TIMED-OUT and 2 ABORTED of 51 runs; before this change a run killed before its single final push delivered nothing): its rows are pushed to the dataset, billed, and only then remembered by an onlyNewCreators watch, before the next wave starts. A run that reaches its timeout in wave 3 therefore ends with waves 1 and 2 in the dataset and billed exactly once, instead of zero rows and a TIMED-OUT status. "Best leads first" holds within a wave; a later wave appends below the earlier one. A run the platform restarts mid-way reads its own DELIVERY_STATE record and never pushes or bills a row twice.
Three rails keep the cost of a low email rate bounded: at most 3 extra waves, never more than 4 × maxCreators creators scraped in the whole run, and the run's own time budget. When a wave stops short, the status message says which rail stopped it ("17 short of the 30 requested: every creator the search could find was tried"), and RUN_SUMMARY records the wave count and the creators scraped per wave. You are still billed only for the rows delivered, never for the candidates a wave discarded. Without onlyWithEmail / onlyVerifiedEmail / minScore / emailDomains exactly one pass runs, as before.
When a platform comes back empty
A merged run must never hide a failure behind a short list.
- If one platform is blocked and another delivered rows, the run succeeds and the status message names the blocked platform and how many handles never made it into the dataset.
- If zero rows were delivered and a platform was blocked or throttled, the run succeeds with a status message that names the blocked platform and why rather than handing you an empty spreadsheet that reads as "there was nothing to find" (a red run would misreport an upstream refusal as a crash).
- If the run's time budget runs low mid-platform, fetching stops there and everything already collected is delivered — and only that is billed. The status message and
RUN_SUMMARY.stopped_early_for_timename the platform that was cut short. Every earlier discovery wave was already pushed and billed when it passed the filters, so a run that hits its hard timeout keeps what it delivered before (see Ask for 30 leads, get 30). - If zero rows came from your filters or from handles that do not exist, that is a legitimate empty result: the run succeeds, says exactly which filter removed how many, and charges nothing. A YouTube handle that answers HTTP 404 is counted as not found ("check the handle or paste the /channel/UC… URL"), separately from channels YouTube failed to serve.
- Every run writes a
RUN_SUMMARYrecord to the key-value store with per-platform requested / returned / blocked / not-found counts, the filters that ran, the per-platform email fill, and the number of rows billed.
Use it from an AI agent (MCP)
The Apify MCP server exposes this Actor to Claude, ChatGPT, Cursor or any MCP client as a tool. Point the client at https://mcp.apify.com?tools=flash_scraper/creator-leads-scraper — the tools parameter takes the Actor's full name — and the tool is named after that full name (Apify's docs list apify/rag-web-browser as the tool apify-slash-rag-web-browser, so expect flash_scraper-slash-creator-leads-scraper). The tool's input is this Actor's input, unchanged.
A minimal call that returns rows in well under a minute and costs under $0.05 — 5 rows × $0.002 = $0.01 at the live rate read from the Actor's pricing on 2026-08-29 (the Store Pricing tab is authoritative), and the same input run locally twice on 2026-08-29 delivered 5 rows in 9 and 14 seconds, 2 of them with a deliverable email each time:
{ "platforms": ["youtube"], "searchKeywords": ["home barista"], "maxCreators": 5, "enrichEmails": false }
Every delivered row still carries its verified email_status. Agentic payments let an agent pay for the run without an Apify API token — Apify's docs name three routes: AGI (a prepaid token bought with an x402 or MPP payment), direct x402 through the mcpc client, and Skyfire — at the same per-result price. Outside MCP, trigger runs and pipe results into Make, n8n or Zapier to push new leads into your CRM, or sync the dataset to Google Sheets so your team works from a live list.
New-creator alerts (run it on a schedule)
Set onlyNewCreators: true and this Actor becomes a monitor instead of a one-off pull.
- The first run of a search is the baseline: it delivers everything it finds, and says so.
- Every later run on the same search delivers - and bills - only creators that appeared since. A quiet week returns zero rows and charges nothing.
- Memory is per combination of platforms, search terms / handles and follower bounds (
minFollowers/maxFollowers), kept in a named key-value store in your own account. Identity is(platform, handle)- the same pair the run already dedupes on. A creator that keeps showing up has its stamp refreshed on every run, so the 90-day prune only forgets creators that actually disappeared - long-lived creators are never re-billed.
Useful for watching a niche: keep a weekly YouTube keyword watch running and you get only the channels that have appeared in it since last week, already enriched with emails and socials.
Alerts: get a Slack / Discord / webhook message when new rows land
Set webhookUrl and every run that delivers at least one creator POSTs a digest there. A Slack incoming webhook (hooks.slack.com/...) gets a text message; a Discord webhook gets a message; any other URL (n8n / Make / Zapier catch hook, your own endpoint) gets JSON: {actor, delivered, run_url, dataset_url, rows[:20], text}. Quiet runs send nothing. Pair it with onlyNewCreators on a schedule and the Actor is an alert service on its own. Delivery is best-effort: a failed webhook is reported in the run's status message and never fails the run.
{"platforms": ["youtube"],"searchKeywords": ["indie game devlog"],"onlyNewCreators": true,"webhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX"}
Every run comes with a report
Every run that delivers at least one creator also writes a REPORT record: a single self-contained HTML page with the headline numbers (creators, % with email, average lead score, platforms), three bar charts (creators per platform, email fill by platform, lead-grade split) and the top 100 rows, plus the same "missing from this dataset" notes the status message carries. Find it in the run's Output tab → REPORT (key-value store), or follow the Report: link in the run's status message. It has no scripts, external assets or tracking, so it is safe to forward, attach to an email or screenshot for a client. The dataset stays the source of truth: the report is a view of the delivered rows, never a substitute for them, and a run that delivers zero rows writes no report.
How much does it cost?
You are charged per creator lead delivered after filtering. At the live rate (measured 2026-08-29) that is $0.002 per lead — $2 per 1,000 creator leads, so $5 buys 2,500 leads — plus $0.002 per AI cold-opener, an event that only exists 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. The Store Pricing tab is authoritative if the rate changes. 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. Keep costs down by capping maxCreators, leaving crossPlatformDiscovery off, and filtering before you buy.
What this Actor does not do
Every one of these is a platform limit, measured and documented above — not a missing feature toggle.
- No TikTok or Instagram keyword/hashtag search. This Actor does not do it — logged-out HTTP exposes no
/tag/data on TikTok and Instagram's search endpoints answer 302/401 (probed 2026-08-09); browser-based scrapers exist but are slower and pricier. You supply the handles; YouTube keyword search is the discovery path, optionally hopping to the Instagram/TikTok profiles those channels link to. - 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 has no per-video stats. Instagram rows carry real engagement metrics from ~12 recent posts; YouTube rows carry lifetime
avg_views_per_videoinstead. - No guaranteed email per row. Emails exist only where the creator published one (bio or linked site); see the per-platform fill rates above.
- No audience demographics, follower lists, post scraping or DM sending. One row per creator profile is the entire product.
Other Flash Scrape scrapers
- TikTok Creator Leads Scraper — TikTok only
- Instagram Profile Scraper — Instagram profiles, posts and related-account discovery
- YouTube Leads Scraper — YouTube only
- Google Maps Leads Scraper — Google Maps business leads
- Telegram Channel Scraper — tracking public Telegram channels instead of creator profiles? Same publisher: message text, dates, views and links, no API key or login
- Multi Job Board Scraper — jobs across many boards in one run
- Smart Scraper by Example — no-code web scraper
FAQ
Can I find a TikTok or Instagram creator's email by username?
Yes — that is exactly what the profiles (TikTok) and usernames (Instagram) inputs do: fetch each handle's public profile, then visit the site it links to for a contact address. It finds the email when the creator published one; in verification runs 3 of 9 TikTok and 1 of 5 Instagram creators ended up with an address (see the fill rates above). Set onlyWithEmail: true to pay only for the contactable ones.
How do I find micro influencers with emails?
Use a YouTube keyword for your niche with minFollowers/maxFollowers as the band (e.g. 5,000–50,000) and onlyWithEmail: true — the third quick recipe above is a paste-ready version. Turn on crossPlatformDiscovery to add the Instagram and TikTok profiles those channels link to.
Can I search TikTok or Instagram by keyword or hashtag?
Not with this Actor — logged-out HTTP exposes no /tag/ data on TikTok, and Instagram's search endpoints answer 302/401; browser-based scrapers exist but are slower and pricier, and this Actor stays keyless and HTTP-only. YouTube keyword search is the discovery path — and with crossPlatformDiscovery on, the Instagram and TikTok profiles those channels link to become leads too.
Will every creator have an email?
No. See the per-platform fill rates above. Email is on a minority of rows and mostly comes from the linked website, not the bio. onlyWithEmail will remove most rows on most lists — which is the point if you only want contactable leads, but do not expect a full sheet.
What does email_status mean, and is a deliverable address guaranteed to exist?
It is the MX-check grade of the row's best email: deliverable (the domain runs a mail server and the local-part is a person, not an alias), risky (a role alias such as info@), undeliverable (no mail server, disposable domain or bad syntax), unknown (the lookup did not complete) or missing (no email). No mailbox is probed, so a catch-all domain or a deleted mailbox on a live domain can still grade deliverable — see How emails are verified. onlyVerifiedEmail: true keeps the deliverable / risky (and unknown) rows and drops the rest before billing.
Why is engagement_rate_pct empty on my TikTok and YouTube rows?
Because neither platform publishes the data it needs. TikTok's profile payload carries an empty video list (28 of 28 profiles probed) and no play counts; YouTube's About page has no per-video stats. The column is null rather than fabricated, and posts_sampled tells you the sample size behind the Instagram numbers. YouTube rows carry avg_views_per_video instead — the channel's lifetime average computed from its exact total-views and video counts. It is an honest size signal, not a recent-engagement rate: a channel that peaked years ago can carry a high lifetime average.
Does it get the email behind YouTube's "View email address" button?
No. That button requires a Google login (a signed-in account), a reCAPTCHA, and a small daily reveal quota — none of which a keyless, logged-out scraper can or should do. This Actor reads the About text, the channel's published links and the linked site instead; in the 2026-08-09 samples that gave 4-6 of 8-9 channels an email after enrichment. enrichEmails is the option that does the website part.
Why is a YouTube follower count rounded?
YouTube itself rounds subscriber counts to three significant figures. Those rows carry followers_estimated: true. Total views and video counts are exact, and TikTok and Instagram follower counts are exact.
Do I need a proxy?
For TikTok and Instagram, yes in practice — both refuse datacenter IPs, so the default is Apify Proxy RESIDENTIAL with a fresh proxy session on every retry. YouTube needs none and is fetched direct, with no proxy at all (measured: 665s proxied vs 16-21s un-proxied for the same channels and the same rows), so no proxy setting changes a YouTube result unless you supply proxyUrls yourself.
Do I need an API key? No. Profile scraping and email finding work without any key. You only supply your own OpenAI or Anthropic key if you turn on AI cold-openers.
Is the same creator billed twice if they are on two platforms?
Yes — as two rows, because the follower counts, bios and often the emails differ per platform, and collapsing them would destroy data you paid for. The two rows are cross-linked with also_on_platforms so you can group them in one spreadsheet step.
Is it legal to scrape this data? This Actor only collects public profile data that anyone can see without logging in. Use it for legitimate outreach and follow each platform's terms and anti-spam law (CAN-SPAM, GDPR) in how you message the leads you collect.
Can I export to CSV or Google Sheets? Yes. Every run exports to CSV, JSON or Excel from the Output tab, and the dataset can sync to Google Sheets or flow through Make, n8n or Zapier.
Is there a free way to scrape creator emails from TikTok, Instagram or YouTube?
Effectively yes, for small lists: at $0.002 per lead, a free Apify account's $5 monthly platform credit covers up to 2,500 creator leads, less the run's own compute usage. No API key or login is needed on any of the three platforms.
How much does it cost to scrape 1,000 creator leads?
$2 — the rate is $0.002 per creator lead delivered after filtering (the Store Pricing tab is authoritative). Rows removed by your filters, blocked or nonexistent handles cost nothing, and a run that delivers zero rows charges nothing.
Does it scrape phone numbers?
No. None of the three platforms publishes a phone number, so no phone column exists anywhere in the output.
Can it alert me when new creators appear in a niche?
Yes. Set onlyNewCreators: true on a scheduled run: the first run is the baseline, and every later run delivers — and bills — only creators that appeared since. Add webhookUrl to get a digest in Slack, Discord or any webhook, and a quiet week returns zero rows and charges nothing.
Can AI agents like ChatGPT or Claude run this scraper?
Yes. The Apify MCP server exposes it to Claude, ChatGPT, Cursor or any MCP client at https://mcp.apify.com?tools=flash_scraper/creator-leads-scraper, and agentic payments (AGI, x402, Skyfire) let an agent pay per result without an Apify API token.
How many creator leads can one run deliver?
Up to 300 (maxCreators; default 10). With email or score filters set, the run keeps discovering in extra waves — at most 3 — until that many leads are delivered, and handles you supply are reserved first so discovery can never starve them.
Related Flash Scrape actors
- Multi Job Board Scraper — LinkedIn, Indeed, Glassdoor + 9 more boards, deduplicated, with only-new job alerts
- Local Business Leads Scraper — any category, any city, verified emails, lead scores
- Remote Jobs Aggregator — 10 keyless remote boards in one deduplicated feed
- All Flash Scrape actors — same house rules everywhere: pay per delivered row, honest status messages, only-new monitoring, webhook alerts, and a run report on every run.