{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Search Scraper: New Posts Alerts by Keyword & Subreddit",
    "description": "Reddit search scraper: reddit posts for a list of keywords or subreddits, one row per post with title, subreddit, score, comments, date, link and text excerpt. New reddit posts alerts for reddit mentions of a brand, or a subreddit monitor to Slack. Without login. Pay per post.",
    "version": "1.0",
    "x-build-id": "eeFVhcl3xR6lyuSnZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/accountable_eel~reddit-search-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-accountable_eel-reddit-search-lookup",
        "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/accountable_eel~reddit-search-lookup/runs": {
      "post": {
        "operationId": "runs-sync-accountable_eel-reddit-search-lookup",
        "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/accountable_eel~reddit-search-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-accountable_eel-reddit-search-lookup",
        "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": {
          "queries": {
            "title": "Search keywords",
            "type": "array",
            "description": "One Reddit search per line, run across all of Reddit: a brand, a product, a topic or a phrase in quotes. Leave empty to watch only the subreddits below. No login required. Accepted formats: vinted, \"apify actor\", notion alternative. You're only charged for the ones we actually find — a miss costs nothing.",
            "items": {
              "type": "string"
            }
          },
          "subreddits": {
            "title": "Subreddits",
            "type": "array",
            "description": "One subreddit per line: Flipping, r/Flipping or a reddit.com/r/Flipping link all work. Each gets its own post feed in the sort order below. Leave empty to run only the search keywords above.",
            "items": {
              "type": "string"
            }
          },
          "testRun": {
            "title": "Try it first — only process the first 5",
            "type": "boolean",
            "description": "Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.",
            "default": false
          },
          "onlyFound": {
            "title": "Hide rows with no result",
            "type": "boolean",
            "description": "Only keep rows where something was actually found. Misses are always free, whether or not you show them here.",
            "default": false
          },
          "includeKeywords": {
            "title": "Only keep posts mentioning",
            "type": "array",
            "description": "Optional. Keep a post only if its title or text contains at least one of these words (not case sensitive). Checked before you are billed. Leave empty to keep every post.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "Skip posts mentioning",
            "type": "array",
            "description": "Optional. Drop any post whose title or text contains one of these words, before you are billed. Only the title and text are checked, never the subreddit or author name.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max posts per keyword or subreddit",
            "type": "integer",
            "description": "Up to 500. Caps how many posts you get (and pay for) from each search keyword and each subreddit separately. Reddit returns 100 posts per page, so 100 is one page per line.",
            "default": 100
          },
          "minScore": {
            "title": "Minimum score (upvotes)",
            "type": "integer",
            "description": "Optional. Skip posts with a lower score. Leave empty to keep every post. With monitoring on, a post that is too new to have the votes yet is delivered on a later run once it reaches this score."
          },
          "excludeNsfw": {
            "title": "Skip NSFW posts",
            "type": "boolean",
            "description": "On by default. Drops posts Reddit marks as NSFW (18+) before you are billed.",
            "default": true
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "new",
              "hot",
              "top",
              "relevance"
            ],
            "type": "string",
            "description": "Newest first is the one to use for alerts. Top and Relevance use the time window below. Subreddits have no relevance order and use Top instead.",
            "default": "new"
          },
          "timeWindow": {
            "title": "Time window (Top and Relevance only)",
            "enum": [
              "hour",
              "day",
              "week",
              "month",
              "year",
              "all"
            ],
            "type": "string",
            "description": "Only used with Top or Relevance, for example the week's top posts in a subreddit. Ignored for Newest first and Hot.",
            "default": "week"
          },
          "deltaMode": {
            "title": "Only return posts that are new since the last run",
            "type": "boolean",
            "description": "Turns each keyword and subreddit into an alert feed. A post counts as new when this watchlist has not returned it before. Posts already seen are dropped before you are billed, so a run with nothing new returns one summary row and costs only the start fee. Memory is kept per keyword and per subreddit, and a post not seen for 60 days is forgotten.",
            "default": false
          },
          "deltaName": {
            "title": "Watchlist name (optional)",
            "type": "string",
            "description": "Leave empty and one is derived from the sort order and time window, so a new-posts alert and a weekly top digest of the same subreddit keep separate memories. Type your own name to keep two schedules apart. Naming a watchlist with the checkbox above off returns every post but still marks 'Is this post new?' so you can filter in Sheets, n8n or Make.",
            "default": ""
          },
          "skipFirstRun": {
            "title": "Seed silently (no posts on the first run)",
            "type": "boolean",
            "description": "The first run of a watchlist has nothing to compare with and returns up to your maximum. Turn this on to remember everything it finds without returning or billing it, so a Slack channel does not get a hundred messages on day one. Alerts start from the second run.",
            "default": false
          },
          "columns": {
            "title": "Which columns do you want?",
            "type": "array",
            "description": "Choose which pieces of information to include in each result row. All are included by default.",
            "items": {
              "type": "string",
              "enum": [
                "sourceType",
                "source",
                "postCount",
                "monitorStatus",
                "truncated",
                "posts",
                "id",
                "title",
                "subreddit",
                "author",
                "score",
                "upvoteRatio",
                "numComments",
                "createdAt",
                "permalinkUrl",
                "url",
                "isSelf",
                "selftextExcerpt",
                "linkFlairText",
                "isNsfw",
                "isNew",
                "firstSeenAt"
              ],
              "enumTitles": [
                "Search or subreddit",
                "Keyword or subreddit watched",
                "Posts returned",
                "Monitoring status",
                "Stopped early",
                "All posts (full list)",
                "Post ID",
                "Title",
                "Subreddit",
                "Author (public handle)",
                "Score (upvotes)",
                "Upvote ratio",
                "Comments",
                "Posted",
                "Reddit link",
                "Link target",
                "Text post?",
                "Text excerpt (first 300 characters)",
                "Flair",
                "NSFW?",
                "Is this post new?",
                "First seen on a run"
              ]
            },
            "default": [
              "sourceType",
              "source",
              "postCount",
              "monitorStatus",
              "truncated",
              "posts",
              "id",
              "title",
              "subreddit",
              "author",
              "score",
              "upvoteRatio",
              "numComments",
              "createdAt",
              "permalinkUrl",
              "url",
              "isSelf",
              "selftextExcerpt",
              "linkFlairText",
              "isNsfw",
              "isNew",
              "firstSeenAt"
            ]
          },
          "expandRows": {
            "title": "One row per post (recommended) — turn off for one row per search or subreddit instead",
            "type": "boolean",
            "description": "When on, each post found gets its own row instead of being grouped under its search or subreddit. You're still only charged once per search or subreddit, no matter how many rows it produces.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy config. Residential recommended for anti-bot-sensitive targets.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "UNBLOCKER"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}