{
  "openapi": "3.0.1",
  "info": {
    "title": "Reddit Ads Scraper — Full Catalog Access",
    "description": "Reddit Ads Scraper — Full Catalog Access extracts Reddit ad data, including advertiser details, ad copy, titles, landing pages, creatives, targeting information, engagement metrics, and timestamps. Ideal for ad research, competitor analysis, campaign monitoring, and market intelligence.",
    "version": "0.1",
    "x-build-id": "OfscONmvYAJdTH0KC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simpleapi~reddit-ads-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simpleapi-reddit-ads-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/simpleapi~reddit-ads-scraper/runs": {
      "post": {
        "operationId": "runs-sync-simpleapi-reddit-ads-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/simpleapi~reddit-ads-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-simpleapi-reddit-ads-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": {
          "searchKeywords": {
            "title": "🔎 Search keywords (bulk supported)",
            "type": "array",
            "description": "📋 Add one or more keywords to search the Reddit Ads library (e.g. `ai`, `crypto`, `fitness`). ✨ Use **Add item** to queue several searches in a single run. 💡 Leave this empty to pull the **entire** public ad catalog. ⚠️ On the default (no-session) access mode, Reddit's anonymous tier does not actually narrow results by keyword — see `accessMode`/`filtersApplied` on every row.",
            "items": {
              "type": "string"
            }
          },
          "queries": {
            "title": "🔎 Search keywords (legacy field)",
            "type": "array",
            "description": "🔁 Legacy alias for `searchKeywords`, kept for backward compatibility with the base Reddit Ads Scraper. Prefer `searchKeywords` above — if both are set, `searchKeywords` wins.",
            "items": {
              "type": "string"
            }
          },
          "industry": {
            "title": "🏭 Industry filter",
            "enum": [
              "",
              "TECH_B2C",
              "TECH_B2B",
              "EDUCATION",
              "ENTERTAINMENT",
              "HEALTH_AND_BEAUTY",
              "GAMING",
              "EMPLOYMENT",
              "RETAIL_AND_ECOMMERCE",
              "AUTO",
              "FINANCIAL_SERVICES",
              "TRAVEL",
              "REAL_ESTATE",
              "GAMBLING_AND_FANTASY_SPORTS",
              "POLITICS_AND_GOVERNMENT",
              "CONSUMER_PACKAGED_GOODS",
              "OTHER"
            ],
            "type": "string",
            "description": "📊 Keep only ads from a specific industry. Choose **Any industry** to skip this filter. ⚠️ Fully honored only in authenticated mode — see `filtersApplied` on every row.",
            "default": ""
          },
          "budgetCategory": {
            "title": "💵 Budget filter",
            "enum": [
              "",
              "LOW",
              "MEDIUM",
              "HIGH"
            ],
            "type": "string",
            "description": "💸 Keep only ads in a given spend tier. Choose **Any budget** to skip this filter. ⚠️ Fully honored only in authenticated mode.",
            "default": ""
          },
          "postType": {
            "title": "🎨 Ad format filter",
            "enum": [
              "",
              "IMAGE",
              "VIDEO",
              "CAROUSEL",
              "FREE_FORM"
            ],
            "type": "string",
            "description": "🖼️ Keep only a specific creative format. Choose **Any format** to skip this filter. ⚠️ Fully honored only in authenticated mode.",
            "default": ""
          },
          "placements": {
            "title": "📍 Placement filter",
            "enum": [
              "",
              "FEED",
              "COMMENTS_PAGE",
              "CONVERSATION"
            ],
            "type": "string",
            "description": "📰 Keep only ads shown in a specific placement. Choose **Any placement** to skip this filter. Real observed placements are `FEED` and `COMMENTS_PAGE`; `CONVERSATION` is a documented value that is rarely (if ever) observed live. ⚠️ Fully honored only in authenticated mode.",
            "default": ""
          },
          "objectiveType": {
            "title": "🎯 Campaign objective filter",
            "enum": [
              "",
              "AWARENESS",
              "CONVERSIONS",
              "APP_INSTALLS",
              "TRAFFIC",
              "VIDEO_VIEWABLE_IMPRESSIONS"
            ],
            "type": "string",
            "description": "🚀 Keep only ads running toward a specific marketing objective. Choose **Any objective** to skip this filter. ⚠️ Fully honored only in authenticated mode.",
            "default": ""
          },
          "maxAds": {
            "title": "📦 Max ads per keyword",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "📦 How many ads to collect for each keyword. ℹ️ Reddit's public ad gallery exposes roughly **30 ads** to anonymous visitors, so this is capped at 30 in the default access mode — the Actor always returns as many as the gallery currently holds."
          },
          "maxItems": {
            "title": "🔢 Max ads per keyword (legacy field)",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "🔁 Legacy alias for `maxAds`, kept for backward compatibility with the base Reddit Ads Scraper. Prefer `maxAds` above — if both are set, `maxAds` wins.",
            "default": 5
          },
          "redditAdsSession": {
            "title": "🔑 Reddit Ads session (cookie or bearer token)",
            "type": "string",
            "description": "🔒 Optional. Paste a Reddit Ads Manager session — either a cookie string (e.g. `token_v2=...; loid=...`) or a bearer token (e.g. `Bearer eyJ...`). When supplied, every request in this run uses your session instead of the anonymous bootstrap. An invalid/garbage value falls back cleanly to the standard public sample — it never crashes the run. Never logged or exposed in the output."
          },
          "includeAccessInfo": {
            "title": "🧾 Include access-mode disclosure",
            "type": "boolean",
            "description": "📢 When on (default), every row includes `accessMode`, `filtersApplied` and `catalogSize` so you always know whether that row came from the authenticated session or the standard public sample, and whether your filters were actually honored.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "🛡️ Optional. The Actor runs **without a proxy by default** and automatically upgrades the connection if Reddit slows things down. ⚙️ Power users can pre-select a proxy here.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}