{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Scraper | All-In-One | $1.5 / 1K",
    "description": "Extract Reddit posts and full comment threads from searches, subreddits, user pages, and direct post URLs. Built for enterprise-grade speed, richest-in-class data coverage, advanced filtering, and clean JSON for market intelligence, sentiment analysis, and analytics.",
    "version": "1.7",
    "x-build-id": "ReTfsSNR8qWXY36Og"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/fatihtahta~reddit-scraper-search-fast/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-fatihtahta-reddit-scraper-search-fast",
        "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/fatihtahta~reddit-scraper-search-fast/runs": {
      "post": {
        "operationId": "runs-sync-fatihtahta-reddit-scraper-search-fast",
        "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/fatihtahta~reddit-scraper-search-fast/run-sync": {
      "post": {
        "operationId": "run-sync-fatihtahta-reddit-scraper-search-fast",
        "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": "Add Search Keywords",
            "minItems": 1,
            "type": "array",
            "description": "Add one or more search phrases to look for across Reddit. If you also provide direct Reddit URLs below, the actor will use those URLs instead of these search keywords. Search ranking, time filters, and limits do not start a run by themselves without at least one Step 1 target.",
            "items": {
              "type": "string"
            }
          },
          "sort": {
            "title": "Choose How Search Results Are Ranked",
            "enum": [
              "relevance",
              "hot",
              "top",
              "new",
              "comments"
            ],
            "type": "string",
            "description": "Select how search results should be ranked so you can focus on the best matches, newest posts, most discussed threads, or other result types. This setting does not affect direct URL scraping.",
            "default": "relevance"
          },
          "timeframe": {
            "title": "Limit Results by Time Range",
            "enum": [
              "all",
              "year",
              "month",
              "week",
              "day",
              "hour"
            ],
            "type": "string",
            "description": "Restrict search results to posts published within a specific time window when you want more recent or time-sensitive content.",
            "default": "all"
          },
          "subredditName": {
            "title": "Choose a Subreddit to Search",
            "minLength": 1,
            "type": "string",
            "description": "Enter the subreddit name you want to scrape, without the `r/` prefix. For example, use `technology` instead of `r/technology`. Leave subreddit keywords empty to collect a broader feed from that subreddit."
          },
          "subredditKeywords": {
            "title": "Add Keywords Within That Subreddit",
            "type": "array",
            "description": "Optionally enter keywords to narrow the scrape to specific topics inside the selected subreddit. Leave this empty if you want a broader set of posts from that community.",
            "items": {
              "type": "string"
            }
          },
          "subredditSort": {
            "title": "Choose How Subreddit Results Are Ranked",
            "enum": [
              "relevance",
              "hot",
              "top",
              "new",
              "comments"
            ],
            "type": "string",
            "description": "Select how posts should be ranked when searching within the chosen subreddit so you can focus on relevance, recency, popularity, or discussion activity.",
            "default": "relevance"
          },
          "subredditTimeframe": {
            "title": "Limit Subreddit Results by Time Range",
            "enum": [
              "all",
              "year",
              "month",
              "week",
              "day",
              "hour"
            ],
            "type": "string",
            "description": "Restrict subreddit results to a specific posting period when you want recent activity or content from a defined time window.",
            "default": "all"
          },
          "urls": {
            "title": "Add Reddit URLs to Scrape",
            "minItems": 1,
            "type": "array",
            "description": "Paste one or more Reddit URLs, such as post links, subreddit pages, user profiles, or Reddit search pages. When URLs are provided, the actor uses them directly and ignores the search keyword field. Ranking and limit controls still need at least one Step 1 target like these URLs to run.",
            "items": {
              "type": "string"
            }
          },
          "scrapeComments": {
            "title": "Include Comments from Each Post",
            "type": "boolean",
            "description": "Enable this to collect comments along with each post. This adds richer discussion data, but it can make runs slower and produce much larger outputs.",
            "default": false
          },
          "maxComments": {
            "title": "Set a Comment Limit per Post",
            "minimum": 1,
            "type": "integer",
            "description": "Choose the maximum number of comments to collect from each post when comment scraping is enabled. Lower limits help keep runs faster and datasets smaller.",
            "default": 50000
          },
          "dateFrom": {
            "title": "Keep Posts Starting From a Specific Date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Choose the earliest post date you want to include. The actor will keep posts from this date forward, which is useful when you want to start a dataset at the beginning of a campaign, event, or reporting window."
          },
          "dateTo": {
            "title": "Keep Posts Up to a Specific Date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Choose the latest post date you want to include. This helps you stop the dataset at a clear cutoff point so you can review a finished period without newer posts entering the results."
          },
          "commentDateFrom": {
            "title": "Keep Comments Starting From a Specific Date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Choose the earliest comment date you want to keep if comments should follow their own time window. This is helpful when you want to focus on replies from a later stage of a discussion."
          },
          "commentDateTo": {
            "title": "Keep Comments Up to a Specific Date",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Choose the latest comment date you want to keep if comments need their own cutoff point. Use this when you want replies to stay inside a clearly defined analysis period."
          },
          "forceSortNewForTimeFilteredRuns": {
            "title": "Favor Newest Results for Better Time Coverage (Recommended for Time Frame Filtered Searches)",
            "type": "boolean",
            "description": "Enable this when time-frame accuracy matters more than Reddit's default ranking. The actor will prefer newer-first result pages for eligible searches and listings so it can move through the date window more reliably.",
            "default": false
          },
          "includeNsfw": {
            "title": "Include NSFW and 18+ Posts",
            "type": "boolean",
            "description": "Enable this if you want posts marked as NSFW or 18+ to be included in the scrape results.",
            "default": false
          },
          "strictSearch": {
            "title": "Strict Reddit Search to Follow Your Keywords More Closely",
            "type": "boolean",
            "description": "Enable this to make Reddit search rely more on the exact keywords you entered and less on loose semantic matching. This usually returns fewer posts, but the results stay closer to your query.",
            "default": false
          },
          "strictTokenFilter": {
            "title": "Keep Only Posts That Clearly Match the Full Query",
            "type": "boolean",
            "description": "Enable this to make the actor scan each saved post's title, body, and URL and keep only posts that match all of your query keywords. This reduces the output size, but keeps the most accurate results.",
            "default": false
          },
          "maxPosts": {
            "title": "Set a Post Limit for Each Input",
            "minimum": 10,
            "type": "integer",
            "description": "Choose the maximum number of posts to collect for each search query or URL you provide. This helps balance coverage, run time, and dataset size.",
            "default": 50000
          },
          "maximize_coverage": {
            "title": "Expand Each Search Seed for Broader Reddit Coverage",
            "type": "boolean",
            "description": "Enable this to make the actor automatically widen coverage for each search seed using internal Reddit-focused logic instead of asking you for more settings. When turned on, the actor can combine multiple hidden tactics such as fanning out across a small internal sort set, testing additional Reddit search types, detecting the most common subreddits from early matching results, and spawning same-query subreddit-restricted searches for the strongest candidates. It can also use tighter chronological traversal when needed so the actor can keep exploring deeper slices of Reddit results while still keeping the keyword intent centered on your original query. This is useful when you want better recall from broad or competitive topics, but do not want to manage the extra search branches manually.",
            "default": false
          },
          "sentiment_analysis": {
            "title": "Add Sentiment Scores and Labels to Posts and Comments",
            "type": "boolean",
            "description": "Enable this to make the actor analyze each post using its title and body, and each scraped comment using its body, with the AFINN-165 sentiment lexicon. When turned on, the actor adds a numeric sentiment_score and a sentiment_label of positive, negative, or neutral to the supported output records. This helps you sort or filter large Reddit datasets by overall tone without needing separate sentiment-processing infrastructure.",
            "default": false
          },
          "content_analysis": {
            "title": "Classify Posts into Content Categories",
            "type": "boolean",
            "description": "Enable this to classify each post using its title and body, with subreddit and flair used as supporting signals. When turned on, the actor adds content_category_label and content_category_path to post records so they are easier to group, filter, and analyze by topic.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}