# Bulk TikTok Transcripts Scraper | Captions, Subtitles, SRT (`aurelix/tiktok-transcript-scraper`) Actor

Extract bulk TikTok transcripts from captions at $0.50 per 1,000 videos ($0.20 on paid plans), $0.0007 start fee. Video links, IDs or @profiles' latest videos; text, timestamped segments, SRT, views, likes. Linked videos without captions are free.

- **URL**: https://apify.com/aurelix/tiktok-transcript-scraper.md
- **Developed by:** [Aurelix](https://apify.com/aurelix) (community)
- **Categories:** Videos, Social media, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 1,000 transcript results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What is Bulk TikTok Transcripts Scraper?

**Get TikTok transcripts from the captions of any public video or @profile (text, timestamps, SRT) for $0.50 per 1,000 videos ($0.20 on paid plans), no login. Captionless links are free.**

For AI builders, marketers and researchers. One video comes back in seconds; your preferred caption language with fallback, an auto-generated flag on every row, and a status row for every video without a transcript.

[![Bulk TikTok Transcripts Scraper: example output from a real run](https://api.apify.com/v2/key-value-stores/twkCCtTWzsi8fVbx5/records/tiktok-transcript-scraper-card-v2.png)](https://apify.com/aurelix/tiktok-transcript-scraper)

[![Bulk TikTok Transcripts Scraper: 75-second demo video](https://api.apify.com/v2/key-value-stores/twkCCtTWzsi8fVbx5/records/tiktok-transcript-scraper-demo-thumb-v1.png)](https://api.apify.com/v2/key-value-stores/twkCCtTWzsi8fVbx5/records/tiktok-transcript-scraper-demo-v1.mp4)

**[▶ Watch the 75-second demo](https://api.apify.com/v2/key-value-stores/twkCCtTWzsi8fVbx5/records/tiktok-transcript-scraper-demo-v1.mp4)**

| | |
|---|---|
| **Input** | TikTok video links or IDs, short links, @usernames (latest videos) |
| **Output** | Transcript text, timestamped segments, optional SRT, 31 fields incl. a status; JSON, CSV, Excel, API |
| **Languages** | Your preference order, creator captions before auto-generated, automatic fallback |
| **Automate** | Only new videos since last run, Slack/webhook digest, schedules, MCP for AI agents |
| **Price** | $0.50 per 1,000 videos ($0.20 per 1,000 videos on paid Apify plans) |
| **Free to try** | Runs on Apify's free plan: the $5 monthly credit covers about 9,900 videos |
| **Login needed** | No |

### Daily monitor: only what's new, every morning

Set it once, get only the new videos every morning. With **Only new videos since last run** on, the first run returns everything that matches; each later run skips videos that earlier runs already returned, so you pay only for new ones.

```json
{
  "profiles": [
    "@bbcnews",
    "@washingtonpost"
  ],
  "maxVideosPerProfile": 10,
  "incremental": true,
  "stateKey": "news-creators-daily"
}
```

1. Paste this input into the **Input** tab (JSON view) and click **Save as a new task**; it appears under **Saved tasks**.
2. Open the task from **Saved tasks** and click **Schedule**.
3. Choose **Daily**, pick the hour, and save.

**Cost example:** 2 profiles, about 8 new videos with captions and 2 without a day ≈ $0.17/month on the free plan ($0.0942 on paid plans): one run a day for 30 days, start fee included. The first run returns everything that matches, so it costs more.

Add a Slack incoming-webhook URL in `slackWebhookUrl` (or any URL in `webhookUrl`) to get a short digest of each run's new videos; nothing is sent when a run finds nothing.

### Why Bulk TikTok Transcripts Scraper users pick this one

- **One video in seconds.** Plain HTTP, no browser start; built for AI agents.
- **Cheaper than the leading tools.** $0.20 per 1,000 videos on paid plans, $0.50 on the free plan.
- **Profiles and only-new feeds.** @usernames give their latest videos; daily runs return new ones only.
- **A row for every input.** Missing captions or removed videos say why; linked ones are free.
- **Timestamps and SRT.** Every caption line with start and end, plus SRT on request.

### Get started in 3 steps

1. Paste TikTok video links or IDs, or @usernames for their latest videos, and set how many videos to read per profile.
2. Optionally set your preferred caption languages (e.g. en, es), turn auto-generated captions off, or add an SRT file to each row.
3. Click Start, then download JSON, CSV or Excel, or send the transcripts to your AI pipeline, Google Sheets, Zapier, Make or n8n through the API.

**[▶ Try it with the example input](https://apify.com/aurelix/tiktok-transcript-scraper)**

The form opens with an example input already filled in.

### How much does it cost to scrape TikTok transcripts?

Pay per event: you pay only for what the run returns, plus a small start fee. Bronze, Silver, Gold and higher Apify plans pay less per result.

| Videos | Free plan | Paid plans (Bronze, Silver, Gold) |
|---|---|---|
| 100 | $0.0507 | $0.0207 |
| 1,000 | $0.50 | $0.20 |
| 10,000 | $5.00 | $2.00 |

Totals include the $0.0007 start fee per run, rounded to the cent (amounts under $0.10 to four decimals). Apify's free plan includes $5 of credit a month, enough for about 9,900 videos.

$0.50 per 1,000 videos ($0.20 on paid Apify plans) plus a $0.0007 start fee per run, so a single video costs $0.0009 to $0.0012. Profiles: $0.0003 per profile read (also on days with nothing new) and $0.00012 for each profile video read that has no transcript (music-only clips, photo posts), charged once per video in only-new mode even when a video without captions is re-checked on the next run. Videos you give by link without captions, removed or private videos, duplicates and videos already returned in only-new mode are never charged.

#### Billing events

| Event | Free plan | Paid plans (Bronze, Silver, Gold) |
|---|---|---|
| `transcript-result` | $0.50 per 1,000 videos | $0.20 per 1,000 videos |
| `profile-checked` | $0.0003 per profile read | $0.0003 per profile read |
| `video-checked` | $0.00012 per profile video without a transcript | $0.00012 per profile video without a transcript |
| `apify-actor-start` | $0.0007 per run | $0.0007 per run |

### Benchmarks: how we compare

| Test | Input | Result | Run time | Peak memory |
|---|---|---|---|---|
| Default input | 1 video | 1 transcript | 3 to 4 s | 57 MB |
| Single videos, cold start | 1 video per run, with and without captions | 1 transcript, or 1 status row (not charged) | 2 to 3 s | 56 MB |
| Mixed batch | 13 inputs: watch, mobile, ID and short links, a duplicate, a removed video, videos without captions, Spanish preferred | 8 of 8 videos with captions; 4 status rows, not charged | 10 s | 99 MB |
| Profiles | 5 and 10 profiles, 10 latest videos each | 46 of 46 and 74 of 74 videos with captions; the rest status rows | 70 to 82 s | 148 to 176 MB |
| Memory check | 30 profiles, 12 latest each (261 videos) | 178 transcripts; the rest status rows | 352 s | 80 MB |
| Daily profile feed | 2 profiles, 5 latest, only-new mode, run 4 times | 9 transcripts, then 0 new (nothing charged but the profile reads) | 4 to 26 s | 63 to 91 MB |

Apify cloud runs at the default 256 MB, one run per row, plain HTTP over Apify datacenter proxy; run times include container start.

### What data you get

**Bulk TikTok Transcripts Scraper** turns TikTok videos into clean transcripts from the captions TikTok already shows: give video links (any format, including vm.tiktok.com short links), numeric video IDs or @usernames (their latest videos), and get one row per video with the full transcript as plain text, timestamped caption lines, an optional SRT subtitle file, the caption language and whether it is auto-generated, plus the description, hashtags, @username, upload date, duration and the view, like, comment, share and save counts. Videos it cannot read get a status row saying why; those you give by link are not charged. A single video comes back in a few seconds, so AI agents can call it through Apify's MCP server.

- status (ok, or why there is no transcript: no_captions, unavailable, invalid_input, not_found, no_videos, failed), error and input
- video_id, url, author_username, author_name, author_url, author_verified
- description, hashtags, published_date (UTC date), duration_seconds, view_count, like_count, comment_count, share_count, save_count, music_title, music_author
- language, language_tag, is_auto_generated, language_fallback, available_languages
- transcript_text and word_count; segments: \[{start, end, text}] in seconds; srt (optional)
- source_url, scraped_at

| author_username | published_date | duration_seconds | view_count | language | is_auto_generated | transcript_text |
|---|---|---|---|---|---|---|
| vicky.owens | 2026-05-22 | 77 | 211800 | en | False | So the TikTok algorithm has changed yet again, I thought ... |
| bbcnews | 2026-11-07 | 65 | 30700 | en | True | Polar bear under a tundra buggy. Right now, if a hungry p... |
| hubermanlab | 2025-11-21 | 75 | 579500 | en | True | The best way I know to reduce filler words, especially th... |
| luisitocomunica | 2026-11-07 | 18 | 321400 | es | True | Ay, otra vez no hay gas. Siempre lo mismo con esta compañía. |

One full video record, exactly as a real run returned it (long text and lists shortened here):

```json
{
  "video_id": "7642780318604299542",
  "url": "https://www.tiktok.com/@vicky.owens/video/7642780318604299542",
  "author_username": "vicky.owens",
  "author_name": "Vicky Owens",
  "author_url": "https://www.tiktok.com/@vicky.owens",
  "author_verified": true,
  "description": "How does the TikTok Algorithm work in May 2026? #tiktokupdate #tiktoktips #tiktokgrowthtips #tiktokgrowth #tiktokalgorit... [3 more characters]",
  "hashtags": [
    "tiktokupdate",
    "tiktoktips",
    "tiktokgrowthtips",
    "... [2 more]"
  ],
  "published_date": "2026-05-22",
  "duration_seconds": 77,
  "view_count": 211800,
  "like_count": 12300,
  "comment_count": 1952,
  "share_count": 2706,
  "save_count": 3888,
  "music_title": "original sound",
  "music_author": "Vicky Owens",
  "language": "en",
  "language_tag": "eng-US",
  "is_auto_generated": false,
  "language_fallback": false,
  "available_languages": [
    {
      "language": "en",
      "language_tag": "eng-US",
      "is_auto_generated": false
    }
  ],
  "transcript_text": "So the TikTok algorithm has changed yet again, I thought I would fill you in on exactly what's working on TikTok at the ... [1530 more characters]",
  "word_count": 315,
  "segments": [
    {
      "start": 0,
      "end": 2.86,
      "text": "So the TikTok algorithm has changed yet again,"
    },
    {
      "start": 2.981,
      "end": 6.38,
      "text": "I thought I would fill you in on exactly what's working on TikTok at the minute"
    },
    {
      "start": 6.381,
      "end": 8.06,
      "text": "and how the algorithm is working."
    },
    "... [31 more]"
  ],
  "status": "ok",
  "error": null,
  "input": "https://www.tiktok.com/@vicky.owens/video/7642780318604299542",
  "source_url": "https://www.tiktok.com/@vicky.owens/video/7642780318604299542",
  "scraped_at": "2026-11-07T18:23:40Z"
}
```

### Use cases

- AI developers feeding creators' videos into RAG, summaries or classification
- Marketers and agencies tracking what competitors and creators say, every day
- Researchers and journalists searching what was said in TikTok news and politics clips
- Content teams turning TikToks into blog posts, captions, quotes and subtitles

### Use-case recipes

#### Daily new-video digest in Slack

For marketers and agencies watching a few creators or competitors. Put their @usernames in `profiles`, turn on `incremental`, give it a `stateKey`, paste a Slack webhook URL and schedule the task daily. Each run returns only videos not returned before.

```json
{
  "profiles": [
    "@bbcnews",
    "@washingtonpost"
  ],
  "maxVideosPerProfile": 10,
  "incremental": true,
  "stateKey": "news-creators-daily",
  "slackWebhookUrl": "https://hooks.slack.com/services/T000/B000/XXXX"
}
```

#### Transcribe a list of videos for AI

For AI developers. Paste the links (one per line or comma-separated) and keep `includeSegments` on: each segment has start and end times for citations, and `transcript_text` is ready for a summary or an embedding.

```json
{
  "videos": [
    "https://www.tiktok.com/@vicky.owens/video/7642780318604299542",
    "7705443263733452054"
  ],
  "includeSegments": true
}
```

#### Subtitles for re-editing

For content teams. Turn on `includeSrt` and save each row's `srt` field as a .srt file next to the video.

```json
{
  "videos": [
    "https://www.tiktok.com/@vicky.owens/video/7642780318604299542"
  ],
  "includeSrt": true,
  "includeSegments": false
}
```

### Input

| Field | Type | What it does | Default |
|---|---|---|---|
| `videos` (Videos) | array | TikTok video links or numeric video IDs, e.g. \['https://www.tiktok.com/@vicky.owens/video/7642780318604299542', '7642780318604299542']. | \["https://www.tiktok.com/@vicky.owens/video/7642780318604... |
| `profiles` (Profiles (latest videos)) | array | @usernames or profile links, e.g. \['@garyvee', 'https://www.tiktok.com/@bbcnews']. |  |
| `maxVideosPerProfile` (Max videos per profile) | integer | How many of each profile's latest videos to read, e.g. 5. | 10 |
| `languages` (Preferred languages) | array | Caption languages in order of preference, as codes, e.g. \['en', 'es']. |  |
| `includeAutoGenerated` (Include auto-generated captions) | boolean | Use TikTok's automatic (speech recognition) captions when the creator added none; most TikTok captions are automatic. | true |
| `includeSegments` (Include timestamped segments) | boolean | Add 'segments': every caption line with start and end in seconds, e.g. {start: 2.98, end: 6.38, text: '...'}. | true |

All 11 fields, with examples: see the **Input** tab.

### Use with AI agents (MCP)

MCP (Model Context Protocol) is the open standard that lets AI assistants such as Claude, ChatGPT and Cursor call outside tools. Apify's hosted MCP server at `https://mcp.apify.com/?tools=aurelix/tiktok-transcript-scraper` gives your assistant this Actor only: it fills in the input from your request, runs it and reads the videos back, at the same per-result price as a run started by hand.

#### Example prompts

- "Get the transcripts of the latest 5 videos from @bbcnews on TikTok and summarise each one in two bullet points"
- "Transcribe https://www.tiktok.com/@vicky.owens/video/7642780318604299542 and give me the key tips as a numbered list"
- "Pull the TikTok transcripts of @hubermanlab's latest videos with timestamps so I can quote the exact moment"

#### Claude Desktop and claude.ai

**Settings > Connectors > Add custom connector**, name it Apify, paste `https://mcp.apify.com/?tools=aurelix/tiktok-transcript-scraper`, keep the detected OAuth settings, select **Add** and sign in to Apify.

#### Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=aurelix/tiktok-transcript-scraper"
```

#### Cursor and VS Code

Add this to `~/.cursor/mcp.json` (Cursor); in VS Code's `.vscode/mcp.json` put the same entry under `"servers"` with `"type": "http"`. Sign in to Apify when asked.

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=aurelix/tiktok-transcript-scraper"
    }
  }
}
```

#### ChatGPT

Turn on **Developer mode**, open **Settings > Apps & Connectors > Create**, paste the URL above as the MCP server URL, choose **OAuth** and authorize Apify.

Clients without sign-in send `Authorization: Bearer <YOUR_APIFY_TOKEN>` instead. No Apify account? This Actor supports Apify's agentic payments: an agent can pay per run with a prepaid, spend-capped token, bought with x402 stablecoin payments.

#### n8n AI agent

Give an **AI Agent** node an **MCP Client Tool** with the endpoint `https://mcp.apify.com/?tools=aurelix/tiktok-transcript-scraper` and a Bearer credential holding your Apify token.

### Use it from AI agents (MCP), the API or no-code

#### Copy this to your AI assistant

```text
Use the Apify Actor aurelix/tiktok-transcript-scraper (Bulk TikTok Transcripts Scraper) through Apify's MCP server or API. Main input: videos (Videos); profiles (Profiles (latest videos)). Example input: {"videos": ["https://www.tiktok.com/@vicky.owens/video/7642780318604299542"], "profiles": ["@bbcnews"], "maxVideosPerProfile": 5}. Each result is one video with fields such as video_id, url, author_username, author_name, author_url, author_verified, description, hashtags. It costs $0.50 per 1,000 videos on Apify's free plan plus a $0.0007 start fee per run, and needs no login.
```

MCP server URL for this Actor: `https://mcp.apify.com/?tools=aurelix/tiktok-transcript-scraper` (setup for each client in the section above).

#### API

Start a run and read the dataset with Apify's REST API or the Python and JavaScript clients:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("aurelix/tiktok-transcript-scraper").call(run_input={'videos': ['https://www.tiktok.com/@vicky.owens/video/7642780318604299542'], 'profiles': ['@bbcnews'], 'maxVideosPerProfile': 5})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### No-code: schedule it in 3 clicks

Send the results to Google Sheets, Zapier, Make, n8n, Slack or any webhook URL.

1. Fill in the input, then click **Save as a new task**.
2. In the task, click **Schedule** and pick daily or weekly (Apify Schedules).
3. Turn on **Only new videos since last run** so each run returns only what is new, and paste a Slack or webhook URL into **Slack webhook URL** / **Webhook URL** to get a digest of the new items (count plus the top 10) after every run.

Prefer n8n or Make? Ask in the **Issues** tab and we will share a ready-made workflow for it.

### FAQ

#### Can I scrape TikTok transcripts without login?

Yes. It never logs in, so you need no TikTok account, password or cookies; only a free Apify account to run it.

#### Is there a TikTok transcripts API?

You can use this Actor as one. Start it with Apify's REST API or the Python and JavaScript clients and read the results as JSON (see the code above), or call it from an AI agent through MCP.

#### How much does it cost to scrape TikTok transcripts?

About $0.50 for 1,000 videos on Apify's free plan and $0.20 on paid plans, start fee included. The free $5 monthly credit covers about 9,900 videos.

#### Can I export TikTok transcripts to Excel or Google Sheets?

Yes. Download the results as Excel, CSV, JSON, XML or HTML from the run's **Storage** tab, or send them to Google Sheets with Apify's Google Sheets integration or the API.

#### Is it legal to scrape TikTok transcripts?

It reads only public data any logged-out visitor can see: TikTok videos' captions and the video details shown on the video page. It goes at a polite pace (four requests at a time), never logs in, never solves CAPTCHAs and never makes signed API calls. It returns caption text and video details (description, @username, display name, upload date, counts, sound); no comments, commenter names, account IDs or locations are read. Data is returned as shown publicly on TikTok, incl. the creator's name and @username. The content is returned as the creator published it; copyright in it stays with its owner. People can ask for removal of their data by opening an issue on this Actor's Issues tab; if TikTok formally asks us to stop, this Actor will stop. You are responsible for using the data lawfully, incl. anti-spam and privacy laws; this is not legal advice.

#### Is there a cheaper TikTok transcript extractor on Apify?

On price, yes: it is cheaper than the leading tools, at $0.20 per 1,000 videos on paid plans, and a single video costs $0.0009 all-in. This tool doesn't transcribe videos without captions; it returns only existing captions.

#### Can I get transcripts for a whole TikTok profile?

Partly: an @username returns the latest videos TikTok lists publicly for that profile (about 10 plus pinned ones). Turn on the only-new mode and schedule it daily to build a complete feed from now on; give older videos by link.

#### Can an AI agent call it?

Yes, through Apify's MCP server or the API: a single video comes back in seconds, with timestamped segments ready for citations.

#### Which videos work?

Any public TikTok video that shows captions: TikTok's automatic captions or captions the creator added, in any language. Videos without speech or captions, photo posts, removed and private videos cannot be transcribed; they get a status row. Given by link they are not charged; read from a profile they cost $0.00012 each (video-checked), once per video in only-new mode.

#### Does it transcribe videos without captions?

No. It returns the captions TikTok already has, which is why it is fast and cheap. Most talking videos have TikTok's automatic captions; music-only clips and photo posts usually have none.

#### Does it translate transcripts?

No. It returns the caption tracks a logged-out visitor gets, usually the video's own language. Your preferred languages are tried in order; if none exists the video's own track is returned and 'language_fallback' is true.

#### How many videos does a profile give?

The latest videos TikTok lists on its public profile embed: about the 10 newest, plus up to 3 pinned ones, newest first. Older videos of a profile can be read by giving their links in 'Videos'.

#### What am I charged when no transcript comes back?

Only the start fee ($0.0007 per run), plus, for profiles, $0.0003 per profile read and $0.00012 per profile video read that has no transcript. Videos you give by link without captions, photo posts, removed and private videos, inputs that are not TikTok links, duplicates and videos already returned in only-new mode are never charged.

#### What does a BLOCKED status mean?

TikTok refused every request the run made from several fresh IPs in a row. The run then stops early, keeps the transcripts already done and charges only for those. Try again a few minutes later.

#### How fast is it?

A single video usually comes back in 3 to 5 seconds in total, most of it the run starting. Videos are read four at a time; in our tests 50 videos from 5 profiles took about 80 seconds.

#### Is the auto-generated flag reliable?

It is the flag TikTok gives with each caption track: true for TikTok's speech recognition, false for captions the creator added or edited.

### Limits (stated honestly)

- Only videos that have captions can be returned; there is no speech-to-text for videos without them.
- Profiles give the latest ~10 videos plus pinned ones (what TikTok's public profile embed lists); give older videos by link.
- No translation: captions come in the languages TikTok serves to a logged-out visitor, usually only the video's own language.
- Removed, private and region-blocked videos and photo posts get a status row instead of a transcript.
- The upload date is given as a UTC date; TikTok does not show an exact time on the page.
- TikTok can refuse cloud IPs; the run moves to fresh datacenter IPs and stops with a BLOCKED status (charging only what it returned) if they keep being refused.

### Works great with

- **Before this: [TikTok Ads Library API](https://apify.com/aurelix/tiktok-ads-library-scraper)**: see which brands run TikTok ads and what they say in them, then transcribe the same brands' organic videos
- **Then: [Website to Markdown API](https://apify.com/aurelix/website-to-markdown)**: the brand's web pages as Markdown, so TikTok transcripts and site copy land in one AI corpus

### Related Aurelix tools

Public Aurelix Actors, grouped by the data they collect. All are pay-per-result and need no login.

#### AI, content and SEO

- **[Google Trends by Region](https://apify.com/aurelix/google-trends-scraper)**: Google Trends interest over time, by region and rising queries for any number of keywords, plus trending searches.
- **[Google Autocomplete API](https://apify.com/aurelix/google-autocomplete-scraper)**: Expands seed keywords into hundreds of real Google and YouTube autocomplete phrases, tagged by search intent.
- **[PDF Table Extraction & PDF to Markdown OCR](https://apify.com/aurelix/pdf-to-markdown)**: Turns linked PDF and Word files into Markdown per page, with tables as JSON rows, RAG chunks and OCR.
- **[Broken Link Crawler & SEO Audit](https://apify.com/aurelix/seo-audit-crawler)**: Audits a whole site: one row per page with SEO checks and broken links, plus a ranked issues summary.
- **[Website to Markdown API](https://apify.com/aurelix/website-to-markdown)**: Crawls a site and returns one row of clean main-content Markdown per page, with title, headings and links.
- **[YouTube Transcript Scraper](https://apify.com/aurelix/youtube-transcript-scraper)**: Returns YouTube video transcripts as text, timed segments and AI chunks, from videos, channels, playlists or searches.
- **[YouTube Video Scraper API](https://apify.com/aurelix/youtube-video-scraper)**: Full details for every YouTube video in a search, channel or playlist: views, likes, comments, tags, publish time.

#### Jobs and hiring data

- **[Job Bank Canada Scraper API](https://apify.com/aurelix/job-bank-canada-scraper)**: Official Job Bank Canada postings by month: NOC and NAICS codes, wages, hours and location.
- **[Greenhouse Jobs Scraper](https://apify.com/aurelix/greenhouse-jobs-scraper)**: Live jobs from a company's Greenhouse, Lever, Ashby or SmartRecruiters board, with salary and Canadian province tags.
- **[Career Page Monitor](https://apify.com/aurelix/hiring-signal-monitor)**: New, removed and reposted roles plus hiring velocity per company, from seven job-board systems including Workday.
- **[LinkedIn Jobs Country Filter Scraper](https://apify.com/aurelix/linkedin-jobs)**: Public LinkedIn job postings by keyword and country: title, company, location, seniority, job type, salary text, description.
- **[Multiple Job Boards Scraper](https://apify.com/aurelix/multi-job-board-scraper)**: LinkedIn, about 50 company career sites, Remote OK and We Work Remotely jobs in one deduplicated list.
- **[Remote Job Board Scraper API](https://apify.com/aurelix/remote-jobs-scraper)**: Remote OK and We Work Remotely jobs in one deduplicated list with salary, regions and tags.
- **[Wellfound Jobs API & Scraper](https://apify.com/aurelix/wellfound-jobs-scraper)**: Wellfound startup jobs with salary and equity ranges, company stage and size, $0.50 per 1,000.
- **[Workday Job Postings Scraper](https://apify.com/aurelix/workday-jobs-scraper)**: Jobs from any Workday career site by link or company name, with full descriptions and Canadian province tags.

#### E-commerce and product data

- **[AliExpress Scraper API](https://apify.com/aurelix/aliexpress-product-search)**: AliExpress search results by keyword: price, discount, rating, units sold, ship-from country and sponsored flag.
- **[Amazon Best Sellers & Amazon New Releases](https://apify.com/aurelix/amazon-best-sellers)**: Amazon Best Sellers and New Releases top 100 on 10 marketplaces: rank, ASIN, price, rating, rank change.
- **[Best Buy Canada Scraper API](https://apify.com/aurelix/best-buy-canada-scraper)**: Best Buy Canada search results: CAD price, sale savings, rating, reviews and seller, plus optional UPC and specs.
- **[Shopify Product Export Scraper](https://apify.com/aurelix/shopify-products-scraper)**: Every public product of any Shopify store with variants, SKUs, prices, barcodes, stock counts and collections.
- **[Shopify Best Sellers Tracker](https://apify.com/aurelix/shopify-best-sellers-tracker)**: Competitor Shopify stores' best-sellers, new products, price changes, stock-outs and restocks since your last run, plus catalogue summary.

#### Leads and company data

- **[Companies House Scraper](https://apify.com/aurelix/companies-house-scraper)**: Newly incorporated UK companies from Companies House: SIC codes, region, registered office, directors with roles.
- **[Contact Page Scraper](https://apify.com/aurelix/contact-details-scraper)**: Published company emails, phones, addresses, social pages and team members from a list of company websites.
- **[Decision Maker Finder](https://apify.com/aurelix/decision-maker-finder)**: Founders, CEOs, VPs and department heads from company team pages, with title, seniority and function.
- **[Newly Funded Companies Hiring](https://apify.com/aurelix/funded-companies-hiring)**: Companies that just raised money (SEC Form D), with their open roles and business contacts, as a new-only monitor.
- **[Google Maps Phone Scraper](https://apify.com/aurelix/google-maps-scraper)**: Local business lists from Google Maps: phones, websites, ratings, hours, coordinates; optional website emails and socials.
- **[Recently Funded Companies API](https://apify.com/aurelix/recently-funded-companies)**: US companies that just filed an SEC Form D: amount raised, industry, state, executives, confirmed website.
- **[Tech Stack API](https://apify.com/aurelix/tech-stack-detector)**: CMS, e-commerce platform, analytics, ad pixels, chat, CDN and email provider for each domain you enter.
- **[Yellow Pages Canada Scraper](https://apify.com/aurelix/yellow-pages-canada-scraper)**: YellowPages.ca businesses by search term and city: phone, website, address, postal code, hours and rating.

#### Ad intelligence

- **[Competitor Watch](https://apify.com/aurelix/competitor-watch)**: One report per competitor with only what is new: Meta and TikTok ads, page changes, Shopify products and prices, jobs.
- **[Facebook Ad Library Search & API](https://apify.com/aurelix/facebook-ad-library-scraper)**: Facebook and Instagram business ads from the Meta Ad Library: copy, creatives, landing pages, dates, optional EU reach.
- **[TikTok Ads Library API](https://apify.com/aurelix/tiktok-ads-library-scraper)**: TikTok Ads Library ads for Europe, UK, Switzerland and Turkey with targeting, reach, ad text and landing pages.

#### Canada and government data

- **[Canada Building Permits](https://apify.com/aurelix/canada-building-permits-scraper)**: Building permits and development applications from 7 Canadian cities: address, type, status, dates, value, applicant, contractor and Toronto planner contact.
- **[Government Tenders Scraper](https://apify.com/aurelix/government-tenders-scraper)**: Open tenders from SAM.gov, CanadaBuys and EU TED in one table: buyer, codes, value, deadline, contact and link.
- **[USPTO Trademark API](https://apify.com/aurelix/uspto-trademark-search)**: US trademark search and watch from USPTO: mark, owner or number lookups, new filings, owner, attorney, goods.

#### More data tools

- **[Agoda API (Unofficial)](https://apify.com/aurelix/agoda-reviews-scraper)**: Scrape Agoda guest reviews at $0.50 per 1,000 with this unofficial Agoda API, cheaper than the leading tools: Agoda and...
- **[Tennis Betting Odds Scraper](https://apify.com/aurelix/tennis-odds-scraper)**: Tennis results and upcoming matches with opening and closing odds per bookmaker and implied probabilities.

### Recent changes

- **0.1**: Profiles: each profile video read that has no transcript costs $0.00012 (video-checked), so profiles of mostly music or silent videos are priced fairly; videos given by link stay free without captions. A page missing its caption data is re-read once from a fresh IP. In only-new mode a caption-less profile video is charged once, also when it is re-checked during its first day.

The full history is on the **Changelog** tab.

### Tested daily

An automated health check runs this Actor every day on a fixed input and checks that at least 2 videos come back with `video_id`, `url`, `author_username`, `transcript_text`, `segments`, `language` filled in; a failed check alerts the maintainer straight away.

### Your feedback

Missing a field, found a bug or need another filter? Open an issue on the **Issues** tab; we aim to answer within a day. If this Actor saved you time, a short review helps other people find it.

# Changelog

This Actor's version history is a separate document: https://apify.com/aurelix/tiktok-transcript-scraper/changelog.md

# Actor input Schema

## `videos` (type: `array`):

TikTok video links or numeric video IDs, e.g. \['https://www.tiktok.com/@vicky.owens/video/7642780318604299542', '7642780318604299542']. Short share links (vm.tiktok.com, vt.tiktok.com, tiktok.com/t/...) and m.tiktok.com links work; several links pasted into one entry are split.

## `profiles` (type: `array`):

@usernames or profile links, e.g. \['@garyvee', 'https://www.tiktok.com/@bbcnews']. Reads the latest videos TikTok's public profile embed lists (about the 10 newest, plus pinned ones), newest first, up to 'Max videos per profile'. Each profile read costs one 'profile-checked' event.

## `maxVideosPerProfile` (type: `integer`):

How many of each profile's latest videos to read, e.g. 5. TikTok's public profile embed lists about 10 recent videos, so higher values return what is there. Videos given directly are always read.

## `languages` (type: `array`):

Caption languages in order of preference, as codes, e.g. \['en', 'es']. 'en' also matches eng-US. If none is available the video's own caption track is returned and 'language_fallback' is true. Empty = the video's own track (most TikTok videos have just one).

## `includeAutoGenerated` (type: `boolean`):

Use TikTok's automatic (speech recognition) captions when the creator added none; most TikTok captions are automatic. Off = only creator captions; other videos get a status row and are not charged.

## `includeSegments` (type: `boolean`):

Add 'segments': every caption line with start and end in seconds, e.g. {start: 2.98, end: 6.38, text: '...'}. Off = plain text only, for smaller output.

## `includeSrt` (type: `boolean`):

Add 'srt': the captions as an SRT subtitle file in one text field, ready to save as .srt.

## `incremental` (type: `boolean`):

Return only videos not returned by a previous run with the same inputs, e.g. for a daily schedule on a few profiles. A video without captions is tried again on the next run during its first day (TikTok adds automatic captions after upload).

## `stateKey` (type: `string`):

Name for the 'new since last run' memory, e.g. 'my-creators-daily'. Leave empty to derive it from the inputs.

## `slackWebhookUrl` (type: `string`):

After each run, post a short digest to Slack: how many transcripts were saved (new ones only when 'Only new videos since last run' is on) and the top 10 with links, e.g. https://hooks.slack.com/services/T000/B000/XXXX. Nothing is posted when the run saved nothing. Leave empty to skip.

## `webhookUrl` (type: `string`):

After each run, POST the same digest as JSON (actor, newOnly, count, items = top 10 results, runUrl, text) to any URL, e.g. a Zapier, Make or n8n webhook. Nothing is sent when the run saved nothing. Leave empty to skip.

## Actor input object example

```json
{
  "videos": [
    "https://www.tiktok.com/@vicky.owens/video/7642780318604299542"
  ],
  "profiles": [],
  "maxVideosPerProfile": 10,
  "languages": [],
  "includeAutoGenerated": true,
  "includeSegments": true,
  "includeSrt": false,
  "incremental": false
}
```

# Actor output Schema

## `transcripts` (type: `string`):

One row per video: transcript text, timestamped segments and the video details TikTok shows (status ok), or a status row saying why a video has no transcript (not charged).

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "videos": [
        "https://www.tiktok.com/@vicky.owens/video/7642780318604299542"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aurelix/tiktok-transcript-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "videos": ["https://www.tiktok.com/@vicky.owens/video/7642780318604299542"] }

# Run the Actor and wait for it to finish
run = client.actor("aurelix/tiktok-transcript-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "videos": [
    "https://www.tiktok.com/@vicky.owens/video/7642780318604299542"
  ]
}' |
apify call aurelix/tiktok-transcript-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aurelix/tiktok-transcript-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/1utW4vil3dRNQrzDy/builds/32YfvlSwEnvPA7FMc/openapi.json
