# Pornapi Video Downloader | How to Download Pornapi Videos (`serpdownloaders/pornapi-video-downloader-how-to-download-pornapi-videos`) Actor

Pornapi Video Downloader | How to Download Pornapi Videos Apify actor.

- **URL**: https://apify.com/serpdownloaders/pornapi-video-downloader-how-to-download-pornapi-videos.md
- **Developed by:** [SERP Downloaders](https://apify.com/serpdownloaders) (community)
- **Categories:** Videos
- **Stats:** 2 total users, 1 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 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.

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

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Pornapi Video Downloader | How to Download Pornapi Videos

> Save Porn API videos from /watch pages with iframe-aware media detection and MP4/HLS handoff tracking.

### Get it Here

Get it here: https://serp.ly/pornapi-downloader?via=apify

![Pornapi Downloader](https://apps.serp.co/media/optimized-products/pornapi-downloader-homescreen-adult-cbc11c6af5.webp)

Downloader for Porn API is a browser extension built for Porn API watch pages that use iframe-based video embedding and multi-host media delivery. Instead of assuming a single static video file, it follows the actual network-style handoff path across Porn API, related media hosts, and CDN endpoints to expose the underlying MP4 or HLS stream. The extension is designed for users who want a browser-first workflow to save publicly accessible videos they have permission to download.

- Works with Porn API `/watch/<slug>` route patterns
- Detects media across multiple domains including CDN hosts
- Supports both MP4 and HLS (m3u8) stream formats
- Iframe-aware detection for embedded player pages
- Verified target row with honest readiness caveats
### Table of Contents

- [Why Pornapi Downloader](#why-pornapi-downloader)
- [Features](#features)
- [How It Works](#how-it-works)
- [Step-by-Step Tutorial: How to Download Videos from Pornapi](#step-by-step-tutorial-how-to-download-videos-from-pornapi)
- [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)
- [License](#license)
- [Notes](#notes)
- [About Pornapi](#about-pornapi)

### Why Pornapi Downloader

Porn API uses an iframe-based page structure where the actual video content may live on a different domain than the watch page you are browsing. The media can move across multiple hosts before reaching your browser, making it difficult to simply copy a URL or inspect the page source. Generic downloaders that assume a single video file often fail on these pages because they do not follow the network handoff path.

This extension is built specifically for Porn API's architecture. It works with the `/watch/<slug>` route pattern, detects media across the related domains and CDN hosts involved in delivery, and surfaces the underlying MP4 or HLS stream. The target row is verified and ready, while the product story honestly acknowledges that some configuration files are still in development.

### Features

- Porn API-specific detection for `/watch/<slug>` watch pages
- Iframe-aware media tracking for embedded player workflows
- Multi-host handoff support across Porn API, related media domains, and CDN endpoints
- MP4 stream detection for direct video file downloads
- HLS (m3u8) stream detection for adaptive bitrate playback
- Verified target row with a tested example URL
- Honest readiness caveats included in documentation
- Browser-first workflow with no additional software required

### How It Works

1. Install the extension from the latest release.
2. Open Porn API 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 Pornapi

1. Navigate to a Porn API watch page using the `/watch/<slug>` URL pattern, such as ``.
2. Wait for the page to fully load, including the iframe-based embedded player.
3. Start video playback so the media handoff path becomes visible.
4. Open the extension popup from your browser toolbar.
5. Allow the extension to detect the media stream across the involved domains.
6. Review the detected stream information, including format and estimated quality.
7. Select the download option to begin saving the video.
8. Choose a local destination for the final MP4 file.

### Supported Formats

- Input: MP4 and HLS (m3u8) streams exposed through Porn API's iframe-driven watch pages, with media handoff across Porn API, related media domains, and CDN hosts
- 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

- Users who browse Porn API watch pages and want to save videos for offline viewing
- People who understand that Porn API uses iframe-based embedding and multi-host media delivery
- Users who prefer a browser extension over standalone downloading software
- Anyone who wants to test a verified target downloader before committing to a paid solution

### Common Use Cases

- Saving a Porn API video to watch offline without an internet connection
- Archiving content you have permission to download for personal reference
- Capturing media that is delivered through an iframe player on a watch page
- Following the media handoff path across multiple domains to access the underlying stream
- Testing the extension with a verified target URL before exploring other content

### Troubleshooting

**The extension does not detect any media on the page**
Make sure you are on a Porn API watch page that follows the `/watch/<slug>` URL pattern. Start video playback so the media handoff path becomes visible to the extension.

**The download fails or produces a broken file**
Try a different video to confirm the issue is not specific to one piece of content. Check your internet connection and ensure the media stream completed loading before you initiated the download.

**The popup does not open**
Verify the extension is installed correctly from the latest release. Try refreshing the Porn API page and clicking the extension icon again.

**The detected stream quality is lower than expected**
Porn API may deliver different quality levels depending on your connection and the specific video. The extension surfaces whatever stream the page exposes.

**The extension behaves differently than expected**
Porn API's configuration files are still being refined, and some edge cases may not yet be fully validated. Report any unexpected behavior through GitHub Issues.

### 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/pornapi-downloader?via=apify](https://serp.ly/pornapi-downloader?via=apify)

### Installation Instructions

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

### FAQ

**What makes Porn API different from a basic one-page video site?**
Porn API uses an iframe-driven watch page with media handoff across several domains, so the workflow requires network-aware detection rather than a simple page scrape.

**What URL pattern should I use for testing?**
The core route is `/watch/<slug>`, with a verified example at ``.

**What stream types does the extension support?**
The extension is designed for MP4 and HLS (m3u8) streams exposed through Porn API's delivery flow.

**Is the target verified for this extension?**
Yes. The target bucket is marked as verified and ready, with a tested example URL available.

**Can I rely on this for production use?**
The target row is verified, but the packet also includes notes about stale configuration files and generated stub status. Use the extension with the understanding that some edge cases may not yet be fully validated.

### Notes

- Only download content you own or have explicit permission to save
- An internet connection is required for downloads
- Porn API may use multiple domains for media delivery, including CDN hosts that change over time
- The extension is designed for the `/watch/<slug>` route pattern and may not work on other Porn API pages

### License

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

### About Pornapi

Porn API is a video platform that delivers adult content through iframe-based watch pages and multi-host media delivery. This extension is built to work with Porn API's specific architecture, offering a browser-first way to save videos from its watch pages while respecting the platform's domain handoff patterns.

# 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("serpdownloaders/pornapi-video-downloader-how-to-download-pornapi-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("serpdownloaders/pornapi-video-downloader-how-to-download-pornapi-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 serpdownloaders/pornapi-video-downloader-how-to-download-pornapi-videos --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Pornapi Video Downloader | How to Download Pornapi Videos",
        "description": "Pornapi Video Downloader | How to Download Pornapi Videos Apify actor.",
        "version": "0.0",
        "x-build-id": "jNsi96ppLOHR7K6vb"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/serpdownloaders~pornapi-video-downloader-how-to-download-pornapi-videos/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-serpdownloaders-pornapi-video-downloader-how-to-download-pornapi-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/serpdownloaders~pornapi-video-downloader-how-to-download-pornapi-videos/runs": {
            "post": {
                "operationId": "runs-sync-serpdownloaders-pornapi-video-downloader-how-to-download-pornapi-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/serpdownloaders~pornapi-video-downloader-how-to-download-pornapi-videos/run-sync": {
            "post": {
                "operationId": "run-sync-serpdownloaders-pornapi-video-downloader-how-to-download-pornapi-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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
