# Herohero Scraper & Creator Analytics (`huykenny/herohero-scraper`) Actor

Scrape public Herohero creators, supporter counts, subscription prices, profile views, follower counts, trending creators, and public post metadata. Export structured Herohero data via API.

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

## Pricing

Pay per event

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

## Herohero Scraper & Creator Analytics

Extract public Herohero creator data at scale with a fast, API-based Herohero creator scraper. Get
supporter counts, follower counts, subscription prices, profile views, posting activity, free
trials, public post metadata and more from [herohero.co](https://herohero.co), the Czech and Slovak
subscription platform for creators.

Scrape Herohero creators to find the biggest paying audiences in a niche, research competitors,
benchmark subscription pricing, build influencer lists, or monitor creator activity over time.

**No Herohero login required. No paywalled content is bypassed.** The scraper reads exactly what an
anonymous visitor sees on a public profile, and nothing more.

A creator record looks like this:

```json
{
    "name": "Čestmír Strakatý",
    "supportersCount": 11552,
    "followersCount": 4498,
    "profileViews": 13788,
    "monthlyPrice": 7,
    "yearlyPrice": 77,
    "currency": "EUR",
    "freeTrialDays": 7,
    "postsCount": 497,
    "lastPostAt": "2026-08-20T04:00:00.000Z"
}
```

### Herohero data you can extract

**Audience and reach**

- Supporter count — how many people pay for the creator's subscription
- Follower count
- Profile views
- Profile views trend

**Subscription pricing**

- Monthly subscription price
- Yearly subscription price
- Currency of the creator's own pricing
- Free trial length in days
- Whether the creator currently accepts new subscribers

**Activity**

- Total number of posts
- Date of the last post

**Profile**

- Creator name, handle and profile URL
- Public bio
- Verification status
- Public profile image, with dimensions
- Spotify show ID and link, where the creator has connected one
- Whether the profile has events, gifts or an RSS feed enabled

**Public post metadata** (optional, one dataset row per post)

- Post title and public preview text
- Publication date and pinned status
- Comment count and reply count
- Reaction count ("bolts")
- Post access status — free, preview or subscribers-only
- Attachment types and whether the post carries a poll

**Discovery signals**

- Trending creators — Herohero's own trending shortlist
- Popular creators — Herohero's own popular shortlist
- Leaderboard position by supporter count, profile views or Herohero spotlight
- Category membership across Herohero's public categories

### Herohero scraper for creator analytics

Herohero Scraper gives you a simple API for collecting public Herohero creator data without
building or maintaining your own Herohero scraping infrastructure. It talks to the public Herohero
API directly, so a Herohero creator analytics export is a single call: point the Herohero data
scraper at a leaderboard, a category, a search term or a list of profiles, and it returns a flat,
ready-to-analyse dataset — no browser automation, no session handling, no schema archaeology on
your side.

### Use cases

#### Creator discovery

Run Herohero creator discovery by Herohero supporter count, category, search term and the other
public signals the platform exposes. Filter by audience size, verification, free trial or recent
activity so the export contains only the creators worth looking at.

#### Influencer research

Build lists of Herohero creators for outreach, partnerships and creator research, complete with
audience size, pricing and how recently each creator posted.

#### Subscription pricing research

Compare monthly and yearly Herohero subscription prices across creators, categories and audience
tiers to see where a given price point actually sits in the market.

#### Competitor monitoring

Monitor supporter counts, follower counts, profile views, pricing and posting activity for a
specific set of profiles you care about.

#### Creator activity tracking

The Actor returns a snapshot of public metrics as they stand at run time; it does not compute
history for you. Schedule repeated runs on Apify and compare the resulting datasets to see how
supporter counts, prices and posting cadence move over time.

#### Market research

Discover which Herohero creators have the largest paying audiences, what they charge, and which
categories they operate in — across the full public creator base, not just the front page.

### Input

| Field                             | Type     | Default       | Description                                                                                             |
| --------------------------------- | -------- | ------------- | ------------------------------------------------------------------------------------------------------- |
| `discoveryMode`                   | enum     | `top`         | `top` (leaderboard), `featured` (explore ranking), `all` (full sweep), `search`, `category`, `profiles` |
| `sortBy`                          | enum     | `SUBSCRIBERS` | `SUBSCRIBERS`, `PROFILE_VIEWS`, `SPOTLIGHT`                                                             |
| `featuredCategory`                | enum     | `TRENDING`    | `TRENDING` or `POPULAR`, used by `featured` mode                                                        |
| `searchTerms`                     | string\[] | –             | Keywords for `search` mode                                                                              |
| `categoryIds`                     | string\[] | all           | Category IDs for `category` mode                                                                        |
| `profileUrls`                     | array    | –             | Profile URLs or handles. **Filling this in overrides the leaderboard modes.**                           |
| `maxCreators`                     | integer  | `200`         | `0` = no limit. Ignored in `all` mode.                                                                  |
| `minSupporters` / `maxSupporters` | integer  | –             | Supporter-count range                                                                                   |
| `verifiedOnly`                    | boolean  | `false`       | Only verified creators                                                                                  |
| `subscribableOnly`                | boolean  | `false`       | Only creators accepting new subscribers                                                                 |
| `withFreeTrialOnly`               | boolean  | `false`       | Only creators offering a free trial                                                                     |
| `activeSince`                     | date     | –             | Only creators who posted on or after this date                                                          |
| `includePosts`                    | boolean  | `false`       | Also emit one item per post                                                                             |
| `maxPostsPerCreator`              | integer  | `20`          | Newest first                                                                                            |
| `postTextLength`                  | integer  | `500`         | Truncate post text; `0` keeps the full preview                                                          |
| `maxItems`                        | integer  | –             | Hard stop across creators and posts combined                                                            |
| `requestDelayMs`                  | integer  | `350`         | Delay between API calls                                                                                 |
| `proxyConfiguration`              | object   | off           | Optional proxy                                                                                          |

#### Example: top 500 creators with at least 100 supporters

```json
{
    "discoveryMode": "top",
    "sortBy": "SUBSCRIBERS",
    "maxCreators": 500,
    "minSupporters": 100
}
```

#### Example: everyone above 500 supporters, with their last 10 posts

```json
{
    "discoveryMode": "all",
    "minSupporters": 500,
    "includePosts": true,
    "maxPostsPerCreator": 10
}
```

#### Example: Herohero's trending shortlist

```json
{
    "discoveryMode": "featured",
    "featuredCategory": "TRENDING",
    "maxCreators": 20
}
```

#### Example: watch a specific set of profiles

```json
{
    "profileUrls": [{ "url": "https://herohero.co/cestmir" }, { "url": "https://herohero.co/kudybezizajic" }]
}
```

### Output

The dataset mixes two item shapes, told apart by the `type` field. The Apify UI ships two prepared
views (**Creators**, **Posts**) so you can export either one on its own, as JSON, CSV or Excel.

#### `type: "creator"`

```json
{
    "type": "creator",
    "id": "cestmirstrakatyheroherorpkjaolu",
    "handle": "cestmir",
    "url": "https://herohero.co/cestmir",
    "name": "Čestmír Strakatý",
    "bio": "Ty nejlepší rozhovory.",
    "verified": true,
    "profileType": "PUBLIC",
    "subscribable": true,
    "isDeleted": false,
    "imageUrl": "https://assets.herohero.co/prod/images/user/…/1737406593.png",
    "imageWidth": 1500,
    "imageHeight": 1500,
    "postsCount": 497,
    "followersCount": 4498,
    "supportersCount": 11552,
    "profileViews": 13788,
    "profileViewsTrend": "SAME",
    "lastPostAt": "2026-08-20T04:00:00.000Z",
    "currency": "EUR",
    "monthlyPrice": 7,
    "monthlyPriceCents": 700,
    "yearlyPrice": 77,
    "yearlyPriceCents": 7700,
    "freeTrialDays": 7,
    "hasRssFeed": true,
    "spotifyShowId": "2EzGCIlDADxA4YZUeiaGtN",
    "spotifyShowUrl": "https://open.spotify.com/show/2EzGCIlDADxA4YZUeiaGtN",
    "hasEventsEnabled": true,
    "hasGiftsAllowed": true,
    "discoveredVia": "top",
    "discoveryDetail": "SUBSCRIBERS",
    "scrapedAt": "2026-08-22T06:50:52.392Z"
}
```

#### `type: "post"`

```json
{
    "type": "post",
    "id": "cestmirstrakatyheroherorpkjaolukflfbpjeocrsufgmxsq",
    "url": "https://herohero.co/cestmir/post/cestmirstrakatyheroherorpkjaolukflfbpjeocrsufgmxsq",
    "creatorId": "cestmirstrakatyheroherorpkjaolu",
    "creatorHandle": "cestmir",
    "creatorName": "Čestmír Strakatý",
    "access": "preview",
    "publishedAt": "2026-08-20T04:00:00.000Z",
    "pinnedAt": null,
    "isPinned": false,
    "title": "Aneta Krejčíková. „Nedomazlené“ dětství…",
    "text": "„Už nechci ztrácet čas tím, že budu něco předstírat nebo trpět,“ …",
    "isSponsored": null,
    "isAgeRestricted": null,
    "state": null,
    "commentsCount": 6,
    "repliesCount": 6,
    "boltsCount": 152,
    "assetTypes": [],
    "hasPoll": false,
    "scrapedAt": "2026-08-22T06:50:52.392Z"
}
```

`access` says what an anonymous visitor can see:

- `public` — the full post is free to read
- `preview` — a teaser is public, the rest is behind the subscription
- `locked` — subscribers only; only metadata (date, comment and reaction counts) is public

Subscribers-only posts are returned with their metadata and **without title or body text**. The
Actor does not unlock, reconstruct or work around paid content.

### Things worth knowing

**No revenue or earnings figures.** The dataset deliberately ships no earnings column, estimated or
otherwise. Public Herohero data cannot support one — yearly plans, coupons, free trials, discounts
and Herohero's own cut are all invisible from the outside — and a guess printed next to real
numbers gets read as a real number. `supportersCount` and `monthlyPrice` are both in the output if
you want to do that arithmetic yourself, with your own caveats attached.

**Prices come in the creator's own currency** (mostly EUR, some CZK). Both the decimal value and
the raw cent value are in the output, so you can convert at whatever rate you want.

**The leaderboard tail is slow and mostly empty.** Past roughly 15 000 creators the list is almost
entirely accounts with zero supporters, and the API gets noticeably slower there. If you only care
about creators with an audience, set `minSupporters` — when ranking by supporter count the Actor
then stops paging as soon as the list drops below your threshold. Fetching everyone above 500
supporters takes three API calls; a full sweep takes thousands.

**Ranking is not perfectly monotonic.** Herohero occasionally lifts a profile out of order, so the
early stop waits for a full page below your threshold before it gives up.

**Herohero publishes TRENDING and POPULAR, not "rising".** Its public API exposes exactly two
explore shortlists — `TRENDING` and `POPULAR`, 20 creators each, reshuffled on every call. There is
no separate rising leaderboard, and this Actor does not present trending as one. If you want a
growth signal, rank by `PROFILE_VIEWS` and read each creator's `profileViewsTrend`.

**Search returns what Herohero considers relevant**, not everything matching the string — usually a
handful to a few dozen creators per term.

**Spotify is the only social link Herohero exposes publicly.** There are no public Instagram,
YouTube, TikTok or website fields on a Herohero profile, so the Actor does not invent them.

### Pricing (pay per event)

| Event            | Price  | When it fires                      |
| ---------------- | ------ | ---------------------------------- |
| `actor-start`    | $0.05  | Once per run                       |
| `creator-result` | $0.004 | Per creator written to the dataset |
| `post-result`    | $0.001 | Per post written to the dataset    |

Charging happens **before** the write, so a run that hits your `maxTotalChargeUsd` budget stops
after delivering exactly what it charged for — you are never billed for items you did not get, and
never handed items that were not billed.

A 100-creator export costs $0.45. The same 100 creators with their five newest posts each costs
$0.95.

### FAQ

**Do I need a Herohero account?**
No. The Actor uses Herohero's public data only and never signs in.

**Does it bypass the paywall?**
No. Subscribers-only posts come back as metadata — date, comment count, reaction count — with no
title and no body text.

**Can I get a creator's real revenue or earnings?**
No, and no tool honestly can from public data alone. Yearly plans, coupons, trials, discounts and
platform fees are not public. The Actor gives you supporter counts and list prices; any revenue
figure derived from those is your estimate, not a Herohero number.

**Does Herohero have a "rising creators" list?**
No. The public API offers `TRENDING` and `POPULAR` only, 20 creators each.

**How fresh is the data?**
Every run reads the Herohero API live. `scrapedAt` records the moment each row was captured, so
repeated runs give you dated snapshots for Herohero analytics over time.

**Can I export to CSV or Excel?**
Yes. Every Apify dataset exports to JSON, CSV, Excel, XML and HTML, and the Actor ships separate
Creators and Posts views so each exports cleanly on its own.

### Development

```bash
npm install
npm run start:dev     # runs against ./storage/key_value_stores/default/INPUT.json
npm test
npm run lint
npm run build
```

# Actor input Schema

## `discoveryMode` (type: `string`):

How creators are picked. 'Top creators' walks the public leaderboard, 'Explore ranking' takes Herohero's own trending or popular shortlist (20 creators), 'All creators' walks the leaderboard to the very end (slow — the tail is full of accounts with zero supporters), 'Search' runs your keywords, 'Category' walks Herohero's categories, 'Specific profiles' takes the URLs you list below.

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

Ordering of the leaderboard and of category listings.

## `featuredCategory` (type: `string`):

Which Herohero explore shortlist to take in 'Explore ranking' mode. Each returns 20 creators, shuffled on every call. Herohero's public API publishes TRENDING and POPULAR only — there is no separate rising leaderboard.

## `searchTerms` (type: `array`):

Keywords for 'Search by keyword'. Each term returns the creators Herohero considers relevant, up to 100.

## `categoryIds` (type: `array`):

Category IDs for 'By category', e.g. news-politics-commentary, sports, fitness-wellness, travel-adventure, education-learning, entertainment-pop-culture. Leave empty to sweep every category.

## `profileUrls` (type: `array`):

Specific creators, as https://herohero.co/<handle> or just the handle. Filling this in overrides the leaderboard modes.

## `maxCreators` (type: `integer`):

Stop after this many creators. 0 means no limit. Ignored in 'All creators' mode, which always runs to the end.

## `minSupporters` (type: `integer`):

Skip creators below this subscriber count. When ranking by subscriber count this also stops paging early, which saves a lot of time.

## `maxSupporters` (type: `integer`):

Skip creators above this subscriber count — useful for finding mid-tier creators.

## `verifiedOnly` (type: `boolean`):

Keep only creators with the Herohero verified badge.

## `subscribableOnly` (type: `boolean`):

Keep only creators who currently accept new paying subscribers.

## `withFreeTrialOnly` (type: `boolean`):

Keep only creators offering an automatic free trial.

## `activeSince` (type: `string`):

Keep only creators whose last post is on or after this date (YYYY-MM-DD).

## `includePosts` (type: `boolean`):

Adds one dataset item per public post: title, preview text, publish date, comment and reaction counts. Paid posts appear as metadata only — the content stays locked.

## `maxPostsPerCreator` (type: `integer`):

Newest first.

## `postTextLength` (type: `integer`):

Truncate post text to this many characters. 0 keeps the full preview text the API returns.

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

Hard stop across creators and posts combined. Leave empty for no limit.

## `requestDelayMs` (type: `integer`):

Milliseconds to wait between API calls. Lower is faster but less polite to the site.

## `proxyConfiguration` (type: `object`):

Optional. The API answers fine from a datacenter IP, but a proxy spreads out long full sweeps.

## Actor input object example

```json
{
  "discoveryMode": "top",
  "sortBy": "SUBSCRIBERS",
  "featuredCategory": "TRENDING",
  "maxCreators": 200,
  "verifiedOnly": false,
  "subscribableOnly": false,
  "withFreeTrialOnly": false,
  "includePosts": false,
  "maxPostsPerCreator": 20,
  "postTextLength": 500,
  "requestDelayMs": 350,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All dataset items. Creator rows carry supporter counts, subscription pricing and activity; post rows carry public post metadata. Tell them apart by the `type` field.

## `summary` (type: `string`):

Counts of creators and posts written, filtered-out creators, API requests made, and charged pay-per-event totals.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("huykenny/herohero-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("huykenny/herohero-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 '{}' |
apify call huykenny/herohero-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,huykenny/herohero-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/FqpKG69iwONONegO5/builds/cYhT5eaDczoG1Q3v5/openapi.json
