{
  "openapi": "3.0.1",
  "info": {
    "title": "B2B Reddit Conversation Monitor",
    "description": "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.",
    "version": "0.1",
    "x-build-id": "5s1Z1yRVG67YScJ4X"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/mambalabs~b2b-reddit-conversation-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-mambalabs-b2b-reddit-conversation-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/mambalabs~b2b-reddit-conversation-monitor/runs": {
      "post": {
        "operationId": "runs-sync-mambalabs-b2b-reddit-conversation-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/mambalabs~b2b-reddit-conversation-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-mambalabs-b2b-reddit-conversation-monitor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "company",
              "category",
              "gap"
            ],
            "type": "string",
            "description": "What to look for. Company needs company_domain or domains. Category needs category_keywords. Gap needs a topic, subreddits, or both.",
            "default": "company"
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Where to read conversations. Reddit (the default) reads public Reddit feeds. Hacker News reads stories and comments through the public Hacker News search API, no key. Product Hunt reads public product, review, and discussion pages, no login and no key. Every row carries the same columns and a source column (reddit, hacker_news, or product_hunt). Company mode reads the brand's Product Hunt product forum and reviews; category mode does not read Product Hunt, whose robots.txt disallows its search pages; gap mode reads the Product Hunt forums below, newest first, and keeps threads that carry every word of the topic.",
            "items": {
              "type": "string",
              "enum": [
                "reddit",
                "hackernews",
                "producthunt"
              ],
              "enumTitles": [
                "Reddit",
                "Hacker News",
                "Product Hunt"
              ]
            },
            "default": [
              "reddit"
            ]
          },
          "company_domain": {
            "title": "Company domain",
            "type": "string",
            "description": "Company mode. One company website, for example smartlead.ai. Brand names are resolved from it unless you give brand_names."
          },
          "domains": {
            "title": "Domains (batch)",
            "type": "array",
            "description": "Company mode. Several domains, one per line. Each gets its own rows and summary. Up to 50.",
            "items": {
              "type": "string"
            }
          },
          "brand_names": {
            "title": "Brand names",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string"
            }
          },
          "product_names": {
            "title": "Product names",
            "type": "array",
            "description": "Company mode. Product names to search for beside the brand.",
            "items": {
              "type": "string"
            }
          },
          "competitors": {
            "title": "Competitors",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string"
            }
          },
          "discover_competitors": {
            "title": "Discover competitors",
            "type": "string",
            "description": "Company mode. Find competitors in the brand threads when none are given. A name must appear in two or more threads. true or false; yes, no, 1, and 0 are accepted.",
            "default": "true"
          },
          "max_competitors": {
            "title": "Max competitors",
            "type": "string",
            "description": "Company mode. Up to 5 competitors get share of voice columns and their own searches. A whole number; text such as \"10\" is accepted.",
            "default": "5"
          },
          "use_identity_resolver": {
            "title": "Resolve brand names with Company Identity Resolver",
            "type": "string",
            "description": "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. true or false; yes, no, 1, and 0 are accepted.",
            "default": "true"
          },
          "category_keywords": {
            "title": "Category keywords",
            "type": "array",
            "description": "Category mode. Product lane phrases, one per line, for example cold email tools or sales engagement platform.",
            "items": {
              "type": "string"
            }
          },
          "known_companies": {
            "title": "Known companies",
            "type": "array",
            "description": "Category and gap modes. Company or product names to always count when they appear, beside the names found by pattern.",
            "items": {
              "type": "string"
            }
          },
          "topic": {
            "title": "Topic",
            "type": "string",
            "description": "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": {
            "title": "More topic queries",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string"
            }
          },
          "subreddits": {
            "title": "Subreddits",
            "type": "array",
            "description": "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.",
            "items": {
              "type": "string"
            }
          },
          "exclude_subreddits": {
            "title": "Exclude subreddits",
            "type": "array",
            "description": "Rows from these subreddits are dropped, without the r/.",
            "items": {
              "type": "string"
            }
          },
          "vendor_subreddits": {
            "title": "Vendor subreddits",
            "enum": [
              "exclude",
              "flag",
              "include"
            ],
            "type": "string",
            "description": "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.",
            "default": "exclude"
          },
          "discover_subreddits": {
            "title": "Discover subreddits",
            "type": "string",
            "description": "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. true or false; yes, no, 1, and 0 are accepted.",
            "default": "true"
          },
          "since_days": {
            "title": "Date window (days)",
            "type": "string",
            "description": "Only threads posted in the last this many days. A whole number; text such as \"10\" is accepted.",
            "default": "90"
          },
          "max_threads": {
            "title": "Max threads per input",
            "type": "string",
            "description": "Thread rows per input in company and gap modes, and threads read in category mode. Each thread row is one thread-row charge. With more than one source, the cap applies to each source. A whole number; text such as \"10\" is accepted.",
            "default": "100"
          },
          "include_comments": {
            "title": "Comment rows",
            "type": "string",
            "description": "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. true or false; yes, no, 1, and 0 are accepted."
          },
          "max_comment_threads": {
            "title": "Threads to open for comments",
            "type": "string",
            "description": "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. A whole number; text such as \"10\" is accepted."
          },
          "max_comments_per_thread": {
            "title": "Max comments per thread",
            "type": "string",
            "description": "Comments read from each opened thread, top comments first. A whole number; text such as \"10\" is accepted.",
            "default": "25"
          },
          "comment_depth": {
            "title": "Comment depth",
            "type": "string",
            "description": "Reply levels read in each opened thread. 1 reads only top level replies. A whole number; text such as \"10\" is accepted.",
            "default": "2"
          },
          "include_hacker_news": {
            "title": "Add Hacker News (older switch)",
            "type": "string",
            "description": "Older switch, kept so saved tasks keep working: true adds hackernews to Sources. Use Sources instead. true or false; yes, no, 1, and 0 are accepted.",
            "default": "false"
          },
          "producthunt_forums": {
            "title": "Product Hunt forums",
            "type": "array",
            "description": "Gap mode with Product Hunt in Sources: the Product Hunt forums to read, by the name in the forum link (producthunt.com/p/<name>). Empty reads general. Up to 10.",
            "items": {
              "type": "string"
            }
          },
          "only_tags": {
            "title": "Only threads with these tags",
            "type": "array",
            "description": "Return only thread and comment rows that carry at least one of these tags. Rows left out are not charged. Summary rows are still returned and still count every thread in the date window. Empty: every row, as before.",
            "items": {
              "type": "string",
              "enum": [
                "complaint",
                "praise",
                "comparison",
                "alternative_request",
                "switching",
                "buying_intent",
                "feature_request",
                "question"
              ],
              "enumTitles": [
                "Complaint",
                "Praise",
                "Comparison",
                "Alternative request",
                "Switching",
                "Buying intent",
                "Feature request",
                "Question"
              ]
            }
          },
          "max_charge_usd": {
            "title": "Max charge per run (USD)",
            "type": "string",
            "description": "Stop before a row would push this run past this amount. Empty: no limit beyond the one you set in Apify."
          },
          "only_new": {
            "title": "Only new results",
            "type": "string",
            "description": "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. true or false; yes, no, 1, and 0 are accepted.",
            "default": "false"
          },
          "state_key": {
            "title": "State key",
            "type": "string",
            "description": "Names the seen list for only_new. Use one key per schedule. Empty: a key made from the input."
          },
          "webhook_url": {
            "title": "Webhook URL",
            "type": "string",
            "description": "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": {
            "title": "Webhook top rows",
            "type": "string",
            "description": "How many rows the webhook carries. A whole number; text such as \"10\" is accepted.",
            "default": "10"
          },
          "proxy_mode": {
            "title": "Proxy",
            "enum": [
              "auto",
              "residential"
            ],
            "type": "string",
            "description": "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.",
            "default": "auto"
          },
          "source_tag": {
            "title": "Source tag",
            "type": "string",
            "description": "Internal attribution tag for published tasks. Leave empty."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}