# B2B Reddit Conversation Monitor (`mambalabs/b2b-reddit-conversation-monitor`) Actor

Find the Reddit threads that name a company, its competitors, or a product category. Enter a domain, category keywords, or a topic and get tagged threads and comments (complaint, switching, buying intent, alternative request) with an intent score, plus summary rows. CSV or Clay ready.

- **URL**: https://apify.com/mambalabs/b2b-reddit-conversation-monitor.md
- **Developed by:** [Mamba Labs](https://apify.com/mambalabs) (community)
- **Categories:** Lead generation, Automation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 thread rows

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

## B2B Reddit Conversation Monitor

Find the Reddit conversations that name a company, its competitors, or a product category. Enter a company domain, a few category keywords, or a topic. You get one row per thread or comment, tagged as complaint, praise, comparison, alternative request, switching, buying intent, feature request, or question, with a 0 to 100 intent score, plus summary rows: share of voice against competitors for a company, the most discussed companies in a category, or recurring questions grouped by theme. Rows are flat, so they export to CSV or drop into a Clay table.

### Features

- **Three modes.** Company: a domain in, the threads and comments that name the company and its competitors out, plus one company summary row. Category: product lane keywords in, the companies discussed most in that lane, with mention counts and sentiment. Gap: subreddits and a topic in, the questions people keep asking, grouped by theme, with how many went unanswered and which tools the answers named.
- **Competitor displacement signals.** A row gets `displacement_signal` true when one sentence names a competitor and complains about it, switches from it, or asks for an alternative to it. The row names that competitor and links the thread.
- **Share of voice.** The company summary row carries the brand share of voice and, for up to 5 competitors, thread count, share of voice, and negative percent, as flat columns. Competitors are yours, or found in the brand threads from "X vs Y", "alternative to X", and "switched from X" phrasing.
- **Rule based tags and score.** Tags, sentiment, and the intent score come from fixed patterns, not from an AI model, so the same text always gets the same tags and the cost of a row never changes.
- **Tool names from the answers.** Product and company names in the comments are collected into `tools_mentioned`. In gap mode, a question whose comments name a tool counts as `answered_with_tool`.
- **Subreddit discovery.** In gap mode with no subreddits given, up to 8 subreddits are found from the topic, and the list used is on every theme row.
- **Scheduling.** Only new results skips rows an earlier run already returned (free), and an optional webhook posts a Slack ready summary with the top rows by intent score.
- **Cost guards.** Max threads, threads opened for comments, comments per thread, comment depth, and a max charge per run.
- **Hacker News, optional.** Add Hacker News stories and comments through its public search API.

### How it reads Reddit

Public Reddit feeds (the Atom feeds Reddit serves for search, subreddits, and threads) through the Apify proxy. No Reddit account, no API key, and no other developer's actor. Only public usernames and permalinks are returned; no profile is read. Reddit feeds carry no vote scores, so engagement is the number of comments read.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `mode` | string | `company` | `company`, `category`, or `gap` |
| `company_domain` | string | | Company mode. One domain, for example `smartlead.ai` |
| `domains` | array | | Company mode. Several domains, up to 50 |
| `brand_names` | array | | Company mode. Names to search for. Empty: resolved for you (see `use_identity_resolver`) |
| `product_names` | array | | Company mode. Product names to search for beside the brand |
| `competitors` | array | | Company mode. Competitor names. Empty: discovered when `discover_competitors` is on |
| `discover_competitors` | boolean | `true` | Company mode. Find competitors in the brand threads; a name must appear in 2 or more threads |
| `max_competitors` | integer | `5` | Company mode. 0 to 5 |
| `use_identity_resolver` | boolean | `true` | Company mode, when `brand_names` is empty. Runs Mamba Labs Company Identity Resolver from your account; Apify charges you its own result event (0.007 USD per domain). Off: the homepage title is used |
| `category_keywords` | array | | Category mode. Product lane phrases, for example `cold email tools` |
| `known_companies` | array | | Category and gap modes. Names to always count |
| `topic` | string | | Gap mode. What the questions are about |
| `topic_terms` | array | | Gap mode. More search phrases for the same need. Reddit returns only posts with every word of a query, so a two word topic can be narrow |
| `subreddits` | array | | Limit every search to these subreddits |
| `exclude_subreddits` | array | | Drop rows from these subreddits |
| `vendor_subreddits` | string | `exclude` | A vendor's own subreddit (r/smartlead, r/artikle) is read as marketing. `exclude` drops those threads; `flag` keeps them with `vendor_subreddit` true and out of every count; `include` keeps them with `vendor_subreddit` true and counts them. A subreddit you name is never treated as one |
| `discover_subreddits` | boolean | `true` | Gap mode. Find subreddits from the topic when none are given |
| `since_days` | integer | `90` | Only threads from the last this many days |
| `max_threads` | integer | `100` | Thread rows per input (company and gap), threads read (category). Up to 1,000 |
| `include_comments` | boolean | on in company and gap, off in category | Return comments as rows: comments that name the brand or a competitor (company), a company or keyword (category), or answers that name a tool (gap) |
| `max_comment_threads` | integer | 20, 30 in category, 50 in gap | Threads opened to read comments, highest intent first |
| `max_comments_per_thread` | integer | `25` | Comments read per opened thread, top first |
| `comment_depth` | integer | `2` | Reply levels read |
| `include_hacker_news` | boolean | `false` | Add Hacker News results |
| `max_charge_usd` | string | | Stop before a row would pass this amount |
| `only_new` | boolean | `false` | Skip rows an earlier run with the same `state_key` returned |
| `state_key` | string | | Names the seen list; one key per schedule |
| `webhook_url` | string | | https URL for one POST at the end of the run |
| `webhook_top_n` | integer | `10` | Rows in the webhook |
| `proxy_mode` | string | `auto` | `auto` (datacenter, then residential when refused) or `residential`. A reliability choice |

Every field also accepts text, as Clay sends it: `"true"`, `"30"`, a comma separated list, or a JSON array.

### Output

One row layout for every row type, so no column is lost between them. Key fields:

| Field | Rows | Example |
|---|---|---|
| `row_type` | all | `thread`, `comment`, `company_summary`, `category_company`, `gap_theme` |
| `url`, `thread_url`, `subreddit`, `author`, `title`, `body_excerpt`, `created_at` | thread, comment | |
| `tags`, `primary_tag`, `sentiment`, `intent_score` | thread, comment | `["question","alternative_request"]`, `alternative_request`, `neutral`, `87` |
| `matched_entity`, `matched_terms`, `competitor_named` | thread, comment | `brand`, `["Smartlead"]`, `Instantly` |
| `displacement_signal`, `displacement_competitor` | thread, comment | `true`, `Instantly` |
| `tools_mentioned`, `answer_status`, `comment_count` | thread | `["Instantly","Smartlead"]`, `answered_with_tool`, `25` |
| `vendor_subreddit` | thread, comment | `false` |
| `mention_count`, `thread_count`, sentiment counts, `negative_pct` | summaries | |
| `share_of_voice_pct`, `competitor_1_name` to `competitor_5_negative_pct` | company summary | `42.5`, `Instantly`, ... |
| `displacement_count`, `top_complaint_themes`, `tag_counts_json` | company summary | |
| `entity_name`, `entity_domain` | category company | `Instantly`, `instantly.ai` |
| `theme_label`, `question_count`, `unanswered_count`, `answered_with_tool_count`, `tools_recommended` | gap theme | `warmup inbox`, `4`, `0`, `2`, `["Instantly"]` |
| `row_status`, `error_reason`, `billable_events_json` | all | `ok`, `null`, `{"thread-row":1}` |

The run summary (key-value store record `RUN_SUMMARY`) lists rows by type, charged events, requests, the proxy route used, the subreddits used, and Reddit's robots.txt as read on the run.

### Pricing

Pay per event. You pay only these events; the Apify platform and proxy costs of your run are paid by Mamba Labs.

| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Thread row (`thread-row`) | $0.0018 | $0.0017 | $0.0016 | $0.0015 |
| Comment row (`comment-row`) | $0.001 | $0.00095 | $0.0009 | $0.00085 |
| Summary row (`summary-row`): company summary, category company, or question theme | $0.003 | $0.00285 | $0.0027 | $0.00255 |
| Actor start (`apify-actor-start`), once per run | $0.0005 | $0.0005 | $0.0005 | $0.0005 |

Free rows: blocked, error, and no results rows, and rows skipped by Only new results. A company summary with no mentions is free. With Only new results on, the summary rows are still returned and billed on every run, because they describe the whole date window. On the Apify free plan the actor stops at 1.50 USD of evaluation a month (about 833 thread rows); any paid Apify plan removes that cap.

When `brand_names` is empty and `use_identity_resolver` is on, the run also starts Mamba Labs Company Identity Resolver, and Apify charges you that actor's own result event (0.007 USD per domain) beside the prices above.

Example: company mode on one domain with defaults returns about 30 to 100 thread rows, 0 to 30 comment rows, and 1 summary row, about 0.06 to 0.25 USD.

### Usage examples

#### Apify Console or API

```json
{ "mode": "company", "company_domain": "smartlead.ai", "brand_names": ["Smartlead"], "competitors": ["Instantly", "lemlist"], "since_days": 60 }
```

```json
{ "mode": "category", "category_keywords": ["cold email tools", "cold email software"], "since_days": 365, "max_threads": 100 }
```

```json
{ "mode": "gap", "subreddits": ["sales", "Coldemailing", "LeadGeneration"], "topic": "", "since_days": 30 }
```

#### Clay

Add an HTTP API or Apify column, send `company_domain` from your table, and read `share_of_voice_pct`, `negative_pct`, `displacement_count`, and `competitor_1_name` from the company summary row. For a displacement lead list, filter thread rows on `displacement_signal` true and sort by `intent_score`.

#### Scheduled monitoring

Save the input as an Apify task with `only_new` true, a `state_key`, and a Slack incoming webhook in `webhook_url`, then schedule it daily or weekly. Each run posts only the new conversations.

#### MCP

The MCP server `@mambalabs/mcp-b2b-reddit-conversation-monitor` exposes this actor as a tool for Claude and other MCP clients.

### Error handling

| Situation | What you get |
|---|---|
| Reddit refuses every route for an input | One free summary row with `row_status` `blocked` and the reason |
| A subreddit does not exist (banned, private, or renamed) | It is skipped and named in `error_reason` |
| A thread's comments cannot be read | The thread row ships with `answer_status` `not_checked` |
| Company Identity Resolver cannot be reached | The homepage title is used; with no name the domain alone is searched, and the summary says so |
| No mentions in the window | One free row with `row_status` `no_results` |
| Max charge reached | The run stops before the next billable row and says why in the status message |

### Limitations

- Reddit feeds return at most about 1,000 posts per search, newest first; counts are counts within the date window and the thread cap, not all time totals.
- A brand name that is also a common word (Close, Notion, Instantly) is matched only as written, capitalized, or as its domain. Sentence starts can still match; give `subreddits` for the cleanest results.
- Share of voice is measured in the subreddits used (yours, or the 5 where the brand is discussed most).
- A company name counts in category and gap summaries only when a domain, your known companies list, or a recommendation or switching phrase ("use X", "switched to X", "alternative to X") names it somewhere in the run. Countries, cities, nationalities, and link hosts (GIF, chat, and image hosts, video and document sites) never count.
- Tags, sentiment, tool names, and competitors are found by fixed patterns. Sarcasm reads as written. Check `tools_mentioned` and discovered competitors before you act on them.
- Reddit feeds carry no vote scores; engagement is comments read.
- Reddit's robots.txt and its Public Content Policy govern automated access to Reddit content. You are responsible for how you use the rows.

### More from Mamba Labs

| Actor | Actor ID |
|---|---|
| [Account Hiring Watch](https://apify.com/mambalabs/account-hiring-watch?fpr=mamba) | `gRAZA5WBi1r6L0gy7` |
| [Agent Accessibility Auditor](https://apify.com/mambalabs/agent-accessibility-auditor?fpr=mamba) | `anxbRv0lKrpQ1pnua` |
| [Agent to Brokerage Resolver](https://apify.com/mambalabs/agent-brokerage-resolver?fpr=mamba) | `ePRRGLxOGyaVHO4dI` |
| [AI Tooling Detector](https://apify.com/mambalabs/ai-tooling-detector?fpr=mamba) | `EwkHhmqiuJgRoVEbE` |
| [Bluesky Brand Presence Mapper](https://apify.com/mambalabs/bluesky-brand-presence-mapper?fpr=mamba) | `eLpxzP4IuXznlFVND` |
| [Career Change Signal Engine](https://apify.com/mambalabs/career-change-signal-engine?fpr=mamba) | `vX2Yga1a6wGaXaP14` |
| [Company Change Event Feed](https://apify.com/mambalabs/company-change-event-feed?fpr=mamba) | `oX44rS0fkEJ3rXLWe` |
| [Company Contact Details Extractor](https://apify.com/mambalabs/company-contact-details-extractor?fpr=mamba) | `4mMncKaJykiq94grz` |
| [Company Discovery List Builder](https://apify.com/mambalabs/company-discovery-list-builder?fpr=mamba) | `jch0HdaZnpbMqlcGS` |
| [Company Firmographic Enricher](https://apify.com/mambalabs/company-firmographic-enricher?fpr=mamba) | `YlUtLWjfPpqykmB8g` |
| [Company Funding Record](https://apify.com/mambalabs/funding-investor-record?fpr=mamba) | `OFS4Mt1gyYNtGfUbE` |
| [Company Identity Resolver](https://apify.com/mambalabs/company-identity-resolver?fpr=mamba) | `lr8fTRAmZCBZmuwwh` |
| [Company Social Presence Mapper](https://apify.com/mambalabs/company-social-presence-mapper?fpr=mamba) | `4k6CCemkgBDz18m2h` |
| [Contact Classifier](https://apify.com/mambalabs/contact-classifier?fpr=mamba) | `0lGSeYJmniXhGANnO` |
| [Cookie Consent Audit](https://apify.com/mambalabs/cookie-consent-audit?fpr=mamba) | `TrKyOS0KBoGC35nbr` |
| [Domain Deliverability Checker](https://apify.com/mambalabs/domain-deliverability-checker?fpr=mamba) | `0tVgxI7A6o9jMlxmc` |
| [Domain to LinkedIn URL Resolver](https://apify.com/mambalabs/domain-to-linkedin-url-resolver?fpr=mamba) | `3HtnSaqPHOg1Qg5gx` |
| [Ecommerce Platform Profiler](https://apify.com/mambalabs/ecommerce-platform-profiler?fpr=mamba) | `5G2NeYjBbQTjaTn9L` |
| [Event Presence Index](https://apify.com/mambalabs/event-presence-index?fpr=mamba) | `WLhMy8fMDgsxdYxv5` |
| [Expert Witness Directory](https://apify.com/mambalabs/expert-witness-directory?fpr=mamba) | `LIpwlgfE3LaQBaXd4` |
| [Funding and Press Signal Scanner](https://apify.com/mambalabs/funding-press-signal-scanner?fpr=mamba) | `FS13X6dhQVgX3XOM6` |
| [GitHub Organization Signal Scanner](https://apify.com/mambalabs/github-organization-signal-scanner?fpr=mamba) | `ahF8RRpv5mzPao5CN` |
| [Google Ads Transparency Monitor](https://apify.com/mambalabs/google-ads-transparency-monitor?fpr=mamba) | `1eOwxhBVxzvOXAm4s` |
| [Government Contract Award Monitor](https://apify.com/mambalabs/public-award-monitor?fpr=mamba) | `zhEtllASykOcx9hJ8` |
| [GTM Hiring Signal Scraper](https://apify.com/mambalabs/gtm-hiring-signal-scraper?fpr=mamba) | `D7O1SA2EqwHGsGr1P` |
| [GTM Signals Aggregator](https://apify.com/mambalabs/b2b-buying-signals-hiring-tech-stack-intent-for-clay?fpr=mamba) | `xKdRfnfFNkdMpFuNs` |
| [ICP Fit Scorer](https://apify.com/mambalabs/icp-account-lead-scoring-fit-scorer-0-100-for-clay?fpr=mamba) | `W161DT8W4kW55dMFh` |
| [Influencer Change Monitor](https://apify.com/mambalabs/creator-change-monitor?fpr=mamba) | `d2VVgahNL6UmcLkhg` |
| [Influencer Finder](https://apify.com/mambalabs/creator-finder?fpr=mamba) | `tpkedmloIIWtXx6sg` |
| [Influencer Lead List Builder](https://apify.com/mambalabs/creator-lead-list-all-in-one?fpr=mamba) | `KnmByszcv135yM30G` |
| [Influencer Profile Scraper](https://apify.com/mambalabs/creator-profile-reader?fpr=mamba) | `EqEnklDVMIcB1V499` |
| [Influencer Talent Agency Lookup](https://apify.com/mambalabs/talent-agency-lookup?fpr=mamba) | `zCuX4Mgyg6JvXgGzd` |
| [Instagram Facebook Brand Presence Mapper](https://apify.com/mambalabs/meta-brand-presence-mapper?fpr=mamba) | `HXh65I0JBjPsunbY8` |
| [Job Board Keyword Signal Scanner](https://apify.com/mambalabs/job-board-keyword-signal-scanner?fpr=mamba) | `4DvqpvhMR74NLcDDY` |
| [Job Change Tracker](https://apify.com/mambalabs/job-change-tracker?fpr=mamba) | `L8UbEmMJC1XYPSZOb` |
| [Job Posting Monitor](https://apify.com/mambalabs/gtm-job-discovery?fpr=mamba) | `QCfICD9kOPiOdj5iI` |
| [Legal Entity Resolver](https://apify.com/mambalabs/legal-entity-resolver?fpr=mamba) | `KHFyPCDIx7CyqULYm` |
| [Link in Bio Scraper and Newsletter Detector](https://apify.com/mambalabs/link-in-bio-newsletter-checker?fpr=mamba) | `OorucdheTIgu7RFzK` |
| [LinkedIn Company Page Mapper](https://apify.com/mambalabs/linkedin-company-presence-mapper?fpr=mamba) | `zOPm6A9JEhUGcIdFW` |
| [LinkedIn Post Tracker](https://apify.com/mambalabs/linkedin-post-engager-capture?fpr=mamba) | `oiGLNPuaf5BRaz9K5` |
| [Meta Ad Library Monitor](https://apify.com/mambalabs/meta-ad-library-monitor?fpr=mamba) | `J1GWlSXfSGU3u8Wng` |
| [Mobile Phone Waterfall](https://apify.com/mambalabs/mobile-phone-waterfall-orchestrator?fpr=mamba) | `6OOgPktf7RIa5XCOP` |
| [New Hire Finder](https://apify.com/mambalabs/new-hire-finder?fpr=mamba) | `cKuc38p4nYHNF3IW8` |
| [Outbound Stack Detector](https://apify.com/mambalabs/outbound-infrastructure-fingerprint?fpr=mamba) | `v43UJC8r7qW7cBSTG` |
| [Page Finder and Extractor](https://apify.com/mambalabs/page-finder-extractor?fpr=mamba) | `TpurgcOZbVnknlaiC` |
| [People Finder & Email Verifier](https://apify.com/mambalabs/people-finder?fpr=mamba) | `LEgloG7tWgQl4o6TD` |
| [Pinterest Brand Presence Mapper](https://apify.com/mambalabs/pinterest-brand-presence-mapper?fpr=mamba) | `d1HvjZfKhgvWsoEwn` |
| [Prospect Engine](https://apify.com/mambalabs/b2b-prospect-engine?fpr=mamba) | `q9rT6v64nUJdPexOQ` |
| [Publishing Frequency Tracker](https://apify.com/mambalabs/blog-publishing-frequency?fpr=mamba) | `TbLwaUUATdYb6wp4N` |
| [Reddit Brand Presence Mapper](https://apify.com/mambalabs/reddit-brand-presence-mapper?fpr=mamba) | `pKQZmDaT70SEb54bZ` |
| [Reporting Window Finder](https://apify.com/mambalabs/public-company-reporting-window-finder?fpr=mamba) | `uINxR7a1IW8qUTRUX` |
| [Sequencer Lead Push](https://apify.com/mambalabs/clay-to-instantly-smartlead-push?fpr=mamba) | `0Jv27VeWM5tSZQs9x` |
| [Team Page People Extractor](https://apify.com/mambalabs/team-page-people-extractor?fpr=mamba) | `j8a9zX0k4mNbvDbWK` |
| [Tech Stack Signal Detector](https://apify.com/mambalabs/gtm-tech-stack-signal-scraper?fpr=mamba) | `qyd7nNyqFPelQViBx` |
| [TikTok Brand Presence Mapper](https://apify.com/mambalabs/tiktok-brand-presence-mapper?fpr=mamba) | `fco8FvoJcSafbeyd1` |
| [Trustpilot Reputation Enricher](https://apify.com/mambalabs/review-platform-reputation-enricher?fpr=mamba) | `3lIqfCt61j4hqE1xz` |
| [WCAG Accessibility Audit](https://apify.com/mambalabs/wcag-accessibility-audit?fpr=mamba) | `P3jBj3FRghKEhX52z` |
| [Website Traffic Rank Estimator](https://apify.com/mambalabs/website-traffic-rank-estimator?fpr=mamba) | `GnOFUzlNVIoXgeJjH` |
| [Work Email Waterfall](https://apify.com/mambalabs/email-waterfall-orchestrator?fpr=mamba) | `OT6xqTFThC0Rjf7Zj` |
| [Workplace Program Detector](https://apify.com/mambalabs/workplace-program-detector?fpr=mamba) | `Li6pPDhqbdzFz3h7G` |
| [X Brand Presence Mapper](https://apify.com/mambalabs/x-brand-presence-mapper?fpr=mamba) | `oLOgadhHUkNAyDA3w` |
| [YouTube Channel Stats Extractor](https://apify.com/mambalabs/youtube-channel-transcript-extractor?fpr=mamba) | `6hSpD3kd2s2IQ4VSs` |
| [Integration and Marketplace Presence Mapper](https://apify.com/mambalabs/integration-marketplace-presence-mapper?fpr=mamba) | `V0guNuvM85Q61f2gj` |
| [Person Social Footprint Mapper](https://apify.com/mambalabs/person-social-footprint-mapper?fpr=mamba) | `jfQXa2zW9FHCJot9K` |

Built by [Mamba Labs](https://apify.com/mambalabs?fpr=mamba).

# Actor input Schema

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

What to look for. Company needs company_domain or domains. Category needs category_keywords. Gap needs a topic, subreddits, or both.

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

Company mode. One company website, for example smartlead.ai. Brand names are resolved from it unless you give brand_names.

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

Company mode. Several domains, one per line. Each gets its own rows and summary. Up to 50.

## `brand_names` (type: `array`):

Company mode. Names to search for, as the company writes them, for example Smartlead. When empty, the brand name comes from Mamba Labs Company Identity Resolver (see the setting below) or the homepage title. Give it for a brand whose name is also a common word.

## `product_names` (type: `array`):

Company mode. Product names to search for beside the brand.

## `competitors` (type: `array`):

Company mode. Competitor names for share of voice and displacement signals. When empty and discover_competitors is on, competitors are found in the brand threads from comparison, alternative, and switching phrasing.

## `discover_competitors` (type: `boolean`):

Company mode. Find competitors in the brand threads when none are given. A name must appear in two or more threads.

## `max_competitors` (type: `integer`):

Company mode. Up to 5 competitors get share of voice columns and their own searches.

## `use_identity_resolver` (type: `boolean`):

Company mode, used only when brand_names is empty. Runs Mamba Labs Company Identity Resolver from your account to read the brand name; Apify charges you that actor's own result event (0.007 USD per domain). Off: the homepage title is used, at no extra charge.

## `category_keywords` (type: `array`):

Category mode. Product lane phrases, one per line, for example cold email tools or sales engagement platform.

## `known_companies` (type: `array`):

Category and gap modes. Company or product names to always count when they appear, beside the names found by pattern.

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

Gap mode. What the questions are about, for example cold email deliverability. Used to search each subreddit and to find subreddits when none are given.

## `topic_terms` (type: `array`):

Gap mode. Extra search phrases for the same need, for example data enrichment and enrich leads beside the topic lead enrichment. Reddit search returns only posts that carry every word of a query, so a two word topic can be narrow. Up to 10.

## `subreddits` (type: `array`):

Limit every search to these subreddits, without the r/. When empty, company and category modes search all of Reddit and gap mode finds subreddits from the topic.

## `exclude_subreddits` (type: `array`):

Rows from these subreddits are dropped, without the r/.

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

A vendor's own subreddit (named after the brand, a competitor, or a company found in the run, such as r/smartlead) is read as marketing. Exclude drops those threads. Flag returns them with vendor_subreddit true and leaves them out of share of voice and every summary count. Include returns them with vendor_subreddit true and counts them. A subreddit you name in Subreddits is never treated as a vendor subreddit.

## `discover_subreddits` (type: `boolean`):

Gap mode. Find up to 8 subreddits from the topic when none are given. The list used is in the run summary and on every theme row.

## `since_days` (type: `integer`):

Only threads posted in the last this many days.

## `max_threads` (type: `integer`):

Thread rows per input in company and gap modes, and threads read in category mode. Each thread row is one thread-row charge.

## `include_comments` (type: `boolean`):

Return comments as their own rows (comment-row charge): in company mode, comments that name the brand or a competitor; in category mode, comments that name a company or a category keyword; in gap mode, answers that name a tool. Default: on in company and gap modes, off in category mode. Comments are read for tool names and answer status either way, up to Threads to open for comments.

## `max_comment_threads` (type: `integer`):

How many threads per input are opened to read comments, highest intent first. Default 20 in company mode, 30 in category mode, 50 in gap mode. 0 reads no comments.

## `max_comments_per_thread` (type: `integer`):

Comments read from each opened thread, top comments first.

## `comment_depth` (type: `integer`):

Reply levels read in each opened thread. 1 reads only top level replies.

## `include_hacker_news` (type: `boolean`):

Also search Hacker News through its public search API (no key). Rows carry source hacker_news.

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

Stop before a row would push this run past this amount. Empty: no limit beyond the one you set in Apify.

## `only_new` (type: `boolean`):

For scheduled runs. Skip threads and comments an earlier run with the same state key already returned. Skipped rows are free. The seen list is kept in a key-value store in your account.

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

Names the seen list for only_new. Use one key per schedule. Empty: a key made from the input.

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

Optional https URL. At the end of the run the actor POSTs JSON with a Slack compatible text field, the run summary, and the top rows by intent score. A Slack incoming webhook URL works as is.

## `webhook_top_n` (type: `integer`):

How many rows the webhook carries.

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

Reddit refuses requests that do not come through a proxy. Auto uses the Apify datacenter proxy and moves to residential addresses only when Reddit refuses. Residential only is slower and is for runs where auto keeps being refused. This is a reliability choice; under pay per event the proxy is not billed to you.

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

Internal attribution tag for published tasks. Leave empty.

## Actor input object example

```json
{
  "mode": "company",
  "company_domain": "smartlead.ai",
  "brand_names": [
    "Smartlead"
  ],
  "discover_competitors": true,
  "max_competitors": 5,
  "use_identity_resolver": true,
  "vendor_subreddits": "exclude",
  "discover_subreddits": true,
  "since_days": 30,
  "max_threads": 15,
  "max_comment_threads": 3,
  "max_comments_per_thread": 25,
  "comment_depth": 2,
  "include_hacker_news": false,
  "only_new": false,
  "webhook_top_n": 10,
  "proxy_mode": "auto"
}
```

# Actor output Schema

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

No description

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

No description

# 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 = {
    "company_domain": "smartlead.ai",
    "brand_names": [
        "Smartlead"
    ],
    "since_days": 30,
    "max_threads": 15,
    "max_comment_threads": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("mambalabs/b2b-reddit-conversation-monitor").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 = {
    "company_domain": "smartlead.ai",
    "brand_names": ["Smartlead"],
    "since_days": 30,
    "max_threads": 15,
    "max_comment_threads": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("mambalabs/b2b-reddit-conversation-monitor").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 '{
  "company_domain": "smartlead.ai",
  "brand_names": [
    "Smartlead"
  ],
  "since_days": 30,
  "max_threads": 15,
  "max_comment_threads": 3
}' |
apify call mambalabs/b2b-reddit-conversation-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mambalabs/b2b-reddit-conversation-monitor"
        }
    }
}
```

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/SoDryzzsjmY3SsiyG/builds/EesSIqDrLsUpmk0x9/openapi.json
