# LinkedIn Video Transcript Scraper (`piotrv1001/linkedin-video-transcript-scraper`) Actor

The LinkedIn Video Transcript Scraper turns LinkedIn videos into searchable text, capturing full AI transcripts with timestamps and detected language, plus author, follower count, post copy, publish date, likes and comment count — ideal for content research, competitor analysis and AI pipelines.

- **URL**: https://apify.com/piotrv1001/linkedin-video-transcript-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Social media, Videos, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 posts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🎬 LinkedIn Video Transcript Scraper

Turn **[LinkedIn](https://www.linkedin.com) videos into searchable text**. Point the **LinkedIn Video Transcript Scraper** at a person, a company page, or specific posts, and get an **AI transcript of every video** alongside the full post data — author, follower count, post copy, engagement, and comments.

LinkedIn shows no captions and offers no transcript download, so video is the one part of the platform that stays invisible to search, analysis, and AI pipelines. This Actor fixes that.

Run it on the [Apify platform](https://apify.com) to get **API access, scheduling, integrations (Google Sheets, Make, Zapier, and more), automatic retries, and monitoring** out of the box — no code required.

### ✨ Features

- 🎙️ **AI Transcription**: Every video turned into clean, punctuated text with automatic language detection across 20+ languages.
- ⏱️ **Timestamped Paragraphs**: Transcripts come segmented with start and end times, ready for clipping, subtitling, or jumping to a quote.
- 👤 **Full Post Context**: Author name, profile URL, follower count, post text, publish date, likes, and comment count on every record.
- 🏢 **Profiles and Company Pages**: Give it a member profile or an organisation page and it collects their recent posts automatically.
- 🔗 **Direct Post URLs**: Paste specific post links when you already know what you want transcribed.
- 🕰️ **Older Posts**: Optionally reach past the handful of posts a profile page shows to find earlier ones.
- 💬 **Comments (optional)**: Pull the full comment thread — text, author, date, and likes.
- 🎯 **Video-First**: By default only posts containing video are returned, so you never pay for empty rows.

### 🛠️ How to Use the LinkedIn Video Transcript Scraper

1. **Add a profile or company page** – Paste a URL such as `https://www.linkedin.com/company/ted-conferences/`, or drop in specific post URLs.
2. **Set your options** – Choose how many posts to return, whether to include comments, and the spoken language (or leave it automatic).
3. **Run the scraper** – Click **Start**. Newest posts are processed first.
4. **Export your data** – Download the dataset as JSON, CSV, Excel, or HTML, or pull it via the Apify API.

### 🔧 Input

| Field               | Type    | Description                                                                                |
| ------------------- | ------- | ------------------------------------------------------------------------------------------ |
| `profileUrls`       | Array   | LinkedIn member or company page URLs. Their recent posts are collected automatically.      |
| `postUrls`          | Array   | Specific post URLs. Accepts `/posts/` links, `/feed/update/` links, or a bare activity ID. |
| `onlyVideoPosts`    | Boolean | Skip posts with no video. On by default.                                                   |
| `includeOlderPosts` | Boolean | Look beyond the posts on the profile page to find earlier ones. Member profiles only.      |
| `includeComments`   | Boolean | Also return each post's comments.                                                          |
| `language`          | Select  | Spoken language of the audio, or `auto` to detect it.                                      |
| `maxResults`        | Integer | Maximum number of posts to return (default 20).                                            |

### 📊 Sample Output Data

The scraper provides structured JSON output. Example:

```json
[
    {
        "activityId": "7494825757366665217",
        "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7494825757366665217/",
        "postedAt": "2026-08-16T18:41:47.659Z",
        "discoveredVia": "company/ted-conferences",
        "authorName": "TED Conferences",
        "authorUrl": "https://www.linkedin.com/company/ted-conferences",
        "authorFollowers": 24535726,
        "headline": "If you chose your last vacation spot based on social media, you may be part of the overtourism problem.",
        "text": "If you chose your last vacation spot based on social media, you may be part of the overtourism problem. Here's how to avoid it next time: http://t.ted.com/qei2AWi",
        "likeCount": 157,
        "commentCount": 6,
        "hasVideo": true,
        "videoUrl": "https://dms.licdn.com/playlist/vid/v2/.../mp4-360p-30fp-crf28/...",
        "videoQuality": "mp4-360p-30fp-crf28",
        "thumbnailUrl": "https://media.licdn.com/dms/image/v2/.../videocover-high/...",
        "durationSeconds": 199,
        "transcript": "Overtourism isn't caused by people travelling more. It's caused by everyone travelling to the same twelve places...",
        "transcriptLanguage": "en",
        "transcriptConfidence": 0.994,
        "transcriptParagraphs": [
            {
                "text": "Overtourism isn't caused by people travelling more.",
                "start": 0.08,
                "end": 3.44,
                "speaker": 0
            }
        ]
    }
]
```

You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**.

### 📋 Data Fields

| Field                                        | Description                                                      |
| -------------------------------------------- | ---------------------------------------------------------------- |
| `activityId` / `postUrl`                     | Post identifier and direct link on LinkedIn.                     |
| `postedAt`                                   | When the post was published.                                     |
| `discoveredVia`                              | Which profile or company page the post came from.                |
| `authorName`, `authorUrl`, `authorFollowers` | Who posted it and how large their audience is.                   |
| `headline`, `text`                           | The post's opening line and full body copy.                      |
| `likeCount`, `commentCount`                  | Engagement on the post.                                          |
| `hasVideo`, `videoUrl`, `videoQuality`       | Whether the post carries video, and its direct media link.       |
| `thumbnailUrl`, `durationSeconds`            | Video cover image and length in seconds.                         |
| `transcript`                                 | The full spoken text of the video.                               |
| `transcriptLanguage`, `transcriptConfidence` | Detected language and the model's confidence score.              |
| `transcriptParagraphs`                       | Timestamped segments with `text`, `start`, `end`, and `speaker`. |
| `comments`                                   | Added when **Include comments** is enabled.                      |

### 💵 Pricing

This Actor uses the **pay-per-event** pricing model — you only pay for what you get:

| Event                       | Price    | When it's charged                         |
| --------------------------- | -------- | ----------------------------------------- |
| Actor start                 | $0.00005 | Once per run.                             |
| Post scraped                | $0.005   | Per post returned, with all its metadata. |
| Video transcribed           | $0.008   | Once per video turned into text.          |
| Minute of video transcribed | $0.008   | Per started minute of audio.              |
| Comments extracted          | $0.003   | Per post, only when comments are enabled. |

Most LinkedIn videos run under a minute, so a typical transcribed post costs about **$0.021** — roughly **$2.10 for 100 videos**. Longer videos cost proportionally more, and posts without video are skipped by default so they never cost you anything. If a video turns out to contain no speech at all, the transcription events are not charged. New Apify accounts include **free monthly usage credits**, so you can try it at no cost.

### 💡 Tips

- Start with a small `maxResults` to preview the data shape before scaling up.
- Feed the transcripts into an LLM to summarise a competitor's messaging or pull talking points at scale.
- Schedule a run against the profiles you follow to build a searchable archive of their video content.
- Company pages tend to be more reliable to collect from than member profiles — start there if you can.
- Leave **language** on automatic unless detection is getting a specific accent or dialect wrong.

### ⚠️ Good to Know

- Around **10 recent posts** are available per profile or company page, plus roughly **36 older ones** when **Include older posts** is enabled. This Actor is built to monitor accounts over time, not to backfill an entire posting history in one run.
- LinkedIn limits how many posts one IP can read. For larger runs, leave the proxy enabled in the input.

### ❓ FAQ

**Do I need a LinkedIn account or cookies?**
No. The Actor only reads publicly visible posts — no login, no cookies, nothing to configure.

**Is scraping LinkedIn legal?**
This Actor collects only publicly available post data. You are responsible for using the data in compliance with LinkedIn's Terms of Service and applicable laws.

**What if a post has no video?**
By default those posts are skipped and not charged. Turn off **Only posts with video** to have them returned as regular post records without a transcript.

**How accurate are the transcripts?**
Each record includes a `transcriptConfidence` score so you can filter on quality. Clear speech typically scores above 0.95; heavy background music or crosstalk scores lower.

**Can it handle long videos?**
Yes — up to LinkedIn's 15-minute limit for native video.

### 🔗 More LinkedIn Actors

Same data source, different slice:

- [LinkedIn Job Details Scraper](https://apify.com/piotrv1001/linkedin-job-details-scraper) — full job postings with parsed salary, seniority and applicant counts.
- [LinkedIn Jobs Search Scraper](https://apify.com/piotrv1001/linkedin-jobs-search-scraper) — job search results past LinkedIn’s 1,000-result cap.
- [LinkedIn Company Jobs Scraper](https://apify.com/piotrv1001/linkedin-company-jobs-scraper) — every open role at named companies.
- [LinkedIn Jobs Monitor](https://apify.com/piotrv1001/linkedin-jobs-monitor) — only what changed since the last check — roles opened and closed.
- [LinkedIn Company Scraper](https://apify.com/piotrv1001/linkedin-company-scraper) — company profiles — headcount, industry, specialties, open roles.
- [LinkedIn Decision Maker Finder](https://apify.com/piotrv1001/linkedin-decision-maker-finder) — decision-maker profiles at companies you target.

### 🆘 Support

Found a bug or need a custom data field? Open an issue from the Actor's **Issues** tab and we'll take a look. Custom scraping solutions are also available on request.

Make LinkedIn's video content searchable with the **LinkedIn Video Transcript Scraper** today! 🚀

# Actor input Schema

## `profileUrls` (type: `array`):

LinkedIn member or company page URLs (e.g. https://www.linkedin.com/company/apify/). Their recent posts are collected and every video among them is transcribed.

## `postUrls` (type: `array`):

Specific LinkedIn post URLs to transcribe. Accepts /posts/ links, /feed/update/ links, or a bare activity ID.

## `includeOlderPosts` (type: `boolean`):

Also look beyond the posts shown on the profile page to find older ones. Adds time to the run and works for member profiles only.

## `onlyVideoPosts` (type: `boolean`):

Skip posts that have no video. Turn this off to also get text and image posts, which are returned without a transcript.

## `includeComments` (type: `boolean`):

Also return the comments on each post.

## `language` (type: `string`):

Language of the audio. Leave on automatic unless detection is getting it wrong.

## `maxResults` (type: `integer`):

Hard cap on the number of posts returned across the whole run. Newest posts are returned first.

## `proxyConfiguration` (type: `object`):

Proxy settings. Recommended for larger runs — LinkedIn limits how many posts one IP can read.

## Actor input object example

```json
{
  "profileUrls": [
    "https://www.linkedin.com/company/ted-conferences/"
  ],
  "postUrls": [],
  "includeOlderPosts": false,
  "onlyVideoPosts": true,
  "includeComments": false,
  "language": "auto",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "profileUrls": [
        "https://www.linkedin.com/company/ted-conferences/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/linkedin-video-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 = { "profileUrls": ["https://www.linkedin.com/company/ted-conferences/"] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/linkedin-video-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 '{
  "profileUrls": [
    "https://www.linkedin.com/company/ted-conferences/"
  ]
}' |
apify call piotrv1001/linkedin-video-transcript-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/linkedin-video-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/Cwgqn9k2HIfLTaPb4/builds/UWo9JQ4VzcqnRQfBQ/openapi.json
