# Reddit Ads Scraper — Full Catalog Access (`simpleapi/reddit-ads-scraper`) Actor

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.

- **URL**: https://apify.com/simpleapi/reddit-ads-scraper.md
- **Developed by:** [SimpleAPI](https://apify.com/simpleapi) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Reddit Ads Scraper — Ad Creatives, Budgets and Advertiser Data

Reddit Ads Scraper — Full Catalog Access pulls structured data out of Reddit's public [Ads Inspiration Library](https://ads.reddit.com/inspiration): headline, body copy, creative type, industry, budget tier, campaign objective, placement, advertiser name and profile, post URL, and a scrape timestamp on every ad. Marketing teams use it to track what competitors are running on Reddit, agencies use it to audit client positioning against category peers, and researchers use it to study Reddit ad-creative trends at scale. Every row also discloses exactly which access mode produced it — the standard public sample or your own authenticated session — so you always know how complete that row's filtering really is.

⚠️ **The real constraint, stated up front:** in the default (no-session) access mode, Reddit's anonymous endpoint does not actually narrow results by keyword or filter — it returns the same public sample gallery (capped at 30 ads) regardless of what you search for. Supplying your own `redditAdsSession` is what makes keyword search and the `industry` / `budgetCategory` / `postType` / `placements` / `objectiveType` filters genuinely take effect. This Actor never hides that distinction: check `accessMode` and `filtersApplied` on every row you get back.

### What is Reddit Ads Scraper — Full Catalog Access?

It's an Apify Actor that queries Reddit's Ads Inspiration Library — the same public gallery Reddit's own Ads Manager uses to show advertisers what's running on the platform — and returns each ad as a clean JSON row. No Reddit account is required to run it: by default it bootstraps an anonymous session automatically. Supplying a Reddit Ads session (cookie string or bearer token) in the optional `redditAdsSession` field switches every request in the run to your own authenticated access instead.

Key features:

- 🔎 **Discovery by keyword or full-catalog pull** — queue one or more search terms in `searchKeywords`, or leave it empty to collect the entire public ad gallery in one run
- 📰 **Core creative fields** — headline, body text, creative type, post URL, thumbnail, and the full media/CTA content array for each ad
- 👤 **Advertiser identity** — `profile_name`, `profile_id` and `profile_image_url` on every row, no extra request needed
- 🏭 **Five real filters** — `industry`, `budgetCategory`, `postType`, `placements`, `objectiveType` — fully honored in authenticated mode, sent-but-not-guaranteed in anonymous mode
- 🧾 **Honest access disclosure** — `accessMode`, `filtersApplied` and `catalogSize` on every row (toggle with `includeAccessInfo`)
- ⬇️ **Standard Apify dataset export** — download results as JSON, CSV, Excel, XML or HTML table directly from the Apify Console

### What data can I extract with Reddit Ads Scraper — Full Catalog Access?

Every run returns one row per ad, with the following fields:

| Field | Example value | Use case |
| --- | --- | --- |
| `id` | `"ad_9f3c2b1a7d4e"` | Unique ad identifier for de-duplication |
| `headline` | `"Try our new AI writing tool free"` | Primary ad copy for creative analysis |
| `body` | `"Join 10,000+ marketers already using..."` | Full ad copy text |
| `type` | `"IMAGE"` | Creative format (raw value; see note below on `FREE_FORM`) |
| `industry` | `"TECH_B2C"` | Category-level competitive segmentation |
| `budget_category` | `"HIGH"` | Spend-tier signal for the advertiser |
| `objective` | `"CONVERSIONS"` | Campaign goal the ad is optimized for |
| `placements` | `["FEED"]` | Where the ad appears on Reddit |
| `created_at` | `"2026-06-02T14:00:00Z"` | When the creative was created |
| `post_url` | `"https://www.reddit.com/r/ads/comments/1cdt7o6/"` | Direct link to the live ad post |
| `thumbnail_url` | `"https://preview.redd.it/abc123.jpg"` | Creative thumbnail for visual review |
| `profile_id` | `"t2_advertiser123"` | Advertiser's Reddit account ID |
| `profile_name` | `"acmecorp"` | Advertiser's display name |
| `profile_image_url` | `"https://styles.redditmedia.com/avatar.png"` | Advertiser avatar |
| `content` | `[{ "media_url": "...", "destination_url": "...", "display_url": "acme.com", "call_to_action": "Sign Up", "caption": null }]` | Per-slide creative content (multi-slide for carousels) |
| `allow_comments` | `true` | Whether the ad post accepts comments |
| `redditPostId` | `"t3_1cdt7o6"` | Reddit's native post ID for the ad |
| `scrapedAt` | `"2026-08-15T09:12:41.123Z"` | Timestamp this row was collected |
| `accessMode` | `"anonymous_sample"` | Which access mode produced this row |
| `filtersApplied` | `false` | Whether your filters were actually honored for this row |
| `catalogSize` | `30` | Size of the gallery available in anonymous mode (`null` in authenticated mode) |

#### Budget, objective and placement data

`budget_category`, `objective` and `placements` are the decision-driving fields on every row — together they tell you not just what an advertiser is saying, but how much they're likely spending, what outcome they're chasing, and where. A common use: pull all `HIGH` budget-tier ads in one `industry` to see which `objective` values dominate high-spend campaigns in that category — for example, spotting whether competitors in `RETAIL_AND_ECOMMERCE` are weighted toward `CONVERSIONS` or `AWARENESS` spend.

#### Industry and format targeting data

`industry`, `type` (creative format) and `created_at` are the fields you segment and filter on after the run. Group by `industry` to build category-level creative libraries, filter by `type` to isolate video versus static-image strategies, and sort by `created_at` to see how recently an advertiser refreshed their creative — useful for spotting which competitors are actively iterating versus running the same ad long-term.

### Why not build this yourself?

Reddit does publish an official [Reddit Ads API](https://business.reddithelp.com/s/article/Reddit-Ads-API) (checked 2026-08-15), but it's built for advertisers to manage their **own** campaigns — creating ads, editing audiences, pulling your own reporting — under OAuth2, and access requires an approved advertiser account with established ad spend. It has no documented endpoint for browsing the public Ads Inspiration Library that this Actor targets, so there is no official, sanctioned path to bulk-collect *other* advertisers' ads.

Building that yourself means reverse-engineering the same internal endpoint this Actor calls (`ads-api.reddit.com/api/v3/generated_content/inspiration_creatives/search`), which is undocumented: you'd need to replicate the anonymous session bootstrap flow, handle Reddit's rate-limit and block responses (`401`/`403`/`429`) with connection-tier escalation, retry transient `5xx` errors with backoff, and de-duplicate ads across paginated keyword passes yourself. This Actor handles all of that automatically — direct connection first, escalating to datacenter- then residential-tier proxies only if Reddit slows things down — and it will always be more current than a one-off scraper the moment Reddit changes its internal API shape.

The official Reddit Ads API is the right tool when you're managing your own ad account and reporting. This Actor is the right tool when you need to observe *other* advertisers' public creative, budget tier, and targeting signals — the use case Reddit's own API doesn't serve.

### How to use data extracted from Reddit Ads

#### Marketing and growth teams

Filter by `industry` and `objectiveType` to pull every ad your direct competitors are running toward a given goal, then extract `headline`, `body`, `type` and `content` into a creative swipe file. Because `profile_name` and `post_url` travel with every row, you can trace any headline straight back to the advertiser and the live post for context before adapting an angle.

#### Agencies and service providers

Run the same keyword and filter set across multiple client verticals on a recurring basis to benchmark how client `budget_category` and `objective` mix compares against category peers over time — a repeatable audit rather than a one-off pull, since every row is timestamped with `scrapedAt`.

#### Market research and intelligence

Aggregate `industry` × `objective` × `budget_category` across a broad keyword set (or an empty-keyword full-catalog pull) to map which objectives dominate spend in a category, or which formats (`type`) are trending in a given industry vertical.

#### AI agents and automated pipelines

Because output is typed, flat JSON keyed by stable field names, it drops directly into an agent tool call or a RAG pipeline over Reddit ad-creative context — for example, an agent that answers "what messaging are competitors in `FINANCIAL_SERVICES` using this week" by querying the dataset instead of the live site.

### 🔼 Input sample

| Parameter | Required | Type | Description | Example value |
| --- | --- | --- | --- | --- |
| `searchKeywords` | No | array | Search keywords for the Reddit Ads library. Leave empty to pull the entire public ad catalog. `searchKeywords` wins if both this and `queries` are set. | `["ai", "crypto"]` |
| `queries` | No | array | Legacy alias for `searchKeywords`, kept for backward compatibility. | `[]` |
| `industry` | No | string (enum) | Keep only ads from a specific industry. `""` = any industry. Fully honored only in authenticated mode. | `"TECH_B2C"` |
| `budgetCategory` | No | string (enum) | Keep only ads in a given spend tier. `""` = any budget. Fully honored only in authenticated mode. | `"HIGH"` |
| `postType` | No | string (enum) | Keep only a specific creative format. `""` = any format. Fully honored only in authenticated mode. | `"VIDEO"` |
| `placements` | No | string (enum) | Keep only ads in a specific placement. `""` = any placement. Fully honored only in authenticated mode. | `"FEED"` |
| `objectiveType` | No | string (enum) | Keep only ads running toward a specific objective. `""` = any objective. Fully honored only in authenticated mode. | `"CONVERSIONS"` |
| `maxAds` | No | integer | How many ads to collect per keyword. Minimum `1`, maximum `30` (Reddit's own ceiling for anonymous visitors). | `30` |
| `maxItems` | No | integer | Legacy alias for `maxAds`, default `5`, minimum `1`, maximum `30`. `maxAds` wins if both are set. | `5` |
| `redditAdsSession` | No | string | Optional Reddit Ads session — a cookie string (`token_v2=...; loid=...`) or a bearer token (`Bearer eyJ...`). Falls back cleanly to the public sample if invalid. Never logged or exposed in output. | `"token_v2=...; loid=..."` |
| `includeAccessInfo` | No | boolean | Default `true`. Adds `accessMode`, `filtersApplied` and `catalogSize` to every row. | `true` |
| `proxyConfiguration` | No | object | Default `{"useApifyProxy": false}`. The Actor runs without a proxy by default and upgrades automatically if needed. | `{"useApifyProxy": false}` |

Full parameter enum values — `industry`: `""`, `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` · `budgetCategory`: `""`, `LOW`, `MEDIUM`, `HIGH` · `postType`: `""`, `IMAGE`, `VIDEO`, `CAROUSEL`, `FREE_FORM` · `placements`: `""`, `FEED`, `COMMENTS_PAGE`, `CONVERSATION` · `objectiveType`: `""`, `AWARENESS`, `CONVERSIONS`, `APP_INSTALLS`, `TRAFFIC`, `VIDEO_VIEWABLE_IMPRESSIONS`.

```json
{
  "searchKeywords": ["ai", "fitness"],
  "industry": "TECH_B2C",
  "budgetCategory": "HIGH",
  "postType": "VIDEO",
  "maxAds": 30,
  "includeAccessInfo": true,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

**Common pitfall:** `maxAds` and `maxItems` are aliases for the same limit (`maxAds` wins if both are set), but they have different schema defaults — `maxAds` has no default and `maxItems` defaults to `5`. If you call the Actor via the API and omit both fields entirely, the effective per-keyword cap is **5**, not the 30 shown as the Console's pre-filled suggestion — set `maxAds` explicitly if you want the full 30-ad ceiling. Also note `postType: "FREE_FORM"` is the schema's friendly label; the raw `type` field returned in the output for that format is `"TEXT"`, not `"FREE_FORM"`.

### 🔽 Output sample

Output is typed, flat JSON — one row per ad, written to the dataset live as each ad is collected. Export it from the Apify Console as JSON, CSV, Excel, XML or HTML table. The dataset also ships three extra pre-built views alongside the default overview — **Creative & Content**, **Advertiser Profile**, and **Access & Coverage** — that group the same underlying fields for faster review in the Console table UI.

```json
{
  "id": "ad_9f3c2b1a7d4e",
  "budget_category": "HIGH",
  "industry": "TECH_B2C",
  "placements": ["FEED"],
  "objective": "CONVERSIONS",
  "created_at": "2026-06-02T14:00:00Z",
  "headline": "Try our new AI writing tool free",
  "body": "Join 10,000+ marketers already using our AI copy assistant.",
  "post_url": "https://www.reddit.com/r/ads/comments/1cdt7o6/",
  "type": "IMAGE",
  "thumbnail_url": "https://preview.redd.it/abc123.jpg",
  "profile_id": "t2_advertiser123",
  "profile_name": "acmecorp",
  "profile_image_url": "https://styles.redditmedia.com/avatar.png",
  "content": [
    {
      "media_url": "https://i.redd.it/creative123.jpg",
      "destination_url": "https://acme.com/landing",
      "display_url": "acme.com",
      "call_to_action": "Sign Up",
      "caption": null
    }
  ],
  "allow_comments": true,
  "redditPostId": "t3_1cdt7o6",
  "scrapedAt": "2026-08-15T09:12:41.123456+00:00",
  "accessMode": "anonymous_sample",
  "filtersApplied": false,
  "catalogSize": 30
}
```

If `includeAccessInfo` is set to `false`, the `accessMode`, `filtersApplied` and `catalogSize` keys are omitted entirely from every row.

### How do you filter and target specific ads?

**Keyword vs. full-catalog pull.** Set one or more `searchKeywords` to search, or leave the field empty to pull the entire public gallery in one run — useful as a baseline before narrowing. Remember: in the default anonymous access mode, keyword search does not actually change which ads come back; it only starts genuinely filtering once you supply `redditAdsSession`.

**Scope precision with the five filters.** `industry`, `budgetCategory`, `postType`, `placements` and `objectiveType` each narrow the result set along a different axis — category, spend tier, creative format, on-site location, and campaign goal. All five accept an empty string to mean "any." Stack several at once (e.g. `industry=TECH_B2C` + `budgetCategory=HIGH` + `objectiveType=CONVERSIONS`) to isolate a specific competitive slice — but they are only guaranteed to be honored in authenticated mode; check `filtersApplied` on the returned rows to confirm.

**Access mode is your real quality lever.** Because anonymous mode returns the same fixed sample regardless of query, the single biggest lever for result relevance is supplying a valid `redditAdsSession` — not adjusting filter values.

**Volume controls.** `maxAds` (alias `maxItems`) caps collection at up to 30 ads per keyword — Reddit's own ceiling for a single query, not an Actor-imposed limit. To collect more than 30 ads total in one run, queue multiple keywords in `searchKeywords`; results are de-duplicated by ad ID across the whole run, so overlapping keywords won't double-count the same ad.

```json
{ "searchKeywords": [], "maxAds": 30 }
```

```json
{ "searchKeywords": ["ai", "fitness", "crypto"], "industry": "GAMING", "postType": "VIDEO" }
```

```json
{ "searchKeywords": ["saas"], "budgetCategory": "HIGH", "objectiveType": "CONVERSIONS", "redditAdsSession": "token_v2=...; loid=..." }
```

### ▶️ Want to try other Reddit or ad-library scrapers?

| Scraper name | What it extracts |
| --- | --- |
| Reddit Scraper — User Profiles and Subreddit Activity | Reddit user profiles and subreddit activity data |
| LinkedIn Ads Scraper — Full Advertiser Ad History | Full advertiser ad history from LinkedIn's ad library |
| Facebook Reviews Scraper — Headlines, Tags and Reviewer Detail | Facebook business reviews with headlines, tags and reviewer detail |
| Instagram Post Details Scraper — With Engagement Data | Instagram post details with engagement data |

### How to extract Reddit Ads data programmatically

This Actor runs as a standard Apify Actor: call it through the Apify API or the `apify-client` SDK, get structured JSON back — no separate signup or credential system beyond your Apify account.

#### Python example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")

run_input = {
    "searchKeywords": ["ai", "fitness"],
    "industry": "TECH_B2C",
    "maxAds": 30,
}

run = client.actor("<actor-id>/reddit-ads-scraper-full-catalog-access").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["headline"], item["profile_name"], item["budget_category"])
```

#### Export to spreadsheets or CRM

Open the run's dataset in the Apify Console and export directly to CSV or Excel. Map `headline`, `profile_name`, `industry`, `budget_category` and `post_url` to your spreadsheet or CRM's lead/creative-swipe columns — no transformation needed since the dataset is already flat, typed JSON.

### Is it legal to scrape Reddit Ads?

Yes — this Actor collects data that Reddit itself publishes for public viewing in the Ads Inspiration Library, a gallery Reddit built specifically so anyone can browse live ad creative without an account. The records here are business and product data — ad copy, budget tiers, campaign objectives, and advertiser account names — not personal data about private individuals, so GDPR's personal-data framework does not attach to this dataset. What does apply is Reddit's own Terms of Service and standard database-rights considerations around bulk collection and reuse of a platform's published content. Consult legal counsel for commercial applications involving bulk storage or redistribution of this data.

### ❓ FAQ

#### Does the output tell me if an ad has stopped running?

No — there's no `active`/`inactive` flag in the output. The gallery reflects whatever Reddit's Ads Inspiration Library is showing at the moment of the run; an ad that has stopped running simply won't appear in a later run's results. Use `scrapedAt` and re-run comparisons to track when an ad disappears from the catalog.

#### Can I get advertiser profile data along with the ad records?

Yes — every row includes `profile_id`, `profile_name` and `profile_image_url` for the advertiser account behind that ad, with no separate request needed.

#### How accurate is the budget, industry and objective data?

The Actor returns exactly what Reddit's Ads Inspiration Library reports for each ad at request time. `budgetCategory`, `industry`, `postType`, `placements` and `objectiveType` filters are honored fully only in authenticated mode (`redditAdsSession` supplied) — check `filtersApplied` on each row before treating filtered results as complete.

#### How many ads can I get per run?

Up to 30 ads per keyword — that's Reddit's own ceiling for a single query, enforced by `maxAds`/`maxItems` (minimum 1, maximum 30). To collect more than 30 total, queue multiple keywords in `searchKeywords`; the Actor de-duplicates by ad ID across the whole run so your total can exceed 30.

#### What happens if my authenticated session is invalid or expired?

The Actor falls back cleanly to the standard public sample — it never crashes the run. Malformed or rejected `redditAdsSession` values are logged and the run continues in anonymous mode with `accessMode` reporting `anonymous_sample` on the affected rows.

#### How do the industry, budget and objective filters actually work?

Set any combination of `industry`, `budgetCategory`, `postType`, `placements` and `objectiveType` — each defaults to "any" via an empty string. They're sent on every request regardless of access mode, but Reddit's anonymous endpoint doesn't guarantee honoring them; only an authenticated session (via `redditAdsSession`) does. `filtersApplied` on each row tells you which behavior you got.

#### Does this Actor work with Claude, ChatGPT and AI agent frameworks?

There's no dedicated MCP server for this Actor. It's callable as a standard HTTP endpoint through the Apify API by any agent framework or tool-calling setup that can make an authenticated API call and read back JSON.

#### How does this compare to other Reddit ad scrapers?

No independently verified competitor benchmark data is available for this comparison. What's verifiable from this Actor's own source: it discloses `accessMode`/`filtersApplied`/`catalogSize` on every row rather than silently returning a fixed sample, and it supports an optional authenticated session as a real, working input rather than requiring one.

#### Can I use this without a Reddit account or API key?

Yes. By default the Actor bootstraps its own anonymous session — no Reddit account, API key or developer approval needed. Supplying your own `redditAdsSession` is entirely optional and only changes which access mode is used.

### Conclusion

Reddit Ads Scraper — Full Catalog Access turns Reddit's public Ads Inspiration Library into structured, exportable JSON — headline, creative, budget tier, objective, placement and advertiser identity on every row, with an honest `accessMode` disclosure so you always know how complete your filtering was. It's built for marketers, agencies and researchers who need repeatable competitive visibility into what's running on Reddit, not a one-off manual browse of the gallery. Start a run from the Apify Console, or call it through the Apify API with `apify-client`, to get your first dataset of Reddit ads.

# Actor input Schema

## `searchKeywords` (type: `array`):

📋 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.

## `queries` (type: `array`):

🔁 Legacy alias for `searchKeywords`, kept for backward compatibility with the base Reddit Ads Scraper. Prefer `searchKeywords` above — if both are set, `searchKeywords` wins.

## `industry` (type: `string`):

📊 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.

## `budgetCategory` (type: `string`):

💸 Keep only ads in a given spend tier. Choose **Any budget** to skip this filter. ⚠️ Fully honored only in authenticated mode.

## `postType` (type: `string`):

🖼️ Keep only a specific creative format. Choose **Any format** to skip this filter. ⚠️ Fully honored only in authenticated mode.

## `placements` (type: `string`):

📰 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.

## `objectiveType` (type: `string`):

🚀 Keep only ads running toward a specific marketing objective. Choose **Any objective** to skip this filter. ⚠️ Fully honored only in authenticated mode.

## `maxAds` (type: `integer`):

📦 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` (type: `integer`):

🔁 Legacy alias for `maxAds`, kept for backward compatibility with the base Reddit Ads Scraper. Prefer `maxAds` above — if both are set, `maxAds` wins.

## `redditAdsSession` (type: `string`):

🔒 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` (type: `boolean`):

📢 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.

## `proxyConfiguration` (type: `object`):

🛡️ 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.

## Actor input object example

```json
{
  "searchKeywords": [
    "ai"
  ],
  "queries": [],
  "industry": "",
  "budgetCategory": "",
  "postType": "",
  "placements": "",
  "objectiveType": "",
  "maxAds": 30,
  "maxItems": 5,
  "includeAccessInfo": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

All scraped ads, with the core creative/targeting/access columns in the default view.

## `creative` (type: `string`):

Headline, body, format, thumbnail and per-slide creative content for each ad.

## `advertiser` (type: `string`):

Advertiser identity fields (profile name, profile ID, avatar) for each ad.

## `access` (type: `string`):

Access-mode disclosure — which mode produced each row, whether filters were actually honored, and the anonymous-mode catalog size.

## `runSnapshot` (type: `string`):

A single JSON array with every ad collected during the run, written once to the key-value store after all searches complete.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchKeywords": [
        "ai"
    ],
    "queries": [],
    "maxAds": 30,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("simpleapi/reddit-ads-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchKeywords": ["ai"],
    "queries": [],
    "maxAds": 30,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("simpleapi/reddit-ads-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchKeywords": [
    "ai"
  ],
  "queries": [],
  "maxAds": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call simpleapi/reddit-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,simpleapi/reddit-ads-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xvEp2vYpFsGPnNgbC/builds/OfscONmvYAJdTH0KC/openapi.json
