# BiggerPockets Scraper — Forum Threads, Posts & Investor Leads (`haketa/biggerpockets-scraper`) Actor

Scrape BiggerPockets real-estate investing forums: thread titles, full posts with authors, reply counts, and member profiles (name, investor type, location) for lead generation. Paste forum URLs, thread URLs and/or usernames.

- **URL**: https://apify.com/haketa/biggerpockets-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Social media, Real estate
- **Features:** Limited permissions
- **Stats:** 8 total users, 5 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 🏘️ BiggerPockets Scraper — Real Estate Investor Leads, Forum Threads & Discussions

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-0066CC?style=for-the-badge\&logo=apify)](https://apify.com/haketa/biggerpockets-scraper)
[![Forums & Posts](https://img.shields.io/badge/Forums-Threads_%2B_Replies-1F6FEB?style=for-the-badge)]()
[![Investor Leads](https://img.shields.io/badge/B2B_Leads-Investor_Profiles-2DA44E?style=for-the-badge)]()
[![Scale](https://img.shields.io/badge/Scale-1%2C000%2B_Records-8250DF?style=for-the-badge)]()
[![Export](https://img.shields.io/badge/Export-JSON_%7C_CSV_%7C_Excel_%7C_API-FB8500?style=for-the-badge)]()

> **Extract structured real-estate investing discussions, full forum threads, and B2B investor member profiles from [BiggerPockets](https://www.biggerpockets.com) — the largest real-estate investing community online.** Collect paginated forum thread listings, full multi-reply discussions with author usernames and upvote counts, and member lead profiles with **investor role (`investorType`), full name, and location**. **No login, no coding.**

Export to **JSON, CSV, Excel, XML, or API** for real-estate B2B lead generation, hard-money and DSCR lender prospecting, property-management outreach, market sentiment analysis, and AI/RAG dataset creation.

***

### ⚡ At a glance

| Capability | Details |
|---|---|
| 🎯 **Primary Target** | BiggerPockets (`biggerpockets.com`) Forums, Discussion Threads & Member Profiles |
| 🧩 **3 Record Modes** | `forum-thread` (paginated category listings), `thread` (full post + all replies), `user` (member lead profile) |
| 🧲 **B2B Lead Signals** | Member `name`, `username`, `userId`, `investorType` (Investor, Agent, Lender, Wholesaler, etc.), `location`, `memberSince`, `profileUrl` |
| 💬 **Discussion Depth** | Full original post `body`, `commentCount`, `upvotes`, `views`, plus every reply in `posts[]` with author, date & upvotes |
| 📈 **Scale & Pagination** | **1,000+ results pagination** across forum pages (`maxThreadsPerForum: 0` auto-scales with `maxItems`) |
| ⚡ **Prefill Speed** | **~15–25 seconds** for default prefill run over standard Apify Datacenter Proxy |
| 🛡️ **Deduplication** | Automatic cross-page and cross-forum deduplication by `topicId` and member handle |
| 📦 **Bulk Export** | JSON, CSV, Excel (XLSX), JSON Lines, XML, HTML, REST API, KVS `OUTPUT` mirror, Make, Zapier, n8n |

***

### 🔎 Why scrape BiggerPockets?

**BiggerPockets** is where active real-estate investors, landlords, house flippers, multifamily syndicators, hard-money lenders, real-estate agents, wholesalers, and property managers discuss deals, markets, financing, and operations every day. Millions of threads and public member profiles hold high-intent B2B intelligence that does not exist in traditional property-listing portals.

Collecting this data manually means clicking through dozens of forum pages, opening individual threads one by one, and visiting member profiles to see whether an author is an active investor, agent, or lender in your target city. This **BiggerPockets scraper** and **BiggerPockets data extractor** automates the entire workflow in a single run:

- **Generate targeted real-estate investor leads** — extract member names, usernames, investor roles (`Investor`, `Real Estate Agent`, `Lender`, `Wholesaler`, `Contractor`, `Property Manager`, `Syndicator`), and city/state locations for B2B sales and partnerships.
- **Capture full Q\&A discussions at scale** — extract the original question alongside every community reply, author handle, timestamp, and upvote count.
- **Track market & financing sentiment** — monitor what investors are asking about DSCR loans, cap rates, Section 8 rentals, BRRRR deals, short-term rentals, and specific metro markets.
- **Build real-estate AI & RAG corpora** — feed thousands of verified investor discussions and deal analyses into LLMs, chatbots, and research pipelines.
- **Identify community voices & deal partners** — spot the most active, highest-upvoted contributors in specific real-estate niches.

***

### ✨ What this BiggerPockets scraper does

You can mix and match all three collection modes in a single run—or run with empty input `{}` for an instant multi-forum sample:

| Record `type` | Input Source | Extracted Data |
|---|---|---|
| **`forum-thread`** | `forumUrls` (`includePosts: false`) | Fast paginated thread index: `topicId`, `catId`, `title`, `category`, `replies`, `url`, `slug` |
| **`thread`** | `threadUrls` or `forumUrls` + `includePosts: true` | Complete discussion: `title`, `author`, `authorUsername`, `body`, `location`, `commentCount`, `upvotes`, `views`, `datePublished`, `posts[]` |
| **`user`** | `usernames` (handles or profile URLs) | B2B member lead record: `name`, `username`, `userId`, `investorType`, `location`, `memberSince`, `avatar`, `profileUrl` |

- ✅ **Unlocked 1,000+ deep forum pagination** — automatically walks forum pages (`?page=1, 2, 3…`), tolerates transient empty pages, and expands across popular BiggerPockets forums when needed to deliver 1,000+ unique threads.
- ✅ **Complete reply arrays (`posts[]`)** — when `includePosts` is enabled or `threadUrls` are provided, every reply in the thread is structured with `author`, `authorUsername`, `text`, `date`, and `upvotes`.
- ✅ **Accurate role vs. location classification** — distinguishes 30+ BiggerPockets member roles (`Investor`, `Realtor`, `Lender`, `Wholesaler`, `Flipper`, `Developer`, `CPA`, `Attorney`, etc.) from city/state strings so member `location` and `investorType` are never mixed up.
- ✅ **Low-cost execution** — runs cleanly on standard Apify Datacenter proxies without heavyweight browser overhead (~$0.04 per 1,000 items).
- ✅ **Run-sync ready** — mirrors results to the Key-Value Store `OUTPUT` key in addition to the default dataset for instant synchronous API integrations.

***

### 🎯 High-value use cases

| Persona / Team | How Teams Use This BiggerPockets Data Extractor |
|---|---|
|🏦 **DSCR, Hard-Money & Commercial Lenders** | Identify active investors discussing acquisitions, refinances, and bridge loans, then enrich their usernames into member lead profiles. |
| 🏢 **Property Management & Turnkey Providers** | Find out-of-state landlords asking about specific rental markets (e.g., Cleveland, Memphis, Indianapolis, Houston, Tampa). |
| 🤝 **Wholesalers & Deal Sourcers** | Build buyer lists of active flippers, rehabbers, and buy-and-hold investors by city and state. |
| 🛠️ **PropTech & Real Estate SaaS** | Monitor mentions of competing software (property management, deal calculators, landlord banking, CRM tools) and discover pain points. |
| 📈 **Real Estate Market Researchers** | Analyze thread volume, reply counts, and investor sentiment across categories like Multifamily, Short-Term Rentals, and Creative Financing. |
| 🤖 **AI Engineers & Content Strategists** | Build domain-specific real-estate Q\&A datasets sorted by community upvotes for RAG systems and SEO content research. |

***

### 📥 Input parameters

All parameters are optional. Provide `forumUrls`, `threadUrls`, `usernames`, or any combination. If all three are left empty, the actor automatically scrapes a curated set of top BiggerPockets investing forums.

| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
| `forumUrls` | `array<string>` | `["https://www.biggerpockets.com/forums/311-buying-selling-real-estate"]` | BiggerPockets forum or category URLs (e.g., `/forums/12-real-estate-investing`, `/forums/52-rental-property-questions-landlording-issues`). Paginates automatically. |
| `threadUrls` | `array<string>` | `[]` | Direct BiggerPockets topic URLs (`/forums/{catId}/topics/{topicId}-{slug}`). Returns the full thread and all replies. |
| `usernames` | `array<string>` | `["alex1333"]` (prefill) | BiggerPockets member usernames or `/users/{username}` profile URLs. Extracts member lead data (`name`, `investorType`, `location`). |
| `includePosts` | `boolean` | `false` (default) / `true` (prefill) | When `true`, fetches the full discussion (`body` + `posts[]`) for every thread discovered via `forumUrls`. Turn `false` for ultra-fast 1,000+ thread discovery. |
| `maxThreadsPerForum` | `integer` | `0` (default) / `8` (prefill) | Maximum threads to collect per forum URL. Set `0` for automatic/unlimited (governed by `maxItems`). |
| `maxItems` | `integer` | `0` | Hard cap on total records saved across all inputs (`0` = unlimited, or set `1000`, `5000`, etc.). |
| `proxyConfiguration` | `object` | `{ "useApifyProxy": true }` | Apify Proxy configuration. Standard Datacenter proxy is enabled by default and works reliably. |

#### Example 1 — Fast forum + full thread discussions + member lead (Prefill)

```json
{
  "forumUrls": [
    "https://www.biggerpockets.com/forums/311-buying-selling-real-estate"
  ],
  "usernames": [
    "alex1333"
  ],
  "includePosts": true,
  "maxThreadsPerForum": 8,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

#### Example 2 — Bulk 1,000+ forum threads across major investing categories

```json
{
  "forumUrls": [
    "https://www.biggerpockets.com/forums/311-buying-selling-real-estate",
    "https://www.biggerpockets.com/forums/12-real-estate-investing",
    "https://www.biggerpockets.com/forums/52-rental-property-questions-landlording-issues",
    "https://www.biggerpockets.com/forums/88-multifamily-and-apartment-investing"
  ],
  "includePosts": false,
  "maxThreadsPerForum": 0,
  "maxItems": 1200,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

#### Example 3 — Enrich a batch of BiggerPockets usernames into B2B investor leads

```json
{
  "forumUrls": [],
  "usernames": [
    "alex1333",
    "benjamino97",
    "bos40"
  ],
  "maxItems": 500
}
```

***

### 📤 Output schema & field reference

Every dataset item contains a `type` discriminator (`forum-thread`, `thread`, or `user`). Below are real sample outputs for all three record types:

#### Sample 1 — `type: "thread"` (Full Discussion Record)

```json
{
  "type": "thread",
  "topicId": "1280356",
  "catId": "311",
  "slug": "determining-what-is-a-good-deal-on-a-long-term-rental",
  "url": "https://www.biggerpockets.com/forums/311/topics/1280356-determining-what-is-a-good-deal-on-a-long-term-rental",
  "category": "Buying & Selling Real Estate",
  "title": "Determining what is a good deal on a long term rental",
  "author": "Benjamin Orsak",
  "authorUsername": "benjamino97",
  "body": "What metrics do you look for when determining whether a long term rental is worth pursuing?",
  "location": "Houston, Texas",
  "commentCount": 8,
  "upvotes": 2,
  "views": 51,
  "datePublished": "2026-09-23T06:59:30-07:00",
  "dateModified": "2026-09-23T06:59:30-07:00",
  "posts": [
    {
      "author": "Bo Smith",
      "authorUsername": "bos40",
      "text": "The 1% rule is a starting filter, not a decision...",
      "date": "2026-09-23T08:12:00-07:00",
      "upvotes": 3
    }
  ],
  "scrapedAt": "2026-11-10T02:50:00.000Z"
}
```

#### Sample 2 — `type: "forum-thread"` (Fast Listing Card Record)

```json
{
  "type": "forum-thread",
  "topicId": "1318241",
  "catId": "311",
  "slug": "what-makes-a-listing-stand-out-online",
  "url": "https://www.biggerpockets.com/forums/311/topics/1318241-what-makes-a-listing-stand-out-online",
  "title": "What makes a listing stand out online",
  "category": "Buying & Selling Real Estate",
  "replies": 3,
  "scrapedAt": "2026-11-10T02:50:00.000Z"
}
```

#### Sample 3 — `type: "user"` (Member Lead Record)

```json
{
  "type": "user",
  "username": "alex1333",
  "userId": "2187910",
  "name": "Alex S.",
  "investorType": "Investor",
  "location": "Washington, US",
  "avatar": "https://bpimg.biggerpockets.com/no_overlay/uploads/social_user/user_avatar/2187910/1626754325-avatar-alexeys13.jpg?twic=v1/output=image/cover=512x512&v=2",
  "memberSince": "2021-07-01T19:06:20.315-07:00",
  "profileUrl": "https://www.biggerpockets.com/users/alex1333",
  "scrapedAt": "2026-11-10T02:50:00.000Z"
}
```

#### 💬 Forum & Thread Fields (`forum-thread` and `thread`)

| Field | Type | Coverage | Description |
|---|---|---|---|
| `type` | `string` | 🟢 High (100%) | Record discriminator: `forum-thread`, `thread`, or `user`. |
| `topicId` | `string` | 🟢 High (100%) | Unique BiggerPockets thread/topic ID (deduplication key). |
| `catId` | `string` | 🟢 High (100%) | Numeric BiggerPockets forum category ID (e.g., `311`, `12`, `52`). |
| `slug` | `string` | 🟢 High (100%) | URL slug of the discussion thread. |
| `url` | `string` | 🟢 High (100%) | Canonical URL to the thread on BiggerPockets. |
| `title` | `string` | 🟢 High (100%) | Headline / title of the forum thread. |
| `category` | `string` | 🟢 High (100%) | Human-readable forum category name (e.g., `Buying & Selling Real Estate`). |
| `replies` | `integer \| null` | 🟢 High (~85%) | Reply count badge displayed on `forum-thread` listing cards. |
| `author` | `string` | 🟢 High (100% on `thread`) | Display name of the member who started the thread. |
| `authorUsername` | `string` | 🟢 High (100% on `thread`) | BiggerPockets username of the thread author (can be fed into `usernames` for profile enrichment). |
| `body` | `string` | 🟢 High (100% on `thread`) | Full plain-text body of the original forum post. |
| `location` | `string` | 🟡 Conditional | Geotagged city/state on the thread (when tagged by the author) or member's public location on `user` records. |
| `commentCount` | `integer \| null` | 🟢 High (100% on `thread`) | Total number of replies in the thread. |
| `upvotes` | `integer \| null` | 🟢 High (100% on `thread`) | Number of upvotes/likes on the original thread post. |
| `views` | `integer \| null` | 🟢 High (100% on `thread`) | Total thread view count. |
| `datePublished` | `string` | 🟢 High (100% on `thread`) | ISO 8601 timestamp when the thread was published. |
| `dateModified` | `string` | 🟢 High (100% on `thread`) | ISO 8601 timestamp when the thread was last updated. |
| `posts` | `array<object>` | 🟢 High (100% on `thread`) | Full list of replies (`author`, `authorUsername`, `text`, `date`, `upvotes`). |

#### 👤 Member Lead Fields (`type: "user"`)

| Field | Type | Coverage | Description |
|---|---|---|---|
| `username` | `string` | 🟢 High (100%) | Unique BiggerPockets member handle. |
| `userId` | `string` | 🟢 High (100%) | Numeric BiggerPockets member ID. |
| `name` | `string` | 🟢 High (100%) | Member full display name. |
| `investorType` | `string` | 🟡 Conditional (~65%) | Publicly listed member role (`Investor`, `Real Estate Agent`, `Lender`, `Wholesaler`, `Contractor`, `Property Manager`, etc.). |
| `location` | `string` | 🟡 Conditional (~80%) | Member's publicly listed city and state (e.g., `Houston, Texas`, `Washington, US`). |
| `memberSince` | `string` | 🟢 High (100%) | ISO 8601 timestamp when the member joined BiggerPockets. |
| `avatar` | `string` | 🟢 High (~95%) | URL to the member's profile photo. |
| `profileUrl` | `string` | 🟢 High (100%) | Canonical URL to the member's BiggerPockets profile (`https://www.biggerpockets.com/users/{username}`). |
| `scrapedAt` | `string` | 🟢 High (100%) | ISO 8601 UTC timestamp of extraction. |

***

### 🔁 Deep pagination & 1,000+ scale

- **25 threads per forum page:** BiggerPockets serves 25 threads per `?page=N` index page. The scraper automatically starts at `?page=1` and walks upward page by page.
- **Transient blank-page resilience:** BiggerPockets occasionally serves an empty page mid-sequence while subsequent pages still contain active threads. The pagination engine tolerates up to 3 consecutive empty pages before concluding a forum is exhausted.
- **Automatic multi-forum scaling for 1,000+ runs:** With `maxThreadsPerForum: 0` (the default), per-forum pagination scales automatically to match your `maxItems`. When you request `maxItems: 1000+` with a single forum URL (or empty input), the scraper paginates deep (up to 500 pages) and automatically supplements from popular BiggerPockets forums if the first forum runs out of pages.
- **Global deduplication:** A shared `topicId` set ensures that threads appearing in multiple categories or pages are never saved twice.

***

### ⚙️ How to run & two-step investor lead workflow

#### Two-step B2B Investor Lead Generation Pipeline (Python)

Use Run 1 to harvest active thread & reply authors from a target forum, then pass those `authorUsername` handles into Run 2 to enrich their full names, investor types, and locations:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

## Step 1: Collect discussions from Buying & Selling + Rental Property forums
thread_run = client.actor("haketa/biggerpockets-scraper").call(run_input={
    "forumUrls": [
        "https://www.biggerpockets.com/forums/311-buying-selling-real-estate",
        "https://www.biggerpockets.com/forums/52-rental-property-questions-landlording-issues"
    ],
    "includePosts": True,
    "maxItems": 100,
})

usernames = set()
for item in client.dataset(thread_run["defaultDatasetId"]).iterate_items():
    if item.get("authorUsername"):
        usernames.add(item["authorUsername"])
    for post in item.get("posts", []):
        if post.get("authorUsername"):
            usernames.add(post["authorUsername"])

## Step 2: Enrich all discovered usernames into B2B investor leads
lead_run = client.actor("haketa/biggerpockets-scraper").call(run_input={
    "forumUrls": [],
    "usernames": list(usernames)[:250],
})

for lead in client.dataset(lead_run["defaultDatasetId"]).iterate_items():
    print(f"{lead['name']} (@{lead['username']}) | {lead['investorType']} | {lead['location']}")
```

#### Fast 1,000+ Thread Discovery via Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('haketa/biggerpockets-scraper').call({
    forumUrls: [
        'https://www.biggerpockets.com/forums/12-real-estate-investing',
        'https://www.biggerpockets.com/forums/311-buying-selling-real-estate',
    ],
    includePosts: false,
    maxThreadsPerForum: 0,
    maxItems: 1000,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Collected ${items.length} unique BiggerPockets threads.`);
```

***

### 💡 Popular BiggerPockets forum URLs to scrape

| Forum Category | URL |
|---|---|
| Buying & Selling Real Estate | `https://www.biggerpockets.com/forums/311-buying-selling-real-estate` |
| General Real Estate Investing | `https://www.biggerpockets.com/forums/12-real-estate-investing` |
| Rental Property & Landlording | `https://www.biggerpockets.com/forums/52-rental-property-questions-landlording-issues` |
| Multifamily & Apartment Investing | `https://www.biggerpockets.com/forums/88-multifamily-and-apartment-investing` |
| Creative Real Estate Financing | `https://www.biggerpockets.com/forums/49-creative-real-estate-financing` |
| Starting Out | `https://www.biggerpockets.com/forums/48-starting-out` |
| House Flipping & Rehabbing | `https://www.biggerpockets.com/forums/67-rehabbing-and-house-flipping` |
| Short-Term & Vacation Rentals | `https://www.biggerpockets.com/forums/530-short-term-and-vacation-rental-discussion` |

***

### ⚠️ Honest limitations

- **Public profile fields only:** Member profiles expose `name`, `username`, `userId`, `investorType`, `location`, `memberSince`, and `avatar`. Direct email addresses or phone numbers are not displayed publicly on BiggerPockets member pages.
- **Role & location depend on member input:** Roughly 65–80% of members list an `investorType` and `location` on their public profile; when omitted by the user, those fields are returned as `""`.
- **`includePosts: true` fetches each thread individually:** For fast discovery of 1,000+ thread titles and URLs, set `includePosts: false`. Enable `includePosts: true` when you want the full post body and `posts[]` reply array for each thread.

***

### ❓ Frequently asked questions

#### Do I need a BiggerPockets account or login cookies?

No. This actor extracts publicly accessible forum threads, replies, and member profiles without requiring any account or login credentials.

#### How do I collect 1,000+ threads in a single run?

Set `maxItems: 1000` (or higher), leave `maxThreadsPerForum: 0` (automatic), and set `includePosts: false` for fast index pagination—or `includePosts: true` for full thread bodies and replies.

#### What proxies are recommended?

Standard **Apify Datacenter Proxy** (`{ "useApifyProxy": true }`) is enabled by default and works fast and reliably at ~$0.04 per 1,000 records.

#### Can I scrape specific threads or specific members without scraping a whole forum?

Yes. Leave `forumUrls: []` and pass your target `threadUrls` and/or `usernames`.

#### Is the output available via synchronous API calls?

Yes. In addition to pushing every item to the default Apify dataset, the actor writes `{ count, items }` to the Key-Value Store `OUTPUT` record so `run-sync` callers receive the data immediately.

***

### 🔗 Related real-estate & B2B scrapers

- [Redfin Real Estate Scraper](https://apify.com/haketa/redfin-scraper) — US property listings, sold prices, and agent contact data.
- [Auction.com Foreclosure & REO Scraper](https://apify.com/haketa/auction-com-scraper) — US foreclosure and distressed real-estate investment listings.
- [LoopNet Commercial Real Estate Scraper](https://apify.com/haketa/loopnet-scraper) — Commercial multifamily, retail, and industrial properties.
- [BBB Business Scraper](https://apify.com/haketa/bbb-scraper) — Enrich real-estate businesses, contractors, and lenders with phone numbers and websites.

***

### 📋 Changelog

- **v1.2 (2026-11)** — Unlocked **1,000+ deep pagination** across forums (`maxThreadsPerForum` default changed to `0` = auto-scaled by `maxItems`, page ceiling raised to 500 pages, automatic multi-forum fallback on empty or single-forum 1,000+ runs, global cross-forum `topicId` deduplication), and expanded documentation.
- **v1.1 (2026-09)** — Added breadcrumb category extraction on full thread pages, improved `investorType` vs. `location` role disambiguation on member profiles, and added transient blank-page tolerance (`emptyStreak >= 3`).
- **v1.0 (2026-09)** — Initial release supporting `forum-thread`, `thread` (with full `posts[]` replies), and `user` lead profiles.

# Changelog

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

# Actor input Schema

## `forumUrls` (type: `array`):

BiggerPockets forum or category URLs (e.g. https://www.biggerpockets.com/forums or https://www.biggerpockets.com/forums/311-buying-selling-real-estate). Lists threads across pages.

## `threadUrls` (type: `array`):

Direct BiggerPockets thread URLs (e.g. https://www.biggerpockets.com/forums/311/topics/1280356-...). Each returns the full thread: original post + every reply with authors.

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

BiggerPockets usernames (e.g. alex1333) or profile URLs. Each returns the member's profile: name, investor type and location (lead data).

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

For each thread found in a forum, fetch the full thread (original post + all replies with authors). Slower but much richer.

## `maxThreadsPerForum` (type: `integer`):

Maximum number of threads to collect per forum URL (paginates automatically across pages). Set 0 for automatic / unlimited (governed by Max total items).

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

Optional hard cap on total records across all inputs. 0 = no limit.

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

Apify Proxy. Datacenter is enough for BiggerPockets and is enabled by default; add residential only if you hit rate limits.

## Actor input object example

```json
{
  "forumUrls": [
    "https://www.biggerpockets.com/forums/311-buying-selling-real-estate"
  ],
  "usernames": [
    "alex1333"
  ],
  "includePosts": true,
  "maxThreadsPerForum": 8,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

forum-thread | thread | user

## `title` (type: `string`):

Thread title

## `category` (type: `string`):

Forum category

## `url` (type: `string`):

Thread URL

## `topicId` (type: `string`):

Thread/topic ID

## `catId` (type: `string`):

Forum/category ID

## `author` (type: `string`):

Thread author name

## `authorUsername` (type: `string`):

Thread author username

## `body` (type: `string`):

Original post text

## `location` (type: `string`):

Thread or member location

## `replies` (type: `string`):

Reply count (list view)

## `commentCount` (type: `string`):

Number of posts in thread

## `upvotes` (type: `string`):

Thread upvotes

## `views` (type: `string`):

Thread views

## `datePublished` (type: `string`):

Thread publish date

## `username` (type: `string`):

Member username

## `userId` (type: `string`):

Member ID

## `name` (type: `string`):

Member display name

## `investorType` (type: `string`):

Investor / Agent / Lender etc.

## `memberSince` (type: `string`):

Join date

## `avatar` (type: `string`):

Avatar image URL

## `profileUrl` (type: `string`):

Member profile link

## `scrapedAt` (type: `string`):

ISO timestamp

# 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 = {
    "forumUrls": [
        "https://www.biggerpockets.com/forums/311-buying-selling-real-estate"
    ],
    "usernames": [
        "alex1333"
    ],
    "includePosts": true,
    "maxThreadsPerForum": 8,
    "maxItems": 0,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/biggerpockets-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 = {
    "forumUrls": ["https://www.biggerpockets.com/forums/311-buying-selling-real-estate"],
    "usernames": ["alex1333"],
    "includePosts": True,
    "maxThreadsPerForum": 8,
    "maxItems": 0,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/biggerpockets-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 '{
  "forumUrls": [
    "https://www.biggerpockets.com/forums/311-buying-selling-real-estate"
  ],
  "usernames": [
    "alex1333"
  ],
  "includePosts": true,
  "maxThreadsPerForum": 8,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/biggerpockets-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/biggerpockets-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/2aRe2hG49HpWJEEHN/builds/bZ4StQDE523thAfjs/openapi.json
