# Forum Search API - Reddit, Reviews, Blogs, News, BoardReader (`nabeelbaghoor/forum-search-boardreader-api`) Actor

Search licensed message board, forum, Reddit, blog, news, review, video, Quora, TikTok and VK posts, as far back as your key allows. Filter by date, language, country, domain and author; get text, URL, author, site and engagement. Read only. Bring your own Socialgist BoardReader API key.

- **URL**: https://apify.com/nabeelbaghoor/forum-search-boardreader-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Social media, Marketing, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 post returneds

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

## Forum Search API - Reddit, Reviews, Blogs, News, BoardReader

Search licensed message board, forum, Reddit, blog, news, review, video, Quora, TikTok and VK conversations through the Socialgist BoardReader API, and get one clean row per post with its text, URL, author, site, dates and engagement, ready for a spreadsheet, a warehouse or a model.

### What it collects

- **Message boards and forums**: the long-tail community sites search engines skip, with subject, text, thread title, forum, site, domain, country, language, author and author profile, and whether the post started the thread.
- **Reddit** posts and comments with subreddit, author, score and permalink, filterable to posts or comments only.
- **Blogs and online news**, optionally with their comments, with feed title, author, country and language.
- **Consumer reviews** with rating, reviewed item, review site and country.
- **Video** posts and comments with likes and comment counts; **Quora** questions and answers with upvotes, views and comments; **TikTok** videos and comments with likes, plays and replies; **VK** posts and comments with likes and comments.
- **Filters**: date range, languages, countries, domains (include or exclude), author, sort order (relevance, newest, oldest, recently indexed), comments switch, full text or snippet, and any other documented parameter as JSON.
- **Key info**: the daily request limit, matches per query, history window and sources your key allows.
- Read only, pay per result, bring your own key.

### Input

| Field | What it does |
| --- | --- |
| Source | Message boards and forums (default), Reddit, blogs, news, reviews, video, Quora, TikTok, VK, or key info. |
| Search query | Keywords in the provider's extended syntax: phrases in quotes, a pipe for OR, a minus to exclude, `@subject word` for one field. |
| Start date / End date | YYYY-MM-DD or a Unix timestamp. With no dates the provider searches the last 3 months. |
| Languages, countries, domains | Lists. Countries are ISO two-letter codes; a domain prefixed with `-` is excluded. |
| Author | One author name. |
| Sort by | Relevance, newest first, oldest first, recently indexed first and more. |
| Comments | Blogs, news and video: posts only, posts and comments, or comments only. |
| Reddit item type | Posts, comments or both. |
| Full text / Detail level | Full post text instead of a snippet; full or basic field set. |
| Extra parameters | Any other documented parameter, such as `{"filter_score": "gte100"}`. |
| Maximum results | Row cap for the run, up to 10,000. |
| BoardReader API key | Your own key, as a secret input, or the `DATA_API_KEY` secret. |

### FAQ

#### What is a forum search API used for?

Getting real customer conversation out of the places it actually happens. A brand team tracks complaints about a product across car, parenting and hobby forums. A pharma insights team pulls patient discussion of a drug from health boards and Reddit. An AI team builds a training or evaluation set from long-tail community text. A market researcher compares review ratings and forum sentiment for competing products.

#### Which data source does this actor read?

The BoardReader API at api.boardreader.com, run by Socialgist and documented publicly at api.boardreader.com/docs. It calls only the documented search routes (Boards, Reddit, Blogs, News, Reviews, Video, Quora, TikTok and VK) and the Keys info route. Socialgist licenses this data; it is not scraped by this actor.

#### Do I need an API key?

Yes. This actor is bring-your-own-key and never ships one. Socialgist issues BoardReader keys to customers of its Find plan. Paste the key into the input, or set it once as the `DATA_API_KEY` environment secret. A missing, invalid, expired or disabled key ends the run cleanly with a message saying which it was, and so does a used-up daily limit.

#### How far back can I search, and how many posts can one run return?

Without dates the provider searches the last 3 months; with dates, as far back as your key's history window allows (the key info mode shows it). Results are read 100 per request. One query returns up to the key's matches-per-query limit, 1,000 by default, and this actor caps a run at 10,000 rows. Split a large export by date range to go further.

#### Why do message board dates look a few hours off?

The provider stores forum post times in US Eastern local time because the source sites rarely state a time zone. When you give dates as YYYY-MM-DD for message boards, the actor adds the Eastern offset the provider's docs prescribe, so the range lines up with UTC days.

#### How do I search one field or exclude words?

Use the extended query syntax: `@subject recall` searches forum subjects only, `@title` and `@text` work for Reddit, `"exact phrase"` matches a phrase, `|` means OR and `-word` excludes. Characters such as `!`, `$`, `(`, `)` and `/` need a backslash to be taken literally.

#### Can this actor change anything in my account?

No. Every call is a GET, and the API has no write routes. The key travels only to api.boardreader.com and never appears in a row or in the log; the key info row leaves the key itself out.

#### How is it priced?

Pay per result: one price per post, comment, review or video returned, and a lower one for the key info row. Searches with no matches are free. Your Socialgist subscription applies separately.

### Example output

```json
{
  "source": "boards",
  "sourceLabel": "Message boards and forums",
  "recordType": "post",
  "query": "\"electric bike\" battery",
  "found": true,
  "id": "123456789",
  "title": "Battery range dropped after the first winter",
  "text": "My electric bike battery used to get 40 miles and now struggles to do 25...",
  "url": "https://forum.example.com/threads/battery-range.4567/#post-89012",
  "published": "2026-09-14 08:21:00",
  "inserted": "2026-09-14 13:05:12",
  "author": "rider_example",
  "authorUrl": "https://forum.example.com/members/rider_example.321/",
  "site": "Example E-Bike Forum",
  "siteUrl": "https://forum.example.com/",
  "domain": "example.com",
  "language": "English",
  "country": "US",
  "threadTitle": "Battery range dropped after the first winter",
  "isComment": true,
  "score": null,
  "likes": null,
  "comments": 18,
  "views": null,
  "rating": null,
  "record": { "Id": "123456789", "Subject": "Battery range dropped after the first winter", "SiteTitle": "Example E-Bike Forum" },
  "retrievedAt": "2026-10-02T09:14:52.118Z",
  "note": null
}
```

Values are illustrative; every field is one the provider documents. Reddit rows fill `score`, review rows fill `rating`, and video, Quora, TikTok and VK rows fill `likes`, `comments` and `views` where the source has them. The provider's whole record is kept in `record`.

### Keyword map

forum search API, message board search, forum data API, Reddit search API, Reddit comments export, blog search API, news search API, review data API, consumer reviews export, social listening data, long-tail social data, community data for AI training, Quora data, TikTok comments data, VK data, BoardReader API, Socialgist API, Socialgist BoardReader.

# Actor input Schema

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

Which BoardReader index to search. Message boards and forums is the default. Key info needs no query and shows the limits and sources your key allows.

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

Keywords in the provider's extended query syntax: quotes for phrases, | for OR, - for NOT, and @field to search one field, for example "electric bike" (battery|range) -ebay or @subject recall. Needed by every source except key info.

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

Earliest publication date, as YYYY-MM-DD (start of the day, UTC) or a Unix timestamp. With no dates the provider searches the last 3 months. For message boards the Eastern time offset the provider asks for is applied for you.

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

Latest publication date, as YYYY-MM-DD (end of the day, UTC) or a Unix timestamp.

## `languages` (type: `array`):

Keep only posts in these languages, as names or codes such as English or en. Leave empty for all.

## `countries` (type: `array`):

Message boards, blogs, news and reviews. Keep only sources from these countries, as ISO 3166 two-letter codes such as US or DE.

## `domains` (type: `array`):

Message boards, blogs, news, reviews and video. Keep only posts from these domains and their subdomains, such as example.com. Prefix one with - to exclude it.

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

Keep only posts by this author name (for VK, the author ID). Not available for news.

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

Relevance is the provider default. Newest first suits monitoring; recently indexed first suits incremental exports. TikTok does not sort by indexed time.

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

Blogs, news and video. Whether to include comments alongside posts. The provider default is posts only for blogs and news, and posts plus comments for video.

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

Reddit only. Posts, comments or both.

## `fullText` (type: `boolean`):

Return the full text of each post instead of a snippet, where your key allows full posts.

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

Full adds author details, thread and site identifiers and engagement fields. Basic returns fewer fields per post.

## `extraParams` (type: `object`):

Any other parameter the chosen source documents, such as {"filter_score": "gte100"} for Reddit, {"filter_item_name": "^Example Hotel$"} for reviews, or {"filter_region": "Europe"} for message boards. Undocumented names are refused.

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

Row cap for the run. Matches are read 100 per request. Your key may cap matches per query lower (1,000 by default).

## `requestsPerMinute` (type: `integer`):

Pacing ceiling for calls to the provider. Lower it if your key has a small daily request limit shared with other jobs.

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

Your own Socialgist BoardReader API key. Stored as a secret and sent only to api.boardreader.com. You can also set it as the DATA_API_KEY environment secret.

## Actor input object example

```json
{
  "source": "boards",
  "query": "\"electric bike\" battery",
  "sortBy": "relevance",
  "comments": "default",
  "redditThing": "all",
  "fullText": false,
  "detail": "full",
  "maxResults": 100,
  "requestsPerMinute": 60
}
```

# Actor output Schema

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

One row per matching post, comment, review or video, or one key info row.

# 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 = {
    "query": "\"electric bike\" battery"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/forum-search-boardreader-api").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 = { "query": "\"electric bike\" battery" }

# Run the Actor and wait for it to finish
run = client.actor("nabeelbaghoor/forum-search-boardreader-api").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 '{
  "query": "\\"electric bike\\" battery"
}' |
apify call nabeelbaghoor/forum-search-boardreader-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/forum-search-boardreader-api"
        }
    }
}
```

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/QagGP1MKd2R9O91CJ/builds/3GjYSxoPRyZxq54ml/openapi.json
