# Erome Scraper & Video Downloader (`maximedupre/erome-downloader`) Actor

Collect videos and images from public Erome albums, creators, or keyword search. Get stored download links, source links, or an album catalogue with details and previews.

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

## Pricing

from $0.60 / 1,000 media files

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 📥 Collect public Erome videos, images, and albums

Erome Downloader is for developers and media teams who need public album files or a catalogue. Get videos, images, download links, album details, and previews in an Apify dataset. Use the rows to review content or pass files and details to your own workflow.

- Save public media with **[Erome Downloader](https://apify.com/maximedupre/erome-downloader/examples/erome-downloader)**.
- Collect video files with **[Erome Video Downloader](https://apify.com/maximedupre/erome-downloader/examples/erome-video-downloader)**.
- Save album photos with **[Erome Image Downloader](https://apify.com/maximedupre/erome-downloader/examples/erome-image-downloader)**.
- Collect files from known albums with **[Erome Album Downloader](https://apify.com/maximedupre/erome-downloader/examples/erome-album-downloader)**.
- Export public album details with **[Erome Scraper](https://apify.com/maximedupre/erome-downloader/examples/erome-scraper)**.

#### 📦 Erome files and album details

Choose media rows or an album catalogue. Media rows hold one video or image with its file link and source details. Album rows hold one public album with its available tags, creator details, counts, and previews.

Stored files have download links that work without source login, cookies, or special headers while the files remain in run storage. Links only returns source links without copying files. The ZIP option adds an archive of the files collected from each album. It does not promise every file from the album.

The Actor saves the first eligible occurrence of each source item as it finds it and ignores later copies. It keeps only the first saved match, rather than adding later keywords or creators to the row.

#### ▶️ Run an Erome collection

1. Choose a result type for media or albums, and choose album URLs, creators, or keywords as its source.
2. Fill the matching source list. Other source lists are ignored.
3. For media, choose videos, images, or both and a delivery option.
4. Set Maximum results for a small run, or leave it empty for all available results until the source is exhausted.
5. Start the run and open the dataset for file links and details.

Only public content is supported. Private, login-only, and paywalled content is outside the product. Source quality is reported as found; the Actor does not make higher video resolutions.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Required. Choose `mediaAlbumUrls`, `mediaCreators`, `mediaKeywords`, `albumsAlbumUrls`, `albumsCreators`, or `albumsKeywords`. Each choice sets the row type and source list. |
| `albumUrls` | array of objects | Public Erome album URLs for either album-URL result choice. |
| `albumUrls[].url` | string | A public Erome album URL. |
| `creators` | array of strings | Usernames or public profile URLs for either creator result choice. |
| `keywords` | array of strings | Search phrases for either keyword result choice. Each phrase finds public albums through Erome search. |
| `mediaType` | string | `both`, `videos`, or `images`. Default: `both`. Used only for media choices. |
| `delivery` | string | `files` stores files, `links` returns source links only, and `filesAndZip` stores files and an album ZIP. Default: `files`. Used only for media choices. |
| `maxItems` | integer | Limits total results across all inputs, counting media files or albums for the chosen row type. Minimum: 1. Leave empty to return all available results until the source is exhausted. |

**Example input**

This is the public input from a successful current-beta run using the form's default choices.

```json
{
  "resultType": "mediaAlbumUrls",
  "albumUrls": [
    {
      "url": "https://www.erome.com/a/k8cRmZQC"
    }
  ],
  "mediaType": "both",
  "delivery": "files",
  "maxItems": 1
}
```

#### 🧾 Output

The `results` output link opens the default dataset. Source details are omitted when unavailable. The dataset has two row shapes.

**Dataset access**

| Field | Type | What it does |
| --- | --- | --- |
| `results` | string | Opens the media and album rows in the default dataset overview. |

**Media row fields**

| Field | Type | What it does |
| --- | --- | --- |
| `rowType` | string | `media`. |
| `albumId` | string | Source album ID. |
| `albumUrl` | string | Public album page. |
| `albumTitle` | string | Album title when available. |
| `tags` | array of strings | Album tags when available. |
| `uploader` | object | Available creator details. |
| `uploader.username` | string | Creator username. |
| `uploader.profileUrl` | string | Creator profile page. |
| `uploader.avatarUrl` | string | Creator avatar image. |
| `discoveredBy` | string | First submitted keyword or creator that led to the saved match. Omitted for direct album URLs. |
| `mediaCount` | integer | Source-reported total media count for the album. |
| `videoCount` | integer | Source-reported video count. |
| `imageCount` | integer | Source-reported image count. |
| `viewCount` | integer | Source-reported album views. |
| `mediaId` | string | Source media ID. |
| `mediaType` | string | `video` or `image`. |
| `position` | integer | Position in the album, starting at 1. |
| `downloadUrl` | string | Apify file link for stored files, or source file link for links only. |
| `fileFormat` | string | File format, such as `mp4` or `jpg`. |
| `fileSizeBytes` | integer | Actual file size in bytes when available. |
| `previewUrl` | string | Image preview or video thumbnail. |
| `durationSeconds` | number | Video length in seconds when available. |
| `dimensions` | object | Source pixel size when available. |
| `dimensions.width` | number | Width in pixels. |
| `dimensions.height` | integer | Height in pixels. |
| `quality` | string | Source video quality label when available. |
| `albumZipUrl` | string | Stored ZIP link for files collected from the album, when requested. |

This complete media row comes from a successful current-beta run with stored files.

```json
{
  "rowType": "media",
  "albumId": "k8cRmZQC",
  "albumUrl": "https://www.erome.com/a/k8cRmZQC",
  "albumTitle": "Essa loirinha é um tesão, 19 aninhos natural começou no +18",
  "tags": [],
  "uploader": {
    "username": "Farol-Bronze-Sexo",
    "profileUrl": "https://www.erome.com/Farol-Bronze-Sexo",
    "avatarUrl": "https://avatar.erome.com/36x36/2510/mN84VvRy.jpg?t=1789223925"
  },
  "imageCount": 3,
  "videoCount": 5,
  "mediaCount": 8,
  "viewCount": 15700,
  "mediaId": "F4mFGoxq",
  "position": 1,
  "mediaType": "image",
  "downloadUrl": "https://api.apify.com/v2/key-value-stores/Qb9uQCM8hhjgHBUjv/records/media-k8cRmZQC-1-F4mFGoxq.jpg?signature=1gUizYY3AAbAcMQ7XlVpg",
  "fileFormat": "jpg",
  "previewUrl": "https://s73.erome.com/9184/k8cRmZQC/F4mFGoxq.jpg?v=1790822572",
  "dimensions": {
    "width": 970,
    "height": 1500
  },
  "fileSizeBytes": 173374
}
```

**Album row fields**

| Field | Type | What it does |
| --- | --- | --- |
| `rowType` | string | `album`. |
| `albumId` | string | Source album ID. |
| `albumUrl` | string | Public album page. |
| `albumTitle` | string | Album title when available. |
| `tags` | array of strings | Album tags when available. |
| `uploader` | object | Available creator details. |
| `uploader.username` | string | Creator username. |
| `uploader.profileUrl` | string | Creator profile page. |
| `uploader.avatarUrl` | string | Creator avatar image. |
| `discoveredBy` | string | First submitted keyword or creator that led to the saved match. Omitted for direct album URLs. |
| `mediaCount` | integer | Source-reported total media count. |
| `videoCount` | integer | Source-reported video count. |
| `imageCount` | integer | Source-reported image count. |
| `viewCount` | integer | Source-reported album views. |
| `previews` | array of strings | Available image previews and video thumbnails. |

This complete album row comes from a successful current-beta run.

```json
{
  "rowType": "album",
  "albumId": "v2TtXKRJ",
  "albumUrl": "https://www.erome.com/a/v2TtXKRJ",
  "albumTitle": "Amateur brunette babe with big natural tits home video",
  "tags": [
    "#big tits",
    "#brunette",
    "#beautiful",
    "#pov",
    "#homemade",
    "#amateur",
    "#big tits brunette",
    "#big natural tits",
    "#amateur couple"
  ],
  "uploader": {
    "username": "Fandelkorith",
    "profileUrl": "https://www.erome.com/Fandelkorith"
  },
  "videoCount": 1,
  "viewCount": 9100,
  "previews": [
    "https://s17.erome.com/9186/v2TtXKRJ/54JPmkjz.jpg"
  ]
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. A media event covers one video or image returned with its link and details. An album event covers one album catalogue entry. Stored media also has a charge for each started 10 MB block of a successfully stored file, with at least one block per file.

Links only does not store files, so it does not add stored-file events. Check the Store pricing tab for current rates and plan tiers. Set `maxItems` to limit the number of results; file sizes also affect stored-file charges.

#### 🔌 Integrations

Use the Apify API to start runs and read the dataset. You can export rows as JSON or CSV, schedule repeat runs, or use Apify webhooks and integrations in your workflow.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Will stored download links keep working forever?

No. They work while the files remain in run storage. Save a copy in your own storage if you need to keep it after those files are deleted.

##### What happens when several inputs find the same media or album?

The first eligible occurrence is saved. Later copies are ignored. `discoveredBy` shows only the first submitted keyword or creator that led to the saved match.

##### Does the album ZIP include every file on the source page?

It includes the files successfully collected from that album. A result limit or a file that cannot be collected can make it smaller than the source album.

##### Why is a source field missing?

Source details appear only when available. Counts describe what the source reports for the album, rather than the number of files saved by your run.

##### Can I fill all three source lists?

Only the list chosen by `resultType` is used. Use separate runs for different source modes.

##### Can I collect details without downloading files?

Yes. Choose Links only for media links and details, or choose an Album catalogue result type for album details and previews.

##### Do I need an Erome login?

No for public albums. Private, login-only, and paywalled content is not supported.

### 📝 Changelog

**v0.0** (02-10-2026)

- Initial release.

### 🆘 Support

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

### 🔗 Related Actors

- [RedGifs Bulk Video Downloader](https://apify.com/maximedupre/redgifs-bulk-downloader): find public RedGifs videos and collect source MP4 links and details.
- [Motherless Downloader](https://apify.com/maximedupre/motherless-downloader): get source MP4 links from known public Motherless video URLs or IDs.
- [EroThots Video Downloader](https://apify.com/maximedupre/erothots-media-downloader): resolve known public EroThots videos into MP4 links and quality details.
- [LuxureTV Video Downloader](https://apify.com/maximedupre/luxuretv-downloader): collect source MP4 links and details from public LuxureTV video pages.
- [Tokyomotion Video Downloader | Download Tokyomotion Videos](https://apify.com/maximedupre/tokyomotion-video-downloader): save playable MP4 files from public TokyoMotion video URLs.

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

# Actor input Schema

## `resultType` (type: `string`):

Choose videos and images, or an album catalogue with details and previews. Also choose album URLs, creators, or keyword search as the source.

## `albumUrls` (type: `array`):

Add one or more public Erome album URLs. Used for Media from album URLs and Album catalogue from album URLs.

## `creators` (type: `array`):

Add one or more Erome usernames or public profile URLs. Used for Media from creators and Album catalogue from creators.

## `keywords` (type: `array`):

Add one or more search phrases. Each phrase finds public albums through Erome search. Used for Media from keywords and Album catalogue from keywords.

## `mediaType` (type: `string`):

Choose videos, images, or both. Used for all three Media result choices.

## `delivery` (type: `string`):

Stored files gives download links that need no source cookies or special headers. Links only returns source links and details without downloading files. Stored files and album ZIP also adds a ZIP for each album with its successfully collected files. Used for all three Media result choices.

## `maxItems` (type: `integer`):

Stop after this many results across all inputs. Counts videos and images for Media, or albums for Album catalogue. Leave blank to collect all available results until the source is exhausted.

## Actor input object example

```json
{
  "resultType": "mediaAlbumUrls",
  "albumUrls": [
    {
      "url": "https://www.erome.com/a/k8cRmZQC"
    }
  ],
  "mediaType": "both",
  "delivery": "files",
  "maxItems": 1
}
```

# Actor output Schema

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

View the collected media and album details in the default dataset.

# 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 = {
    "resultType": "mediaAlbumUrls",
    "albumUrls": [
        {
            "url": "https://www.erome.com/a/k8cRmZQC"
        }
    ],
    "maxItems": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/erome-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 = {
    "resultType": "mediaAlbumUrls",
    "albumUrls": [{ "url": "https://www.erome.com/a/k8cRmZQC" }],
    "maxItems": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/erome-downloader").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 '{
  "resultType": "mediaAlbumUrls",
  "albumUrls": [
    {
      "url": "https://www.erome.com/a/k8cRmZQC"
    }
  ],
  "maxItems": 1
}' |
apify call maximedupre/erome-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/erome-downloader"
        }
    }
}
```

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/P36dlmJPDDMyEVzg1/builds/XlniecycNbTZXDVWB/openapi.json
