Reddit Ads Scraper
Pricing
from $4.99 / 1,000 results
Reddit Ads Scraper
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Reddit Ads Scraper — Headlines, Creatives and Advertiser Data
Reddit Ads Scraper turns Reddit's public Ads inspiration library into structured JSON — ad headlines, body copy, creative media, advertiser names, budget tiers, industries, placements and campaign objectives, one row per ad. Search by keyword or pull the whole public gallery, narrow with five optional filters, and watch results land in your dataset in real time as they're collected. No Reddit account, login or API key needed. Start a run below.
What is Reddit Ads Scraper?
Reddit Ads Scraper is an Apify Actor that queries Reddit's public ad inspiration gallery — the same tool Reddit shows advertisers at ads.reddit.com/inspiration — and returns every matching ad as a structured JSON row: creative content, advertiser identity, and campaign classification. No Reddit account or login is required; the Actor opens its own anonymous session automatically. It's built for marketers, competitive-intelligence teams, agencies and AI/ad-tech engineers who need real Reddit ad creative in a machine-readable form instead of screenshots.
What Reddit ad data is publicly available to scrape?
Reddit's ad inspiration gallery shows creative content and campaign metadata for any advertiser to any anonymous visitor — no Reddit Ads account is required to browse it.
| Data category | Publicly available (no account) | Restricted (Reddit advertiser account) |
|---|---|---|
| Ad headline & body copy | ✅ | |
| Creative media (image / video / carousel assets, thumbnails) | ✅ | |
| Advertiser display name & Reddit profile ID | ✅ | |
| Industry, budget tier & campaign objective tags | ✅ | |
| Ad placement (feed, comments page) | ✅ | |
| Underlying Reddit post link | ✅ | |
| Full ad inventory beyond Reddit's public sample | ✅ | |
| Performance metrics (impressions, spend, CTR) | ✅ (not exposed in the public gallery at all) |
Reddit Ads Scraper only returns publicly visible data — what any visitor to Reddit's ad inspiration gallery sees. Nothing behind a login wall.
What data can I extract with Reddit Ads Scraper?
Every row combines creative content, advertiser identity, campaign classification and collection metadata for one ad.
Ad identity & post fields
| Field | Description |
|---|---|
id | Stable unique ad identifier. |
headline | Ad headline / title text. |
body | Ad body copy (often empty on image/video/carousel ads). |
type | Raw creative format Reddit returns — IMAGE, VIDEO, CAROUSEL or TEXT. |
post_url | Link to the underlying Reddit post the ad runs on. |
redditPostId | The Reddit post fullname behind the ad (e.g. t3_1cdt7o6). |
created_at | ISO timestamp the underlying ad post was created. |
Targeting & classification fields
| Field | Description |
|---|---|
industry | Advertiser's declared industry, e.g. TECH_B2C, RETAIL_AND_ECOMMERCE. |
budget_category | Spend tier — LOW, MEDIUM or HIGH. |
objective | Campaign objective Reddit's system reports, e.g. CONVERSIONS, CLICKS, IMPRESSIONS. |
placements | Array of where the ad runs, e.g. ["FEED", "COMMENTS_PAGE"]. |
allow_comments | Boolean — whether the advertiser allows comments on the ad's underlying Reddit post. |
Creative, advertiser & collection metadata
| Field | Description |
|---|---|
thumbnail_url | Thumbnail image URL for the creative. |
content | Array of creative slides, each with media_url, destination_url, display_url, call_to_action, caption (carousel caption text, often null). |
profile_id | Advertiser's Reddit profile ID (e.g. t2_td6ozens). |
profile_name | Advertiser's Reddit username. |
profile_image_url | Advertiser's avatar image URL. |
accessMode | How this row was collected — anonymous_sample for the normal, no-login public gallery mode. |
scrapedAt | ISO timestamp of when this row was collected. |
🤖 Add-on: Need more Reddit data?
If you need what's happening around an ad rather than the ad itself, pair this Actor with Reddit Scraper from the same account — it pulls posts, comments, users and subreddit listings from any Reddit URL or keyword, so you can see how a brand's organic presence compares to its paid activity.
How does Reddit Ads Scraper differ from the official Reddit Ads API?
Reddit does publish an official Reddit Ads API for advertisers, but as of 15 Aug 2026 its documented OAuth 2.0 scopes and account-role model restrict every request to ad accounts the calling app has explicitly been granted access to — it is a campaign-management API for your own account, not a way to browse other advertisers' creative.
| Feature | Reddit Ads API (official) | Reddit Ads Scraper |
|---|---|---|
| Data scope | Campaigns and creatives for ad accounts you've been granted a role on | Any advertiser's publicly listed creative in Reddit's public ad inspiration gallery |
| Competitor visibility | Not supported — cross-account access is blocked by OAuth scopes and account roles | This is the entire point — see what other companies are running |
| Access requirement | OAuth 2.0 app registration plus an authorized role on the target Reddit Ads account | None — no account, no API key |
| Setup | Register a developer app, get it authorized on an ads account, implement OAuth token handling | Provide a keyword (or none) and press Start |
| Output | Your own campaign objects | One structured JSON row per ad, ready for a dataset export |
Use the official Reddit Ads API when you're managing and reporting on campaigns inside your own Reddit Ads account. Use Reddit Ads Scraper when you need to see what other advertisers are running.
How to use Reddit Ads Scraper
Run it from the Apify Console — no code required to get your first results.
- Open Reddit Ads Scraper on the Apify Store and click Try for free (or find it in your Console if you already have it saved).
- Add one or more search keywords to
queries— or leave it empty to pull the whole public ad gallery. - Optionally narrow the results with
industry,budgetCategory,postType,placementsandobjectiveType, and setmaxItems(up to 30 per keyword). - Click Start.
- Watch ads land in the Output tab in real time, then export as JSON, CSV, Excel, HTML or XML once the run finishes.
How to scale to bulk ad extraction
queries is a list input (the stringList editor with an Add item button) — queue as many keywords as you want in a single run instead of starting one run per keyword. Every ad is de-duplicated by its id across the whole run, so the same ad matched by two different keywords is only written once. Each keyword's results are still capped individually at maxItems.
What can you do with Reddit ad data?
- 📊 Competitive intelligence analysts monitoring a category track
headline,bodyandobjectiveacross ads identified byprofile_nameto see which messaging angles rivals are testing on Reddit right now. - 🎨 Creative / performance marketers building a swipe file pull
content(media, destination and call-to-action URLs) grouped bytypeto catalogue which image, video and carousel formats are currently running. - 🕵️ Market researchers segment activity by
industryandbudget_categoryto see which spend tiers are most active in a given vertical. - 🧾 Agencies compiling client decks export
placementsandobjectivealongsidecreated_atto show which campaign goals and placements a brand favors over time. - 🤖 AI engineers feed
headline,bodyandcontentstraight into an LLM prompt or a RAG index to generate ad-copy variations or classify creative themes at scale — no HTML parsing required.
How does Reddit Ads Scraper handle rate limits and blocking?
Every run starts on a direct connection — no proxy. If Reddit blocks or throttles a request (HTTP 401 / 403 / 429, or the connection is refused), the Actor automatically escalates: first to an Apify Proxy datacenter group, then — if that's still blocked — to a residential group, which it then locks in for the rest of the run. On the residential tier it retries up to 3 times with an exponential backoff before giving up on that request. Transient server errors (408, 425, 500, 502, 503, 504) are retried up to 3 times with backoff on the same connection tier rather than triggering an escalation. If one keyword's search still fails after every tier and retry, that keyword is skipped with an error logged, and the run continues with the rest of the queries — nothing already collected is lost, since every row is pushed to the dataset the instant it's collected, not buffered until the run ends.
⬇️ Input
All fields are optional — running with no input at all pulls the entire public ad gallery.
| Parameter | Required | Type | Default / Constraints | Description |
|---|---|---|---|---|
queries | No | array of strings | — | Keywords to search the Reddit Ads library. Add multiple with Add item for bulk runs. Leave empty to pull the entire public ad catalog. |
industry | No | string (enum) | default "" | Keep only ads from one industry. "" = any industry. |
budgetCategory | No | string (enum) | default "" | Keep only ads in one spend tier. "" = any budget. |
postType | No | string (enum) | default "" | Keep only one creative format. "" = any format. |
placements | No | string (enum) | default "" | Keep only ads shown in one placement. "" = any placement. |
objectiveType | No | string (enum) | default "" | Keep only ads targeting one campaign objective. "" = any objective. |
maxItems | No | integer | default 5; min 1; max 30 | Max ads to collect per keyword, up to Reddit's hard ceiling of 30. |
proxyConfiguration | No | object | default {"useApifyProxy": false} | Optional proxy pre-selection. Runs without a proxy by default; the Actor auto-escalates if Reddit slows it down. |
Enum values, exactly as published in the input schema:
industry | budgetCategory | postType | placements | objectiveType |
|---|---|---|---|---|
"" — Any industry | "" — Any budget | "" — Any format | "" — Any placement | "" — Any objective |
TECH_B2C | LOW | IMAGE | FEED | AWARENESS |
TECH_B2B | MEDIUM | VIDEO | COMMENTS_PAGE | CONVERSIONS |
EDUCATION | HIGH | CAROUSEL | CONVERSATION ⚠️ unconfirmed — accepted but never observed matching real ads | APP_INSTALLS |
ENTERTAINMENT | FREE_FORM — sent to Reddit internally as TEXT, which is also what the output type field shows | TRAFFIC | ||
HEALTH_AND_BEAUTY | VIDEO_VIEWABLE_IMPRESSIONS | |||
GAMING | ||||
EMPLOYMENT | ||||
RETAIL_AND_ECOMMERCE | ||||
AUTO | ||||
FINANCIAL_SERVICES | ||||
TRAVEL | ||||
REAL_ESTATE | ||||
GAMBLING_AND_FANTASY_SPORTS | ||||
POLITICS_AND_GOVERNMENT | ||||
CONSUMER_PACKAGED_GOODS | ||||
OTHER |
⚠️ Real constraint: maxItems cannot exceed 30 because Reddit's public ad gallery itself exposes at most ~30 ads to anonymous visitors. The Actor always returns as many ads as the gallery currently holds for that keyword/filter combination — fewer if the gallery has fewer.
Example input
{"queries": ["ai", "crypto"],"industry": "TECH_B2C","budgetCategory": "HIGH","postType": "VIDEO","placements": "","objectiveType": "","maxItems": 30,"proxyConfiguration": { "useApifyProxy": false }}
⬆️ Output
Each ad is written as one row to the Actor's dataset, live, as soon as it's collected — with a stable set of keys on every row regardless of how many filters were applied. Export the dataset as JSON, CSV, Excel, HTML or XML from the Output tab, or pull it via the Apify API. Each pushed row is billed under the row_result charged event (Pay-Per-Event pricing) — exact per-event pricing is shown on the Actor's Store page.
Example output
{"id": "5f6eb24cc504b6d04b6e121a701c03b4","budget_category": "MEDIUM","industry": "TECH_B2C","placements": ["FEED", "COMMENTS_PAGE"],"objective": "CONVERSIONS","created_at": "2024-02-27T19:25:25+00:00","headline": "As Seen on Shark Tank","body": "","post_url": "https://www.reddit.com/user/RIPDebt/comments/1b1ki15/as_seen_on_shark_tank/","type": "IMAGE","thumbnail_url": "https://a.thumbs.redditmedia.com/MpMEvF...jpg","profile_id": "t2_td6ozens","profile_name": "u_RIPDebt","profile_image_url": "https://www.redditstatic.com/avatars/defaults/v2/avatar_default_0.png","content": [{"media_url": "https://external-preview.redd.it/vaHsih...jpg","destination_url": "https://changed.test-app.link/pkHAhbWqxHb","display_url": "changed.test-app.link","call_to_action": "Learn More","caption": null}],"allow_comments": true,"redditPostId": "t3_1b1ki15","accessMode": "anonymous_sample","scrapedAt": "2026-08-13T12:00:00+00:00"}
How does it work?
Reddit Ads Scraper opens an anonymous guest session against Reddit's ad platform (ads.reddit.com / business.reddit.com) the same way a browser visiting the public inspiration gallery would, using a browser-grade TLS client first and falling back to a standard HTTP client if that's unavailable. It then POSTs your keyword and filters to Reddit's ad-search endpoint and reads back the matching creatives. The full public gallery (Reddit's fixed sample of roughly 30 ads) is fetched once per run and cached, then re-ranked against each keyword so keyword matches come first and the rest of the gallery tops up any short results. Only data that's already publicly visible in the gallery is ever returned, and the output schema — the same fixed set of keys shown above — stays stable across runs regardless of what Reddit's own UI looks like.
Integrations
Reddit Ads Scraper runs on the Apify platform, so it works with anything that can call the Apify API.
Calling Reddit Ads Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("<your-username>/reddit-ads-scraper").call(run_input={"queries": ["ai"], "maxItems": 30})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["headline"], item["profile_name"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request against the Apify API.
No-code tools (n8n, Make)
In n8n, use an HTTP Request node set to POST against the Actor's run-sync-get-dataset-items endpoint with your input as the JSON body, and the dataset rows come back directly in the node's output. In Make, an HTTP module pointed at the same endpoint works the same way — no custom code needed on either side.
Is it legal to scrape Reddit ads?
Yes — scraping publicly available ad data is generally lawful; Reddit Ads Scraper only collects what Reddit's ad inspiration gallery already shows to any anonymous visitor. The rows this Actor returns are advertising and campaign content — headlines, creative assets, budget tiers, objectives — which is business/product data, not a personal-data record about a private individual, so GDPR's personal-data framework does not attach to it in the way it would for a scraper of private profiles. What does apply is Reddit's own Terms of Service governing automated access, and ordinary database/copyright rights an advertiser or Reddit may hold over creative assets and the compiled dataset. Advertiser usernames (profile_name, profile_id) are public account identifiers, not private contact details. Consult legal counsel if your use case involves bulk storage or redistribution of this data.
Frequently asked questions
What Reddit ad fields does Reddit Ads Scraper return?
The top fields on every row are headline, body, type, industry and profile_name, alongside budget tier, objective, placements and full creative content — see the data fields section above for the complete list.
Does Reddit Ads Scraper require a Reddit account or login?
No. The Actor opens its own anonymous session against Reddit's public ad gallery — you don't provide any Reddit credentials.
How many ads can I extract in one run?
Up to 30 ads per keyword (maxItems, capped at Reddit's own public-gallery ceiling of ~30). Queue multiple keywords in queries to collect more ads in one run — results are de-duplicated by ad id across the whole run.
What happens if a keyword matches no ads?
The Actor tops up short keyword results with the rest of the cached public gallery, so a keyword rarely returns literally zero rows unless the whole request failed. If a search request itself fails after every retry and proxy tier, the Actor logs the error, skips that keyword, and continues with the rest of the queries — nothing already collected is lost.
Can I scrape ads for multiple keywords at once?
Yes — queries accepts a list of keywords in a single run (use Add item in the Console, or pass an array via the API).
Does Reddit Ads Scraper work with Claude, ChatGPT and other AI agent tools?
It's callable as a standard HTTP endpoint through the Apify API, so any agent framework that can make an HTTP request — including custom Claude or ChatGPT tool integrations — can call it and read back JSON.
Are the placements and postType filter values guaranteed to match Reddit exactly?
Mostly, with one documented exception: placements=CONVERSATION is accepted by the input schema but has never been observed matching a real ad. And selecting postType=FREE_FORM sends Reddit's real internal value TEXT, which is also what you'll see in the output type field — not FREE_FORM.
Does Reddit Ads Scraper return data in a format LLMs can use directly?
Yes. Every row is typed, normalized JSON with consistent field names across runs — no HTML parsing or selectors needed. Pass it straight to an LLM prompt, index it into a vector store, or feed it to an agent tool.
What happens when Reddit changes its ad gallery layout or API?
The Actor is maintained and its output schema is designed to stay stable across Reddit UI changes. No specific update turnaround time is published or promised.
Can I use Reddit Ads Scraper without managing proxies or browser infrastructure?
Yes. It runs proxy-free by default and only escalates to an Apify Proxy datacenter, then residential, tier automatically if Reddit throttles the connection — you don't configure or manage anything unless you choose to pre-select a proxy.
Which Reddit ad fields work best for AI training data and RAG indexing?
For RAG, index the high-information text fields: headline, body and the caption/call_to_action values inside content. For structured training features, industry, budget_category, objective and placements are consistent enum-style fields across every record.
Related scrapers
| Scraper | What it extracts |
|---|---|
| Reddit Scraper | Public Reddit posts, comments, users and subreddit listings from any Reddit URL or keyword. |
| LinkedIn Ads Scraper | Ads from the public LinkedIn Ad Library — ad copy, format, creative images and paying entity. |
Your feedback
Found a bug, or a field that doesn't match what Reddit's gallery actually shows? Let us know through the Actor's Issues tab on Apify, or leave a message on the Store listing — reports like this keep the mapping accurate as Reddit's ad gallery changes.