{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Keyword Monitor",
    "description": "Monitor Reddit for keywords, phrases and topics across all Reddit or selected subreddits. Track posts and comments, deduplicate matches, filter noise, and return only new results on scheduled runs. Export clean JSON, CSV or Excel. No Reddit login or API key.",
    "version": "1.0",
    "x-build-id": "fYW3q6iN6bwz7sdTh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/coregent~reddit-keyword-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-coregent-reddit-keyword-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/coregent~reddit-keyword-monitor/runs": {
      "post": {
        "operationId": "runs-sync-coregent-reddit-keyword-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/coregent~reddit-keyword-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-coregent-reddit-keyword-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": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words, phrases or topics to monitor, one per line (up to 100). Put a phrase in quotes for an exact match: \"customer service\". Without quotes, every word must appear (in any order). Leave empty and list subreddits below to monitor their newest posts instead.",
            "default": [
              "web scraping"
            ],
            "items": {
              "type": "string"
            }
          },
          "subreddits": {
            "title": "Subreddits (optional)",
            "type": "array",
            "description": "Restrict the search to these communities. webscraping, r/webscraping and https://www.reddit.com/r/webscraping/ all work. Leave empty to search all of Reddit. With no keywords, the newest posts of these subreddits are monitored.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sourceTypes": {
            "title": "Posts, comments or both",
            "enum": [
              "BOTH",
              "POSTS",
              "COMMENTS"
            ],
            "type": "string",
            "description": "POSTS: matching posts only. COMMENTS: matching comments, found by Reddit's comment search under any post (in subreddit-only monitoring: the comments of each new post's thread). BOTH: posts and comments.",
            "default": "BOTH"
          },
          "sort": {
            "title": "Search sort",
            "enum": [
              "NEW",
              "RELEVANCE",
              "TOP",
              "COMMENTS",
              "HOT"
            ],
            "type": "string",
            "description": "Reddit's search ordering. NEW is right for monitoring; RELEVANCE and TOP find the strongest matches across the whole window. Subreddit-only monitoring always reads the newest posts.",
            "default": "NEW"
          },
          "timeRange": {
            "title": "Posted within",
            "enum": [
              "HOUR",
              "DAY",
              "WEEK",
              "MONTH",
              "YEAR",
              "ALL"
            ],
            "type": "string",
            "description": "Only posts and comments from this window.",
            "default": "WEEK"
          },
          "postedAfter": {
            "title": "Posted after (optional)",
            "type": "string",
            "description": "Only posts and comments published after this date or time, e.g. 2026-10-14 or 2026-10-14T00:00:00Z. Takes precedence over Posted within and Max age."
          },
          "maxAgeHours": {
            "title": "Max age in hours (optional)",
            "minimum": 1,
            "type": "integer",
            "description": "Only posts and comments at most this many hours old, e.g. 6, 24 or 72. Handy for scheduled runs. Takes precedence over Posted within."
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "The most unique posts and comments delivered by one run (1–10,000), newest first. You are charged per delivered result.",
            "default": 100
          },
          "maxCommentsPerPost": {
            "title": "Max comments read per thread",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Subreddit-only monitoring: how many of each new post's top comments (replies included) are read (1–100). With keywords, comments come from Reddit's comment search and this does not apply.",
            "default": 50
          },
          "onlyNew": {
            "title": "Only new results (monitoring)",
            "type": "boolean",
            "description": "Remember what earlier runs delivered and skip it, so every scheduled run returns only new matches. Uses the monitor key below.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor key",
            "type": "string",
            "description": "A name for the monitor's memory, e.g. coding-ai-tools. Runs with the same key share it. Leave empty to derive one from your keywords and subreddits. Given without Only new results, results are marked isNew but nothing is skipped."
          },
          "baselineMode": {
            "title": "First run",
            "enum": [
              "RETURN_CURRENT",
              "BASELINE_ONLY"
            ],
            "type": "string",
            "description": "With Only new results: RETURN_CURRENT delivers the current matches on the first run; BASELINE_ONLY records them and delivers nothing, so later runs return only what is posted after you start monitoring. A baseline run is not charged.",
            "default": "RETURN_CURRENT"
          },
          "requireWords": {
            "title": "Require words",
            "type": "array",
            "description": "Keep a post or comment only if it also contains these words, e.g. iphone, mac, ios for the keyword apple.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "requireMode": {
            "title": "Require",
            "enum": [
              "ANY",
              "ALL"
            ],
            "type": "string",
            "description": "ANY: at least one required word. ALL: every required word.",
            "default": "ANY"
          },
          "excludeWords": {
            "title": "Exclude words",
            "type": "array",
            "description": "Drop any post or comment containing one of these, e.g. fruit, recipe.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeAuthors": {
            "title": "Exclude authors",
            "type": "array",
            "description": "Reddit usernames to ignore: your own account, brand accounts, known bots. u/name or name.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "skipBots": {
            "title": "Skip bots",
            "type": "boolean",
            "description": "Drop posts and comments by AutoModerator and other well-known bot accounts, and text that says it was posted automatically.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many searches and threads are read at once (1–5). Reddit's own rate limits are respected per connection.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Datacenter proxy (the default) or no proxy both work. Apify RESIDENTIAL proxy is refused and fails the run at startup: Reddit pages are large and residential bandwidth is billed to the Actor, while Reddit serves the same data to datacenter addresses. To route through your own residential provider, use Custom proxy URLs — that traffic goes through your account and is honoured.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}