# Pornsok Video Downloader | How to Download Pornsok Videos (`pornvidsdownload/pornsok-video-downloader-how-to-download-pornsok-videos`) Actor

- **URL**: https://apify.com/pornvidsdownload/pornsok-video-downloader-how-to-download-pornsok-videos.md
- **Developed by:** [pornvidsdownload](https://apify.com/pornvidsdownload) (community)
- **Categories:** Videos, Automation, Social media
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Pornsok Video Downloader | How to Download Pornsok Videos

> Download PornsOK videos in the browser with detected MP4 or HLS options, a player button, and 3 free trial downloads.

### Get it Here

Get it here: https://serp.ly/pornsok-downloader

![Pornsok Downloader](https://apps.serp.co/media/optimized-products/pornsok-downloader-homescreen-adult-1ca4a39975.webp)

Downloader for PornsOK adds a browser-based download workflow for supported PornsOK video pages. Open a PornsOK page, let the player load the stream, then use the player button, popup, or right-click menu to save an available MP4 or HLS candidate. The extension scans the active page for playable media signals such as video tags, metadata streams, and recognized direct-video patterns.

- Purpose-built URL matching for pornsok.com, www.pornsok.com, and PornsOK subdomains
- In-player download button configured for the shared BravoPlayer-style wrapper
- Detects video tags, metadata streams, performance resources, script URLs, and encoded media strings
- Handles direct MP4 and HLS candidates through the shared offscreen pipeline
- Right-click menu labeled "Download PornsOK Video"
- Download manager with visible in-page progress
- Saves files under a PornsOK download folder
- GitHub release update checks for serpapps/pornsok-downloader
- OTP activation through auth.serp.co with 3 free trial downloads
### Table of Contents

- [Why Pornsok Downloader](#why-pornsok-downloader)
- [Features](#features)
- [How It Works](#how-it-works)
- [Step-by-Step Tutorial: How to Download Videos from Pornsok](#step-by-step-tutorial-how-to-download-videos-from-pornsok)
- [Supported Formats](#supported-formats)
- [Who It's For](#who-its-for)
- [Common Use Cases](#common-use-cases)
- [Troubleshooting](#troubleshooting)
- [Trial & Access](#trial--access)
- [Installation Instructions](#installation-instructions)
- [FAQ](#faq)
- [Notes](#notes)
- [License](#license)
- [About Pornsok](#about-pornsok)

### Why Pornsok Downloader

PornsOK video pages often hide the actual media URL behind the player flow. The browser's native save options rarely reveal the final stream, and generic download sites can confuse ads, previews, thumbnails, or embeds with the main video. Copy-paste downloader workflows add unnecessary handoffs and often fail to capture the right stream.

This extension brings the SERP downloader workflow directly onto pornsok.com with PornsOK-specific URL matching, player-level controls, static media detection, an organized PornsOK download folder, and shared offscreen stream handling. Instead of digging through page source or network logs, you use familiar browser extension controls to detect and save available video candidates.

### Features

- Purpose-built URL matching for pornsok.com, www.pornsok.com, and PornsOK subdomains
- In-player download button configured for the shared BravoPlayer-style wrapper
- Detects video tags, metadata streams, performance resources, script URLs, and encoded media strings
- Handles direct MP4 and HLS candidates through the shared offscreen pipeline
- Right-click menu labeled "Download PornsOK Video" on page and video contexts
- Download manager with visible in-page progress
- Saves files under a PornsOK download folder
- GitHub release update checks for serpapps/pornsok-downloader
- OTP activation through auth.serp.co with 3 free trial downloads
- Popup and context-menu download entry points
- Quality labels from detected metadata or URL hints where available

### How It Works

1. Install the extension from the latest release.
2. Open PornsOK and go to a supported video page.
3. Start playback so the extension can detect the media.
4. Open the popup or use the on-page controls.
5. Choose the quality option you want.
6. Start the download and wait for the MP4 export to finish.
7. Save the final file locally.

### Step-by-Step Tutorial: How to Download Videos from Pornsok

1. Install the Pornsok Downloader extension from the latest GitHub release.
2. Open your browser and navigate to a PornsOK video page.
3. Wait for the page to fully load and the player to render.
4. Press play on the video if the page waits for interaction before exposing stream URLs.
5. Look for the download button near the player surface or open the extension popup.
6. Right-click anywhere on the page or on the video element and select "Download PornsOK Video" from the context menu.
7. Review the detected media candidates and choose the quality option you prefer.
8. Click download and wait for the offscreen processing to complete, then save the file to your PornsOK folder.

### Supported Formats

- Input: Direct MP4 URLs and HLS/M3U8-style media candidates when those URLs are exposed by the page or player flow
- Output: MP4

Saved files use MP4 so they are easier to replay on standard media players, move between devices, or archive locally.

### Who It's For

- PornsOK viewers who want a simple private browser workflow for personal offline viewing
- Users who prefer browser extension controls over copy-paste downloader websites
- Anyone who needs to check whether a PornsOK player page exposes MP4 or HLS media
- Users who want an in-player control instead of digging through page source or network logs
- SERP QA and support teams documenting what the generated PornsOK candidate can and cannot claim before release

### Common Use Cases

- Save a PornsOK video for offline personal viewing
- Check whether a PornsOK player page exposes MP4 or HLS media
- Use an in-player control instead of digging through page source or network logs
- Start detection from the extension popup or page and video context menu
- Capture release-readiness notes for the generated PornsOK build

### Troubleshooting

**No download button appears on the page**
Refresh the page and make sure the video player has fully loaded. Start playback if the page hides media URLs until the stream begins.

**The extension detects no media candidates**
The player may not have initialized, playback may not have started, or the page may use an unsupported pattern. Try pressing play first, then reopen the popup or right-click menu.

**The download fails or produces a broken file**
Check your internet connection and ensure the stream URL is still valid. Some HLS streams may require retrying the download if segments time out.

**The extension says I have used my trial downloads**
The trial allows 3 free downloads per device. After that, you will need a paid license to continue downloading.

**The extension does not work on a specific PornsOK page**
Some PornsOK pages may use different player configurations or obfuscated media URLs that the current adapter cannot parse. Report the page URL to the development team for review.

### Trial & Access

- Includes **3 free downloads** so you can test the workflow first
- Email sign-in uses secure one-time password verification
- No credit card required for the trial
- Unlimited downloads are available with a paid license

Start here: [https://serp.ly/pornsok-downloader](https://serp.ly/pornsok-downloader)

### Installation Instructions

1. Open the latest release page: [GitHub Releases](https://github.com/serpcompany/pornsok-downloader/releases/latest)
2. Download the correct build for your browser.
3. Install the extension.
4. Open a supported PornsOK page.
5. Use the popup to detect and download the media.

### FAQ

**How do I download a PornsOK video?**
Open a PornsOK video page, press play if needed, then use the player download button, extension popup, or right-click menu to detect available media options.

**Does this work on every PornsOK page?**
Not guaranteed. The current build is a generated candidate with generic static-media extraction, so important PornsOK page types need hands-on QA before release.

**What file types can it detect?**
The extension normalizes direct MP4 URLs and HLS/M3U8-style media candidates when those URLs are exposed by the page or player flow.

**Why might no video appear?**
The player may not have initialized, playback may not have started, the page may use an unsupported pattern, or the adapter may filter the detected URL as noise.

**Where do downloads go?**
The offscreen configuration organizes saved files under a PornsOK download folder.

**Does it send videos to a remote downloader server?**
No remote media downloader is used. Auth and update checks use SERP and GitHub services, while media handling is designed around browser and offscreen processing.

### Notes

- Only download content you own or have explicit permission to save
- An internet connection is required for downloads
- Press play first if detection is empty, as some PornsOK pages only expose media URLs after playback begins
- The current PornsOK adapter is generated and should be tested against real playback before release

### License

This repository is distributed under the proprietary SERP Apps license in the [LICENSE](https://github.com/serpcompany/pornsok-downloader/blob/main/LICENSE) file. Review that file before copying, modifying, or redistributing any part of this project.

### About Pornsok

PornsOK is a video hosting platform that streams adult content through a browser-based player. The Pornsok Downloader extension helps users detect and save available media from PornsOK video pages using a dedicated browser extension workflow instead of generic downloader websites.

# Actor input Schema



## Actor input object example

```json
{}
````

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("pornvidsdownload/pornsok-video-downloader-how-to-download-pornsok-videos").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("pornvidsdownload/pornsok-video-downloader-how-to-download-pornsok-videos").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call pornvidsdownload/pornsok-video-downloader-how-to-download-pornsok-videos --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=pornvidsdownload/pornsok-video-downloader-how-to-download-pornsok-videos",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pornsok Video Downloader | How to Download Pornsok Videos",
        "version": "0.0",
        "x-build-id": "dvdBwOF6IBtp3lVtE"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/pornvidsdownload~pornsok-video-downloader-how-to-download-pornsok-videos/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-pornvidsdownload-pornsok-video-downloader-how-to-download-pornsok-videos",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/pornvidsdownload~pornsok-video-downloader-how-to-download-pornsok-videos/runs": {
            "post": {
                "operationId": "runs-sync-pornvidsdownload-pornsok-video-downloader-how-to-download-pornsok-videos",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/pornvidsdownload~pornsok-video-downloader-how-to-download-pornsok-videos/run-sync": {
            "post": {
                "operationId": "run-sync-pornvidsdownload-pornsok-video-downloader-how-to-download-pornsok-videos",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {}
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
