{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Scraper - $0.50 per 1,000, No Login or Key",
    "description": "Scrape Reddit posts from any subreddit or search. A post's full selftext sits in the same JSON as its score. Both land on the row. So do the title, comment count, flair and permalink. No account, no API key, no OAuth app to register. $0.50 per 1,000 rows, flat.",
    "version": "0.1",
    "x-build-id": "6l6tgiTDOHh4diChS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dami_studio~reddit-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dami_studio-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/dami_studio~reddit-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dami_studio-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/dami_studio~reddit-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dami_studio-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": {
          "sources": {
            "title": "Sources (subreddits or user profiles)",
            "type": "array",
            "description": "Any mix of subreddits and Reddit user profiles. Accepts: 'askreddit', 'r/tifu', 'u/GallowBoob', 'user/spez', or a full reddit.com URL. Works for ANY subreddit or profile — not limited to AITA.",
            "items": {
              "type": "string"
            }
          },
          "subreddits": {
            "title": "Subreddits (legacy alias)",
            "type": "array",
            "description": "Optional alternative to 'sources' — plain subreddit names. Merged with 'sources'.",
            "items": {
              "type": "string"
            }
          },
          "users": {
            "title": "User profiles (alias)",
            "type": "array",
            "description": "Optional — Reddit usernames to scrape submissions from (without u/). Merged with 'sources'.",
            "items": {
              "type": "string"
            }
          },
          "method": {
            "title": "Fetch method",
            "enum": [
              "rss",
              "oauth",
              "json"
            ],
            "type": "string",
            "description": "rss = no key/login needed (recommended, default). oauth = use Reddit app creds below (adds score/comments). json = legacy anonymous API (often blocked).",
            "default": "rss"
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "top",
              "hot",
              "new",
              "rising",
              "controversial"
            ],
            "type": "string",
            "description": "top, hot (trending), new (latest), rising, or controversial.",
            "default": "top"
          },
          "time": {
            "title": "Time range",
            "enum": [
              "hour",
              "day",
              "week",
              "month",
              "year",
              "all"
            ],
            "type": "string",
            "description": "Time window for 'top' and 'controversial' sorts (ignored for hot/new/rising). E.g. top of all time, top this year, top this week.",
            "default": "day"
          },
          "maxPostsPerSubreddit": {
            "title": "Max stories per subreddit",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many qualifying stories to return per subreddit.",
            "default": 10
          },
          "minScore": {
            "title": "Minimum upvotes",
            "type": "integer",
            "description": "Skip posts below this upvote count.",
            "default": 0
          },
          "minWords": {
            "title": "Min words (short-form fit)",
            "type": "integer",
            "description": "Skip stories shorter than this (too thin for a short).",
            "default": 30
          },
          "maxWords": {
            "title": "Max words (short-form fit)",
            "type": "integer",
            "description": "Skip stories longer than this (won't fit a 30–90s short).",
            "default": 800
          },
          "minHookScore": {
            "title": "Minimum hook score (0–100)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Filter out weak openers. 0 = keep all.",
            "default": 0
          },
          "requireStory": {
            "title": "Text stories only",
            "type": "boolean",
            "description": "Keep only self/text-post stories (skip link/image posts) and apply the word-count fit. Off by default = return ALL posts. Turn on for faceless story videos.",
            "default": false
          },
          "includeNsfw": {
            "title": "Include NSFW (over-18)",
            "type": "boolean",
            "description": "Include posts marked over-18. Off by default.",
            "default": false
          },
          "cleanText": {
            "title": "Clean narration text",
            "type": "boolean",
            "description": "Strip markdown/links/edit-stamps and produce TTS-ready sentences. Turn off for raw text.",
            "default": true
          },
          "rawMode": {
            "title": "Raw mode (full Reddit JSON)",
            "type": "boolean",
            "description": "Output the complete raw Reddit post object instead of the shaped record.",
            "default": false
          },
          "dedupeAcrossRuns": {
            "title": "Dedupe across runs",
            "type": "boolean",
            "description": "Remember post IDs between runs so you never get the same story twice.",
            "default": true
          },
          "commentLimit": {
            "title": "Comments per post",
            "type": "integer",
            "description": "Fetch up to this many top comments per post (0 = none). Reliable when you add Reddit app credentials below; anonymous Reddit usually blocks comment access.",
            "default": 0
          },
          "redditClientId": {
            "title": "Reddit app client ID (optional)",
            "type": "string",
            "description": "Optional. The default RSS method needs no login. Add a free 'script' app's client ID (reddit.com/prefs/apps) only if you want upvote score + comment counts (not exposed via RSS)."
          },
          "redditClientSecret": {
            "title": "Reddit app client secret (recommended)",
            "type": "string",
            "description": "The secret for your Reddit app (reddit.com/prefs/apps)."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Rotating Apify datacenter addresses (the default) are fast and work for Reddit's RSS feeds. Metered proxy groups (RESIDENTIAL, GOOGLE_SERP) are not offered by this Actor — if you select one it is automatically replaced with datacenter addresses and the run continues. Your own proxy servers, entered as custom proxy URLs, are used exactly as given.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}