# OnlyFans Search (`deepmine/onlyfans-search`) Actor

OnlyFans search engine and OnlyFans scraper: search creators by keyword or niche and export profiles with price, likes, photo and video counts, and Instagram, X and TikTok links. CSV, JSON or API. No login.

- **URL**: https://apify.com/deepmine/onlyfans-search.md
- **Developed by:** [DeepMine](https://apify.com/deepmine) (community)
- **Categories:** Automation, Lead generation, Social media
- **Features:** Limited permissions
- **Stats:** 16 total users, 8 monthly users, 99.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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/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

## OnlyFans Search: Find Creators by Keyword 🔎

**OnlyFans Search** is an OnlyFans search engine and OnlyFans scraper: type a niche or topic (`cosplay`, `gamer girl`, `yoga`) and export the matching creator profiles with price, likes, photo and video counts, and Instagram, X, TikTok or Fansly links. No OnlyFans account, login or cookies.

What a search returns (real results for `cosplay` and `gamer girl`, 2026-09-26):

| search term | username | price | likes | Instagram | X |
|---|---|---|---|---|---|
| cosplay | ericafett | Free | 986,894 | erica.fett | ericafett |
| gamer girl | laurenlouise228 | $3.50 | 360,259 | laurenlouise_model | laurenlouise228 |

<sub>Collected 2026-09-26.</sub>

**$5 per 1,000 profiles** on the Starter plan ($6 Free, $4 Scale, $3 Business), plus Apify's $0.00005 start event. The prefilled search (`cosplay` + `gamer girl`, 50 each, up to 100 profiles) costs at most about $0.50. Download the results as CSV, Excel or JSON, or call the Actor from your own code through the Apify API and run it on a schedule.

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

### Why search OnlyFans this way? 🤔

Searching OnlyFans itself by niche or topic is limited, and you can't export anything you find. This Actor fills that gap:

- **Search by any term:** `fitness`, `cosplay`, `redhead`, `miami`, `gamer girl`, and so on
- **Run many searches at once:** each term is searched separately, then merged into one deduplicated list
- **Browse without a term:** pull the newest creators or the top-ranked creators
- **Narrow the results:** keep only free profiles, profiles with Instagram, or a likes ceiling
- **Sort your way:** by likes, photos, videos, score, name, or original relevance
- **Export anywhere:** CSV, Excel, JSON, or straight into your own tools through the API

### Who uses OnlyFans Search 👥

- **Agency scouts and talent managers** searching for creators in a specific niche or city
- **Marketers and promoters** looking for creators to partner with on shoutouts or cross-promotion
- **Creators** checking what others in their niche charge and how big they are before setting a price
- **Researchers and analysts** measuring how crowded a niche is, or how free vs. paid pages split
- **Automation builders** who need an OnlyFans search step inside a Make, n8n, or Zapier workflow

### Example searches 💡

| You want to… | Try this |
|---|---|
| Find fitness creators with an Instagram you can contact | Keyword search, `fitness`, `gym`, **Only creators with Instagram** on |
| See what free pages exist in a niche | Keyword search, `cosplay`, **Only free profiles** on |
| Benchmark prices in a city | Keyword search, `miami`, sort by **Likes** |
| Spot small, growing creators | Keyword search, your niche, **Max likes** `2000` |
| Check who just joined the platform | Search type **Newest creators** |
| Get a list of the biggest names | Search type **Top creators** |

### How to search OnlyFans with this Actor 🚀

1. Open the **Input** tab and leave **Search type** on **Keyword search**.
2. Add one or more **Search terms**, one per line.
3. Set **Max results per search term** (start with 50–100 for a quick look).
4. Optionally turn on filters under **Narrow your search** and pick a result order.
5. Click **Start**, then open the results as a table or export them.

A minimal input looks like this:

```json
{
  "searchMode": "query",
  "keywords": ["cosplay", "gamer girl"],
  "maxResults": 50
}
```

A narrower search for small creators who have Instagram:

```json
{
  "searchMode": "query",
  "keywords": ["yoga", "pilates"],
  "maxResults": 200,
  "requireInstagram": true,
  "maxLikes": 2000,
  "sortBy": "likes",
  "sortOrder": "ascending"
}
```

### Input reference ⚙️

| Field | What it does |
|---|---|
| `searchMode` | `query` = keyword search, `new` = newest creators, `top` = top-ranked creators |
| `keywords` | Search terms for keyword search; each one is searched separately |
| `maxResults` | Profile cap per search term (or in total for `new` / `top`), 1–5000 |
| `requireInstagram` | Keep only profiles that list an Instagram account |
| `freeOnly` | Keep only free-subscription profiles |
| `minSubscribers` / `maxSubscribers` | Subscriber range to keep. Profiles that hide their count are left out by a minimum and kept by a maximum |
| `maxLikes` | Skip profiles with more likes than this |
| `country` or `city` (+ `cityRadiusKm`) | The search index's location filter: a country code (`US`, `GB`) or a place or ZIP. Rough location, not a verified residence |
| `gender`, `minAge` / `maxAge`, `newOnly` | The search index's own gender label, listed age and joined-in-the-last-30-days filters |
| `minPrice` / `maxPrice` | Price range in USD per month, checked on the price each row shows (after any promotion) |
| `requireTwitter` / `requireTikTok` / `minLikes` | Keep only creators with an X or TikTok link, or at least this many likes |
| `sortBy` | `relevance`, `likes`, `subscribers`, `photos`, `videos`, `score`, or `name` (default `likes`) |
| `sortOrder` | `descending` (default) or `ascending` |

Profiles that are missing the value you sort by (for example a hidden subscriber count) always go to the end, in both directions. Sorting orders the profiles this run collected, not the whole search index.

Country, city, gender, age and new-creator filters go to the search index itself, so they narrow its whole catalogue (Keyword search and Newest creators only). Profiles a filter leaves out are not delivered and not charged; each row names the index filters it matched in `matchedSourceFilters`. With no filter set, a search works exactly as before.

### What each search result contains 📦

| Field | Example / meaning |
|---|---|
| `username` | OnlyFans username |
| `name` | Display name (plain text: `&` stays `&`) |
| `profileUrl` | `https://onlyfans.com/<username>` |
| `avatar` | Profile photo URL |
| `bio` / `bioSnippet` | Full bio text (plain text, no HTML tags or entities) and a short preview |
| `price` / `isFree` | `Free` or `$9.99`, plus a true/false free flag |
| `likes` / `subscribers` | Total likes and subscriber count (`subscribers` is `null` when the creator hides it, never `0`) |
| `photos` / `videos` | Content counts |
| `lastSeen` | Latest activity status, when shown |
| `score` | Ranking score, when available |
| `instagram`, `instagramUrl`, `instagramUsername` | All Instagram links, the first one as a URL, and the bare handle |
| `twitter`, `tiktok`, `fansly`, `pornhub` | Lists of linked profile URLs |
| `keywords` | Every search term in this run that returned the profile |
| `scrapedAt` | When the profile was collected (ISO timestamp) |

Excerpt of a real record (bio, avatar and name omitted):

```json
{
  "username": "ericafett",
  "profileUrl": "https://onlyfans.com/ericafett",
  "price": "Free",
  "isFree": true,
  "likes": 986894,
  "photos": 940,
  "videos": 12,
  "instagramUrl": "https://instagram.com/erica.fett",
  "instagramUsername": "erica.fett",
  "twitter": ["https://x.com/ericafett"],
  "tiktok": ["https://tiktok.com/@erica.fett"],
  "fansly": null,
  "keywords": ["cosplay"],
  "scrapedAt": "2026-09-26T19:32:43.701380Z"
}
```

#### Three result tables

Every run fills three datasets in the same sort order, so you can open the one that fits the job:

- **Search Results** (default): every profile, with a *Search Results* view and a *Profile Stats* view
- **With Instagram**: only profiles that list an Instagram account, with the Instagram link next to the OnlyFans link
- **With Social Links**: only profiles that list at least one social account, with every platform in its own column

### Use it from your own tools 🔌

This Actor gives you search results as data you can plug into other tools, not just an app you click through by hand. Anything you can do in the Console you can also automate:

- **Apify API:** start a search and read the results over HTTP from any language
- **Python:** call it with the `apify-client` package (example below)
- **Make, n8n, and Zapier:** use the Apify integrations to send new search results to Google Sheets, Airtable, a CRM, Slack, or email
- **Scheduler:** save your input as a task and rerun the same searches daily or weekly
- **Webhooks:** ping your own endpoint when a search finishes

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("deepmine/onlyfans-search").call(
    run_input={"searchMode": "query", "keywords": ["fitness"], "maxResults": 100}
)
for creator in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(creator["username"], creator["price"], creator["likes"])
```

### Related tools 🧭

- Have an Instagram or TikTok handle and want the matching OnlyFans page? Use [OnlyFans Reverse Lookup](https://apify.com/deepmine/onlyfans-reverse-lookup).
- Want 60+ fields (promotions, subscription bundles, and more) for creators you found here? Pass their usernames to [OnlyFans Profile API](https://apify.com/deepmine/onlyfans-profile-scraper-pro).
- Want to know which of their TikToks and Instagram Reels are going viral right now? Paste the usernames into **Creators to watch** in [OnlyFans Viral Content Finder](https://apify.com/deepmine/onlyfans-viral-content-finder), or give it the same search term as a niche.

### Tips for better search results ✅

- **Short terms beat long phrases.** `latina` usually returns more than `latina model from texas`.
- **Use several related terms** (`gym`, `fitness`, `workout`) to cover a niche; overlapping profiles are merged and the `keywords` field shows which terms found them.
- **Sort ascending by likes** to put the smallest creators first. Likes is the most reliable size signal because many creators hide their subscriber count.
- **Keep runs small while you test**, then raise `maxResults` once the results look right.

### FAQ ❓

#### How do I search for creators on OnlyFans?

Enter one or more search terms in this Actor and click Start. You'll get a table of matching creator profiles, with links, prices, stats, and social accounts, that you can export or send to other tools.

#### Can I search OnlyFans by location or city?

Yes. Set `country` (`US`, `GB`, `DE`…) or `city` (a place or ZIP, with an optional radius in km) and the search index keeps the creators it places there: a rough location, not a verified address. You can also type a place as a search term, for example `miami`; the index then matches it in bios or reads it as a place.

#### Can I search OnlyFans without an account?

Yes. You don't need an OnlyFans account, login, or cookies. The Actor only returns publicly listed creator profile information.

#### Can I find free OnlyFans pages only?

Yes. Turn on **Only free profiles** (`freeOnly: true`) and only profiles with a free subscription are kept.

#### Can I search for more than one keyword in one run?

Yes. Add as many search terms as you like. Each term is searched on its own, duplicates are removed, and every profile lists all the terms that found it.

#### How many results can one search return?

Up to 5,000 profiles per search term. You may get fewer when a term has fewer matching creators, when filters remove some, or when your run spending limit is reached.

#### Does it find a creator's Instagram, X, or TikTok?

Yes, when the creator lists them. Instagram, X (Twitter), TikTok, Fansly, and Pornhub links are collected automatically, and profiles that list none still appear in the main results.

#### How much does an OnlyFans search cost?

You pay per result returned. The current price is shown on the Pricing tab, and you can set a maximum spend per run. The Actor stops collecting once that limit is reached.

#### Can I run the same search every day?

Yes. Save your input as an Apify task and attach a schedule. Each run returns a fresh list you can compare with earlier ones or send to Sheets, a CRM, or a webhook.

#### Is it legal to search OnlyFans with this tool?

The Actor only collects publicly listed profile information. You are responsible for how you use the data. Follow applicable privacy and data-protection laws (such as GDPR) and platform terms, and don't use the results for spam or harassment.

# Actor input Schema

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

Keyword search: find creators matching your search terms. Newest creators: recently joined profiles. Top creators: highest-ranked profiles.

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

Enter one search term per line, such as a niche, look, interest, or city. Each term runs as its own search and the results are merged without duplicates.

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

Maximum profiles to return for each search term (or in total for Newest and Top creators). You may get fewer when a search has fewer matches or your run spending limit is lower.

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

Keep only profiles that list an Instagram account.

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

Keep only profiles with a free subscription.

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

Skip profiles with fewer subscribers than this. Leave blank for no minimum.

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

Skip profiles with more subscribers than this. Leave blank for no limit. Profiles that hide their subscriber count count as 0, so they pass any maximum.

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

Skip profiles with more likes than this. Handy for finding smaller or newer creators. Leave blank for no limit.

## `country` (type: `string`):

Two-letter country code, e.g. US, GB, DE or BR. The search index filters its whole catalogue by the rough location it holds for each creator, before any result is read. Rows don't carry a verified country; each row names the filters it matched in matchedSourceFilters. Use either Country or City.

## `city` (type: `string`):

A place such as miami, los angeles or 90210. The index keeps creators it places near it: a rough location, not a verified residence. Use either Country or City.

## `cityRadiusKm` (type: `integer`):

Optional distance around City. Empty = the index's own default area.

## `gender` (type: `string`):

The search index's own gender label for each creator (not checked by this Actor). Most of the index is women, so Women changes little; Men narrows the results to male creators.

## `minAge` (type: `integer`):

The age the search index lists for a creator, as the creator publishes it; not verified. Empty = no limit.

## `maxAge` (type: `integer`):

Upper end of the index's listed age. Empty = no limit.

## `minPrice` (type: `integer`):

Keep creators whose subscription costs at least this much. Checked on the price each row shows, after any promotion: a page on a free-trial promotion shows Free and is left out. Empty = no limit.

## `maxPrice` (type: `integer`):

Keep creators whose shown subscription price is at most this much (0 = free only). Empty = no limit.

## `newOnly` (type: `boolean`):

Keep creators the search index lists as joined in the last 30 days.

## `requireTwitter` (type: `boolean`):

Keep only creators whose OnlyFans listing links an X (Twitter) account.

## `requireTikTok` (type: `boolean`):

Keep only creators whose OnlyFans listing links a TikTok account.

## `minLikes` (type: `integer`):

Keep only profiles with at least this many likes, to skip inactive pages. Empty = no limit.

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

Choose how profiles are ordered in every output dataset. Relevance keeps the original search ranking. It orders the profiles this run collected (up to the maximum per keyword), not the whole search index.

## `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": [
    "cosplay",
    "gamer girl"
  ],
  "maxResults": 50,
  "requireInstagram": false,
  "freeOnly": false,
  "gender": "any",
  "newOnly": false,
  "requireTwitter": false,
  "requireTikTok": 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": [
        "cosplay",
        "gamer girl"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/onlyfans-search").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": [
        "cosplay",
        "gamer girl",
    ],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/onlyfans-search").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 '{
  "keywords": [
    "cosplay",
    "gamer girl"
  ],
  "maxResults": 50
}' |
apify call deepmine/onlyfans-search --silent --output-dataset

```

## MCP server setup

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

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/GZCPBnQZbc6T5Eeau/builds/GrghkZHudmcZDdMXh/openapi.json
