# Fansly Profile Scraper (`maximedupre/fansly-scraper`) Actor

Find public Fansly creator profiles with one keyword or enrich known public profile identifiers. Get structured records with names, bios, audience metrics, content counts, subscription details, activity, and linked social accounts when available.

- **URL**: https://apify.com/maximedupre/fansly-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Marketing, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.45 / 1,000 creator profiles

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/actors/running/actors-in-store.md#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

### 🔎 Find public Fansly creator profiles

Built for creator researchers, talent teams, marketers, and analysts, Fansly Profile Scraper finds public Fansly creator profiles with one keyword or enriches known public profile identifiers. It saves structured records with profile identity, bios, audience and content metrics, subscription details, activity, and linked social accounts when Fansly exposes them. This gives you a clear creator list with less manual profile checking.

- Find public creator profiles with [**Fansly Creator Finder**](https://apify.com/maximedupre/fansly-scraper/examples/fansly-creator-finder).
- Search public model profiles with [**Fansly Model Search**](https://apify.com/maximedupre/fansly-scraper/examples/fansly-model-search).
- Build an influencer profile list with [**Fansly Influencer Search**](https://apify.com/maximedupre/fansly-scraper/examples/fansly-influencer-search).
- Look up public profiles by a keyword with [**Fansly Profile Search**](https://apify.com/maximedupre/fansly-scraper/examples/fansly-profile-search).
- Enrich known public profiles with [**Fansly Profile Scraper**](https://apify.com/maximedupre/fansly-scraper/examples/fansly-profile-scraper).

#### 📋 Fansly creator profile data

The default dataset saves one structured row for each eligible public creator profile. A row can include the profile ID, username, display name, bio, location, profile links, avatar and banner links, listed categories, audience metrics, content counts, subscription tiers and promotions, account activity, live-stream status, linked social accounts, and the retrieval time. Optional values are present only when the public source exposes them.

#### ▶️ Search or enrich public profiles

1. Set **Target** to **Keyword discovery** and enter one word or phrase, or set it to **Known profiles** and enter public profile identifiers.
2. Add the keyword filters you need, such as a follower minimum, a monthly price limit, or a linked social account requirement. These filters apply only to Keyword discovery.
3. Start the run and open `datasetItems` in the Output panel to view the saved creator profile rows.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `target` | string | Chooses **Keyword discovery** or **Known profiles**. The form starts with Keyword discovery. |
| `keyword` | string | One word or phrase used to find public Fansly creator profiles. Used only with Keyword discovery. |
| `maxItems` | integer | Optional upper bound for Keyword discovery matches. Leave it empty to return all available matches until the source is exhausted. |
| `minFollowers` | integer | Keeps Keyword discovery matches with at least this many followers. Leave it empty to skip this filter. |
| `maxMonthlyPrice` | number | Keeps Keyword discovery matches with a monthly subscription price at or below this USD amount. Leave it empty to skip this filter. |
| `hasInstagram` | boolean | When on, keeps only Keyword discovery matches with a linked Instagram account. When off, includes matches either way. |
| `hasTwitter` | boolean | When on, keeps only Keyword discovery matches with a linked X/Twitter account. When off, includes matches either way. |
| `hasTikTok` | boolean | When on, keeps only Keyword discovery matches with a linked TikTok account. When off, includes matches either way. |
| `profileIds` | array of strings | Enter one public Fansly profile identifier per line to enrich. Used only with Known profiles. |

The public input below is from a successful run with the default input. The `keyword` field starts with `fitness` in the form.

```json
{
  "target": "keyword",
  "keyword": "fitness",
  "maxItems": 10
}
```

#### 🧾 Output

The Output panel provides `datasetItems`, a link to the default dataset overview. Keyword discovery and Known profiles runs use the same creator profile row shape. Fields marked as available may be absent or null when Fansly does not show them.

**Creator profile fields**

| Field | Type | What it does |
| --- | --- | --- |
| `profileId` | string | Public Fansly account identifier. |
| `username` | string | Public Fansly username, when available. |
| `displayName` | string | Name shown on the public Fansly profile, when available. |
| `bio` | string | Public profile description or bio text, when available. |
| `location` | string | Location listed on the public profile, when available. |
| `profileUrl` | URL | Direct URL to the public Fansly profile, when available. |
| `avatarUrl` | URL | Public avatar image URL, when available. |
| `bannerUrl` | URL | Public banner image URL, when available. |
| `categories` | array of strings | Categories listed on the public profile, when available. |
| `engagement` | object | Public audience and like metrics for the profile, when available. |
| `engagement.followerCount` | integer | Number of public followers. |
| `engagement.subscriberCount` | integer | Number of public subscribers. |
| `engagement.mediaLikeCount` | integer | Number of likes on public media. |
| `engagement.postLikeCount` | integer | Number of likes on public posts. |
| `content` | object | Public counts for content types exposed by the profile, when available. |
| `content.postCount` | integer | Number of public posts, when available. |
| `content.imageCount` | integer | Number of public images, when available. |
| `content.videoCount` | integer | Number of public videos, when available. |
| `content.bundleCount` | integer | Number of public bundles, when available. |
| `subscription` | object | Public subscription pricing, tiers, and promotions, when available. |
| `subscription.lowestMonthlyPrice` | number | Lowest monthly-equivalent subscription price in the source currency, when available. |
| `subscription.tiers` | array of objects | Public subscription tiers offered by the creator, when available. |
| `subscription.tiers[].name` | string | Name of the subscription tier, when available. |
| `subscription.tiers[].price` | number | Source price for the subscription tier. |
| `subscription.tiers[].currency` | string | Currency used for the source tier price. |
| `subscription.tiers[].billingPeriod` | string | Source billing period for the tier price. |
| `subscription.tiers[].monthlyPrice` | number | Monthly-equivalent price calculated from the source tier price and billing period. |
| `subscription.tiers[].benefits` | array of strings | Benefits listed for the subscription tier, when available. |
| `subscription.promotions` | array of objects | Active public subscription promotions, when available. |
| `subscription.promotions[].title` | string | Name or title of the promotion, when available. |
| `subscription.promotions[].description` | string | Public description of the promotion, when available. |
| `subscription.promotions[].discountPercentage` | number | Discount percentage offered by the promotion, when available. |
| `subscription.promotions[].price` | number | Source price offered by the promotion, when available. |
| `subscription.promotions[].currency` | string | Currency used for the promotion price, when available. |
| `subscription.promotions[].billingPeriod` | string | Source billing period for the promotion price, when available. |
| `subscription.promotions[].monthlyPrice` | number | Monthly-equivalent price calculated from the promotion price and billing period, when available. |
| `subscription.promotions[].endsAt` | date-time string | Time when the promotion ends, when available. |
| `activity` | object | Public account activity and visibility information, when available. |
| `activity.createdAt` | date-time string | Time when the account was created, when available. |
| `activity.lastSeenAt` | date-time string | Most recent public last-seen time, when available. |
| `activity.isPublic` | boolean | Whether the source reports the profile as public. |
| `liveStreamingEnabled` | boolean | Whether live streaming is enabled on the public profile, when available. |
| `socialLinks` | object | Public social accounts linked from the Fansly profile, when available. |
| `socialLinks.instagram` | object | Linked Instagram account details, when available. |
| `socialLinks.instagram.handle` | string | Linked Instagram handle, when available. |
| `socialLinks.instagram.profileUrl` | URL | Linked Instagram profile URL, when available. |
| `socialLinks.twitter` | object | Linked X or Twitter account details, when available. |
| `socialLinks.twitter.handle` | string | Linked X or Twitter handle, when available. |
| `socialLinks.twitter.profileUrl` | URL | Linked X or Twitter profile URL, when available. |
| `socialLinks.tiktok` | object | Linked TikTok account details, when available. |
| `socialLinks.tiktok.handle` | string | Linked TikTok handle, when available. |
| `socialLinks.tiktok.profileUrl` | URL | Linked TikTok profile URL, when available. |
| `retrievedAt` | date-time string | Time when the Actor retrieved the profile. |

**Example creator profile**

This genuine row is from a successful `fitness` run and is shown in full.

```json
{
  "profileId": "928993345638772736",
  "retrievedAt": "2026-08-27T20:47:53.154Z",
  "username": "kntrs024",
  "profileUrl": "https://fansly.com/kntrs024",
  "displayName": "Na",
  "bio": "Asian female bodybuilder 💪 Sharing my fitness journey, muscles, training, and exclusive content.",
  "avatarUrl": "https://cdn3.fansly.com/928993345638772736/936933663264751616.jpeg?ngsw-bypass=true&Expires=1788522062&Key-Pair-Id=K23PG5J1AWEZX5&Signature=m~V-ZzIV~~be05p2wtIKEQCOY~SN6r4OZ8dqzwAuqBDMtIZGcaKyeTx4u0cncSP87OY5iscdtMi2hGhgXdwKOq76sawRdng-m4d1XMBxB2pcECE1dqDFrperAkm8ciubF0n-SfIleNa89YoGeXAlsvCvAYSEaRbaaemnqze3db3W4SXX-ib~Ybnuery5j8LXNw4GMfRQgDYTGUILfUEvXtFGDkCGmlEiJG~bRpp4EG6DMKSjgwzqqhBgcVv4BRQFxCrO0CvTh4ESQtIij9aSOPdxdNmqHgo95H5LLJSbrmxAsC4agFtNYBvZjJE1ms18Yq~WA9GltvHkLzMo-xZvFg__",
  "engagement": {
    "followerCount": 10,
    "subscriberCount": 0,
    "mediaLikeCount": 5,
    "postLikeCount": 23
  },
  "content": {
    "imageCount": 19,
    "videoCount": 8,
    "bundleCount": 5
  },
  "subscription": {
    "tiers": [
      {
        "name": "Standard",
        "price": 99.9,
        "currency": "USD",
        "billingPeriod": "30 days",
        "monthlyPrice": 99.9,
        "benefits": []
      },
      {
        "name": "Standard",
        "price": 284.71,
        "currency": "USD",
        "billingPeriod": "90 days",
        "monthlyPrice": 94.90333333333332,
        "benefits": []
      },
      {
        "name": "Standard",
        "price": 539.46,
        "currency": "USD",
        "billingPeriod": "180 days",
        "monthlyPrice": 89.91,
        "benefits": []
      }
    ],
    "lowestMonthlyPrice": 89.91
  },
  "activity": {
    "createdAt": "2026-07-02T09:13:53.000Z",
    "lastSeenAt": "2026-08-27T12:45:19.000Z",
    "isPublic": true
  },
  "liveStreamingEnabled": true
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The charged event covers one public creator profile saved to the dataset. The current Store price is the price for each saved profile.

#### 🔌 Integrations

Use `datasetItems` in the Output panel to open the default dataset. You can also read the dataset through the Apify API or export it from the dataset view.

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

#### ❓ FAQ

##### What happens when the same profile appears more than once?

The first eligible match is saved. Later matches for the same profile are ignored, so the saved row describes the first match.

##### Can I use more than one keyword in a run?

No. Each run accepts one keyword or phrase. Start another run when you need to search a different keyword.

##### What does leaving `maxItems` empty do?

It returns all available Keyword discovery matches until the source is exhausted. It does not add a fixed maximum when it is empty.

##### Can I enrich known public profile identifiers?

Yes. Set **Target** to **Known profiles** and enter one public identifier per line. These runs use the same structured creator profile row shape.

##### Are private or paid posts included?

No. The Actor reads public profile data and aggregate counts. It does not access private, subscriber-only, locked, or paywalled content or media.

##### Is this a Fansly downloader?

No. This Fansly scraper returns public profile data. It does not download Fansly photos, videos, or live streams.

##### What if a profile field is missing?

Optional values can be absent or null when Fansly does not expose them. The Actor does not guess missing values.

##### Can I filter profiles by followers, price, or social links?

Yes. Keyword discovery supports a minimum follower count, a maximum monthly subscription price, and linked Instagram, X/Twitter, or TikTok filters.

##### Do I need a Fansly account?

Keyword discovery uses publicly accessible Fansly data and does not need a buyer-supplied source account. The Actor returns public profile data only.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

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

### 🔗 Related Actors

- [Influencer Scraper](https://apify.com/maximedupre/influencer-scraper) finds public creator profiles across TikTok, Instagram, and YouTube.
- [Instagram User Search](https://apify.com/maximedupre/instagram-user-search-scraper) finds public Instagram accounts by keyword.
- [Instagram Profile Stats Scraper](https://apify.com/maximedupre/instagram-profile-stats-scraper) enriches known public Instagram profiles with profile statistics.
- [YouTube Channel Search Scraper](https://apify.com/maximedupre/youtube-channel-search-scraper) finds public YouTube channels by keyword.
- [Patreon Scraper](https://apify.com/maximedupre/patreon-scraper) collects public creator profiles and membership tiers.

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

# Actor input Schema

## `target` (type: `string`):

Choose how to find or enrich public Fansly creator profiles.

## `keyword` (type: `string`):

Enter one word or phrase to find public Fansly creator profiles. Used only with Keyword discovery.

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

Optional limit on creators returned by Keyword discovery. Leave it empty to return all available matches until the source is exhausted.

## `minFollowers` (type: `integer`):

Keep only Keyword discovery matches with at least this many followers. Leave it empty to skip this filter.

## `maxMonthlyPrice` (type: `number`):

Keep only Keyword discovery matches with a monthly subscription price at or below this USD amount. Leave it empty to skip this filter.

## `hasInstagram` (type: `boolean`):

Turn on to keep only Keyword discovery matches with a linked Instagram account. Leave it off to include all matches.

## `hasTwitter` (type: `boolean`):

Turn on to keep only Keyword discovery matches with a linked X/Twitter account. Leave it off to include all matches.

## `hasTikTok` (type: `boolean`):

Turn on to keep only Keyword discovery matches with a linked TikTok account. Leave it off to include all matches.

## `profileIds` (type: `array`):

Enter one public Fansly profile identifier per line to enrich. Used only with Known profiles.

## Actor input object example

```json
{
  "target": "keyword",
  "keyword": "fitness",
  "maxItems": 10
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Open the public creator profile records saved by this run.

# 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 = {
    "target": "keyword",
    "keyword": "fitness",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/fansly-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 = {
    "target": "keyword",
    "keyword": "fitness",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/fansly-scraper").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 '{
  "target": "keyword",
  "keyword": "fitness",
  "maxItems": 10
}' |
apify call maximedupre/fansly-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/IYvNndEii184RpIyQ/builds/ZFYHpMaBlFV7bxgl9/openapi.json
