# Product Hunt Kitty Points Leaderboard (`advantageous_subcontra/producthunt-kitty-leaderboard`) Actor

Get a list of the most active people on Product Hunt: scrapes the Product Hunt Kitty Points leaderboard for any time period and returns ranked users with their KP scores.

- **URL**: https://apify.com/advantageous\_subcontra/producthunt-kitty-leaderboard.md
- **Developed by:** [Fabian Maume](https://apify.com/advantageous_subcontra) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 profiles

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Product Hunt Kitty Points Leaderboard Scraper

Not all Product Hunt upvotes are equal. If you get upvotes from a well established profile it has more weight. That is why it is good to connect with other Product Hunt users before your launch.

How do you identiy people who are active on Product Hunt? Simple, check out the **[Product Hunt Kitty Points leaderboard](https://www.producthunt.com/kitty-points)**.

This Actor will extract the full Product Hunt Kitty Points leaderboard  for any time period ( weekly, monthly, yearly, or all-time). Additionally, you have the option to get detailed data from each Product Hunt profile.

### Why use this Actor?

**Kitty Points (KP)** are Product Hunt's community currency, earned by commenting, reviewing, submitting products, and engaging with the platform. The leaderboard surfaces the most active and influential community members.

Use this Actor to:
- Identify top Product Hunt influencers for outreach or partnership
- Monitor community engagement trends over time
- Build databases of active Product Hunt users for market research
- Track how rankings shift week-over-week or month-over-month

### What data does it extract?

#### Leaderboard dataset (always populated)

| Field | Type | Description |
|-------|------|-------------|
| `rank` | Number | Position on the leaderboard |
| `name` | String | User's display name |
| `profileUrl` | String | Full URL to the user's Product Hunt profile |
| `kittyPoints` | Number | Total Kitty Points for the selected period |

#### Profiles dataset (populated only when `scrapeProfile` is enabled)

The default export will give you only the leaderboard dataset. In order to access profile data you need to go to the Storage tab.

| Field | Type | Description |
|-------|------|-------------|
| `profileUrl` | String | Full URL to the user's Product Hunt profile |
| `userName` | String | Display name |
| `username` | String | Product Hunt handle (the `@...` part) |
| `headline` | String | One-line bio shown on the profile |
| `about` | String | Long-form "About" text |
| `dayStreak` | Number | Consecutive days visiting Product Hunt |
| `kittyPointsLastMonth` | Number / null | Kitty Points earned over the last month |
| `kittyPointsLastYear` | Number / null | Kitty Points earned over the last year |
| `kittyPointsAllTime` | Number / null | Lifetime Kitty Points |
| `huntedProjects` | Number | Number of products the user has hunted |
| `followers` | Number | Follower count |
| `following` | Number | Following count |
| `website` | String / null | Personal website URL |
| `linkedin` | String / null | LinkedIn profile URL |
| `xProfile` | String / null | X (Twitter) profile URL |

### How to scrape the Product Hunt leaderboard

1. Create a free account on [Apify](https://apify.com) and open this Actor.
2. Select your **Time Period** (Last Week, Last Month, Last Year, or All Time).
3. Set **Max Scrolls** to control how many entries to retrieve (each scroll loads ~100 more users).
4. Toggle **Scrape Profile** if you want to get the profile details
5. Click **Start** and wait for the run to finish.
6. Download your results in JSON, CSV, or Excel from the **Dataset** tab.

### How much will it cost?

This Actor is pay per event.
You will be charged for Product Hunt profile found ($1 per 1k results) and per profile scraped ($1.5 per 1k results).

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `period` | String | `year` | Time period: `week`, `month`, `year`, or `all_time` |
| `maxScrolls` | Integer | `3` | Scroll count to load more entries (0 = first ~100 only) |
| `scrapeProfile` | Boolean | `false` | When enabled, fetch each leaderboard user's profile page for additional details (headline, KP across periods, followers, social links). Profile records are written to a separate dataset. |

See the **Input** tab for all options.

### Output

Results are saved across two datasets, both visible under the **Storage** tab in Apify Console.

#### Default dataset (leaderboard)

Example record:

```json
{
  "rank": 1,
  "name": "Chris Messina",
  "profileUrl": "https://www.producthunt.com/@chrismessina",
  "kittyPoints": 19639
}
````

#### `profiles` dataset (only when `scrapeProfile` is enabled)

Example record:

```json
{
  "profileUrl": "https://www.producthunt.com/@chrismessina",
  "userName": "Chris Messina",
  "username": "chrismessina",
  "headline": "#1 Hunter!",
  "about": "I've hunted more product than anyone else! ...",
  "dayStreak": 983,
  "kittyPointsLastMonth": 1302.7,
  "kittyPointsLastYear": 19639.88,
  "kittyPointsAllTime": 127211.11,
  "huntedProjects": 4480,
  "followers": 104857,
  "following": 688,
  "website": "https://chrismessina.me",
  "linkedin": "https://linkedin.com/in/factoryjoe/",
  "xProfile": "https://twitter.com/chrismessina"
}
```

You can download results in JSON, CSV, HTML, or Excel from each dataset's view, or access them via the Apify API.

### FAQ & Support

**Is this legal?**

> This Actor only extracts publicly visible leaderboard data that Product Hunt displays to all visitors. It does not access private user data, email addresses, or any information not shown on the public pages.

**Why are fewer than expected results returned?**

> Increase the **Max Scrolls** input to load more leaderboard entries. Each scroll loads approximately 100 additional users.
> However if you look at short time pirod (like the leaderboard for last week), Product Hunt tends to display only about 200 profiles.
> If you are looking to a large dataset, select the "All time" leaderboard.

**Why is the profiles dataset empty?**

> Profile scraping is disabled by default to keep runs fast and cheap. Set **Scrape profile data** to `true` in the input to populate the `profiles` dataset. Note that scraping ~100 profiles roughly doubles the run time of a default leaderboard scrape.

# Actor input Schema

## `period` (type: `string`):

The leaderboard time frame to scrape.

## `maxScrolls` (type: `integer`):

Number of times to scroll down to load more results. Each scroll loads approximately 100 additional entries. Set to 0 to only retrieve the initially loaded results.

## `scrapeProfile` (type: `boolean`):

When enabled, scrape each leaderboard user's profile page for additional details (headline, KP across periods, followers, social links, etc.). Profile records are written to a separate dataset.

## Actor input object example

```json
{
  "period": "year",
  "maxScrolls": 3,
  "scrapeProfile": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `profiles` (type: `string`):

Detailed profile data for each leaderboard user. Only populated when `scrapeProfile` is enabled.

# 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("advantageous_subcontra/producthunt-kitty-leaderboard").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("advantageous_subcontra/producthunt-kitty-leaderboard").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 advantageous_subcontra/producthunt-kitty-leaderboard --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=advantageous_subcontra/producthunt-kitty-leaderboard",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Product Hunt Kitty Points Leaderboard",
        "description": "Get a list of the most active people on Product Hunt: scrapes the Product Hunt Kitty Points leaderboard for any time period and returns ranked users with their KP scores.",
        "version": "0.0",
        "x-build-id": "fxiaNCMBvNNxjMMob"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/advantageous_subcontra~producthunt-kitty-leaderboard/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-advantageous_subcontra-producthunt-kitty-leaderboard",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/advantageous_subcontra~producthunt-kitty-leaderboard/runs": {
            "post": {
                "operationId": "runs-sync-advantageous_subcontra-producthunt-kitty-leaderboard",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/advantageous_subcontra~producthunt-kitty-leaderboard/run-sync": {
            "post": {
                "operationId": "run-sync-advantageous_subcontra-producthunt-kitty-leaderboard",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "period": {
                        "title": "Time Period",
                        "enum": [
                            "week",
                            "month",
                            "year",
                            "all_time"
                        ],
                        "type": "string",
                        "description": "The leaderboard time frame to scrape.",
                        "default": "year"
                    },
                    "maxScrolls": {
                        "title": "Max Scrolls",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of times to scroll down to load more results. Each scroll loads approximately 100 additional entries. Set to 0 to only retrieve the initially loaded results.",
                        "default": 3
                    },
                    "scrapeProfile": {
                        "title": "Scrape profile data",
                        "type": "boolean",
                        "description": "When enabled, scrape each leaderboard user's profile page for additional details (headline, KP across periods, followers, social links, etc.). Profile records are written to a separate dataset.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
