{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Scraper & Monitor",
    "description": "Reddit scraper and monitor without the API or RSS: posts, comments, search and communities from public Reddit pages. Scheduled monitors return only new items, with keyword filters, lead-intent scoring, presets and Slack/Discord/webhook alerts. Pay once per new item.",
    "version": "0.1",
    "x-build-id": "RtpQVuqaPJefbvkBF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/suslabs~reddit-scraper-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-suslabs-reddit-scraper-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/suslabs~reddit-scraper-monitor/runs": {
      "post": {
        "operationId": "runs-sync-suslabs-reddit-scraper-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/suslabs~reddit-scraper-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-suslabs-reddit-scraper-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": [
              "subreddit",
              "search",
              "post",
              "user",
              "community",
              "auto",
              "monitor",
              "discovery"
            ],
            "type": "string",
            "description": "All runs: select public collection or persistent monitoring.",
            "default": "subreddit"
          },
          "subreddits": {
            "title": "subreddits",
            "type": "array",
            "description": "Subreddit, search, community and monitor modes: plain community names. Monitor listings always scan new.",
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "queries",
            "type": "array",
            "description": "Search/community discovery, or explicit search in monitor mode: Reddit Boolean/quoted query syntax. Empty for cheap local-keyword monitoring.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "users": {
            "title": "users",
            "type": "array",
            "description": "User mode: visible public contributions only; no identity enrichment or hidden profiles.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "postUrls": {
            "title": "postUrls",
            "maxItems": 5000,
            "type": "array",
            "description": "Post/auto/monitor modes: public post or comment permalinks; monitor watches new comments and post changes.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "startUrls": {
            "title": "startUrls",
            "maxItems": 5000,
            "type": "array",
            "description": "Auto and collection modes: public subreddit, search, user or post URLs. Old RSS paths are mapped without fetching RSS.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "sort": {
            "title": "sort",
            "type": "string",
            "description": "Listing/search modes: website sort. Monitor subreddit scans always use new; thread sort is commentSort.",
            "default": "new"
          },
          "timeFilter": {
            "title": "timeFilter",
            "type": "string",
            "description": "Listing/search modes: website time range, subject to its supported sort combinations.",
            "default": "all"
          },
          "searchType": {
            "title": "searchType",
            "type": "string",
            "description": "Search mode: posts, comments or community discovery.",
            "default": "posts"
          },
          "searchOutput": {
            "title": "searchOutput",
            "type": "string",
            "description": "Search: complete enriches public details; cards returns explicitly partial search-hit rows, billed at the separate search-hit event.",
            "default": "complete"
          },
          "maxItems": {
            "title": "maxItems",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Requested job size. Each run currently accepts at most 2500 delivered items; RETRY_INPUTS contains the remaining input and delivered-ID exclusions. See dated platform evidence.",
            "default": 20
          },
          "maxPages": {
            "title": "maxPages",
            "type": "integer",
            "description": "Collection modes: maximum pages per source. Monitor listings use monitorMaxPages and continue to the baseline boundary.",
            "default": 5
          },
          "maxComments": {
            "title": "maxComments",
            "maximum": 10000,
            "type": "integer",
            "description": "Post URLs and watched threads: maximum comments per thread.",
            "default": 1000
          },
          "maxDepth": {
            "title": "maxDepth",
            "type": "integer",
            "description": "Post URLs and watched threads: maximum included comment depth.",
            "default": 20
          },
          "expandComments": {
            "title": "expandComments",
            "type": "boolean",
            "description": "Post URLs and watched threads: follow the site-provided comment cursor forms.",
            "default": true
          },
          "commentSort": {
            "title": "commentSort",
            "type": "string",
            "description": "Post URLs, watched threads and enriched search: public comment-tree sort.",
            "default": "confidence"
          },
          "includeComments": {
            "title": "includeComments",
            "type": "boolean",
            "description": "Search post enrichment only: also collect that post's comments. Direct post mode includes comments by default.",
            "default": false
          },
          "includeNSFW": {
            "title": "includeNSFW",
            "type": "boolean",
            "description": "Collection modes: include public NSFW flags/content only where logged-out access permits it. Never passes a login or age gate.",
            "default": false
          },
          "coverage": {
            "title": "coverage",
            "type": "boolean",
            "description": "Collection and monitor modes. coverage: applies to collection modes unless a narrower mode is stated in README.",
            "default": false
          },
          "postedAfter": {
            "title": "postedAfter",
            "type": "string",
            "description": "Collection and monitor modes. postedAfter: applies to collection modes unless a narrower mode is stated in README."
          },
          "postedBefore": {
            "title": "postedBefore",
            "type": "string",
            "description": "Collection and monitor modes. postedBefore: applies to collection modes unless a narrower mode is stated in README."
          },
          "minScore": {
            "title": "minScore",
            "type": "integer",
            "description": "Collection and monitor modes. minScore: applies to collection modes unless a narrower mode is stated in README."
          },
          "minComments": {
            "title": "minComments",
            "type": "integer",
            "description": "Collection and monitor modes. minComments: applies to collection modes unless a narrower mode is stated in README."
          },
          "flairInclude": {
            "title": "flairInclude",
            "type": "array",
            "description": "Collection and monitor modes. flairInclude: applies to collection modes unless a narrower mode is stated in README.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "flairExclude": {
            "title": "flairExclude",
            "type": "array",
            "description": "Collection and monitor modes. flairExclude: applies to collection modes unless a narrower mode is stated in README.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "keywordsAny": {
            "title": "keywordsAny",
            "type": "array",
            "description": "Collection and monitor modes. All collection/monitor modes: Unicode whole-word phrases, any match; applied locally to cheap subreddit listings.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "keywordsAll": {
            "title": "keywordsAll",
            "type": "array",
            "description": "Collection and monitor modes. keywordsAll: applies to collection modes unless a narrower mode is stated in README.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "keywordsExclude": {
            "title": "keywordsExclude",
            "type": "array",
            "description": "Collection and monitor modes. keywordsExclude: applies to collection modes unless a narrower mode is stated in README.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "matchComments": {
            "title": "matchComments",
            "type": "boolean",
            "description": "Keyword/domain rules: include comment bodies in matching; off by default.",
            "default": false
          },
          "domains": {
            "title": "domains",
            "type": "array",
            "description": "Collection and monitor modes. domains: applies to collection modes unless a narrower mode is stated in README.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "monitorName": {
            "title": "monitorName",
            "type": "string",
            "description": "Monitor only: stable name for a persisted baseline. Same-name runs are serialized with a platform lease.",
            "default": ""
          },
          "firstRunBackfill": {
            "title": "firstRunBackfill",
            "type": "string",
            "description": "Monitor only: ISO/relative cutoff anchored to baseline creation, such as 7 days.",
            "default": "7 days"
          },
          "retentionDays": {
            "title": "retentionDays",
            "type": "integer",
            "description": "Monitor only: prune old entries and exclude content older than retention from later delivery.",
            "default": 30
          },
          "resetMonitor": {
            "title": "resetMonitor",
            "type": "boolean",
            "description": "Monitor only: intentionally discard the named baseline and allow a fresh backfill.",
            "default": false
          },
          "outputFormat": {
            "title": "outputFormat",
            "type": "string",
            "description": "Collection modes: default or compact. thread-markdown requires explicit post URLs and includes embedded comments without extra comment events.",
            "default": "default"
          },
          "includeHtml": {
            "title": "includeHtml",
            "type": "boolean",
            "description": "Collection and monitor modes. includeHtml: applies to collection modes unless a narrower mode is stated in README.",
            "default": false
          },
          "guessLanguage": {
            "title": "guessLanguage",
            "type": "boolean",
            "description": "Collection and monitor modes. guessLanguage: applies to collection modes unless a narrower mode is stated in README.",
            "default": false
          },
          "intentScoring": {
            "title": "intentScoring",
            "type": "boolean",
            "description": "Collection and monitor modes. intentScoring: applies to collection modes unless a narrower mode is stated in README.",
            "default": true
          },
          "competitors": {
            "title": "competitors",
            "type": "array",
            "description": "Collection and monitor modes. competitors: applies to collection modes unless a narrower mode is stated in README.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "intentPhrases": {
            "title": "intentPhrases",
            "type": "object",
            "description": "Collection and monitor modes. intentPhrases: applies to collection modes unless a narrower mode is stated in README.",
            "default": {}
          },
          "aiProvider": {
            "title": "aiProvider",
            "type": "string",
            "description": "Collection and monitor modes. aiProvider: applies to collection modes unless a narrower mode is stated in README.",
            "default": "openai"
          },
          "aiApiKey": {
            "title": "aiApiKey",
            "type": "string",
            "description": "Secret. Optional AI labeling or webhook delivery only; never echoed in outputs."
          },
          "aiBaseUrl": {
            "title": "aiBaseUrl",
            "type": "string",
            "description": "Optional BYOK labeling: full HTTPS compatible messages endpoint, not a base prefix.",
            "default": ""
          },
          "aiModel": {
            "title": "aiModel",
            "type": "string",
            "description": "Collection and monitor modes. aiModel: applies to collection modes unless a narrower mode is stated in README.",
            "default": ""
          },
          "aiMaxItems": {
            "title": "aiMaxItems",
            "type": "integer",
            "description": "Optional BYOK labeling: cap attempted items per run; zero disables calls.",
            "default": 0
          },
          "slackWebhookUrl": {
            "title": "slackWebhookUrl",
            "type": "string",
            "description": "Secret. Optional AI labeling or webhook delivery only; never echoed in outputs."
          },
          "discordWebhookUrl": {
            "title": "discordWebhookUrl",
            "type": "string",
            "description": "Secret. Optional AI labeling or webhook delivery only; never echoed in outputs."
          },
          "webhookUrl": {
            "title": "webhookUrl",
            "type": "string",
            "description": "Secret. Optional AI labeling or webhook delivery only; never echoed in outputs."
          },
          "webhookMode": {
            "title": "webhookMode",
            "type": "string",
            "description": "Optional delivery in collection/monitor modes: one digest or capped per-item notifications.",
            "default": "digest"
          },
          "webhookMaxItems": {
            "title": "webhookMaxItems",
            "type": "integer",
            "description": "Optional delivery: maximum item alerts; notifications also share a 15-second run time budget.",
            "default": 20
          },
          "maxSeconds": {
            "title": "maxSeconds",
            "type": "integer",
            "description": "Collection and monitor modes. maxSeconds: applies to collection modes unless a narrower mode is stated in README.",
            "default": 240
          },
          "maxRequests": {
            "title": "maxRequests",
            "type": "integer",
            "description": "Collection and monitor modes. maxRequests: applies to collection modes unless a narrower mode is stated in README.",
            "default": 150
          },
          "maxResponseBytes": {
            "title": "maxResponseBytes",
            "type": "integer",
            "description": "Collection and monitor modes. maxResponseBytes: applies to collection modes unless a narrower mode is stated in README.",
            "default": 60000000
          },
          "excludeFullnames": {
            "title": "Exclude already delivered fullnames",
            "type": "array",
            "description": "Collection and monitor modes. All collection modes. Recovery inputs use these fullnames to avoid replaying delivered rows.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "restrictToSubreddits": {
            "title": "Restrict search to selected subreddits",
            "type": "boolean",
            "description": "Search and monitor queries: only restrict queries to subreddits when enabled. Otherwise queries are sitewide; monitor listing sources still use selected subreddits.",
            "default": false
          },
          "monitorMaxPages": {
            "title": "Monitor safety cap per listing",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Monitor mode: page until a baseline fullname or cutoff is reached, at most this many pages per listing. SUMMARY.possibleGap warns if a cap stops collection first.",
            "default": 20
          },
          "preset": {
            "title": "preset",
            "enum": [
              "",
              "find-alternatives-to-competitor",
              "product-complaints",
              "feature-requests",
              "launch-thread-watch",
              "brand-and-domain-mentions",
              "buying-intent-leads"
            ],
            "type": "string",
            "description": "Expands into a reviewable monitor configuration in EFFECTIVE_CONFIG. No schedule is created.",
            "default": ""
          },
          "productName": {
            "title": "productName",
            "type": "string",
            "description": "Optional productName. See README for behavior.",
            "default": ""
          },
          "category": {
            "title": "category",
            "type": "string",
            "description": "Optional category. See README for behavior.",
            "default": ""
          },
          "keywords": {
            "title": "keywords",
            "type": "array",
            "description": "Optional keywords. See README for behavior.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "communities": {
            "title": "communities",
            "type": "array",
            "description": "Optional communities. See README for behavior.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "destination": {
            "title": "destination",
            "type": "object",
            "description": "Optional preset destination object: type slack, discord or webhook. Prefer the corresponding secret URL input.",
            "default": {}
          },
          "scheduleFrequency": {
            "title": "scheduleFrequency",
            "enum": [
              "hourly",
              "daily",
              "weekly"
            ],
            "type": "string",
            "description": "Optional scheduleFrequency. See README for behavior.",
            "default": "daily"
          },
          "staleSourceHours": {
            "title": "staleSourceHours",
            "type": "integer",
            "description": "Optional staleSourceHours. See README for behavior.",
            "default": 24
          },
          "alertMaxAttempts": {
            "title": "alertMaxAttempts",
            "type": "integer",
            "description": "Optional alertMaxAttempts. See README for behavior.",
            "default": 5
          },
          "alertRetentionDays": {
            "title": "alertRetentionDays",
            "type": "integer",
            "description": "Optional alertRetentionDays. See README for behavior.",
            "default": 7
          },
          "webhookSecret": {
            "title": "webhookSecret",
            "type": "string",
            "description": "Secret; optional. Not echoed in effective configuration or continuations."
          },
          "webhookAuthorization": {
            "title": "webhookAuthorization",
            "type": "string",
            "description": "Secret; optional. Not echoed in effective configuration or continuations."
          },
          "replayAlerts": {
            "title": "replayAlerts",
            "type": "object",
            "description": "Stored alerts only: {\"since\":\"2026-10-22T00:00:00Z\"} or {\"deliveryIds\":[\"sla_...\"]}. No Reddit requests; automatic start fee only.",
            "default": {}
          },
          "analysisEnabled": {
            "title": "analysisEnabled",
            "type": "boolean",
            "description": "Optional analysisEnabled. See README for behavior.",
            "default": true
          },
          "sentimentAnalysis": {
            "title": "sentimentAnalysis",
            "type": "boolean",
            "description": "Optional sentimentAnalysis. See README for behavior.",
            "default": false
          },
          "customLabels": {
            "title": "customLabels",
            "type": "object",
            "description": "Optional customLabels. See README for behavior.",
            "default": {}
          },
          "postUrlsFile": {
            "title": "postUrlsFile",
            "type": "string",
            "description": "Secret; optional. Not echoed in effective configuration or continuations."
          },
          "startUrlsFile": {
            "title": "startUrlsFile",
            "type": "string",
            "description": "Secret; optional. Not echoed in effective configuration or continuations."
          },
          "qaFilter": {
            "title": "qaFilter",
            "enum": [
              "all",
              "answered",
              "unanswered"
            ],
            "type": "string",
            "description": "Observed OP reply within the fetched public graph; unanswered is not proof no answer exists.",
            "default": "all"
          },
          "discoveryMaxCommunities": {
            "title": "discoveryMaxCommunities",
            "type": "integer",
            "description": "Optional discoveryMaxCommunities. See README for behavior.",
            "default": 10
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}