<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Charbel Daccache</title>
    <description>The latest articles on DEV Community by Charbel Daccache (@charbeld).</description>
    <link>https://dev.to/charbeld</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4205433%2Fac0cdb94-7402-4d9f-8afe-e2a9f37bcab5.jpg</url>
      <title>DEV Community: Charbel Daccache</title>
      <link>https://dev.to/charbeld</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/charbeld"/>
    <language>en</language>
    <item>
      <title>How to Get a Transcript of a TikTok, Instagram Reel or YouTube Short (with Python)</title>
      <dc:creator>Charbel Daccache</dc:creator>
      <pubDate>Tue, 27 Oct 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/charbeld/how-to-get-a-transcript-of-a-tiktok-instagram-reel-or-youtube-short-with-python-3oc5</link>
      <guid>https://dev.to/charbeld/how-to-get-a-transcript-of-a-tiktok-instagram-reel-or-youtube-short-with-python-3oc5</guid>
      <description>&lt;p&gt;&lt;strong&gt;To get a transcript of a TikTok, Instagram Reel, YouTube Short or X video, read the platform's own subtitles when they exist, and transcribe the audio with speech-to-text when they don't.&lt;/strong&gt; This guide shows how to do both automatically with one API call, for a list of links or a creator's latest videos, and get back clean text with timestamps.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is part 2 of "How my fun projects turned into APIs". Each post takes one side project, explains how it works, and ends with something you can call from your own code. &lt;a href="https://dev.to/charbeld/how-to-find-tiktok-influencer-emails-by-niche-with-python-4729"&gt;Part 1&lt;/a&gt; covered finding TikTok creator emails.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Why short video transcripts are hard to get&lt;/li&gt;
&lt;li&gt;How the video transcript scraper works&lt;/li&gt;
&lt;li&gt;How to get a video transcript in 4 steps&lt;/li&gt;
&lt;li&gt;How to get TikTok and Instagram transcripts with Python&lt;/li&gt;
&lt;li&gt;How to get video transcripts with JavaScript&lt;/li&gt;
&lt;li&gt;What data you get for each video&lt;/li&gt;
&lt;li&gt;How much it costs&lt;/li&gt;
&lt;li&gt;FAQ&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why short video transcripts are hard to get
&lt;/h2&gt;

&lt;p&gt;For long YouTube videos, transcripts are easy: there's a button. For short-form video, every platform is different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TikTok&lt;/strong&gt; has captions on some videos and none on others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YouTube Shorts&lt;/strong&gt; usually have auto-captions, but there's no easy way to pull them in bulk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instagram Reels&lt;/strong&gt; publish no subtitles at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;X (Twitter) videos&lt;/strong&gt; publish none either.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So you end up with four tools, four formats, and a lot of copy-paste.&lt;/p&gt;

&lt;h3&gt;
  
  
  The project that started it
&lt;/h3&gt;

&lt;p&gt;After the pet site from part 1, my next weekend project was a small data study: do TikTok recipes actually match the classic versions of the same dishes on big recipe sites? I wanted to compare ingredients and steps across a few hundred cooking videos.&lt;/p&gt;

&lt;p&gt;The captions were useless for that. Half of them said "recipe in the comments" or just listed hashtags. The real recipe was in what the creator &lt;em&gt;said&lt;/em&gt;. So I needed what was spoken in each video, as text, for TikTok, Reels and Shorts at once.&lt;/p&gt;

&lt;p&gt;I started with TikTok's own captions, which were fast and free when they existed. Then I hit the first Instagram Reel and found there were no captions to read. So I added a fallback: download the audio and run it through Whisper speech-to-text. Then I added YouTube, then X, and put everything in the same output format.&lt;/p&gt;

&lt;p&gt;When the study was done, the transcript tool was more useful than the study. So I turned it into a public API.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the video transcript scraper works
&lt;/h2&gt;

&lt;p&gt;The tool is an &lt;a href="https://apify.com/scrape-lads/video-transcript-scraper" rel="noopener noreferrer"&gt;Apify Actor called Video Transcript Scraper&lt;/a&gt;. It reads public videos as a logged-out visitor, so it needs &lt;strong&gt;no account, no cookies and no API key&lt;/strong&gt; for any platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Platform subtitles first
&lt;/h3&gt;

&lt;p&gt;TikTok captions and YouTube captions are the cheapest and most accurate source, because the creator or the platform already did the work. When they exist, the scraper uses them. Each row says whether the subtitles were written by the creator (&lt;code&gt;creator&lt;/code&gt;) or generated by the platform (&lt;code&gt;auto&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Whisper speech-to-text as the fallback
&lt;/h3&gt;

&lt;p&gt;When a video has no subtitles (every Instagram Reel, X videos, and TikToks without captions), the scraper transcribes the audio with &lt;strong&gt;Whisper large-v3 turbo&lt;/strong&gt;. It handles 90+ languages and is very accurate on clear speech. Every row says which method was used in &lt;code&gt;transcriptSource&lt;/code&gt;, so you always know where the text came from.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Videos by link or by creator
&lt;/h3&gt;

&lt;p&gt;You can paste video links, or paste a creator's profile and take their latest videos. That makes it easy to transcribe a creator's whole recent output in one run.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get a video transcript in 4 steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create a free &lt;a href="https://apify.com" rel="noopener noreferrer"&gt;Apify account&lt;/a&gt;. The free plan's monthly credit covers hundreds of transcripts.&lt;/li&gt;
&lt;li&gt;Open &lt;a href="https://apify.com/scrape-lads/video-transcript-scraper" rel="noopener noreferrer"&gt;Video Transcript Scraper&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Paste this input (switch the input editor to JSON):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"urls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://www.tiktok.com/@garyvee/video/7696603359335288078"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://www.instagram.com/reel/Dd-VQPnRz0t/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://www.youtube.com/shorts/aNI2jv7lBPQ"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"speechToText"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fallback"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"includeSegments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Start&lt;/strong&gt;. A few videos take seconds. Export the results as JSON, CSV or Excel, or read them through the API.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To transcribe a creator's latest videos instead, use &lt;code&gt;profiles&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"profiles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://www.tiktok.com/@garyvee"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.youtube.com/@MrBeast/shorts"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxVideosPerProfile"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"speechToText"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fallback"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to get TikTok and Instagram transcripts with Python
&lt;/h2&gt;

&lt;p&gt;Install the client with &lt;code&gt;pip install apify-client&lt;/code&gt;, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scrape-lads/video-transcript-scraper&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;urls&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.tiktok.com/@garyvee/video/7696603359335288078&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.instagram.com/reel/Dd-VQPnRz0t/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;speechToText&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fallback&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;platform&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transcriptSource&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;transcript&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][:&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your API token is in Apify Console under &lt;strong&gt;Settings → API &amp;amp; Integrations&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get video transcripts with JavaScript
&lt;/h2&gt;

&lt;p&gt;Install the client with &lt;code&gt;npm install apify-client&lt;/code&gt;, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApifyClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apify-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scrape-lads/video-transcript-scraper&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;profiles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://www.tiktok.com/@garyvee&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;maxVideosPerProfile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;speechToText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fallback&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wordCount&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;transcript&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What data you get for each video
&lt;/h2&gt;

&lt;p&gt;One row per video, in the same format for all four platforms. A real result for an Instagram Reel:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.instagram.com/reel/Dd-VQPnRz0t/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"platform"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"instagram"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"feelgoodfoodie"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"durationSec"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"language"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transcript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"If you want an easier way to cut spaghetti squash, microwave it first for three minutes. Then it's so much easier to cut in half..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"segments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"If you want an easier way to cut spaghetti squash,"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"end"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;4.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"microwave it first for three minutes."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"wordCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"transcriptSource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"speech-to-text"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"stats"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"views"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;171362&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"likes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2831&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"comments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;357&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"shares"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;transcript&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The full transcript as one text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;segments&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;{ start, end, text }&lt;/code&gt; with times in seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;transcriptSource&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;subtitles&lt;/code&gt; (platform captions) or &lt;code&gt;speech-to-text&lt;/code&gt; (Whisper)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;subtitleKind&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;creator&lt;/code&gt; or &lt;code&gt;auto&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;language&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Two-letter language of the transcript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;author&lt;/code&gt;, &lt;code&gt;caption&lt;/code&gt;, &lt;code&gt;durationSec&lt;/code&gt;, &lt;code&gt;publishedAt&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Video details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;stats&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Views, likes, comments and shares, when the platform shows them&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;status&lt;/code&gt;, &lt;code&gt;errorCode&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;success&lt;/code&gt;, &lt;code&gt;no_transcript&lt;/code&gt; or &lt;code&gt;failed&lt;/code&gt;, with a reason&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What people use it for
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI and RAG:&lt;/strong&gt; feed creator videos into a knowledge base or a custom GPT.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content research:&lt;/strong&gt; see what top creators actually say in their hooks and calls to action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repurposing:&lt;/strong&gt; turn short videos into blog posts, newsletters and captions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brand monitoring:&lt;/strong&gt; search spoken mentions of products or competitors.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How much it costs
&lt;/h2&gt;

&lt;p&gt;You pay per transcript, with no subscription:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;$2 per 1,000 subtitle transcripts&lt;/strong&gt; (TikTok and YouTube videos with captions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$5 per 1,000 speech-to-text transcripts&lt;/strong&gt; (Reels, X videos, videos without captions), covering the first minute of audio. Longer videos add $0.0025 per extra minute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.005&lt;/strong&gt; per run&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Failed, private, removed and silent videos are free&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: 1,000 TikTok transcripts plus 1,000 Instagram Reels under a minute cost about &lt;strong&gt;$7&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How do I get the transcript of an Instagram Reel?
&lt;/h3&gt;

&lt;p&gt;Instagram doesn't publish subtitles for Reels, so the only way is to transcribe the audio. Paste the Reel link into the scraper and leave speech-to-text on "fallback". It returns the spoken text with timestamps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I get a transcript of a TikTok video?
&lt;/h3&gt;

&lt;p&gt;Yes. If the TikTok has captions, the scraper reads them directly. If it doesn't, it transcribes the audio with Whisper. Either way you get the same output format.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there an official API for TikTok or Instagram transcripts?
&lt;/h3&gt;

&lt;p&gt;No. TikTok, Instagram and X have no public transcript API, and YouTube's Data API only lets video owners download captions. This scraper reads public subtitles where they exist and transcribes the speech where they don't.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which languages are supported?
&lt;/h3&gt;

&lt;p&gt;Whisper handles 90+ languages. Set the &lt;code&gt;language&lt;/code&gt; field (for example &lt;code&gt;es&lt;/code&gt;) to pick a specific subtitle track or help Whisper with a less common language.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which videos can't be transcribed?
&lt;/h3&gt;

&lt;p&gt;Private, deleted and age-restricted videos. Music-only videos come back as &lt;code&gt;no_speech&lt;/code&gt;. None of these are charged.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it legal to scrape video transcripts?
&lt;/h3&gt;

&lt;p&gt;The scraper only reads public videos anyone can watch without logging in. You are responsible for how you use the text: respect copyright and platform terms, and don't republish creators' content without permission.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Video Transcript Scraper:&lt;/strong&gt; &lt;a href="https://apify.com/scrape-lads/video-transcript-scraper" rel="noopener noreferrer"&gt;apify.com/scrape-lads/video-transcript-scraper&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All my scrapers and APIs:&lt;/strong&gt; &lt;a href="https://scrapelads.com" rel="noopener noreferrer"&gt;scrapelads.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Next in the series:&lt;/strong&gt; the transcripts gave me the words, but I still had to turn them into actual recipes. Part 3 is about the tool that does that: video in, structured recipe JSON out.&lt;/p&gt;

</description>
      <category>python</category>
      <category>api</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Find TikTok Influencer Emails by Niche (with Python)</title>
      <dc:creator>Charbel Daccache</dc:creator>
      <pubDate>Sat, 24 Oct 2026 20:32:02 +0000</pubDate>
      <link>https://dev.to/charbeld/how-to-find-tiktok-influencer-emails-by-niche-with-python-4729</link>
      <guid>https://dev.to/charbeld/how-to-find-tiktok-influencer-emails-by-niche-with-python-4729</guid>
      <description>&lt;p&gt;&lt;strong&gt;To find TikTok influencer emails by niche, search a keyword such as "fitness coach", collect the creators behind the videos, then read each creator's bio and link-in-bio page for a contact email.&lt;/strong&gt; This guide shows how to do that automatically with a TikTok email finder API, and returns one row per creator with their email, Instagram, YouTube and follower count.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is part 1 of "How my fun projects turned into APIs". Each post takes one side project, explains how it works, and ends with something you can call from your own code.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Why finding TikTok creator emails is slow&lt;/li&gt;
&lt;li&gt;How the TikTok email finder works&lt;/li&gt;
&lt;li&gt;How to find TikTok influencer emails in 4 steps&lt;/li&gt;
&lt;li&gt;How to get TikTok creator emails with Python&lt;/li&gt;
&lt;li&gt;How to get TikTok creator emails with JavaScript&lt;/li&gt;
&lt;li&gt;What data you get for each TikTok creator&lt;/li&gt;
&lt;li&gt;How many TikTok creators have a public email&lt;/li&gt;
&lt;li&gt;How much it costs&lt;/li&gt;
&lt;li&gt;FAQ&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why finding TikTok creator emails is slow
&lt;/h2&gt;

&lt;p&gt;TikTok has millions of creators, and very few of them are easy to contact. Whether you run influencer outreach, source UGC creators, or look for sponsorship partners, the manual process is the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search a niche and scroll.&lt;/li&gt;
&lt;li&gt;Open a profile and read the bio.&lt;/li&gt;
&lt;li&gt;Find a Linktree instead of an email, and open that too.&lt;/li&gt;
&lt;li&gt;Copy the email into a spreadsheet, then repeat a few hundred times.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The project that started it
&lt;/h3&gt;

&lt;p&gt;A while ago I was building a small pet gear review site as a weekend project: honest roundups of chicken coops, dog crates and cat trees, paid for by affiliate links. The content was fine. The problem was that nobody knew it existed.&lt;/p&gt;

&lt;p&gt;The obvious fix was TikTok. Pet creators with 5,000 to 50,000 followers have engaged audiences, and many of them happily review products in exchange for a free sample. So I opened a spreadsheet and started looking for pet creators to contact.&lt;/p&gt;

&lt;p&gt;It went badly. After a whole evening of searching "backyard chickens" and "dog gear", I had a handful of emails. Most creators had no email in the bio, just a Linktree, and half of those Linktrees led to another page before I found a contact address. I kept thinking that every step I was doing by hand was the same few clicks, and a script could do them all.&lt;/p&gt;

&lt;p&gt;So I wrote one. The first version took a list of TikTok usernames and pulled the email from each bio. Then I added keyword search so I didn't need the usernames. Then I added link-in-bio reading, because that was where most of the emails actually were. By the time it worked well for pet creators, I realised it worked for any niche: fitness coaches, skincare, cooking, finance.&lt;/p&gt;

&lt;p&gt;That's when the side project turned into a public API that anyone can call: type a niche, get back a list of creators you can actually email.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the TikTok email finder works
&lt;/h2&gt;

&lt;p&gt;The tool is an &lt;a href="https://apify.com/scrape-lads/tiktok-profile-scraper" rel="noopener noreferrer"&gt;Apify Actor called TikTok Profile Scraper&lt;/a&gt;. It reads public TikTok pages as a logged-out visitor, so it needs &lt;strong&gt;no TikTok account, no cookies and no API key&lt;/strong&gt;. It solves three problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Finding creators by keyword, not just by username
&lt;/h3&gt;

&lt;p&gt;TikTok has public topic pages for keywords. Each one lists roughly 60 to 120 recent videos, and every video has a creator behind it. The scraper reads the topic page, collects those creators, and skips private accounts, creators outside your follower range, and anyone it already checked.&lt;/p&gt;

&lt;p&gt;A single broad word such as "skincare" often has no topic page of its own. In that case the scraper falls back to related topics such as "best skincare", "skincare tips" and "skincare review". &lt;strong&gt;Two- or three-word niche phrases work best.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Finding the email behind the link in bio
&lt;/h3&gt;

&lt;p&gt;Many creators keep their business email off the bio and put it on a Linktree, hoo.be, Komi or personal website instead. After reading the profile, the scraper opens that link page (plus one contact page on the same site) and looks for an email there.&lt;/p&gt;

&lt;p&gt;It also catches disguised emails such as &lt;code&gt;name [at] gmail [dot] com&lt;/code&gt;, ranks outreach addresses like &lt;code&gt;collab@&lt;/code&gt; or &lt;code&gt;business@&lt;/code&gt; ahead of &lt;code&gt;support@&lt;/code&gt;, and drops &lt;code&gt;noreply@&lt;/code&gt; addresses. It never guesses or generates an address.&lt;/p&gt;

&lt;p&gt;That second step matters. In an October 2026 test run for "fitness coach", &lt;strong&gt;13 of the 30 leads came from link-in-bio pages&lt;/strong&gt;, not from the bio.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Paying only for creators you can contact
&lt;/h3&gt;

&lt;p&gt;Most creators have no public email, so paying for every profile checked wastes money. &lt;strong&gt;Leads-only mode&lt;/strong&gt;, on by default for keyword searches, saves and charges only the creators with a contact email. Creators without one are checked for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to find TikTok influencer emails in 4 steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create a free &lt;a href="https://apify.com" rel="noopener noreferrer"&gt;Apify account&lt;/a&gt;. The free plan includes $5 of monthly credit.&lt;/li&gt;
&lt;li&gt;Open &lt;a href="https://apify.com/scrape-lads/tiktok-profile-scraper" rel="noopener noreferrer"&gt;TikTok Profile Scraper&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Paste this input (switch the input editor to JSON):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"searchKeywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"skincare routine"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"skincare influencer"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyWithEmail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"minFollowers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxFollowers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxResults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Start&lt;/strong&gt;, then export the results as CSV, Excel or JSON, or send them to Google Sheets or your CRM through an Apify integration.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Already have a list of TikTok usernames? Use &lt;code&gt;handles&lt;/code&gt; instead of &lt;code&gt;searchKeywords&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"handles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"@noahbeck"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@drewafualo"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyWithEmail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxResults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to get TikTok creator emails with Python
&lt;/h2&gt;

&lt;p&gt;Install the client with &lt;code&gt;pip install apify-client&lt;/code&gt;, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scrape-lads/tiktok-profile-scraper&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;searchKeywords&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fitness coach&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;personal trainer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;onlyWithEmail&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;minFollowers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxResults&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;creator&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;creator&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;username&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;creator&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;followers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;creator&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;contactEmail&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your API token is in Apify Console under &lt;strong&gt;Settings → API &amp;amp; Integrations&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get TikTok creator emails with JavaScript
&lt;/h2&gt;

&lt;p&gt;Install the client with &lt;code&gt;npm install apify-client&lt;/code&gt;, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApifyClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apify-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_APIFY_TOKEN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;scrape-lads/tiktok-profile-scraper&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;searchKeywords&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fitness coach&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;personal trainer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;onlyWithEmail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;minFollowers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;maxResults&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;followers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;contactEmail&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To build a growing lead list, save the input as a task, schedule it weekly, and filter out usernames you already exported. Each run then adds only fresh creators.&lt;/p&gt;

&lt;h2&gt;
  
  
  What data you get for each TikTok creator
&lt;/h2&gt;

&lt;p&gt;Every row has the same 39 fields. Here is a shortened real result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"username"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"noahbeck"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"displayName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"noah beck"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"followers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32677842&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"likes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2543936778&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"postCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3421&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"verified"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"bioLink"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://linktr.ee/noahbeck"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contactEmail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"noahbeck@underscoretalent.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contactEmailSource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bioLink"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"instagramUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.instagram.com/noahbeck"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"youtubeUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.youtube.com/channel/UClPsjnF7D_Ar1ZSrEsnTxJA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"twitterUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://x.com/noahbeck"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tiktokShopSeller"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note &lt;code&gt;contactEmailSource: "bioLink"&lt;/code&gt;: this creator's bio has no email, and the scraper found it on their Linktree.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Group&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Contact&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;contactEmail&lt;/code&gt;, &lt;code&gt;contactEmailSource&lt;/code&gt;, &lt;code&gt;bioEmails&lt;/code&gt;, &lt;code&gt;linkEmails&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Social profiles&lt;/td&gt;
&lt;td&gt;Instagram, YouTube, X, Facebook, LinkedIn, Twitch, Snapchat, WhatsApp, Telegram&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Audience&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;followers&lt;/code&gt;, &lt;code&gt;following&lt;/code&gt;, &lt;code&gt;likes&lt;/code&gt;, &lt;code&gt;postCount&lt;/code&gt;, &lt;code&gt;avgLikesPerPost&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Profile&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;bio&lt;/code&gt;, &lt;code&gt;verified&lt;/code&gt;, &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;businessCategory&lt;/code&gt;, &lt;code&gt;tiktokShopSeller&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How many TikTok creators have a public email
&lt;/h2&gt;

&lt;p&gt;In five keyword runs on October 1, 2026, the scraper checked 538 creators. &lt;strong&gt;180 of them (33%) had a public contact email.&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Niche&lt;/th&gt;
&lt;th&gt;Creators with an email&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"fitness coach" and "personal trainer"&lt;/td&gt;
&lt;td&gt;24%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"vegan recipes" plus "home workout"&lt;/td&gt;
&lt;td&gt;39%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"skincare" creators with 1,000+ followers&lt;/td&gt;
&lt;td&gt;60%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Creators who want brand deals publish an email far more often than the average account, so &lt;strong&gt;setting a minimum follower count usually raises the hit rate.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How much it costs
&lt;/h2&gt;

&lt;p&gt;You pay per result. Runtime and proxies are included.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$1.00 per 1,000 creators saved&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;+$3.00 per 1,000&lt;/strong&gt; emails found on a link-in-bio page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.005&lt;/strong&gt; per run&lt;/li&gt;
&lt;li&gt;In leads-only mode, creators without an email are free&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In testing, &lt;strong&gt;1,000 leads with an email cost about $2.30&lt;/strong&gt;. The Apify free plan's $5 monthly credit covers about 2,000 leads, so you can test it without paying anything.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How do I find TikTok influencers in my niche?
&lt;/h3&gt;

&lt;p&gt;Enter your niche as a keyword, for example "fitness coach" or "vegan recipes". The scraper collects the creators TikTok shows for that topic and related topics. Add a follower range to target nano, micro or macro influencers.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I find someone's email on TikTok?
&lt;/h3&gt;

&lt;p&gt;Check their bio first, then the link under the bio. Most creators who accept brand deals put a business email in one of the two. To do this for many creators at once, paste their usernames into the scraper.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can it get the email of any TikTok account?
&lt;/h3&gt;

&lt;p&gt;No. It returns only emails the creator published on TikTok or on the page their bio links to. If a creator has no public email, there is no email to return.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is there an official TikTok API for influencer search?
&lt;/h3&gt;

&lt;p&gt;TikTok's Research API requires an approved research application, and the Creator Marketplace API is limited to approved partners. This scraper reads public pages with no approval or keys.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I filter TikTok creators by country?
&lt;/h3&gt;

&lt;p&gt;TikTok does not publish an account's country, so no tool can filter on it reliably. Use the account language filter (for example &lt;code&gt;en&lt;/code&gt; or &lt;code&gt;es&lt;/code&gt;) and keywords in the local language instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is scraping TikTok legal?
&lt;/h3&gt;

&lt;p&gt;Collecting public data is generally legal in most jurisdictions, and this scraper only reads pages any logged-out visitor can see. You are responsible for how you use the data: follow privacy laws such as GDPR and CAN-SPAM, and use contact emails for relevant, honest outreach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TikTok Profile Scraper:&lt;/strong&gt; &lt;a href="https://apify.com/scrape-lads/tiktok-profile-scraper" rel="noopener noreferrer"&gt;apify.com/scrape-lads/tiktok-profile-scraper&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;All my scrapers and APIs:&lt;/strong&gt; &lt;a href="https://scrapelads.com" rel="noopener noreferrer"&gt;scrapelads.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's part 1 of the series. If there's a TikTok field you wish this returned, tell me in the comments. I read all of them.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>tiktok</category>
      <category>api</category>
      <category>python</category>
    </item>
  </channel>
</rss>
