{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Data Scraper: Posts, Comments, Users, Monitoring",
    "description": "Scrape Reddit posts, comment trees, search results and user history as clean JSON. Fast public-endpoint fetching, honest documented rate limits, no start fee.",
    "version": "0.1",
    "x-build-id": "VaPHAlQl5jaPfr1vG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/actorforgehq~reddit-data-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-actorforgehq-reddit-data-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/actorforgehq~reddit-data-scraper/runs": {
      "post": {
        "operationId": "runs-sync-actorforgehq-reddit-data-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/actorforgehq~reddit-data-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-actorforgehq-reddit-data-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": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Direct Reddit links: a subreddit listing (https://www.reddit.com/r/programming/ or .../top), a post (.../comments/<id>/...), a user profile (https://www.reddit.com/user/<name>/), or a search results page. old.reddit.com links are accepted too. The kind of source is detected from the link itself.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "subreddits": {
            "title": "Subreddits",
            "type": "array",
            "description": "Subreddit names (without r/) to list, using the sort order and time filter below.",
            "items": {
              "type": "string"
            }
          },
          "listingSort": {
            "title": "Listing sort",
            "enum": [
              "hot",
              "new",
              "top",
              "rising"
            ],
            "type": "string",
            "description": "Sort order for subreddit listings.",
            "default": "hot"
          },
          "time": {
            "title": "Time filter",
            "enum": [
              "hour",
              "day",
              "week",
              "month",
              "year",
              "all"
            ],
            "type": "string",
            "description": "Applies to \"Top\" listings and to search. Ignored otherwise.",
            "default": "all"
          },
          "searches": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keyword queries to run against Reddit's search. Combine with \"Restrict search to subreddit\" to scope a query to one community. Alias: searchTerms.",
            "items": {
              "type": "string"
            }
          },
          "searchCommunityName": {
            "title": "Restrict search to subreddit",
            "type": "string",
            "description": "When set, every query in \"Search keywords\" is scoped to this one subreddit instead of searching all of Reddit. Alias: withinCommunity."
          },
          "users": {
            "title": "User profiles",
            "type": "array",
            "description": "Usernames (without u/) whose post and comment history to pull.",
            "items": {
              "type": "string"
            }
          },
          "postedAfter": {
            "title": "Posts after (ISO date)",
            "type": "string",
            "description": "Keep only posts submitted on or after this date. Applied as a filter after fetching, so it does not reduce the number of requests made."
          },
          "postedBefore": {
            "title": "Posts before (ISO date)",
            "type": "string",
            "description": "Keep only posts submitted on or before this date."
          },
          "commentedAfter": {
            "title": "Comments after (ISO date)",
            "type": "string",
            "description": "Keep only comments made on or after this date."
          },
          "commentedBefore": {
            "title": "Comments before (ISO date)",
            "type": "string",
            "description": "Keep only comments made on or before this date."
          },
          "includeNSFW": {
            "title": "Include NSFW",
            "type": "boolean",
            "description": "Off by default: NSFW posts are skipped unless you explicitly turn this on.",
            "default": false
          },
          "maxItems": {
            "title": "Max items per source",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many items to keep per subreddit / search query / user (posts and comments counted together for users). Reddit's own listings stop paginating around 1,000 items regardless of this setting. A feed or profile request fetches about 25 items and a search request about 7, so 1,000 feed posts take about 42 requests. Paging stops after 60 pages per source, so a search query gives at most about 400 posts.",
            "default": 100
          },
          "onlyNew": {
            "title": "Only new since last run",
            "type": "boolean",
            "description": "Skip items this Actor already gave you in earlier runs with the same sources: they are not saved again and not charged. New means not delivered to you before, not newer by time, so an older post you have not received yet still counts. With this on, Max items counts new items only, and paging stops at the first page where everything was already delivered. The list of delivered items is kept in a key-value store in your own Apify account, named reddit-only-new- plus a code made from your sources (the run log shows the exact name). Adding or removing a source starts a fresh list. It does not expire. To start over, delete that store in Storage.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Residential proxies are the default and the supported configuration. No country pin is needed. The run rotates proxy sessions and visitor cookies whenever Reddit refuses one.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}