{
  "openapi": "3.0.1",
  "info": {
    "title": "👽 Reddit Post & Subreddit Extractor",
    "description": "Scrape Reddit posts, comments, communities and user profiles by keyword, URL or full subreddit — no API key, no login. Date, flair and NSFW filters, built-in engagement metrics, five ready-made views, every item streamed live to your dataset.",
    "version": "0.1",
    "x-build-id": "Gd2xyGVPNFzg2caXg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/citrine_venus~reddit-post-subreddit-extractor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-citrine_venus-reddit-post-subreddit-extractor",
        "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/citrine_venus~reddit-post-subreddit-extractor/runs": {
      "post": {
        "operationId": "runs-sync-citrine_venus-reddit-post-subreddit-extractor",
        "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/citrine_venus~reddit-post-subreddit-extractor/run-sync": {
      "post": {
        "operationId": "run-sync-citrine_venus-reddit-post-subreddit-extractor",
        "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": {
          "searchTerms": {
            "title": "🔎 Search terms",
            "type": "array",
            "description": "Enter one or more keywords to search Reddit (e.g. \"best laptops 2025\", \"AI news\"). Each term runs as its own independent search with its own limits below. Leave empty if you only want Direct URLs or Full Subreddit Scrape.",
            "items": {
              "type": "string"
            }
          },
          "searchPosts": {
            "title": "📝 Search for posts",
            "type": "boolean",
            "description": "Include posts in keyword search results.",
            "default": true
          },
          "searchComments": {
            "title": "💬 Search for comments",
            "type": "boolean",
            "description": "Include comments in keyword search results.",
            "default": false
          },
          "searchCommunities": {
            "title": "📚 Search for communities",
            "type": "boolean",
            "description": "Include communities (subreddits) in keyword search results.",
            "default": false
          },
          "withinCommunity": {
            "title": "🎯 Limit search to a community",
            "type": "string",
            "description": "Restrict keyword search to a single subreddit. Accepts a bare name (developers), r/developers, or a full subreddit URL. Leave empty to search all of Reddit. Only applies to Search Keywords."
          },
          "searchSort": {
            "title": "📶 Sort search results by",
            "enum": [
              "relevance",
              "hot",
              "top",
              "new",
              "comments"
            ],
            "type": "string",
            "description": "Controls how keyword search results are ranked. Only applies to Search Keywords, not Direct URLs.",
            "default": "new"
          },
          "searchTime": {
            "title": "⏰ Time range",
            "enum": [
              "all",
              "hour",
              "day",
              "week",
              "month",
              "year"
            ],
            "type": "string",
            "description": "Limit keyword search results to posts from a specific time window. Only applies to Search Keywords.",
            "default": "all"
          },
          "startUrls": {
            "title": "🔗 Reddit URLs",
            "type": "array",
            "description": "Add one or more Reddit URLs to scrape directly — supports bulk input (one per line, upload a file, or connect a Google Sheet). Supports post URLs, subreddit URLs, user profile URLs, and search-result URLs.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "subredditUrls": {
            "title": "📚 Subreddits to scrape in full",
            "type": "array",
            "description": "Enter subreddit names or links — e.g. AskReddit, r/AskReddit, or https://www.reddit.com/r/AskReddit/. Comments are also collected when 'Scrape comments for each post' is enabled below.",
            "items": {
              "type": "string"
            }
          },
          "postedAfter": {
            "title": "📅 Posts created on or after",
            "type": "string",
            "description": "Only keep posts created on or after this date (00:00 UTC). When set, results are fetched newest-first and the Time range option is ignored."
          },
          "postedBefore": {
            "title": "📅 Posts created on or before",
            "type": "string",
            "description": "Only keep posts created on or before this date (23:59:59 UTC)."
          },
          "commentedAfter": {
            "title": "📅 Comments created on or after",
            "type": "string",
            "description": "Only keep comments created on or after this date (UTC)."
          },
          "commentedBefore": {
            "title": "📅 Comments created on or before",
            "type": "string",
            "description": "Only keep comments created on or before this date (UTC)."
          },
          "onlyWithFlair": {
            "title": "🏷️ Only posts that have a flair",
            "type": "boolean",
            "description": "Drop posts with no flair and keep only those that have one assigned.",
            "default": false
          },
          "includeNSFW": {
            "title": "🔞 Include NSFW (18+) content",
            "type": "boolean",
            "description": "Include posts marked as Not Safe For Work. Applies to both Search Keywords and Direct URLs.",
            "default": false
          },
          "crawlCommentsPerPost": {
            "title": "💬 Scrape comments for each post",
            "type": "boolean",
            "description": "When enabled, comments are collected for every post found from both Search Keywords and Direct URLs. This significantly increases run time and data output.",
            "default": false
          },
          "maxCommentsPerPost": {
            "title": "🔢 Max comments per post",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum comments to scrape per individual post (when 'Scrape comments for each post' is enabled).",
            "default": 10
          },
          "maxPostsCount": {
            "title": "📝 Max posts",
            "minimum": 0,
            "maximum": 50000,
            "type": "integer",
            "description": "Maximum number of posts to save per search term, per URL, or per subreddit. To pull an entire subreddit, use Full Subreddit Scrape and raise this limit.",
            "default": 10
          },
          "maxCommentsCount": {
            "title": "💬 Max search comments",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum comments returned from keyword search (when 'Search for comments' is enabled). Does not affect per-post comment scraping.",
            "default": 10
          },
          "maxCommunitiesCount": {
            "title": "📚 Max communities",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum communities returned from keyword search (when 'Search for communities' is enabled).",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "🛡️ Proxy Configuration",
            "type": "object",
            "description": "Leave this on its default for automatic fallback, or pin Residential yourself to skip straight to it."
          },
          "postConcurrency": {
            "title": "⚡ Comment fetch concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many posts' comment threads to fetch at the same time (when 'Scrape comments for each post' is enabled).",
            "default": 3
          },
          "maxRetries": {
            "title": "🔁 Max retries per proxy tier",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a blocked/failed request on each proxy tier before escalating to the next one.",
            "default": 3
          },
          "requestDelayMin": {
            "title": "🐢 Min delay between requests (seconds)",
            "minimum": 0,
            "maximum": 10,
            "type": "number",
            "description": "Reddit throttles request bursts — a short random delay between requests keeps the run reliable.",
            "default": 1
          },
          "requestDelayMax": {
            "title": "🐢 Max delay between requests (seconds)",
            "minimum": 0,
            "maximum": 15,
            "type": "number",
            "description": "Upper bound of the random delay between requests.",
            "default": 2.5
          }
        }
      },
      "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}