# OnlyFans Discovery Scraper (`sentry/onlyfans-discovery-scraper`) Actor

Discover and collect OnlyFans model profiles with comprehensive data including social media links, engagement metrics, pricing, and statistics.

- **URL**: https://apify.com/sentry/onlyfans-discovery-scraper.md
- **Developed by:** [Sentry](https://apify.com/sentry) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 328 total users, 25 monthly users, 100.0% runs succeeded, 5 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $6.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## OnlyFans Discovery Scraper & Creator Finder 🔎

**OnlyFans Discovery Scraper** is a scalable **OnlyFans creator search, profile discovery, sourcing, and research tool** for teams that need reliable creator data and export-ready datasets.

Use this Actor to find creators faster, search across multiple niches simultaneously, filter by practical signals, and build repeatable discovery workflows for recruiting, outreach, and market research.

> **Unofficial product:** This Actor is independently developed and is not affiliated with, endorsed by, or sponsored by OnlyFans.

Teams typically find this Actor when they need an **OnlyFans discovery scraper**, **OnlyFans profile finder**, **OFM discovery tool**, **OnlyFans creator search tool**, or **OnlyFans dataset builder**.

### What You Get 💡

- Keyword discovery across multiple niches in one run
- Newest-profile and top-profile discovery modes
- Export-ready creator records with pricing, likes, subscribers, photos, and videos
- Practical filters for Instagram availability, free profiles, likes, and subscriber ranges
- Available Instagram, Twitter/X, TikTok, Fansly, and Pornhub links collected automatically
- Cross-keyword deduplication with every matched niche retained on each profile
- Consistent sorting across the main, Instagram outreach, and social-link datasets

### Common Workflows 🎯

- Build creator sourcing and recruiting lists for OFM agencies
- Find early-stage creators with likes and subscriber filters
- Create Instagram-focused outreach lists without manual profile research
- Compare creator availability across several niches in one dataset
- Produce recurring market snapshots for research and planning
- Export structured records to Sheets, Airtable, CRM, or BI workflows

### Input Controls ⚙️

#### Discovery Scope

- `searchMode` — `query` (keyword search), `new` (newest profiles), or `top` (top-ranked profiles)
- `keywords` — one or more search terms; each is searched independently and results are deduplicated
- `maxResults` — maximum profiles per keyword

#### Qualification Filters

- `requireInstagram` — only include profiles with a linked Instagram account
- `freeOnly` — only include free subscription profiles
- `minSubscribers` — minimum subscriber count
- `maxSubscribers` — maximum subscriber count
- `maxLikes` — only include profiles below a likes threshold (useful for finding smaller or early-stage creators)

#### Sorting

- `sortBy` — order profiles by relevance, likes, subscribers, photos, videos, score, or name
- `sortOrder` — descending (highest first or Z-A for names) or ascending (lowest first or A-Z for names)

The default is Likes in descending order. Relevance keeps the original discovery order. Sorting is applied after cross-keyword deduplication, and all three datasets retain the same relative order. Profiles with unavailable values are placed last.

### Output Fields 📦

Depending on profile availability, rows can include:

- `username` — OnlyFans username
- `name` — display name
- `profileUrl` — direct OnlyFans profile link
- `avatar` — profile photo URL
- `bio` — full biography text
- `bioSnippet` — first 50 characters of bio for quick scanning
- `price` — subscription price (e.g. `Free` or `$9.99`)
- `isFree` — boolean free subscription flag
- `likes` — total likes count
- `subscribers` — subscriber count
- `photos` — photo count
- `videos` — video count
- `lastSeen` — latest activity status when available
- `score` — optional discovery score
- `instagram` — array of Instagram profile URLs
- `instagramUrl` — primary Instagram link (single clickable URL)
- `instagramUsername` — primary Instagram handle (bare username for integrations)
- `twitter` — array of Twitter/X profile URLs
- `tiktok` — array of TikTok profile URLs
- `fansly` — array of Fansly profile URLs
- `pornhub` — array of Pornhub profile URLs
- `keywords` — array of keywords this profile matched (across all searches in the run)
- `scrapedAt` — ISO timestamp of when the profile was scraped

### Datasets & Views 📊

Results are split into three datasets for different workflows:

**All Profiles** (default dataset)

- Overview — avatar, username, name, bio snippet, profile link, price, likes, subscribers, photos, videos, last seen, keywords, score
- Stats — username, name, price, free flag, likes, subscribers, photos, videos, last seen, keywords, score

**IG Outreach** — profiles with Instagram only

- Columns: avatar, username, name, Instagram link, OnlyFans link, price, likes, subscribers, keywords

**Social Links** — profiles with any social platform

- Columns: avatar, username, OnlyFans link, Instagram, Twitter/X, TikTok, Fansly, Pornhub, likes, keywords

### Quick Start 🚀

1. Choose a `searchMode` — `query` for keyword targeting, `new` for fresh profiles, `top` for highest-ranked.
2. Add one or more keywords if using Query mode.
3. Set `maxResults` per keyword, apply quality filters, and choose the result order.
4. Run, export from whichever dataset fits your workflow, and segment.
5. Repeat runs to keep your discovery funnel fresh.

### Ready-to-Run Presets

#### Broad Discovery — New Profiles

```json
{
  "searchMode": "new",
  "maxResults": 200,
  "requireInstagram": false
}
```

#### Instagram-First Sourcing

```json
{
  "searchMode": "query",
  "keywords": ["blonde", "fitness", "latina"],
  "maxResults": 100,
  "requireInstagram": true,
  "maxLikes": 1000
}
```

#### Niche Research Scan

```json
{
  "searchMode": "query",
  "keywords": ["fitness", "miami", "gym"],
  "maxResults": 150,
  "requireInstagram": true,
  "maxLikes": 5000
}
```

#### Early-Stage Creator Pipeline

```json
{
  "searchMode": "query",
  "keywords": ["new", "beginner"],
  "maxResults": 100,
  "maxLikes": 500,
  "maxSubscribers": 1000
}
```

#### Top Creators Snapshot

```json
{
  "searchMode": "top",
  "maxResults": 100,
  "requireInstagram": true
}
```

#### Free Creators Only

```json
{
  "searchMode": "query",
  "keywords": ["fitness"],
  "maxResults": 100,
  "freeOnly": true,
  "requireInstagram": true
}
```

### FAQ

#### Is this for broad discovery or targeted sourcing?

Both. Run `new` or `top` mode for broad market discovery, or use Query mode with specific keywords for focused niche targeting.

#### Can I search multiple niches at once?

Yes. Add multiple keywords to the `keywords` list and the Actor searches each one independently, then deduplicates the results. The `keywords` field on each profile shows every niche it matched.

#### Is the output usable in Sheets, BI tools, and internal ops?

Yes. Output is structured and export-friendly across three dedicated datasets.

#### Can I keep only profiles with Instagram?

Yes. Set `requireInstagram` to `true`.

#### Can I filter by subscriber count?

Yes. Use `minSubscribers` and `maxSubscribers` to target specific tiers of creator.

#### Can I use likes as a qualification signal?

Yes. Use `maxLikes` to surface smaller or early-stage creators below a threshold.

#### Are social links included?

Yes. Available Instagram, Twitter/X, TikTok, Fansly, and Pornhub links are collected automatically. Profiles without a listed social account remain in the main dataset unless `requireInstagram` is enabled.

#### What is a good starting configuration for new users?

Start with `searchMode: query`, one or two keywords, `maxResults` around 100, and `requireInstagram` enabled.

#### Can I find only free creators?

Yes. Enable `freeOnly` to limit results to profiles with a free subscription tier.

#### How are results sorted?

Likes, highest first, is the default. You can also sort by relevance, subscribers, photos, videos, score, or name in either direction.

#### Can I use this for recurring discovery?

Yes. Save a task with your preferred keywords, filters, and sorting to produce consistent daily or weekly sourcing runs.

### Build A Repeatable Creator Discovery Workflow

This Actor is optimized for one job: **turning creator discovery into a repeatable, filterable, export-ready workflow**.

For creator sourcing, recruiting, niche research, or market intelligence, this provides multi-keyword search, automatic deduplication, practical qualification filters, and available social links in export-ready datasets.

# Actor input Schema

## `searchMode` (type: `string`):

Query: search by keyword. New Profiles: recently joined creators. Top: highest-ranked profiles.

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

Each keyword is searched separately. Only used in Query mode.

## `maxResults` (type: `integer`):

Maximum profiles to return (per keyword in Query mode, total in New Profiles and Top modes). Actual results may be lower when fewer matches are available or the run spending limit is lower.

## `requireInstagram` (type: `boolean`):

Only include profiles with an Instagram linked.

## `freeOnly` (type: `boolean`):

Only include free subscription profiles.

## `minSubscribers` (type: `integer`):

Minimum subscriber count. Leave blank for no minimum.

## `maxSubscribers` (type: `integer`):

Maximum subscriber count. Leave blank for no limit.

## `maxLikes` (type: `integer`):

Only include profiles with fewer likes than this. Useful for finding smaller or early-stage creators. Leave blank for no limit.

## `sortBy` (type: `string`):

Choose how profiles are ordered across all output datasets. Relevance preserves the original discovery order.

## `sortOrder` (type: `string`):

Descending shows the highest values first (or Z-A for Name); ascending shows the lowest values first (or A-Z for Name).

## Actor input object example

```json
{
  "searchMode": "query",
  "keywords": [
    "blonde"
  ],
  "maxResults": 100,
  "requireInstagram": false,
  "freeOnly": false,
  "sortBy": "likes",
  "sortOrder": "descending"
}
```

# Actor output Schema

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

No description

## `igOutreachUrl` (type: `string`):

No description

## `withSocialsUrl` (type: `string`):

No description

# 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 = {
    "keywords": [
        "blonde"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sentry/onlyfans-discovery-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "keywords": ["blonde"] }

# Run the Actor and wait for it to finish
run = client.actor("sentry/onlyfans-discovery-scraper").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 '{
  "keywords": [
    "blonde"
  ]
}' |
apify call sentry/onlyfans-discovery-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/fJWH1278XvVtlhNUF/builds/TpopFOmikZn7HO7dI/openapi.json
