{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Lead Finder & Brand Monitoring: Leads, Mentions",
    "description": "Reddit leads and brand mentions by keyword: the posts and comments where people ask for a recommendation, complain about a product or show buying intent, each with its link to reply and an AI read of its intent, buying signal and relevance. New mentions only on a schedule.",
    "version": "0.2",
    "x-build-id": "2abppuniZ0ZdRnC6k"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/quarra~reddit-lead-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-quarra-reddit-lead-finder",
        "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/quarra~reddit-lead-finder/runs": {
      "post": {
        "operationId": "runs-sync-quarra-reddit-lead-finder",
        "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/quarra~reddit-lead-finder/run-sync": {
      "post": {
        "operationId": "run-sync-quarra-reddit-lead-finder",
        "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": {
          "searchQueries": {
            "title": "Keywords to find in posts",
            "type": "array",
            "description": "Keywords searched on Reddit, one query per line, as typed in Reddit's search box. Quotes keep a phrase together (\"home assistant\"); Strict search below enforces every word.",
            "items": {
              "type": "string"
            }
          },
          "commentSearchQueries": {
            "title": "Keywords to find in comments",
            "type": "array",
            "description": "Find COMMENTS containing your keywords, anywhere on Reddit (or in the subreddit above), one query per line: each comment with its text, score, date, parentId and its post's title and URL. Strict search and excluded keywords apply to the comment's text. Reddit's comment search ignores dates except with Search sort New: use New with a time range or date window to monitor.",
            "items": {
              "type": "string"
            }
          },
          "subreddits": {
            "title": "Subreddits to watch",
            "type": "array",
            "description": "Optional. Subreddit names (SaaS, r/SaaS) or URLs: their latest posts are read with the sort below and analyzed, with no keyword needed.",
            "items": {
              "type": "string"
            }
          },
          "searchSubreddit": {
            "title": "Search only inside this subreddit",
            "type": "string",
            "description": "Optional. Restrict every search query and comment search to one subreddit (selfhosted, r/selfhosted or its URL)."
          },
          "strictSearch": {
            "title": "Strict search (exact words only)",
            "type": "boolean",
            "description": "Reddit's search returns loosely related posts (for home assistant, 17 of the top 100 contain it). When on, a post is kept only if its title or text contains EVERY word of the query, as whole words (ai never matches said; case and accents ignored). \"Quotes\" require a phrase, -word excludes, OR and parentheses group alternatives. Other sorts of the same time range are read to reach your limit. Rejected posts are never charged (counted in OUTPUT as filteredOut).",
            "default": false
          },
          "strictMatchIn": {
            "title": "Strict search and excluded keywords look in",
            "enum": [
              "titleOrText",
              "title"
            ],
            "type": "string",
            "description": "Where the words of a strict search and the excluded keywords must (or must not) appear.",
            "default": "titleOrText"
          },
          "excludeKeywords": {
            "title": "Excluded keywords",
            "maxItems": 200,
            "type": "array",
            "description": "Drop every post whose title or text contains one of these words or phrases, one per line (whole words, case and accents ignored; a comma belongs to the phrase, as in 10,000 views). Dropped items are not charged. Comment trees are not filtered; comments found by comment search are.",
            "items": {
              "type": "string"
            }
          },
          "maxPostsPerSource": {
            "title": "Posts or comments to check per keyword or subreddit",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "How many search results (or subreddit posts) are read and checked by the AI for each keyword or subreddit. With the AI filter on, only the leads among them are delivered. Reddit's search lists about 250 results per keyword. With 'Only new', this is the window watched.",
            "default": 100
          },
          "maxItems": {
            "title": "Max leads in total",
            "minimum": 1,
            "type": "integer",
            "description": "Optional hard cap for the whole run, counted in delivered posts and comments (the ones left out by the AI filter do not count). Respected exactly. Empty = no global cap."
          },
          "searchSort": {
            "title": "Keyword sort",
            "enum": [
              "relevance",
              "hot",
              "top",
              "new",
              "comments"
            ],
            "type": "string",
            "description": "How search results are ordered. Comment searches use Relevance, Top or New (Hot and Most comments fall back to Relevance).",
            "default": "relevance"
          },
          "sort": {
            "title": "Subreddit sort",
            "enum": [
              "hot",
              "new",
              "top",
              "rising",
              "controversial"
            ],
            "type": "string",
            "description": "How subreddit posts are ordered. Use Top or Controversial with a time range. For monitoring, New is the fastest and cheapest.",
            "default": "hot"
          },
          "timeFilter": {
            "title": "Time range",
            "enum": [
              "hour",
              "day",
              "week",
              "month",
              "year",
              "all"
            ],
            "type": "string",
            "description": "Used by the Top and Controversial subreddit sorts and by searches (comment search: with the New sort only).",
            "default": "all"
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Only items created after this date (2026-09-01, or relative: 7 days). Applies to posts, user history and listing URLs."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only items created before this date."
          },
          "commentsPostedAfter": {
            "title": "Comments posted after",
            "type": "string",
            "description": "Only comments written after this date (2026-10-01, or 12 hours), in threads and user histories. The tree is still walked, so a new reply under an old comment is found (reading stops after 10,000 comments in a row outside your dates); only matching comments are saved and charged."
          },
          "commentsPostedBefore": {
            "title": "Comments posted before",
            "type": "string",
            "description": "Only comments written before this date."
          },
          "includeNsfw": {
            "title": "Include NSFW",
            "type": "boolean",
            "description": "Include posts marked NSFW (18+). Off by default.",
            "default": false
          },
          "aiAnalysis": {
            "title": "AI analysis of every post and comment (intent, buying signal, relevance)",
            "type": "boolean",
            "description": "Adds aiAnalysis to every post and comment: language, sentiment and score (-1 to 1), emotion, intent (question, recommendation request, complaint, praise, purchase intent, comparison…), category, topics, named brands, products and people, a one-sentence English summary, the pain point, and business signals (wants help, buying signal, mentions a price, feature request, vendor). Search results also get a relevance score (0 to 1) against your query. Charged once per post or comment analyzed in full; deleted, removed, bot or empty records and failed analyses are free. Works with the items output format.",
            "default": true
          },
          "aiLabels": {
            "title": "Your own labels (optional)",
            "type": "object",
            "description": "Up to 5 yes/no labels of your own, as {\"label_name\": \"what makes it true\"}. Each analyzed record gets labels: {label_name: true or false}. Example: {\"switching\": \"The author wants to switch from one product to another\", \"budget\": \"The author states a budget\"}. Included in the analysis price."
          },
          "aiKeepOnly": {
            "title": "Leads only: keep posts and comments that…",
            "type": "array",
            "description": "Deliver only the posts and comments whose AI analysis shows at least one of these. Default: the author asks for help or a recommendation, or is looking to buy, choose or switch. The others are left out of the dataset and are not charged as a post or comment, only their AI analysis is. Clear it (and set the minimum relevance to 0) to get every post and comment found, for brand monitoring.",
            "items": {
              "type": "string",
              "enum": [
                "wantsHelp",
                "buyingSignal",
                "mentionsPrice",
                "featureRequest",
                "isVendor",
                "painPoint",
                "anyLabel",
                "question",
                "seeking_recommendation",
                "complaint",
                "praise",
                "purchase_intent",
                "comparison",
                "advice",
                "announcement",
                "self_promotion",
                "discussion",
                "humor"
              ],
              "enumTitles": [
                "Asks for help or a recommendation",
                "Buying signal (looking to buy, choose or switch)",
                "Mentions a price or budget",
                "Feature request",
                "Written by a vendor",
                "Has a pain point",
                "Matches one of your own labels",
                "Intent: question",
                "Intent: seeking a recommendation",
                "Intent: complaint",
                "Intent: praise",
                "Intent: purchase intent",
                "Intent: comparison",
                "Intent: gives advice",
                "Intent: announcement or news",
                "Intent: self-promotion",
                "Intent: discussion",
                "Intent: humor"
              ]
            },
            "default": [
              "wantsHelp",
              "buyingSignal"
            ]
          },
          "aiMinRelevance": {
            "title": "Minimum relevance to your keyword (AI filter)",
            "minimum": 0,
            "maximum": 1,
            "type": "number",
            "description": "0 to 1, default 0.5: leave out keyword results that the AI scores as less relevant to the keyword (Reddit's search also returns posts that only contain the word, or nothing like it). Keyword results only; subreddit posts are not scored. 0 = no minimum.",
            "default": 0.5
          },
          "onlyNew": {
            "title": "Only new since the last run (monitoring)",
            "type": "boolean",
            "description": "Remember what earlier runs of the same watch returned and output only new posts and new comments (with Include comments, also comments that earlier runs did not return under posts already seen; with Max comments per post, each run adds up to that many of them per thread, oldest included). Nothing already delivered is charged again, even after a run that timed out, was aborted or overlapped another. One run per watch at a time: a second one does nothing and charges nothing. Memory: key-value store quarra-reddit-watch-<this Actor's ID, lowercase> of your account (a watch already kept in quarra-reddit-watch stays there). Set a watch name, then schedule the Actor.",
            "default": false
          },
          "watchName": {
            "title": "Watch name",
            "type": "string",
            "description": "Name of this watch's memory for 'Only new'. Recommended: runs with the same name share it even when you add or remove sources. Empty: the memory belongs to this exact set of inputs and filters, so adding a source starts a new watch that returns everything again (limits, output format and proxy don't count)."
          },
          "proxyConfiguration": {
            "title": "Connection",
            "type": "object",
            "description": "Connection. Keep the default (automatic). Costs are included in the price.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}