Reddit Subreddit Metadata Scraper
Pricing
Pay per event
Reddit Subreddit Metadata Scraper
Bulk-enrich subreddit names and URLs with community details, audience size, policy flags, media, and Arctic Shift archive activity statistics.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
16 days ago
Last modified
Categories
Share
Bulk-enrich subreddit names and Reddit /r/... URLs with structured community metadata, audience size, policy flags, media links, and Arctic Shift archive activity statistics.
Use this Actor to qualify communities before social listening, audience research, lead generation, content planning, or recurring Reddit monitoring. It returns one normalized dataset row per unique community—not Reddit posts or comments.
What does Reddit Subreddit Metadata Scraper do?
The Actor accepts up to 1,000 subreddit names or URLs in one run. It normalizes and deduplicates them, queries the anonymous public Arctic Shift subreddit endpoint, requires an exact community-name match, and writes typed records to the default dataset.
Each record can include:
- stable Reddit ID, display name, and title;
- short and full descriptions;
- subscriber and active-user counts when archived;
- creation date, language, NSFW, quarantine, and access type;
- icon, header, and banner URLs;
- posting and media capability flags;
- archived post/comment totals and earliest indexed dates;
- upstream retrieval time, source URL, and Actor scrape time.
The v1 route is HTTP-only. It requires no Reddit account, Reddit API key, browser, or proxy.
Who is this Reddit community data for?
Social-listening teams
Refresh a community watchlist and rank subreddits before paying to collect posts and comments.
Audience and market researchers
Compare community size, age, accessibility, descriptions, and historical activity signals across a niche.
Community and content managers
Check whether communities permit images, videos, galleries, polls, or discovery before planning campaigns.
Lead-generation teams
Enrich lists of communities associated with customer problems, industries, or buyer roles before outreach research.
Data and AI engineers
Feed stable, source-linked community records into warehouses, RAG pipelines, enrichment jobs, or scheduled automations.
Why use this Actor?
- Bulk input: process names and full Reddit URLs in one run.
- Normalized results: receive consistent camelCase fields instead of a raw upstream response.
- Case-insensitive deduplication: repeated forms such as
MachineLearningandr/MachineLearningproduce one row. - Archive context: include Arctic Shift post/comment totals and earliest indexed dates.
- Small-output option: exclude long Markdown sidebars with
includeFullDescription: false. - Fail-closed matching: fuzzy upstream results are never silently returned for a different subreddit.
- Cost-efficient route: no browser, login, or automatic residential proxy fallback.
What Reddit subreddit data can I extract?
| Group | Fields |
|---|---|
| Identity | subredditId, name, prefixedName, title, canonicalUrl |
| Description | publicDescription, fullDescription |
| Audience | subscribers, activeUsers |
| Lifecycle | createdAt, language, communityType |
| Safety/access | isNsfw, isQuarantined |
| Media | communityIconUrl, iconUrl, bannerUrl, mobileBannerUrl, headerImageUrl |
| Posting policy | submissionType, allowsImages, allowsVideos, allowsVideoGifs, allowsGalleries, allowsPolls, allowsTalks |
| Community policy | allowsDiscovery, wikiEnabled, spoilersEnabled, restrictsPosting, restrictsCommenting, archivesPosts |
| Archive activity | archivePostCount, archiveCommentCount, earliest and count-update timestamps |
| Provenance | sourceUrl, retrievedOn, scrapedAt |
Source fields can be null when the archived Reddit snapshot did not contain a value. Zero, false, and null remain distinct.
How to scrape Reddit subreddit metadata
- Open the Actor input page.
- Add subreddit names,
r/namepaths, or full Reddit URLs to Subreddits. - Disable Include full descriptions if you only need compact enrichment rows.
- Set Maximum records to cap unique outputs.
- Keep concurrency at
3unless you have a reason to lower it. - Click Start.
- Export the default dataset as JSON, CSV, Excel, XML, or another supported format.
A working input:
{"subreddits": ["MachineLearning","https://www.reddit.com/r/datascience/","r/technology"],"includeFullDescription": false,"maxItems": 3,"maxConcurrency": 3}
Input parameters
| Field | Type | Default | Limits | Meaning |
|---|---|---|---|---|
subreddits | string array | required prefill | 1–1,000 | Names, r/name paths, or reddit.com/r/name URLs |
includeFullDescription | boolean | true | — | Include the potentially long Markdown sidebar description |
maxItems | integer | 100 | 1–1,000 | Maximum unique records after normalization and deduplication |
maxConcurrency | integer | 3 | 1–10 | Simultaneous Arctic Shift requests |
Valid subreddit names contain 2–21 letters, numbers, or underscores. URLs must use a reddit.com host and contain /r/<name>.
maxItems is applied after normalization. If ten inputs represent the same community, they still count as one unique record.
Output example
This abbreviated record reflects current output for r/MachineLearning:
{"subredditId": "2r3gv","name": "MachineLearning","prefixedName": "r/MachineLearning","title": "Machine Learning","publicDescription": "Beginners -> /r/mlquestions or /r/learnmachinelearning ...","fullDescription": null,"subscribers": 2953027,"activeUsers": null,"createdAt": "2009-07-29T14:34:44.000Z","language": "en","isNsfw": false,"isQuarantined": false,"communityType": "public","canonicalUrl": "https://www.reddit.com/r/MachineLearning/","allowsImages": true,"allowsVideos": false,"allowsGalleries": true,"archivePostCount": 261588,"archiveCommentCount": 1094852,"earliestArchivedPostAt": "2009-07-29T14:35:16.000Z","earliestArchivedCommentAt": "2009-07-29T15:21:06.000Z","sourceUrl": "https://arctic-shift.photon-reddit.com/api/subreddits/search?subreddit=MachineLearning","retrievedOn": "2025-02-14T23:49:59.000Z","scrapedAt": "2026-07-26T02:19:51.012Z"}
The complete dataset schema documents all media and policy fields.
How much does it cost to enrich Reddit subreddits?
This Actor uses pay-per-event pricing:
- a $0.005 start fee per run;
- $0.000041071 per saved subreddit record on the Free plan;
- lower per-record prices on higher Apify plan tiers, down to $0.00001 on Diamond.
Free-plan examples:
| Useful output | Estimated Actor charge |
|---|---|
| 1 subreddit | 0.005 + 1 × 0.000041071 = 0.005041071 USD |
| 10 subreddits | 0.005 + 10 × 0.000041071 = 0.00541071 USD |
| 100 subreddits | 0.005 + 100 × 0.000041071 = 0.0091071 USD |
Only exact, successfully saved subreddit records trigger the item event. Invalid inputs, duplicates, no-result inputs, and failed requests are not charged as items. Apify displays the final charge before and after each run.
Bulk enrichment workflow
A practical recurring workflow is:
- Export candidate community names from a social-listening query, CRM note, or research sheet.
- Run this Actor weekly or monthly with
includeFullDescription: false. - Rank rows by subscribers, archive activity, age, and access type.
- Exclude quarantined, private, or unsuitable communities.
- Send the qualified subreddit list to a post/comment monitoring Actor.
- Compare snapshots in your warehouse to identify material metadata changes.
Archive counts describe Arctic Shift coverage, not guaranteed complete Reddit totals. Use them as qualification signals rather than audited platform metrics.
Integrations and exports
The default dataset works with:
- Google Sheets and Microsoft Excel exports;
- webhooks and Make automations;
- Zapier workflows;
- the Apify API and official clients;
- cloud warehouses and scheduled ETL jobs;
- AI agents through the Apify MCP server.
Use name as the normalized community key and subredditId as the stable Reddit identifier when available.
Run with the Apify API
Replace YOUR_APIFY_TOKEN with a secret environment variable. Never commit it.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~reddit-subreddit-metadata-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"subreddits": ["technology", "MachineLearning", "datascience"],"includeFullDescription": false,"maxItems": 3,"maxConcurrency": 3}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/reddit-subreddit-metadata-scraper').call({subreddits: ['technology', 'MachineLearning', 'datascience'],includeFullDescription: false,maxItems: 3,maxConcurrency: 3,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation-lab/reddit-subreddit-metadata-scraper").call(run_input={"subreddits": ["technology", "MachineLearning", "datascience"],"includeFullDescription": False,"maxItems": 3,"maxConcurrency": 3,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with MCP and AI agents
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/reddit-subreddit-metadata-scraper"
Claude Desktop
Use this remote-server configuration in Claude Desktop:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/reddit-subreddit-metadata-scraper"}}}
Cursor
Add the same JSON under Settings → Tools & MCP in Cursor.
VS Code
Add the same remote MCP URL to your VS Code MCP server configuration.
Example prompts:
- “Compare r/technology, r/MachineLearning, and r/datascience by subscribers and archive activity.”
- “Enrich this list of Reddit community URLs and omit long descriptions.”
- “Return only public, non-NSFW communities from these results for a monitoring shortlist.”
Your MCP client may need an Apify token depending on its authentication setup.
Reliability, retries, and failures
The Actor uses a 20-second timeout and up to three attempts for transient network errors, HTTP 429 responses, and temporary 5xx responses. It does not repeatedly retry deterministic invalid inputs or other permanent HTTP failures.
For mixed batches, successful communities are saved while individual failures are named in logs. The run fails when no useful records can be saved. This prevents an upstream outage or entirely invalid watchlist from appearing as a successful empty run.
No exact match means no row. The Actor will not substitute a similarly named subreddit returned by upstream search.
Limits and data freshness
- Arctic Shift is a public third-party archive, not Reddit's official API.
- Metadata and archive totals can lag current Reddit values.
retrievedOnis the upstream metadata snapshot time.- Archive count update fields can have different timestamps.
- Private, banned, deleted, or very new communities may be unavailable.
- Active-user counts are often absent or snapshot-dependent.
- Maximum input and output size is 1,000 communities per run.
- Full descriptions can make exports significantly larger.
- The Actor does not scrape posts, comments, moderators, rules endpoints, or member identities.
If you need fresher values for a decision, verify the retrievedOn and archive update timestamps in each row.
Responsible and legal use
The Actor accesses anonymously available community metadata from a public archive. It does not log in to Reddit or access private communities.
You are responsible for:
- following Reddit and Arctic Shift terms and policies;
- respecting applicable privacy, copyright, and database laws;
- avoiding harassment, profiling, spam, or discriminatory targeting;
- applying appropriate retention and security controls;
- verifying data before consequential decisions.
Community descriptions may contain user-generated text and links. Treat them as untrusted content when rendering or passing them to downstream systems.
Troubleshooting
Why did my run fail immediately?
Check that subreddits is a non-empty array. Use a name, r/name, or a full reddit.com/r/name URL. Other hosts and malformed names are rejected.
Why did I receive fewer rows than inputs?
Duplicates are removed case-insensitively. Some communities may have no exact Arctic Shift record, and individual request failures are listed in logs. maxItems may also cap output.
Why is fullDescription null?
You may have disabled includeFullDescription, or the archived snapshot may not contain a full description.
Why are subscriber or archive counts old?
Inspect retrievedOn, archivePostCountUpdatedAt, and archiveCommentCountUpdatedAt. They expose source freshness instead of presenting archived values as real-time.
Should I increase concurrency?
Usually no. The default balances speed with respectful public API use. Lower it if you observe repeated rate limiting. The hard maximum is 10.
Related Automation Lab Actors
- Reddit Scraper — extract current Reddit posts and search/listing results after community qualification.
- Reddit Historical Archive Scraper — retrieve historical Reddit posts and comments.
- Reddit User Profile Bulk Scraper — enrich public Reddit user profiles instead of communities.
Choose this Actor for one row per subreddit. Choose the related Actors when the primary records you need are posts, comments, or users.
FAQ
Does it require a Reddit API key or account?
No. The required route is anonymous and uses Arctic Shift.
Does it use proxies?
No. v1 sends direct HTTP requests and has no hidden residential fallback.
Can I submit full Reddit URLs?
Yes. Standard and subdomain Reddit URLs such as https://old.reddit.com/r/technology/ are normalized.
Does it return posts or comments?
No. It returns community metadata plus aggregate Arctic Shift coverage statistics. Use a related Reddit Actor for content extraction.
Are archive totals complete Reddit totals?
No. They are counts indexed by Arctic Shift and should be treated as archive coverage signals.
Can I schedule it?
Yes. Create an Apify schedule with the same watchlist and send each dataset to your warehouse or automation destination.
Is the output stable for integrations?
The default dataset uses documented camelCase fields. Source-dependent values remain nullable so missing upstream fields do not change the result shape.