# Indie Hackers Scraper (`crawlerbros/indie-hackers-scraper`) Actor

Scrape Indie Hackers with browse and search products sorted by revenue, newest, or member count; fetch founder interviews; list discussion groups. Extracts product name, tagline, monthly revenue, founder, tags, and more.

- **URL**: https://apify.com/crawlerbros/indie-hackers-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Lead generation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Indie Hackers Scraper

Extract products, interviews, and groups from [Indie Hackers](https://www.indiehackers.com) — the community for bootstrapped founders and independent makers. Browse 30,000+ products sorted by revenue, fetch founder interviews, or explore community groups.

### What does Indie Hackers Scraper do?

Indie Hackers Scraper uses the public Algolia search API (embedded in the Indie Hackers website) and Firebase REST API to extract structured data about products, founder interviews, and discussion groups — all without login or API keys.

### Features

- **Products** browse mode: sort by revenue (high to low), newest first, most followers, or alphabetically
- **Interviews** mode: fetch all 500+ founder interviews with product links, publish dates, and interviewee data
- **Groups** mode: list all 600+ community discussion groups with member counts
- **Fetch by URL** mode: get product or interview data from specific Indie Hackers URLs
- **Keyword search** across product names, taglines, descriptions, and group names
- Extracts monthly revenue, founder info, platform/vertical tags, and social links
- No authentication, proxies, or cookies required

### Input

| Field | Type | Description |
|-------|------|-------------|
| `mode` | String | One of: `products`, `interviews`, `groups`, `byUrl` |
| `sortBy` | String | Product sort order: `revenue-desc`, `foundedDate-desc`, `memberCount-desc`, `name-asc` |
| `searchQuery` | String | Filter by keyword in name/tagline/description |
| `pageUrls` | Array | Indie Hackers URLs for mode=byUrl |
| `maxItems` | Integer | Maximum items to return (1–500, default 50) |

#### Example Input

```json
{
  "mode": "products",
  "sortBy": "revenue-desc",
  "maxItems": 50
}
````

### Output — Products

| Field | Type | Description |
|-------|------|-------------|
| `name` | String | Product name |
| `slug` | String | Unique product slug |
| `tagline` | String | Short tagline |
| `description` | String | Product description |
| `websiteUrl` | String | Product website URL |
| `indiehackersUrl` | String | Full Indie Hackers product URL |
| `logoUrl` | String | Product logo image URL |
| `monthlyRevenue` | Integer | Self-reported monthly revenue (USD), if disclosed |
| `memberCount` | Integer | Number of followers/members |
| `launchDate` | String | Month launched (YYYY-MM format) |
| `founderUsername` | String | Founder's Indie Hackers username |
| `founderName` | String | Founder's display name |
| `commitment` | String | Time commitment (full-time, side-project, etc.) |
| `employees` | String | Number of employees |
| `funding` | Array | Funding types (bootstrapped, crowd, vc, etc.) |
| `revenueModel` | Array | Revenue models (subscription, advertising, etc.) |
| `verticals` | Array | Industry verticals (saas, ai, b2b, etc.) |
| `platforms` | Array | Supported platforms (web, ios, android, etc.) |
| `twitterHandle` | String | Twitter/X handle |
| `facebookUrl` | String | Facebook page URL |
| `scrapedAt` | String | ISO 8601 scrape timestamp |

### Output — Interviews

| Field | Type | Description |
|-------|------|-------------|
| `title` | String | Interview title |
| `slug` | String | Interview ID |
| `interviewUrl` | String | Full interview URL |
| `intervieweeSlug` | String | Interviewee's username |
| `intervieweeName` | String | Interviewee's display name |
| `productId` | String | Associated product slug |
| `productUrl` | String | Indie Hackers product URL |
| `publishedDate` | String | ISO 8601 publish date |
| `createdDate` | String | ISO 8601 creation date |
| `scrapedAt` | String | ISO 8601 scrape timestamp |

### Output — Groups

| Field | Type | Description |
|-------|------|-------------|
| `name` | String | Group name |
| `slug` | String | Group slug |
| `description` | String | Group description |
| `groupUrl` | String | Full group URL |
| `iconUrl` | String | Group icon image URL |
| `memberCount` | Integer | Number of group members |
| `createdDate` | String | ISO 8601 creation date |
| `scrapedAt` | String | ISO 8601 scrape timestamp |

#### Example Product Output

```json
{
  "name": "Groupon",
  "slug": "groupon",
  "tagline": "Discover incredible deals",
  "websiteUrl": "https://www.groupon.com",
  "indiehackersUrl": "https://www.indiehackers.com/product/groupon",
  "monthlyRevenue": 498400000,
  "memberCount": 5,
  "launchDate": "2025-02",
  "commitment": "full-time",
  "employees": "1k-plus",
  "revenueModel": ["advertising", "commission", "transactional"],
  "verticals": ["advertising", "ai"],
  "scrapedAt": "2026-05-23T10:00:00+00:00"
}
```

### Use Cases

- **Startup research** — Find bootstrapped companies in your niche sorted by revenue
- **Competitive intelligence** — Track what revenue models and verticals are thriving
- **Content ideas** — Browse founder interviews for insights and inspiration
- **Market sizing** — Analyze how many indie products exist in a given vertical
- **Founder outreach** — Find founders with their website and social links

### Notes on Revenue Data

Revenue data is self-reported by founders and not independently verified. Very high values (billions/trillions) represent placeholder entries and are automatically filtered out. The `monthlyRevenue` field only appears when a founder has disclosed a real, reasonable value.

### FAQs

**Does this require an Indie Hackers account?**
No. All data is fetched from public APIs (Algolia search, Firebase REST).

**How many products are available?**
Indie Hackers has 30,000+ products in the index as of 2026.

**Are all interviews available?**
Yes — 500+ interviews are listed in Firebase and can be retrieved with mode=interviews.

**Why is the founder name sometimes missing?**
Firebase user profiles only expose `username` and `displayName` for public accounts. Some users have minimal profiles.

### Legal

This actor uses publicly accessible data from Indie Hackers' embedded Algolia and Firebase APIs. Always comply with [Indie Hackers' Terms of Service](https://www.indiehackers.com/terms).

# Actor input Schema

## `mode` (type: `string`):

What to fetch from Indie Hackers.

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

Sort order for products (mode=products).

## `searchQuery` (type: `string`):

Keyword filter for product name/tagline or group name/description.

## `pageUrls` (type: `array`):

Indie Hackers page URLs to scrape (product or interview pages).

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

Maximum number of items to return.

## Actor input object example

```json
{
  "mode": "products",
  "sortBy": "revenue-desc",
  "maxItems": 50
}
```

# Actor output Schema

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

Dataset containing all scraped Indie Hackers items (products, interviews, or groups).

# 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 = {
    "mode": "products",
    "sortBy": "revenue-desc",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/indie-hackers-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 = {
    "mode": "products",
    "sortBy": "revenue-desc",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/indie-hackers-scraper").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 '{
  "mode": "products",
  "sortBy": "revenue-desc",
  "maxItems": 50
}' |
apify call crawlerbros/indie-hackers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/indie-hackers-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Indie Hackers Scraper",
        "description": "Scrape Indie Hackers with browse and search products sorted by revenue, newest, or member count; fetch founder interviews; list discussion groups. Extracts product name, tagline, monthly revenue, founder, tags, and more.",
        "version": "1.0",
        "x-build-id": "5JNXHhCNaW5SbEYB5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~indie-hackers-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-indie-hackers-scraper",
                "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/crawlerbros~indie-hackers-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-indie-hackers-scraper",
                "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/crawlerbros~indie-hackers-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-indie-hackers-scraper",
                "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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "products",
                            "interviews",
                            "groups",
                            "byUrl"
                        ],
                        "type": "string",
                        "description": "What to fetch from Indie Hackers.",
                        "default": "products"
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "revenue-desc",
                            "foundedDate-desc",
                            "memberCount-desc",
                            "name-asc"
                        ],
                        "type": "string",
                        "description": "Sort order for products (mode=products).",
                        "default": "revenue-desc"
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Keyword filter for product name/tagline or group name/description."
                    },
                    "pageUrls": {
                        "title": "Page URLs (mode=byUrl)",
                        "type": "array",
                        "description": "Indie Hackers page URLs to scrape (product or interview pages).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of items to return.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
