
Instagram Reel Scraper
scrape.ly/store/echofield/instagram-reel-scraperSocial mediaVideos
1 monthly user

Extract public Reddit posts and comment threads from searches, subreddits, user profiles, and post URLs. Results include text, scores, timestamps, and media.
Pull public Reddit posts and comment threads into clean, structured rows. Search by keyword, read a subreddit, open a user profile, or paste links you already have. No Reddit login, no API key, and no cookies. A 10-post search finishes in about 10 seconds.
Each row carries the title, body, author, score, vote ratio, comment count, timestamps, flair, and media links, so you can drop it straight into a spreadsheet, a database, or an analysis pipeline.
| Field | Type | What it does |
|---|---|---|
queries | array | Phrases to search across public posts. Ignored when urls is set. |
subredditName | string | A community to read, without the r/ prefix, for example python. |
urls | array | Post, comment, subreddit, user, or search links. When set, queries is ignored. |
maxPosts | integer | Posts to save for each search, subreddit, profile, or URL. Default 10. |
scrapeComments | boolean | Also save comments from each post. Each comment is its own result. |
maxComments | integer | Comment cap per post. Default 20. |
sort / timeframe | string | Search ranking (relevance, hot, top, new, comments) and window (all, year, month, week, day, hour). |
subredditSort / subredditTimeframe | string | The same options for a subreddit listing. |
subredditKeywords | array | Search words inside the named subreddit. |
dateFrom / dateTo | string | Keep posts in a UTC date window (YYYY-MM-DD). |
commentDateFrom / commentDateTo | string | The same window for comments. |
includeNsfw | boolean | Keep posts marked NSFW. Off by default. |
strictSearch | boolean | Send the query in quotes. |
strictTokenFilter | boolean | Keep a post only if every query word appears in its title, body, or URL. |
maximize_coverage | boolean | Repeat the search across a few sorts and in the subreddits that appeared most often, then drop duplicates. |
sentiment_analysis / content_analysis | boolean | Add sentiment labels and topic labels. |
proxyConfiguration | object | Datacenter proxy by default. Use residential only if a listing refuses it. |
Search example:
{
"queries": ["Cheesecake"],
"maxPosts": 10,
"sort": "new",
"timeframe": "month",
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
Subreddit example:
{ "subredditName": "python", "subredditSort": "hot", "maxPosts": 10 }
One thread with a short comment sample:
{
"urls": ["https://www.reddit.com/r/Python/comments/1wxjay5/showcase_thread/"],
"maxPosts": 1,
"scrapeComments": true,
"maxComments": 8
}
Posts have kind: "post". Comments have kind: "comment" and point back with postId, postUrl, and parentId.
| Field | Description |
|---|---|
id, kind, query | Reddit id, post or comment, and the search that found it. |
title, body, author | Text content and author name. |
score, upvote_ratio, num_comments | Votes and discussion size. |
subreddit, flair, subreddit_subscribers | Community details. |
created_utc, age_hours, retrieved_at | Timestamps (ISO, UTC). |
url, permalink, canonical_url, old_reddit_url | Links to the post. |
url_overridden_by_dest, media_assets, gallery_images, thumbnail | Outbound links and image URLs. |
media_type, has_media, gallery_count | Media summary. |
over_18, locked, archived, pinned, spoiler, is_video, is_gallery | Post flags. |
engagement_total, is_high_engagement, score_per_hour, comments_per_hour | Derived engagement numbers. |
sentiment_*, topic fields | Present only when the enrichment options are on. |
Real item from a test run (trimmed):
{
"kind": "post",
"query": "Cheesecake",
"id": "1jpnv4z",
"title": "Is my cheesecake undercooked?",
"author": "jane_doe",
"score": 11608,
"upvote_ratio": 0.97,
"num_comments": 723,
"subreddit": "Baking",
"created_utc": "2025-04-02T12:55:07.000Z",
"url": "https://www.reddit.com/r/Baking/comments/1jpnv4z/is_my_cheesecake_undercooked/",
"permalink": "/r/Baking/comments/1jpnv4z/is_my_cheesecake_undercooked/",
"flair": "No Recipe",
"over_18": false,
"is_gallery": true,
"subreddit_subscribers": 4660844,
"url_overridden_by_dest": "https://www.reddit.com/gallery/1jpnv4z",
"media_type": "gallery",
"gallery_count": 5,
"retrieved_at": "2026-10-14T06:11:28.601Z"
}
$1.00 per 1,000 results, which is $0.001 per result. A result is one post or one comment saved to the dataset.
Worked example: 1,000 posts cost $1.00 in result fees. Platform usage (compute, proxy traffic, storage) is billed separately at standard rates. In our billing test, a 10-post search cost about $0.0103 in total: $0.01 in result fees plus about $0.0003 of platform usage at the default 256 MB. Sentiment labels, topic labels, and extra search coverage add no separate fee, though each saved row still counts as a result.
Is it legal to scrape Reddit? The actor reads publicly visible listings only. You are responsible for using the data in line with Reddit's terms and the privacy rules that apply to you.
Do I need a Reddit login or my own proxy? No to both. Datacenter proxy is built in and is the default.
How many results can I get? As many as Reddit lists: about 1,000 posts per listing, more with Expand each search or several inputs, and every comment Reddit returns for a post. See Limits below.
Can I scrape comments without the posts?
Yes. Turn on scrapeComments and set maxComments. A user comments URL (/user/name/comments) saves comments directly, up to the post limit.
What if a field is empty?
Reddit does not send every field for every post, so some values come back as null. An empty search finishes successfully with an empty dataset.
Can I schedule it or call it from code? Yes. Use schedules in the console, or start runs and read the dataset through the API.
Moving from another Reddit scraper? Field names follow the common Reddit scraper layout, so most integrations need only small changes.
includeNsfw is on.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
queriesarrayOptionalSearch queries
Phrases to search across public Reddit posts. Ignored when direct URLs are set.
subredditNamestringOptionalSubreddit
Community to read, without the r/ prefix. Example: python. Leave empty to use search or URLs instead.
urlsarrayOptionalReddit URLs
Post, comment, subreddit, user, or search links. When this list is set, search queries are ignored.
maxPostsintegerRequireddefault 10Maximum posts per input
How many posts to save for each search, subreddit, profile, or URL. Reddit stops one listing at about 1,000 posts; turn on Expand each search, or add more inputs, to get more.
Narrow posts by date, adult content, and how closely they must match the query.
dateFromstringOptionalPosts from
Keep posts created on or after this date (UTC).
dateTostringOptionalPosts until
Keep posts created on or before this date (UTC).
commentDateFromstringOptionalComments from
Keep comments created on or after this date when comment collection is on.
commentDateTostringOptionalComments until
Keep comments created on or before this date when comment collection is on.
includeNsfwbooleanOptionaldefault falseInclude NSFW posts
Keep posts Reddit marks as NSFW or 18+.
strictSearchbooleanOptionaldefault falseQuote the search query
Send the query to Reddit in quotes so the match stays closer to those words.
strictTokenFilterbooleanOptionaldefault falseRequire every query word
Drop posts whose title, body, and URL do not contain every word in the query.
Comment collection is off unless you turn it on. It adds one result per comment.
scrapeCommentsbooleanOptionaldefault falseInclude comments
Also save comments from each post. Each comment is its own result.
maxCommentsintegerOptionaldefault 20Maximum comments per post
Cap comments saved from each post.
Sort and time window for search and subreddit listings.
sortenumOptionaldefault "relevance"Search sort
How Reddit ranks search results.
timeframeenumOptionaldefault "all"Search time window
Limit search results to a Reddit time window.
subredditKeywordsarrayOptionalKeywords inside the subreddit
Optional words to search inside the subreddit named above. Has no effect without a subreddit.
subredditSortenumOptionaldefault "hot"Subreddit sort
Ranking for a subreddit listing. Relevance and most-comments apply when keywords are set. A bare subreddit uses Hot when the choice is not a listing sort.
subredditTimeframeenumOptionaldefault "all"Subreddit time window
Time window for Top listings and for keyword search inside a subreddit.
forceSortNewForTimeFilteredRunsbooleanOptionaldefault falseSort by newest when a date filter is set
Walk newest posts first so a date window is covered more reliably.
Optional extra recall, sentiment labels, and topic labels. All are off by default.
maximize_coveragebooleanOptionaldefault falseExpand each search
Also try a few extra sorts, then the same query in the subreddits that showed up most often. Duplicates are dropped. The post limit still applies.
sentiment_analysisbooleanOptionaldefault falseAdd sentiment labels
Score each post title and body, and each comment body, with the AFINN-165 word list. Adds sentiment_score, sentiment_label, sentiment_confidence, and sentiment_score_normalized.
content_analysisbooleanOptionaldefault falseAdd topic labels
Label each post from its title, body, subreddit, and flair using a fixed keyword list. Comments copy the parent post label.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies are the default. Use residential only when a listing refuses the datacenter pool.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| kind | string | Record type |
| title | string | Title |
| author | string | Author |
| subreddit | string | Subreddit |
| score | integer | Score |
| num_comments | integer | Comments |
| created_utc | string | Created |
| url | string | URL |
| body | string | Body |
| query | string | Input |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Result | One Reddit post or comment saved to the dataset. | $0.001 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('echofield/reddit-scraper').call({
"queries": [
"Cheesecake"
],
"subredditName": "python",
"urls": [
"https://www.reddit.com/r/python/hot/"
],
"maxPosts": 10,
"maxComments": 20,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run echofield/reddit-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=echofield/reddit-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Reddit keyword search sorted by relevance.
Highest-voted posts from the past year.
Latest posts from a subreddit.
Posts from a pasted subreddit link.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.