# Motherless Downloader (`maximedupre/motherless-downloader`) Actor

Download public Motherless videos from known URLs or video IDs. Export fresh direct MP4 links, titles, thumbnails, tags, duration when available, and format data to an Apify dataset.

- **URL**: https://apify.com/maximedupre/motherless-downloader.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Developer tools, Automation
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$9.00 / 1,000 scraped videos

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 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

### 📥 Motherless downloader for public video URLs

Motherless Downloader extracts fresh direct MP4 links and source-backed metadata from public [Motherless](https://motherless.xxx/) video pages. Add one or more `motherless.xxx` video URLs or video IDs, then export a clean Apify dataset with video IDs, titles, thumbnails, tags, duration when available, and all source-exposed MP4 formats.

Use this Motherless downloader when you already have known public video targets and need repeatable exports for content review, cataloging, media operations, research, archiving workflows, or an API pipeline. The Actor works with public, reachable video pages only. You do not need Motherless cookies, a Motherless account, a browser extension, or a source API key.

For a small first run, add one public Motherless video URL or ID and start the Actor. Once the output shape fits your workflow, paste your own batch of public Motherless targets, schedule recurring runs, or call the Actor through the Apify API.

### ✅ What this Actor does

- Accepts public Motherless video page URLs on `motherless.xxx`.
- Accepts bare Motherless video IDs.
- Canonicalizes legacy `motherless.com` video URLs to the current `motherless.xxx` source path.
- Deduplicates repeated URL and ID aliases by video ID.
- Saves one dataset row per successfully resolved public video.
- Returns verified source-hosted MP4 links in `formats`.
- Includes source quality labels, dimensions, and content type when available.
- Adds title, thumbnail URL, tags, and duration when the source page exposes them.
- Skips invalid, duplicate, image-only, private, removed, blocked, or no-media targets without saving paid failure rows.

This Actor is focused on known public Motherless videos. It does not search Motherless, crawl categories, process galleries, access private content, download files into Apify storage, create ZIP archives, or install a browser extension.

### 📦 Data you can export

Each output row represents one public Motherless video where at least one direct MP4 link was found and checked. Core fields include:

- `videoId` - stable Motherless video identifier.
- `title` - video title shown by Motherless, when available.
- `durationSeconds` - video duration in seconds, when available.
- `thumbnailUrl` - source-hosted thumbnail or poster image URL, when available.
- `tags` - source-visible tags or categories.
- `formats` - source-hosted MP4 variants with `mediaUrl`, `quality`, `width`, `height`, and `contentType` when known.

You can open the dataset in Apify, export it as JSON, CSV, Excel, XML, RSS, or HTML, call it through the Apify API, schedule recurring runs, or connect results to webhooks and integrations.

Direct media links can be signed and time-limited. Use exported MP4 URLs soon after the run, or rerun the Actor when you need fresh links. The Actor does not invent missing metadata; nullable fields stay empty when Motherless does not expose them.

### 🚀 How to run

1. Open the Actor input.
2. Add one or more public Motherless video URLs or IDs in **Motherless videos**.
3. Start the Actor.
4. Open the dataset.
5. Use `formats` to choose the MP4 link and quality that fit your workflow.

The Actor pushes successful rows during the run, so you can inspect early results before a larger batch finishes.

### 🧾 Input

| Field | What to enter |
| ----- | ------------- |
| `targets` | One or more public Motherless video URLs from `motherless.xxx` or bare video IDs. |

Input example:

```json
{
	"targets": [
		"https://motherless.xxx/0027819",
		"0027819"
	]
}
````

The public input accepts up to 500 targets per run. Submit fewer targets when you want a smaller test.

### 📤 Output example

```json
{
	"videoId": "0027819",
	"title": "Sample public video",
	"durationSeconds": null,
	"thumbnailUrl": "https://cdn5-thumbs.motherlessmedia.com/thumbs/0027819-small-7.jpg",
	"tags": ["sample", "public"],
	"formats": [
		{
			"mediaUrl": "https://cdn5-videos.motherlessmedia.com/videos/0027819-720p.mp4?validfrom=...",
			"quality": "720p",
			"width": 1280,
			"height": 720,
			"contentType": "video/mp4"
		},
		{
			"mediaUrl": "https://cdn5-videos.motherlessmedia.com/videos/0027819.mp4?validfrom=...",
			"quality": "480p",
			"width": null,
			"height": 480,
			"contentType": "video/mp4"
		}
	]
}
```

### 💰 Pricing

This Actor uses pay-per-event pricing. You are charged only for a successfully scraped video row that contains at least one verified source-hosted MP4 URL.

No charge is added for invalid inputs, duplicate targets, private or removed pages, image-only pages, blocked pages, unsupported targets, empty runs, or videos where no usable MP4 link is found.

### ⚠️ Limits and caveats

Motherless recently moved from `motherless.com` to `motherless.xxx`. Use `motherless.xxx` URLs when possible. Legacy `.com` video URLs are accepted only as an input convenience and are resolved against the current `.xxx` source path.

Some Motherless pages are images, galleries, private pages, removed pages, or pages without public video media. Those targets are skipped and do not create dataset rows.

This Actor returns direct source-hosted MP4 links. It does not copy the video file to Apify storage. Make sure you have the right to access and process the source content in your own workflow.

### ❓ FAQ

#### Can I use this as a Motherless video downloader API?

Yes. Add public Motherless video URLs or IDs in the input and run the Actor from Apify Console, the Apify API, schedules, webhooks, or integrations.

#### Does it download files into Apify storage?

No. The Actor returns fresh source-hosted MP4 links in `formats[].mediaUrl`. It does not mirror files, create ZIP archives, or store video binaries.

#### Does it work with private or login-only videos?

No. The Actor is built for public, reachable Motherless video pages. It does not use user cookies, account sessions, or private browser state.

#### Why did a target produce no row?

The target may be invalid, duplicate, removed, private, image-only, blocked, temporarily unreachable, or missing a public MP4 link. Failed targets are reported in logs and skipped from the dataset.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~motherless-downloader/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [TNAFlix Downloader ↗](https://apify.com/maximedupre/tnaflix-downloader) - Extract direct MP4 links and metadata from public TNAFlix videos.
- [XVideos Downloader ↗](https://apify.com/maximedupre/xvideos-downloader) - Export public XVideos MP4/HLS media links and video metadata.
- [XNXX Video Downloader ↗](https://apify.com/maximedupre/xnxx-video-downloader) - Get direct media links and metadata from public XNXX video URLs or IDs.
- [AShemaleTube Video Downloader ↗](https://apify.com/maximedupre/ashemaletube-video-downloader) - Extract HLS media links and metadata from public AShemaleTube videos.
- [Pornhub Downloader ↗](https://apify.com/maximedupre/pornhub-downloader) - Collect public Pornhub video metadata, tags, engagement, and source-visible media links.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `targets` (type: `array`):

Paste public Motherless video page URLs from motherless.xxx or video IDs.

## Actor input object example

```json
{
  "targets": [
    "D2ED526",
    "F68DC76",
    "AAE544D",
    "E39A01A",
    "C141B4F"
  ]
}
```

# Actor output Schema

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

Open successful video rows with metadata and available MP4 links.

# 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 = {
    "targets": [
        "D2ED526",
        "F68DC76",
        "AAE544D",
        "E39A01A",
        "C141B4F"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/motherless-downloader").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 = { "targets": [
        "D2ED526",
        "F68DC76",
        "AAE544D",
        "E39A01A",
        "C141B4F",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/motherless-downloader").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 '{
  "targets": [
    "D2ED526",
    "F68DC76",
    "AAE544D",
    "E39A01A",
    "C141B4F"
  ]
}' |
apify call maximedupre/motherless-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/motherless-downloader",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Motherless Downloader",
        "description": "Download public Motherless videos from known URLs or video IDs. Export fresh direct MP4 links, titles, thumbnails, tags, duration when available, and format data to an Apify dataset.",
        "version": "0.0",
        "x-build-id": "q3t8PuWs3c7smqtzv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~motherless-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-motherless-downloader",
                "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/maximedupre~motherless-downloader/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-motherless-downloader",
                "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/maximedupre~motherless-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-motherless-downloader",
                "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",
                "required": [
                    "targets"
                ],
                "properties": {
                    "targets": {
                        "title": "Motherless videos",
                        "minItems": 1,
                        "maxItems": 500,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Paste public Motherless video page URLs from motherless.xxx or video IDs.",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
