Reddit Scraping
EN

HomeDocumentation

Documented archive queries for your replacement pipeline

Use both supported authentication headers, documented archive filters, UTC dates and bounded pagination; distinguish retrieval errors from successful empty pages.

Quick start

Send the request from your server and keep your API key private.

cURL
curl --fail-with-body \
  -H "Authorization: Bearer ${REDDIT_API_KEY}" \
  "https://api.redditscraping.com/v1/posts?subreddit=webscraping&limit=3"

API reference

↔ Scroll the table horizontally

API routes

MethodRouteParameters
GET/v1/searchq, subreddit, author, kind, from, to, min_score, limit, page
GET/v1/postsq, subreddit, author, kind, from, to, min_score, limit, page
GET/v1/commentsq, subreddit, author, kind, from, to, min_score, limit, page
GET/v1/itemid
GET/v1/subredditsprefix, limit
GET/v1/status—

Query parameters

ParameterValue / type / range
qtext
subredditkeyword
authorkeyword
kindpost | comment
fromISO date
toISO date
min_scoreinteger
limit1–100
page1–100
iditem ID
prefixsubreddit prefix

Choose the route and authenticate

Retrieval uses GET at https://api.redditscraping.com with X-API-Key: <key> or Authorization: Bearer <key>. Both headers are supported alternatives. Store the actual key on your server, away from public code. The account panel uses a separate Secure HttpOnly session cookie; that browser session does not replace the key header required by your application to retrieve archived content.

/v1/search searches posts and comments. /v1/posts and /v1/comments restrict results to their respective types. These routes accept q, subreddit, author, kind, from, to, min_score, limit and page. kind accepts post or comment, while the specialized route already fixes its own type. No route accepts a target web URL for crawling, and these search routes do not accept id as a filter.

/v1/item requires id and accepts no other query filters; it looks up one item, not an entire discussion. /v1/subreddits accepts only prefix and limit for community-name lookup, without globally exact counts guaranteed. Public /v1/status needs no key or credits. It describes the service statically and shows that the HTTP application responds, without probing search availability, account balance or payment history.

Validate filters and the returned records

q performs text search, not an arbitrary query language, browser operation or sentiment analysis. subreddit and author restrict the matching records. from and to use strict YYYY-MM-DD dates in UTC and filter created_utc, not archive ingestion time. The whole to day is included. Handle intraday comparisons locally using available record timestamps rather than passing hours to these date parameters.

min_score applies a numerical score threshold and never sorts the response. The server uses internal archive document order _doc, not a record identifier, ingestion timeline, chronology or relevance ranking. Set limit and page between 1 and 100. Each request returns one page with at most 100 records, and one query permits at most 100 pages. More pages do not prove full archive coverage.

A successful retrieval returns data, pagination and credits. The records in data are flat and can have variable or missing fields. Validate what your application requires before normalization; do not assume every item has usable text or relationship metadata. If parent_id and link_id appear, local grouping is possible, but they are not query filters and do not establish complete conversation trees.

Interpret totals and handle each outcome

Read pagination.total together with pagination.relation. eq means an exact query total, gte a lower bound, and unknown an unreliable or unavailable total that can be null. Unknown is not zero. An exact total does not prove that you downloaded all matches. Smaller date windows can organize work but do not guarantee exhaustive retrieval, unique records or repeat-query stability.

HTTP 400 indicates invalid parameters, 401 missing or invalid authentication, 402 insufficient credits and 429 rate limiting. Invalid requests do not debit credits, while upstream failures refund reservations. Each successful retrieval costs one credit, even when data is empty. If your client loses the response after server success, the charge may already have occurred; a successful repeat costs another credit.

Keep original responses before updating local progress. A client wrapper can separate header configuration, request construction, validation and error handling without concealing page boundaries or billing outcomes. Use the account panel for balances and invoices rather than polling /v1/status for information it does not expose. The pricing page explains credit purchases; the guide shows how to test a local mapping against the homepage example.