# Pornhub Video Intelligence Scraper (`scraper_master/pornhub-video-full-scraper`) Actor

Get public video download links and complete Pornhub video intelligence in one run — metadata, model profiles, comments, playlists, and second-by-second engagement heat curves with Top 5 peaks.

- **URL**: https://apify.com/scraper\_master/pornhub-video-full-scraper.md
- **Developed by:** [Master Scraper](https://apify.com/scraper_master) (community)
- **Categories:** Videos, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 video intelligence records

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/actors/running/actors-in-store.md#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

## Pornhub Video Intelligence Scraper 🚀

Turn public Pornhub video links into clean, structured intelligence — ready for research, trend tracking, content analysis, or AI workflows. Paste links, click **Start**, and get a complete dataset back. No scraping setup required. ✨

### What you get 🎯

Each video link produces one easy-to-use record with as much public information as is available:

- ⬇️ **Video source access** — a primary M3U8 playlist URL, plus every publicly available quality and format exposed by the player.
- 🎬 **Video essentials** — title, description, duration, publish date, thumbnail, views, likes, tags, categories, and languages.
- 👤 **Model profile** — public name, profile link, avatar, verification status, video count, and subscribers when shown on the page.
- 💬 **Audience signals** — public comments, authors, dates, and visible upvotes.
- 📈 **Engagement intelligence** — the full normalized heat curve, Top 5 moments, and the highest-interest time range in whole seconds.
- 📚 **Playlist discovery** — public playlists that contain the video, including playlist links and video counts.

If a field is not visible on a page, it is returned as `null` or an empty list. You still receive every other field that could be collected. ✅

> Video sources are player-provided URLs at the time of collection. They can expire, so use them promptly.

### 🎬 Working with video sources

`video_download` contains the primary M3U8 playlist available when the page is collected. To save a complete video as an MP4 file, process that playlist with a media tool such as ffmpeg.

`playbackSources` retains every player-exposed source, including alternate resolutions and MP4 formats. These links often use temporary signatures, so their availability and lifetime can depend on the page, CDN, and network environment.

### ⚖️ Responsible use

This Actor is intended for lawful research, testing, and analysis. Before saving, using, or sharing any media, make sure you have the required rights and comply with applicable copyright rules and the target platform's terms. Unauthorized copying, distribution, or commercial use is not supported; you are responsible for your own use of the results.

### Output example 📦

Each submitted video URL produces one complete record. The following example shows every available field. Titles, accounts, and URLs are illustrative; actual playback source URLs vary by page and collection time.

```json
{
    "url": "https://www.pornhub.com/view_video.php?viewkey=EXAMPLE_VIEWKEY",
    "title": "Example video title",
    "video_download": "https://cdn.example.com/hls/720p/master.m3u8?temporary-signature=...",
    "playbackSources": [
        {
            "quality": "720",
            "format": "hls",
            "url": "https://cdn.example.com/hls/720p/master.m3u8?temporary-signature=..."
        },
        {
            "quality": "720",
            "format": "mp4",
            "url": "https://cdn.example.com/video/720p.mp4?temporary-signature=..."
        },
        {
            "quality": "480",
            "format": "hls",
            "url": "https://cdn.example.com/hls/480p/master.m3u8?temporary-signature=..."
        },
        {
            "quality": "480",
            "format": "mp4",
            "url": "https://cdn.example.com/video/480p.mp4?temporary-signature=..."
        }
    ],
    "description": "Public video description shown on the page.",
    "duration": "00:15:27",
    "durationSeconds": 927,
    "viewCount": 154748,
    "likeCount": 485,
    "publishedAt": "2026-06-30T08:15:48+00:00",
    "ineligibleRegion": null,
    "thumbnailUrl": "https://cdn.example.com/thumbnails/video.jpg",
    "tags": ["tag-one", "tag-two"],
    "categories": ["category-one", "category-two"],
    "spokenLanguages": ["english"],
    "model": {
        "name": "ExampleModel",
        "url": "https://www.pornhub.com/model/examplemodel",
        "avatarUrl": "https://cdn.example.com/avatars/example.jpg",
        "userId": "123456789",
        "isVerified": true,
        "videoCount": 38,
        "subscriberCount": 16800,
        "externalProfileUrl": "https://example.com/profile"
    },
    "commentCount": 2,
    "commentSort": "Top comments",
    "comments": [
        {
            "id": "comment-id-1",
            "author": "ExampleUser",
            "profileUrl": "https://www.pornhub.com/model/exampleuser",
            "userId": "987654321",
            "avatarUrl": "https://cdn.example.com/avatars/user.jpg",
            "isVerified": true,
            "text": "Example public comment.",
            "postedAt": "2 days ago",
            "upvotes": 20
        },
        {
            "id": "comment-id-2",
            "author": "AnotherUser",
            "profileUrl": "https://www.pornhub.com/users/anotheruser",
            "userId": "987654322",
            "avatarUrl": null,
            "isVerified": false,
            "text": "Another example public comment.",
            "postedAt": "1 week ago",
            "upvotes": 0
        }
    ],
    "hotspots": {
        "curve": [
            { "timeSeconds": 0, "score": 0 },
            { "timeSeconds": 13, "score": 1 },
            { "timeSeconds": 459, "score": 0.62 },
            { "timeSeconds": 927, "score": 0 }
        ],
        "top5": [
            { "timeSeconds": 13, "score": 1 },
            { "timeSeconds": 342, "score": 0.84 },
            { "timeSeconds": 358, "score": 0.83 },
            { "timeSeconds": 494, "score": 0.79 },
            { "timeSeconds": 420, "score": 0.78 }
        ],
        "highestInterval": {
            "startSeconds": 13,
            "endSeconds": 18,
            "peakSeconds": 13,
            "peakScore": 1,
            "threshold": 0.8
        }
    },
    "playlists": [
        {
            "url": "https://www.pornhub.com/playlist/123456",
            "videoCount": 212
        },
        {
            "url": "https://www.pornhub.com/playlist/654321",
            "videoCount": 47
        }
    ],
    "scrapedAt": "2026-08-02T14:34:58.721Z"
}
```

#### Field reference 🧭

| Field                                       | Description                                                                                                                                                                                     |
| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `url` / `title`                             | The analyzed video-page URL and video title.                                                                                                                                                    |
| `video_download`                            | The primary M3U8 playlist. It is a temporary source that can be processed with tools such as ffmpeg.                                                                                            |
| `playbackSources`                           | Every publicly exposed player source. Each item includes `quality`, `format`, and `url`. MP4 sources can be subject to network or expiry restrictions.                                          |
| `description` / `thumbnailUrl`              | The publicly displayed video description and thumbnail URL.                                                                                                                                     |
| `duration` / `durationSeconds`              | The same duration in readable `HH:MM:SS` format and as a number of seconds.                                                                                                                     |
| `viewCount` / `likeCount` / `publishedAt`   | Public view count, like count, and publication time.                                                                                                                                            |
| `ineligibleRegion`                          | Regions declared unavailable by the page; `null` when absent or empty.                                                                                                                          |
| `tags` / `categories` / `spokenLanguages`   | Page tags, categories, and visible language information.                                                                                                                                        |
| `model`                                     | Public model details: name, profile, avatar, verification, video count, subscriber count, and external profile when provided. Missing nested fields are `null`.                                 |
| `commentCount` / `commentSort` / `comments` | The visible comment count, active sort order, and public comments up to the input limit. Each comment includes its author, profile, avatar, verification, text, date, and visible upvotes.      |
| `hotspots.curve`                            | The complete heat curve. Each point's `timeSeconds` is a whole second within the video; `score` is normalized from `0–1`. This example shows four points, while results include the full curve. |
| `hotspots.top5`                             | Up to five highest local peaks for quickly locating high-interest moments.                                                                                                                      |
| `hotspots.highestInterval`                  | The continuous highest-interest range: start and end seconds, peak second, peak score, and detection threshold. `null` when no heat data is available.                                          |
| `playlists`                                 | Public playlists containing the video, each with its URL and visible video count.                                                                                                               |
| `scrapedAt`                                 | ISO 8601 timestamp for this record's collection.                                                                                                                                                |

### Start in 3 steps ⚡

1. Paste one or more public Pornhub **video-page** links into **Video links to analyze**.
2. Leave the defaults as they are — they are the recommended settings for most jobs.
3. Click **Start** and open the **Dataset** when the run finishes.

That’s it. One submitted link creates one result record.

### Input guide 🧭

Only one input is required: a public video URL.

```json
{
    "videoUrls": [{ "url": "https://www.pornhub.com/view_video.php?viewkey=YOUR_VIEWKEY" }]
}
```

Optional settings:

- **Comments per video** — defaults to `100`. Set `0` when you do not need comments and want a faster run.
- **Speed setting** — leave it at `1` for the most reliable collection. Use `2` or `3` only when you are processing multiple links.

### Built for insight, not just raw HTML 💡

Use the results to:

- compare videos and identify high-interest moments;
- research public model and playlist relationships;
- analyze audience feedback and visible engagement;
- feed consistent records into spreadsheets, dashboards, databases, or AI agents.

### AI and MCP ready 🤖

Call this Actor directly from an MCP-compatible AI client through Apify’s hosted MCP server:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com/?tools=winston/pornhub-video-full-scraper",
            "headers": {
                "Authorization": "Bearer <APIFY_API_TOKEN>"
            }
        }
    }
}
```

Your AI client can then submit video links and receive the structured output as a tool result.

### Responsible collection 🔒

This Actor collects only publicly visible information. It does not log in, automate age verification, or bypass access controls. Pages requiring those steps are not bypassed.

# Actor input Schema

## `videoUrls` (type: `array`):

Paste one or more public Pornhub video-page links. One link = one complete intelligence record.

## `maxComments` (type: `integer`):

How many public comments to include for each video. Leave the default (100) for a balanced result. Enter 0 to skip comments and finish faster.

## `maxConcurrency` (type: `integer`):

Leave as 1 unless you are analyzing several links. Higher values can be faster, but 1 is the most reliable setting.

## Actor input object example

```json
{
  "videoUrls": [
    {
      "url": "https://cn.pornhub.com/view_video.php?viewkey="
    }
  ],
  "maxComments": 100,
  "maxConcurrency": 1
}
```

# Actor output Schema

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

One structured intelligence record for every video link you submitted.

# 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 = {
    "videoUrls": [
        {
            "url": "https://cn.pornhub.com/view_video.php?viewkey="
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraper_master/pornhub-video-full-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 = { "videoUrls": [{ "url": "https://cn.pornhub.com/view_video.php?viewkey=" }] }

# Run the Actor and wait for it to finish
run = client.actor("scraper_master/pornhub-video-full-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 '{
  "videoUrls": [
    {
      "url": "https://cn.pornhub.com/view_video.php?viewkey="
    }
  ]
}' |
apify call scraper_master/pornhub-video-full-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraper_master/pornhub-video-full-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/PvFcIHrEvjBlGpn65/builds/71BBuICA5jKEefxib/openapi.json
