{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Scraper: Posts, Comments, Search & AI Sentiment",
    "description": "Scrape Reddit posts, comments and user profiles from any subreddit, search query or URL. Get score, upvote ratio, awards, media, flair, author karma and optional AI sentiment and summaries. Fast HTTP-only Reddit API. Export JSON, CSV or Excel.",
    "version": "0.1",
    "x-build-id": "t1QbxNGEZh5gAviTX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapers_lat~reddit-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapers_lat-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/scrapers_lat~reddit-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapers_lat-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/scrapers_lat~reddit-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapers_lat-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",
        "properties": {
          "maxPosts": {
            "title": "Max posts",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Maximum number of posts to collect across all sources. Optional."
          },
          "includeComments": {
            "title": "Include Comments",
            "type": "boolean",
            "description": "When enabled, the scraper also fetches the comments of each collected post and emits one record per comment.",
            "default": true
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "subreddit",
              "search"
            ],
            "type": "string",
            "description": "Choose whether to read posts from subreddits or from a search query.",
            "default": "subreddit"
          },
          "subreddits": {
            "title": "Subreddits",
            "type": "array",
            "description": "Subreddit names to scrape when mode is 'subreddit'. Enter names without the r/ prefix, for example: technology, worldnews.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (posts, subreddits, users)",
            "type": "array",
            "description": "Optional. Paste direct Reddit URLs to scrape: post links (…/comments/…), subreddit links (reddit.com/r/name), user profiles (reddit.com/user/name) or search links. Works alongside or instead of the mode inputs.",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "Search Query",
            "type": "string",
            "description": "Search terms to query when mode is 'search'. For example: artificial intelligence."
          },
          "searchSubreddit": {
            "title": "Restrict Search To Subreddit",
            "type": "string",
            "description": "Optional. When mode is 'search', restrict the search to this single subreddit (name without r/). Leave empty to search all of Reddit."
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "hot",
              "new",
              "top",
              "rising",
              "controversial",
              "relevance",
              "comments"
            ],
            "type": "string",
            "description": "Sort order. For subreddit mode: hot, new, top, rising, controversial. For search mode: relevance, new, top, comments.",
            "default": "hot"
          },
          "time": {
            "title": "Time Range",
            "enum": [
              "hour",
              "day",
              "week",
              "month",
              "year",
              "all"
            ],
            "type": "string",
            "description": "Time window for the 'top' sort (and search). Ignored for hot, new and rising.",
            "default": "day"
          },
          "commentsLimit": {
            "title": "Comments Per Post",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of comments to collect per post when Include Comments is enabled.",
            "default": 50
          },
          "commentSort": {
            "title": "Comment Sort",
            "enum": [
              "best",
              "top",
              "new",
              "controversial",
              "old",
              "qa"
            ],
            "type": "string",
            "description": "How comments are ordered on each post. Best surfaces the highest-confidence replies; Top orders by score.",
            "default": "top"
          },
          "maxCommentDepth": {
            "title": "Max Comment Depth",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Optional. Only keep comments up to this reply nesting depth (0 = top-level comments only). Leave empty for all depths."
          },
          "minScore": {
            "title": "Minimum Score",
            "type": "integer",
            "description": "Optional. Skip posts whose net vote score is below this number. Leave empty to keep every post."
          },
          "postType": {
            "title": "Post Type",
            "enum": [
              "any",
              "text",
              "link",
              "media"
            ],
            "type": "string",
            "description": "Optional. Keep only a specific kind of post: text (self posts), link (external links) or media (image, gallery or video). Any keeps all types.",
            "default": "any"
          },
          "excludeNsfw": {
            "title": "Exclude NSFW",
            "type": "boolean",
            "description": "Optional. When enabled, posts flagged NSFW (over 18) are skipped.",
            "default": false
          },
          "createdAfter": {
            "title": "Created After",
            "type": "string",
            "description": "Optional. Keep only posts created on or after this date. Accepts a date such as 2026-01-01 or a full ISO timestamp."
          },
          "createdBefore": {
            "title": "Created Before",
            "type": "string",
            "description": "Optional. Keep only posts created on or before this date. Accepts a date such as 2026-06-30 or a full ISO timestamp."
          },
          "scrapeUserProfiles": {
            "title": "Add author profiles (paid add-on)",
            "type": "boolean",
            "description": "Optional paid add-on. Fetch each post author's public profile and add karma (total, post, comment), cake day and verified/gold flags to the post record. Paid Apify plans only; charged only when a profile is genuinely fetched.",
            "default": false
          },
          "analyzeSentiment": {
            "title": "AI sentiment (paid add-on)",
            "type": "boolean",
            "description": "Optional paid add-on. Classify each post's sentiment (positive / neutral / negative) with a score and rationale. Ideal for brand and market-research monitoring. Charged only on usable AI output.",
            "default": false
          },
          "summarizePost": {
            "title": "AI summary (paid add-on)",
            "type": "boolean",
            "description": "Optional paid add-on. Add a 1-2 sentence plain-English summary of each post. Charged only on usable AI output.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}