# Ko-fi Profile Scraper (`ahmed_jasarevic/ko-fi-profile-scraper`) Actor

Extract public data from Ko-fi creator profiles: profile name, avatar, bio, supporter counts, membership tiers & prices, links, social profiles and more. For influencer outreach teams, creator-economy marketers and lead gen agencies.

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

## Pricing

from $2.50 / 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

## Ko-fi Profile Scraper

### What does Ko-fi Profile Scraper do?

This Actor extracts **public profile data from any Ko-fi creator page** (`ko-fi.com/{username}`): profile name, avatar, banner, bio, **supporter count**, **membership tiers & prices**, member counts per tier, main website, **social profiles** (Instagram, X/Twitter, Facebook, TikTok, etc.), funding goal and currency. It is built for **influencer outreach teams, creator-economy marketers and lead-gen agencies** who need to qualify creators before outreach.

It runs on the [Apify platform](https://apify.com) — you get API access, scheduling, proxy rotation and monitoring out of the box. Just paste a list of Ko-fi usernames and download the structured dataset.

### Why use Ko-fi Profile Scraper?

- **Qualify creators fast** — supporter counts and membership tier pricing reveal how engaged and monetized a creator's audience is before you reach out.
- **Build outreach lists** — batch-scrape hundreds of profiles and export to CSV/Excel for your CRM or outreach tool.
- **Find contact channels** — every public link and social profile is captured so your team knows where to reach each creator.
- **Cheap and fast** — the Ko-fi profile page is server-rendered, so this Actor uses plain HTTP (CheerioCrawler) through the Apify proxy — no expensive browser sessions.

### How to use Ko-fi Profile Scraper

1. Open the Actor in Apify Console and click **Start**.
2. In the **Input** tab, enter the Ko-fi usernames you want to scrape (e.g. `mochibuddies`, `explodingheads`). You can also paste full URLs like `https://ko-fi.com/mochibuddies`.
3. Optionally adjust **Max profiles** (hard cap per run) and the **Proxy configuration** (Residential is recommended).
4. Click **Start** and wait for the run to finish.
5. Download the results from the **Dataset** tab in JSON, CSV, HTML or Excel.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `usernames` | array of strings | Ko-fi usernames or full profile URLs to scrape (required) |
| `maxProfiles` | integer | Hard cap on profiles scraped per run (default `100`) |
| `proxy` | object | Apify proxy configuration (defaults to Residential) |

Example input:

```json
{
  "usernames": ["mochibuddies", "explodingheads", "https://ko-fi.com/geekshock/tiers"],
  "maxProfiles": 100
}
```

### Output

One dataset item per profile. Example:

```json
{
  "username": "mochibuddies",
  "profileUrl": "https://ko-fi.com/mochibuddies",
  "found": true,
  "profileName": "Mochi Buddies",
  "avatarUrl": "https://cdn.ko-fi.com/cdn/useruploads/54e103c3-6480-4b88-87ef-8a7a1e6c969e.jpg",
  "bannerUrl": "https://storage.ko-fi.com/cdn/useruploads/jpg_7296c66c-...cover.jpg",
  "bio": "Hello! Thanks for dropping by on Mochi Buddies! ...",
  "supporterCount": 647,
  "followerCount": null,
  "membershipTiers": [
    {
      "name": "mochi companion",
      "pricePerMonth": 3,
      "memberCount": null,
      "description": "Enjoying my creations? ...",
      "benefits": ["Exclusive Content", "Digital Wallpapers"]
    }
  ],
  "mainWebsiteUrl": "https://www.mochibuddies.com/",
  "socialLinks": [
    { "platform": "instagram", "url": "https://instagram.com/mochibuddies" },
    { "platform": "facebook", "url": "https://facebook.com/mochibuddies" },
    { "platform": "x", "url": "https://x.com/mochibuddies" },
    { "platform": "tiktok", "url": "https://www.tiktok.com/@mochibuddies" }
  ],
  "email": null,
  "goal": { "title": "✨ Future mochibuddies Retail Shop ✨", "percentage": 36, "description": "..." },
  "currency": "USD",
  "scrapedAt": "2026-08-15T06:12:32.599Z"
}
```

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

### Data table

| Field | Description |
|-------|-------------|
| `username` | Ko-fi username |
| `profileName` | Display name of the creator |
| `avatarUrl` | Profile picture URL |
| `bannerUrl` | Cover/banner image URL |
| `bio` | "About" text from the profile |
| `supporterCount` | Total number of supporters shown on the page |
| `followerCount` | Follower count (not publicly exposed on Ko-fi — always `null`) |
| `membershipTiers` | Array of tiers: name, price per month, member count, description, benefits |
| `mainWebsiteUrl` | Creator's main website link |
| `socialLinks` | Array of `{ platform, url }` social profile links |
| `email` | Email address (not publicly exposed on Ko-fi — always `null`) |
| `goal` | Current funding goal: title, percentage, description |
| `currency` | Creator's currency code (e.g. `USD`) |
| `found` | `false` when the username does not exist |

### Pricing / Cost estimation

How much does it cost to scrape Ko-fi profiles?

- **Free tier**: free (non-paying) Apify users get a capped preview of **10 profiles per run**.
- **Paid runs**: each profile is a single lightweight HTTP request through the Apify proxy. A run of 100 profiles typically finishes in under a minute and costs a fraction of a compute unit — far cheaper than browser-based scrapers.
- **Proxy**: Residential proxy usage is included in Apify paid plans. If you see Cloudflare challenges, switch the proxy group to Residential.

### Tips or Advanced options

- **Batch by list**: paste up to hundreds of usernames in one run — the Actor processes them concurrently (max 5) with retries and timeouts built in.
- **Residential proxy**: if a profile returns `blocked: true` with `blockReason: cloudflare_challenge`, re-run with the Residential proxy group selected.
- **Normalize URLs**: full URLs like `https://ko-fi.com/geekshock/tiers` are automatically reduced to the username.
- **Non-existent profiles**: Ko-fi redirects unknown usernames to the homepage; the Actor records them with `found: false` instead of failing the run.

### FAQ, disclaimers, and support

**Is scraping Ko-fi legal?** This Actor only collects publicly visible profile data. Always review Ko-fi's Terms of Service and respect robots.txt before large-scale use or redistribution. Ko-fi's robots.txt disallows `/api/` paths; this Actor only fetches public profile pages.

**Why is `email` always null?** Ko-fi does not publicly expose creator email addresses on profile pages. Use the captured social links and website for outreach instead.

**Why is `followerCount` null?** Ko-fi does not display follower counts publicly — only supporter counts.

**Known limitations**: Some creators hide their supporter count or membership tiers; those fields will be `null`/empty. Data is as shown on the public page at scrape time.

Found a bug or want a custom feature (e.g. top supporters, shop items, posts)? Open an issue on the Actor's Issues tab or contact us for a custom solution.

# Actor input Schema

## `usernames` (type: `array`):

Ko-fi usernames to scrape. You can paste bare usernames (e.g. "mochibuddies") or full profile URLs (e.g. "https://ko-fi.com/mochibuddies").

## `maxProfiles` (type: `integer`):

Maximum number of profiles to scrape in this run (hard cap).

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

Apify Proxy with Residential IPs is recommended to avoid Cloudflare blocking.

## Actor input object example

```json
{
  "usernames": [
    "mochibuddies",
    "explodingheads"
  ],
  "maxProfiles": 100,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "usernames": [
        "mochibuddies",
        "explodingheads"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/ko-fi-profile-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 = {
    "usernames": [
        "mochibuddies",
        "explodingheads",
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/ko-fi-profile-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 '{
  "usernames": [
    "mochibuddies",
    "explodingheads"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call ahmed_jasarevic/ko-fi-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/ko-fi-profile-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/KuCKCRlffjx2tFgxJ/builds/U6fu2KRfnw0Tjbijr/openapi.json
