Reddit Ads Scraper — Full Catalog Access avatar

Reddit Ads Scraper — Full Catalog Access

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Reddit Ads Scraper — Full Catalog Access

Reddit Ads Scraper — Full Catalog Access

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.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

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: 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 identityprofile_name, profile_id and profile_image_url on every row, no extra request needed
  • 🏭 Five real filtersindustry, budgetCategory, postType, placements, objectiveType — fully honored in authenticated mode, sent-but-not-guaranteed in anonymous mode
  • 🧾 Honest access disclosureaccessMode, 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:

FieldExample valueUse 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_commentstrueWhether 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
filtersAppliedfalseWhether your filters were actually honored for this row
catalogSize30Size 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 (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

ParameterRequiredTypeDescriptionExample value
searchKeywordsNoarraySearch 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"]
queriesNoarrayLegacy alias for searchKeywords, kept for backward compatibility.[]
industryNostring (enum)Keep only ads from a specific industry. "" = any industry. Fully honored only in authenticated mode."TECH_B2C"
budgetCategoryNostring (enum)Keep only ads in a given spend tier. "" = any budget. Fully honored only in authenticated mode."HIGH"
postTypeNostring (enum)Keep only a specific creative format. "" = any format. Fully honored only in authenticated mode."VIDEO"
placementsNostring (enum)Keep only ads in a specific placement. "" = any placement. Fully honored only in authenticated mode."FEED"
objectiveTypeNostring (enum)Keep only ads running toward a specific objective. "" = any objective. Fully honored only in authenticated mode."CONVERSIONS"
maxAdsNointegerHow many ads to collect per keyword. Minimum 1, maximum 30 (Reddit's own ceiling for anonymous visitors).30
maxItemsNointegerLegacy alias for maxAds, default 5, minimum 1, maximum 30. maxAds wins if both are set.5
redditAdsSessionNostringOptional 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=..."
includeAccessInfoNobooleanDefault true. Adds accessMode, filtersApplied and catalogSize to every row.true
proxyConfigurationNoobjectDefault {"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.

{
"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.

{
"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.

{ "searchKeywords": [], "maxAds": 30 }
{ "searchKeywords": ["ai", "fitness", "crypto"], "industry": "GAMING", "postType": "VIDEO" }
{ "searchKeywords": ["saas"], "budgetCategory": "HIGH", "objectiveType": "CONVERSIONS", "redditAdsSession": "token_v2=...; loid=..." }

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

Scraper nameWhat it extracts
Reddit Scraper — User Profiles and Subreddit ActivityReddit user profiles and subreddit activity data
LinkedIn Ads Scraper — Full Advertiser Ad HistoryFull advertiser ad history from LinkedIn's ad library
Facebook Reviews Scraper — Headlines, Tags and Reviewer DetailFacebook business reviews with headlines, tags and reviewer detail
Instagram Post Details Scraper — With Engagement DataInstagram 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

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.

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.