# Buildside Scraper — Indie Founders, Products and Posts (`teodor_banea/buildside-scraper`) Actor

Export Buildside's indie founders (bio, expertise, challenges, city, country, socials, followers, products), startup products (pitch, category, stage, features, website, public MRR) and build-in-public posts with comments. Filters and a date filter for posts. No login.

- **URL**: https://apify.com/teodor_banea/buildside-scraper.md
- **Developed by:** [Banea Teodor](https://apify.com/teodor_banea) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Buildside Scraper — Indie Founders, Startup Products & Build-in-Public Posts

### What does Buildside Scraper do?

Buildside Scraper exports [Buildside](https://www.buildside.app) — the build-in-public network where indie founders share their products, progress, launches and lessons. One run gives you **every public founder profile** (bio, founder type, phase, expertise, current challenges, city and country, X / LinkedIn / website links, followers, products), **every product** (pitch, description, category, stage, target audience, website, features, screenshots, AI summary of what it does and the problem it solves, and MRR / revenue when the founder made it public), or **every build-in-public post** (title, text, type, reactions, comment counts, linked product — optionally with the full comment thread). No login, no browser.

### Why use this Actor?

- **Warm founder leads**: founders who say what they are building, what they are good at and what they struggle with right now (distribution, monetization, activation…) — with their own links to X, LinkedIn and their website.
- **Startup product database**: hundreds of indie SaaS products with category, stage, website, features and screenshots — and self-reported or Stripe-verified MRR where the founder chose to publish it.
- **Build-in-public signal**: launches, milestones, experiments and lessons, newest first, with reactions and comments — track what indie founders ship each week.
- **Clean, typed rows**: every row has every column (null when Buildside has no value), ISO dates, numbers as numbers, text without markup, absolute links to the Buildside pages.
- **Privacy first**: only profiles their owners made public; revenue only when the founder made it public; no e-mail fields (addresses typed into posts, bios or comments are masked), no privacy settings, no private user ids.

### How much does it cost?

You pay **per row** (one row = one founder, product or post) plus a small start fee. Runs are quick: all ~390 founders take about 2 minutes, all ~340 products about 2 minutes, all posts about 2.5 minutes (about 6 minutes with comments).

| Run | Rows |
|---|---|
| First run with the prefilled form (top 20 founders by followers) | 20 |
| Every founder | ~390 |
| Every product | ~340 |
| Every AI product | ~25 |
| Every post | ~1,250 (≈1,370 with reposts) |
| Posts of the last 7 days | ~150 |

Buildside grows by roughly 35 founders and 30 products a week. Use **Maximum results** and the filters to pay only for what you need. *Include comments* does not add rows — it adds the comment thread to each post row (the run takes longer).

### Input

| Field | Description | Example |
|---|---|---|
| `mode` | `founders` (default), `products` or `posts` — one data set per run | `founders` |
| `maxResults` | Stop after this many rows; 0 = everything. The form prefills 20 | `100` |
| `query` | Founders / products: Buildside's own search. Posts: every word must appear in the post | `ai` |
| `expertise` | AI, Analytics, Bootstrapping, Community, Design, Engineering, Growth, Marketing, No-code, Pricing, Product, Sales (ANY matches) | `["Growth", "Marketing"]` |
| `founderTypes` | Solo, Small team, Technical, Non-technical, First-time, Repeat, Funded | `["Solo"]` |
| `statuses` | Exploring, Building, Growing, Supporting founders | `["Growing"]` |
| `verifiedOnly` | Only founders with the verified badge | `false` |
| `minFollowers` | Minimum Buildside followers | `10` |
| `founderSortBy` | `followers` (default) or `newest` | `newest` |
| `categories` | Product categories (products and posts), e.g. `ai`, `developer-tools`, `marketing-tools`, `productivity`, `fintech` | `["ai"]` |
| `stages` | Pre-launch, Beta, Growth, Mature | `["Growth"]` |
| `publicRevenueOnly` | Only products that publish a revenue figure above zero | `true` |
| `productSortBy` | `newest` (default), `followers` or `mrr` | `mrr` |
| `postTypes` | Progress, Launch, Milestone, Lesson, Ask, Feedback, Experiment, Opportunity, Challenge, Repost | `["Launch", "Milestone"]` |
| `postedAfter` | Posts from this date on (`2026-10-01`) or a period (`7 days`) | `7 days` |
| `includeReposts` | Also export reposts (default off) | `false` |
| `includeComments` | Add each post's comments and replies to its row (default off) | `true` |
| `includeProducts` | Founders mode: add the founder's products to the row (default on) | `true` |

Founder filters (expertise, types, status, verified, minimum followers) also work in posts mode: they pick whose posts you get.

```json
{
    "mode": "posts",
    "postTypes": ["Launch"],
    "postedAfter": "7 days",
    "includeComments": true,
    "maxResults": 0
}
```

### Output

#### Founder row (founders mode)

```json
{
    "founderId": "a1b2c3d4e5f6g7h8",
    "handle": "jane_builds",
    "name": "Jane Example",
    "bio": "Solo founder building tools for indie hackers.",
    "focus": "Finding my first paying user",
    "founderType": "Solo",
    "status": "Growing",
    "expertise": ["Engineering", "AI", "Bootstrapping"],
    "challenges": ["Distribution", "Monetization"],
    "achievements": ["Grew to 130 users in under 2 weeks."],
    "location": "Montreal, Canada",
    "city": "Montreal",
    "country": "Canada",
    "followers": 86,
    "following": 10,
    "productCount": 2,
    "postsPublished": 14,
    "helpfulAnswers": 3,
    "isVerified": false,
    "xUrl": "https://x.com/jane_builds",
    "linkedinUrl": "https://linkedin.com/in/jane-example",
    "websiteUrl": "https://jane.example/",
    "youtubeUrl": null,
    "instagramUrl": null,
    "tiktokUrl": null,
    "latestProductName": "Formly",
    "latestProductUrl": "https://www.buildside.app/products/prd_0123456789abcdef01234567/formly",
    "products": [
        { "productId": "prd_0123456789abcdef01234567", "name": "Formly", "pitch": "Fill startup forms faster", "url": "https://www.buildside.app/products/prd_0123456789abcdef01234567/formly" }
    ],
    "joinedAt": "2026-08-14T06:45:54.346Z",
    "avatarUrl": "https://dhp99089c4nys.cloudfront.net/users/a1b2c3d4e5f6g7h8/assets/avatar.webp",
    "profileUrl": "https://www.buildside.app/founders/a1b2c3d4e5f6g7h8/jane-builds",
    "scrapedAt": "2026-10-19T20:26:48.212Z"
}
```

#### Product row (products mode)

```json
{
    "productId": "prd_0123456789abcdef01234567",
    "name": "Formly",
    "pitch": "Fill startup forms faster",
    "description": "Formly fills accelerator, grant and directory forms from one founder profile.",
    "category": "Productivity",
    "categorySlug": "productivity",
    "stage": "Growth",
    "status": "Building",
    "targetAudience": "Early-stage founders applying to accelerators and directories.",
    "teamSize": 1,
    "pricingSummary": "Free plan; Pro $9/month",
    "platforms": ["Web"],
    "useCases": [],
    "differentiators": [],
    "websiteUrl": "https://formly.example/",
    "followers": 12,
    "logoUrl": "https://dektn7iueti0p.cloudfront.net/logos/products/prd_0123456789abcdef01234567/logo.webp",
    "screenshots": ["https://dektn7iueti0p.cloudfront.net/screenshots/products/prd_0123456789abcdef01234567/shot_01.webp"],
    "features": ["Saves a founder profile once and fills any supported form from it."],
    "whatItDoes": "Formly stores a founder's company details and fills long application forms automatically.",
    "coreProblem": "Founders retype the same answers into dozens of forms.",
    "whatItSolves": "One profile, filled everywhere, with answers kept consistent.",
    "mrr": 1200,
    "totalRevenue": 5000,
    "users": null,
    "currency": "USD",
    "revenueVisibility": "self-reported",
    "founderId": "a1b2c3d4e5f6g7h8",
    "founderName": "Jane Example",
    "founderHandle": "jane_builds",
    "founderProfileUrl": "https://www.buildside.app/founders/a1b2c3d4e5f6g7h8/jane-builds",
    "createdAt": "2026-09-17T16:39:13.135Z",
    "updatedAt": "2026-10-02T12:40:23.964Z",
    "url": "https://www.buildside.app/products/prd_0123456789abcdef01234567/formly",
    "scrapedAt": "2026-10-19T20:26:48.212Z"
}
```

`mrr`, `totalRevenue` and `users` are filled only when the founder made that figure public (`revenueVisibility` `self-reported` or `stripe-verified`); otherwise they are null and `revenueVisibility` is `private` — about 9 in 10 products.

#### Post row (posts mode)

```json
{
    "postId": "pst_0123456789abcdef0123456789abcdef",
    "type": "Launch",
    "title": "Okay, finally I launched it!",
    "bodyText": "Built for product launchers, app builders & indie hackers.\n\nPut your product in front of other builders for 72 hours.",
    "detailsText": null,
    "category": "Marketing tools",
    "progressStatus": null,
    "isAutomated": false,
    "repostOfPostId": null,
    "linkUrl": "https://formly.example/",
    "imageCount": 1,
    "pollOptions": null,
    "publishedAt": "2026-09-01T21:12:01.157Z",
    "reactionCount": 4,
    "commentCount": 2,
    "repostCount": 0,
    "founderId": "a1b2c3d4e5f6g7h8",
    "founderHandle": "jane_builds",
    "founderName": "Jane Example",
    "founderProfileUrl": "https://www.buildside.app/founders/a1b2c3d4e5f6g7h8/jane-builds",
    "productId": "prd_0123456789abcdef01234567",
    "productName": "Formly",
    "productUrl": "https://www.buildside.app/products/prd_0123456789abcdef01234567/formly",
    "comments": [
        { "authorHandle": "sam_ships", "authorName": "Sam Example", "text": "Congrats on launching!", "createdAt": "2026-09-01T23:12:47.239Z", "isReply": false },
        { "authorHandle": "jane_builds", "authorName": "Jane Example", "text": "Thanks Sam!", "createdAt": "2026-09-02T08:01:10.000Z", "isReply": true }
    ],
    "url": "https://www.buildside.app/posts/pst_0123456789abcdef0123456789abcdef/okay-finally-i-launched-it",
    "scrapedAt": "2026-10-19T20:26:48.212Z"
}
```

- `comments` is null unless *Include comments* is on (then `[]` for posts without comments). A commenter without a public founder profile appears with a null handle and name.
- `isAutomated` marks posts Buildside writes on the founder's behalf (for example "… just launched …" when a product is added).
- `detailsText` holds the type-specific fields of Experiment, Lesson, Feedback, Ask… posts as `Label: value` lines.
- Posts are delivered newest first across all founders.

Problems (a profile that could not be read, a failed comment thread…) are listed under the `ERRORS` key of the run's key-value store, free of charge. A founder whose full profile cannot be read is still delivered with the list fields (name, handle, bio, type, status, expertise, followers).

### Tips and tricks

- **Leads by need**: founders mode + `expertise` / `statuses`, then filter the `challenges` column (e.g. "Distribution") for founders who are looking for exactly what you offer.
- **New products every week**: products mode, `productSortBy: newest`, a small `maxResults`, scheduled weekly.
- **Revenue-transparent startups**: products mode + `publicRevenueOnly`, `productSortBy: mrr`.
- **Launch tracker**: posts mode, `postTypes: ["Launch", "Milestone"]`, `postedAfter: "7 days"`.
- **Join the data sets**: `founderId` links founders, products and posts; `productId` links products and posts.
- The Console offers table views per mode (Founders, Products, Posts) and a CSV export.

### Scheduling

For a recurring posts feed, set `postedAfter` to match the schedule interval (e.g. `7 days` for a weekly run). Founders and products modes have no date filter: each run returns the current listing (use `founderSortBy` / `productSortBy: newest` with a small `maxResults`). Rows are unique within a run; drop repeats from earlier runs downstream by `founderId`, `productId` or `postId`.

### Integrations

Connect the dataset to Google Sheets, Airtable, HubSpot, Slack or Zapier / Make with Apify integrations, or read it from the API (`/v2/datasets/{id}/items?format=json|csv|xlsx`).

### Privacy

The actor only exports profiles their owners set to public, never e-mail addresses (addresses typed into public texts are masked), phone numbers, messaging or privacy settings, and only the revenue figures founders chose to publish. If you process the founder rows, you are responsible for doing so lawfully (e.g. GDPR legitimate interest and opt-out handling for outreach).

# Changelog

This Actor's version history is a separate document: https://apify.com/teodor_banea/buildside-scraper/changelog.md

# Actor input Schema

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

Choose the data set. Founders: one row per public founder profile (bio, expertise, challenges, location, socials, followers, products). Products: one row per product (pitch, category, stage, features, website, public revenue). Posts: one row per build-in-public post (text, type, reactions, optional comments), newest first.

## `maxResults` (type: `integer`):

Stop after this many rows (founders, products or posts). Set 0 for everything that matches — the whole site is a few hundred founders and products and about 1,300 posts.

## `query` (type: `string`):

Founders and products: Buildside's own search (names, handles, bios, pitches and expertise tags). Posts: every word must appear in the post title, text or details. Leave empty for everything.

## `expertise` (type: `array`):

Keep founders with ANY of these areas of expertise (in posts mode: posts by these founders).

## `founderTypes` (type: `array`):

Keep founders of ANY of these types.

## `statuses` (type: `array`):

Keep founders in ANY of these phases.

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

Keep only founders with Buildside's verified badge.

## `minFollowers` (type: `integer`):

Keep founders with at least this many Buildside followers. Leave empty for no minimum.

## `founderSortBy` (type: `string`):

Order of founder rows — and which founders come first when Maximum results stops the run.

## `categories` (type: `array`):

Keep products (and posts) in ANY of these product categories.

## `stages` (type: `array`):

Keep products in ANY of these stages.

## `publicRevenueOnly` (type: `boolean`):

Keep only products whose founder publishes an MRR above zero (self-reported or Stripe-verified). Same rule as Buildside's own revenue filter.

## `productSortBy` (type: `string`):

Order of product rows.

## `postTypes` (type: `array`):

Keep posts of ANY of these types. Leave empty for all types.

## `postedAfter` (type: `string`):

Keep posts published on or after this date, or within a recent period (e.g. 7 days). Older posts are skipped.

## `includeReposts` (type: `boolean`):

Also export reposts (a founder sharing someone else's post — the row links to the original). Off: original posts only.

## `includeComments` (type: `boolean`):

Add each post's comments and replies (author handle, name, text, date) to its row. Adds one request per post that has comments, plus one per comment with replies — slower on large runs.

## `includeProducts` (type: `boolean`):

Founders mode: add the founder's products (id, name, pitch, link) to the row. Costs one small list read per run.

## Actor input object example

```json
{
  "mode": "founders",
  "maxResults": 20,
  "query": "ai",
  "verifiedOnly": false,
  "founderSortBy": "followers",
  "publicRevenueOnly": false,
  "productSortBy": "newest",
  "includeReposts": false,
  "includeComments": false,
  "includeProducts": true
}
```

# Actor output Schema

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

Every row of the run as JSON.

## `founders` (type: `string`):

Founders mode: name, handle, bio, type, status, expertise, challenges, city, country, followers, socials.

## `products` (type: `string`):

Products mode: product, pitch, category, stage, website, followers, public revenue, founder.

## `posts` (type: `string`):

Posts mode: date, type, title, text, founder, product, reactions, comments.

## `resultsCsv` (type: `string`):

The same rows as a CSV download.

## `errors` (type: `string`):

Records that could not be read. Only present when something went wrong.

# 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 = {
    "maxResults": 20
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,teodor_banea/buildside-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/se6JTyUzwIqysYXrP/builds/60IeyxPcwC30gMNQ8/openapi.json
