{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Scraper - Posts, Comments, Search + AI Analysis ✅",
    "description": "Scrape any subreddit, search across all of Reddit, and pull complete comment threads with every reply intact. Also grabs video transcripts and subreddit profiles. Optional AI sentiment and pain-point analysis with your own key. No Reddit account, no login, no cookies, no run-start fee.",
    "version": "0.0",
    "x-build-id": "XB91FOQvl1f6xKMWP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/unseenuser~Reddit-Scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-unseenuser-Reddit-Scraper",
        "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/unseenuser~Reddit-Scraper/runs": {
      "post": {
        "operationId": "runs-sync-unseenuser-Reddit-Scraper",
        "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/unseenuser~Reddit-Scraper/run-sync": {
      "post": {
        "operationId": "run-sync-unseenuser-Reddit-Scraper",
        "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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "1. What do you want to collect?",
            "enum": [
              "subreddit_posts",
              "reddit_search",
              "post_comments",
              "subreddit_search",
              "subreddit_info",
              "post_transcript"
            ],
            "type": "string",
            "description": "Choose the job. Whatever you pick here decides what to paste into the box below - the option text tells you which. Example: pick \"Posts from a subreddit\" and paste r/SaaS.",
            "default": "subreddit_posts"
          },
          "targets": {
            "title": "2. Paste what you want to look at (one per line)",
            "type": "array",
            "description": "The option you chose above tells you what belongs here. Subreddit names work with or without r/ (r/SaaS, /r/SaaS and SaaS are all fine). For comments and transcripts paste the full post link. Example: r/SaaS",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "timeRange": {
            "title": "3. Which results, and from when?",
            "enum": [
              "hot-now",
              "newest",
              "rising",
              "top-past-hour",
              "top-today",
              "top-this-week",
              "top-this-month",
              "top-this-year",
              "top-all-time",
              "controversial-today",
              "controversial-all-time",
              "most-relevant",
              "most-comments"
            ],
            "type": "string",
            "description": "Sets the ranking and the time window in one choice, so you never have to match two settings together. Example: \"Top of this week\" gives the week's best posts. Used by posts from a subreddit and by both searches. Comment threads pass it on as the requested comment order. Subreddit profiles and video transcripts ignore it completely. No single Reddit endpoint supports all of these options, so a choice it cannot accept is swapped for the closest one that works - \"most argued about\" becomes \"top\" on a subreddit, for instance - and the run log names any swap it made.",
            "default": "top-this-week"
          },
          "limit": {
            "title": "4. How many results? (0 = every result available)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means everything available. Any number is an exact cap, and this is your main control on cost - set a number while you are trying things out. Example: 50 for a first run. Safety ceilings apply behind the scenes (10,000 posts or comments per search); go over one and the run tells you in the log rather than quietly cutting your results. On the Apify free plan a run returns at most 5 results whatever you set here.",
            "default": 0
          },
          "keywords": {
            "title": "🔍 Search inside subreddits - the words to find",
            "type": "array",
            "description": "Only used by the \"Search inside subreddits\" job. The words you are hunting for, inside the subreddits you pasted above. Example: pricing",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeSearchComments": {
            "title": "🔍 Search inside subreddits - also return matching comments",
            "type": "boolean",
            "description": "Reddit sends matching comments back in the same request, so leaving this on costs nothing extra. Example: searching \"pricing\" in r/SaaS returns both posts and comments that mention it.",
            "default": true
          },
          "includeSearchMedia": {
            "title": "🔍 Search inside subreddits - also return matching images and videos",
            "type": "boolean",
            "description": "Same request, so this costs nothing extra either. Off by default because most people want text. Turn it on when you are researching visual content.",
            "default": false
          },
          "commentDepth": {
            "title": "💬 Comments on a post - how deep into reply chains? (0 = follow every reply)",
            "minimum": 0,
            "type": "integer",
            "description": "0 follows every reply chain to the end. A number stops after that many levels. Example: 2 gives you top-level comments and their direct replies. A ceiling of 20 levels applies.",
            "default": 0
          },
          "transcriptLanguage": {
            "title": "🎬 Video transcript - language",
            "enum": [
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "sv",
              "no",
              "da",
              "fi",
              "pl",
              "cs",
              "ru",
              "uk",
              "tr",
              "ar",
              "he",
              "hi",
              "ja",
              "ko",
              "zh",
              "id",
              "vi",
              "th"
            ],
            "type": "string",
            "description": "The language the captions are in. Most Reddit videos are English. Example: choose German for a video from a German subreddit.",
            "default": "en"
          },
          "dateRange": {
            "title": "How far back to look",
            "enum": [
              "",
              "1h",
              "24h",
              "3d",
              "7d",
              "14d",
              "30d",
              "3mo",
              "6mo",
              "1y"
            ],
            "type": "string",
            "description": "The quick way to limit results by age. Example: choose \"Last 7 days\" for a weekly report. For an exact window like 1 March to 15 March, leave this on \"Any time\" and fill in the two boxes below instead.",
            "default": ""
          },
          "includeNSFW": {
            "title": "Include adult content",
            "type": "boolean",
            "description": "On by default. Turn off to drop anything Reddit marks as over-18. Example: turn off when the results are going into a work report.",
            "default": true
          },
          "enrichments": {
            "title": "Add AI analysis to every result",
            "type": "array",
            "description": "Leave empty for no AI and no extra cost. Tick any combination and each post and comment comes back already analysed. One flat fee per analysed result covers however many boxes you tick, and you are only charged when the analysis actually comes back. Needs your own Claude API key in the next box - you pay Anthropic for usage directly. Example: tick \"How they feel about it\" and \"Problems they mention\" to find out what people dislike about a product and how strongly.",
            "items": {
              "type": "string",
              "enum": [
                "sentiment",
                "intent",
                "painPoints",
                "featureRequests",
                "buyingIntent"
              ],
              "enumTitles": [
                "😀 How they feel about it (positive, negative, and the emotion)",
                "🎯 Why they posted (a question, a complaint, a recommendation...)",
                "🔧 Problems they mention, quoted word for word",
                "💡 Things they wish existed, quoted word for word",
                "💰 How close they sound to buying"
              ]
            },
            "default": []
          },
          "llmApiKey": {
            "title": "Your Claude API key",
            "type": "string",
            "description": "Only needed if you ticked something above. Get one at console.anthropic.com. Your key is used for this run and never stored. Example: a key starting sk-ant-"
          },
          "llmModel": {
            "title": "Which Claude model",
            "enum": [
              "claude-haiku-4-5-20251001",
              "claude-sonnet-5",
              "claude-opus-5"
            ],
            "type": "string",
            "description": "Haiku is the cheapest and is genuinely good enough for sentiment and intent on short Reddit text - start there. Step up only if you are extracting nuanced quotes and the results are not sharp enough. Example: leave on Haiku for a first run.",
            "default": "claude-haiku-4-5-20251001"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}