# Buy Me a Coffee Creator Scraper - Profiles & Memberships (`ahmed_jasarevic/bmc-creator-scraper`) Actor

Scrape Buy Me a Coffee creator profiles and discover creators by keyword: name, bio, avatar, social links, public emails, membership tiers & prices, supporter counts, earnings signals, shop products and post links.

- **URL**: https://apify.com/ahmed\_jasarevic/bmc-creator-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Categories:** Developer tools, Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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.

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

## Buy Me a Coffee Creator Scraper — Profiles, Memberships, Shop & Earnings Signals

Scrape **Buy Me a Coffee** creator profiles (`buymeacoffee.com/{handle}`) and **discover creators by keyword** in one run. Extract the full creator record: **name, bio, avatar, work, social/website links, public emails, membership tiers & prices, supporter counts, earnings signals, shop products/prices and featured post links** — ready for influencer outreach, creator-economy marketing and lead generation.

Built on the Apify platform — get results as clean JSON/CSV/Excel via API, schedule recurring runs, and integrate with any workflow.

### Why use this actor?

- **Creator discovery built in** — search the public Buy Me a Coffee sitemap by keyword (e.g. `design`, `podcast`, `artist`, `writer`) or pull the newest creators from the explore page, then scrape them all in one run. No need to know handles upfront.
- **Outreach-ready data** — every record includes social links, website, public emails (when the creator shares them), a bio and a work tagline — exactly what influencer outreach agencies and lead-gen teams need to qualify and contact creators.
- **Earnings intelligence** — membership tiers with monthly/yearly prices and active member counts, public supporter counts, shop product counts and sales, goal progress and payout status give a solid picture of a creator's monetization.
- **Fast and cheap** — Buy Me a Coffee is a Laravel + Inertia.js app that server-renders everything into an embedded JSON block, so the actor scrapes over plain HTTP (**CheerioCrawler**, no browser per page): ~10–50x faster and a fraction of the compute cost of browser scrapers.
- **Safe by default** — hard caps on items and requests; free users get a 10-profile preview.

### How to use

1. Open the actor on Apify, switch to the **Input** tab.
2. Enter creator handles (e.g. `janlosert`), or set a **search keyword**, or tick **scrape newest creators**.
3. Set **Max creators** and **Max requests per crawl**.
4. Click **Start**.
5. Download the dataset as JSON, CSV or Excel.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `handles` | array | — | Direct Buy Me a Coffee usernames, e.g. `["janlosert","TheNewAtlas"]` |
| `startUrls` | array | — | Direct profile URLs (equivalent to handles) |
| `searchKeyword` | string | — | Keyword to discover creators by username in the public sitemap |
| `scrapeExplore` | boolean | `false` | Scrape the newest creators from the explore-creators page |
| `maxItems` | integer | `50` | Max creator profiles per run (hard cap 500) |
| `maxRequestsPerCrawl` | integer | `150` | Max total HTTP requests (hard cap 1000) |
| `proxy` | object | Apify proxy ON | Route requests through the Apify proxy |

### Output

One dataset record per creator. Simplified example:

```json
{
  "handle": "thenewatlas",
  "name": "TheNewAtlas",
  "work": "Videos on geopolitics, technology, and building up communities",
  "bio": "I am Brian Berletic, a geopolitical analyst based in Bangkok...",
  "avatarUrl": "https://cdn.buymeacoffee.com/uploads/profile_pictures/...",
  "profileUrl": "https://buymeacoffee.com/thenewatlas",
  "twitterHandle": "brian_berletic",
  "websiteLinks": ["https://newatlas.report/"],
  "socialLinks": [],
  "publicEmails": [],
  "coffeePrice": 5,
  "currency": "USD",
  "publicSupporterCount": 3308,
  "membershipEnabled": true,
  "membershipTiers": [
    {
      "title": "The Troops",
      "priceMonthly": 5,
      "priceYearly": 50,
      "activeMembers": 244,
      "benefits": ["Support me on a monthly basis", "Unlock exclusive posts and messages"]
    }
  ],
  "posts": [{ "title": "Merry Christmas...", "url": "https://buymeacoffee.com/thenewatlas/...", "viewCount": 2924 }],
  "shop": { "productCount": 0, "salesCount": 0, "reviewCount": 0 },
  "shopProducts": [],
  "goal": null,
  "earningsSignals": ["payout_connected", "membership_enabled", "public_supporters:3308"]
}
```

You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**.

### Data table

| Field | Description |
|---|---|
| `handle` / `name` / `work` | Creator identity |
| `bio` / `bioHtml` | Creator bio (plain text + raw HTML) |
| `avatarUrl` / `coverImageUrl` | Profile avatar and cover image |
| `twitterHandle` / `websiteLinks` / `socialLinks` | Social & website links (classified by platform) |
| `publicEmails` | Emails found in the bio/links (creators who publish them) |
| `coffeePrice` / `currency` | Price of one "coffee" donation and currency |
| `publicSupporterCount` / `supporterCountHidden` | Public supporter count and whether the creator hides it |
| `membershipTiers` | Tier name, monthly/yearly/lifetime price, benefits, active members, member limit, trial days |
| `subscriptionCount` / `monthlyIncome` | Subscription count and monthly income (when the creator makes them public) |
| `goal` | Fundraising goal: target, current, percentage, type |
| `posts` | Featured posts: title, URL, view/like/comment counts, dates |
| `shop` / `shopProducts` | Shop stats and products: title, price, member price, sales, images |
| `earningsSignals` | Flags: payout connected, membership enabled, supporter count, monthly income, goal, shop sales |

### How much does it cost to scrape Buy Me a Coffee?

The actor uses **plain HTTP** (no browser), so compute costs are low — roughly one request per creator (~1 second each with Apify proxy). A 50-creator run typically finishes in well under a minute. Free Apify users get a **10-profile preview**; paid users can run up to 500 profiles per run.

### Tips & advanced options

- **Search is slug-based** — `searchKeyword` matches usernames, so pick broad keywords (e.g. `design`, `coffee`, `art`) to get more hits.
- **Combine modes** — you can pass handles AND a keyword AND explore in one run; results are deduplicated per creator handle.
- **Proxy** — the residential Apify proxy group is recommended if you scale to thousands of profiles; the default group is fine for most runs.
- **Watch the caps** — keep `maxItems` realistic for your use case to control compute spend.

### FAQ, disclaimers & support

- **Is scraping Buy Me a Coffee legal?** Scraping public profile data for research and outreach is generally acceptable, but always respect Buy Me a Coffee's Terms of Service, robots.txt, copyright and privacy. Don't use the data for spam.
- **Why are `publicEmails` usually empty?** Buy Me a Coffee doesn't expose creator emails publicly. The actor only picks up emails creators share in their bio or links.
- **Why is `monthlyIncome` often null?** Most creators keep earnings private; the field is only populated when the creator enables public earnings visibility.
- Known limitation: the on-site keyword search page is client-side rendered, so discovery uses the official public sitemap + explore page instead.
- Found a bug or need a custom version? Open an issue or contact us for a tailored solution.

# Actor input Schema

## `handles` (type: `array`):

Buy Me a Coffee usernames to scrape, e.g. \["janlosert", "TheNewAtlas"]. Each handle maps to https://buymeacoffee.com/{handle}.

## `startUrls` (type: `array`):

Direct profile URLs to scrape, e.g. https://buymeacoffee.com/somecreator. (Optional — same effect as handles.)

## `searchKeyword` (type: `string`):

Keyword to find creators by username in the public Buy Me a Coffee sitemap (e.g. "design", "podcast", "artist"). The actor then scrapes the matching profile pages.

## `scrapeExplore` (type: `boolean`):

Also scrape the public explore-creators page which lists the newest creators on the platform.

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

Maximum number of creator profiles to scrape in one run (hard cap 500).

## `maxRequestsPerCrawl` (type: `integer`):

Hard cap on total HTTP requests (profile pages + sitemaps). Protects against runaway runs.

## `proxy` (type: `object`):

Route requests through the Apify proxy (default ON). The residential group is preferred if you hit blocks.

## Actor input object example

```json
{
  "handles": [
    "janlosert",
    "TheNewAtlas"
  ],
  "startUrls": [
    {
      "url": "https://buymeacoffee.com/janlosert"
    }
  ],
  "searchKeyword": "design",
  "scrapeExplore": false,
  "maxItems": 50,
  "maxRequestsPerCrawl": 150,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "handles": [
        "janlosert",
        "TheNewAtlas"
    ],
    "startUrls": [
        {
            "url": "https://buymeacoffee.com/janlosert"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/bmc-creator-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 = {
    "handles": [
        "janlosert",
        "TheNewAtlas",
    ],
    "startUrls": [{ "url": "https://buymeacoffee.com/janlosert" }],
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/bmc-creator-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 '{
  "handles": [
    "janlosert",
    "TheNewAtlas"
  ],
  "startUrls": [
    {
      "url": "https://buymeacoffee.com/janlosert"
    }
  ]
}' |
apify call ahmed_jasarevic/bmc-creator-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/bmc-creator-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/HjEEfjOM7HmHzwQz3/builds/SdvmwOtMstOQI6DVS/openapi.json
