# Reddit Scraper: Posts, Comments & Subreddits (`watcharin/reddit-scraper`) Actor

Scrape Reddit posts, comments, media, subreddits & users by keyword, subreddit or Reddit page URL. Filter by score and comments. No account or API key.

- **URL**: https://apify.com/watcharin/reddit-scraper.md
- **Developed by:** [Watcharin Kan](https://apify.com/watcharin) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Reddit Scraper - Posts, Feeds, Comments & Subreddits

**Reddit Scraper** extracts data from Reddit without a Reddit account or API key. Search all of Reddit by keyword, or read subreddit, user and post pages directly, and get clean, ready-to-use rows of **posts, media, comments, communities (subreddits) and people (users)**.

Use the built-in filters to keep only the results that matter: minimum score, upvote ratio and comments, plus flair, author, title, post text, linked domain and NSFW. Export the data as JSON, CSV, Excel or HTML, or call it from your own code through the Apify API.

### What can Reddit Scraper do?

- **Scrape every kind of Reddit content.** Posts, media (image, video, GIF, gallery), comments (with reply depth and score), communities (subscribers, description) and people (karma, account age; sortable by karma).
- **Two ways to collect data.** *Search* all of Reddit (or chosen subreddits) by keyword, or use *Direct mode* to read subreddit feeds and user or post pages directly with Reddit page URLs or Subreddit feeds (hot, new, top, rising, controversial).
- **No Reddit account needed.** You do not have to give a Reddit login, cookies or API keys.
- **Filter before you pay.** Minimum score, minimum upvote ratio, minimum comments, authors, title contains, post text contains, flairs, linked domains, linked URL contains, text-only posts and NSFW on/off.
- **Control cost and size.** Set the page size and the total number of pages, so a run reads only as much as you want.
- **Keep every Reddit field.** Turn on *Include raw JSON* to add the original Reddit data next to the clean columns.
- **Apify platform features.** Schedule runs, call the API, send results to webhooks and integrations, and monitor runs in the Console.

### What data can you extract from Reddit?

| Content type | Main fields |
|---|---|
| Posts | keyword, subreddit, sort, time range, score, upvote ratio, comment count, author, title, selftext, flair, domain, url (the link in the post), NSFW flag, date, permalink |
| Media | everything in posts (with the media URL instead of url) plus media type, thumbnail, width, height |
| Comments | comment text, author, score, depth, parent, post title and permalink |
| Communities | name, subscribers, description, type, language, created date |
| People | name, link karma, comment karma, total karma, account age, verified email |

### How to scrape Reddit

1. Open the Actor and choose a **Content type** (posts is the default).
2. Fill in **Keywords** to search, **or** fill in **Reddit page URLs / Subreddit feeds** to read pages directly.
3. Optionally add filters (minimum score, flair, author, domain...) and set **Max pages (total)** to limit how much is read.
4. Click **Start**, then open the **Output** tab or download the dataset as JSON, CSV, Excel or HTML.

#### Keywords: all words, or an exact phrase

| You type | What is searched |
|---|---|
| `portable grill` | **All the words, in any order.** Posts that contain every word, usually anywhere in the title or text. |
| `"portable grill"` (type the double quotes as part of the keyword) | **The exact phrase.** Posts where the words appear together, in that order. |

Every item in the *Keywords* list is its own search and the results are added together. `["portable grill", "camping stove"]` finds posts about either one; it does not require both in the same post. In direct mode the same two ways apply to the posts that were read.

### Pricing: how much does it cost to scrape Reddit?

The Actor uses Apify's pay-per-event pricing, so you pay for what you get:

- **$1.50 per 1,000 results** ($0.0015 per item saved to the dataset).
- **A small start fee** per run ($0.001, more for runs with more than 1 GB of memory).

For example, 5,000 posts cost about $7.50 plus the start fee. Use **Max pages (total)** and the filters to keep a run small, and set a maximum cost per run in the Apify Console if you want a hard limit. Discounts may apply on higher Apify plans.

### Input examples

#### Search posts by keyword

```json
{
  "contentType": "posts",
  "keywords": ["portable grill", "\"camp stove\""],
  "subreddits": ["camping", "overlanding"],
  "sort": "top",
  "timeRange": "year",
  "minScore": 10,
  "minUpvoteRatio": 0.8
}
```

#### Read the top posts of a subreddit (no search)

```json
{
  "contentType": "posts",
  "listingSubreddits": ["camping", "overlanding"],
  "listingSort": "top",
  "timeRange": "week",
  "minScore": 10
}
```

#### Read feeds and a user page from URLs

```json
{
  "contentType": "posts",
  "startUrls": [
    { "url": "https://www.reddit.com/r/camping/controversial/?t=month" },
    { "url": "https://www.reddit.com/r/overlanding/rising/" },
    { "url": "https://www.reddit.com/user/PlentyDirection5691/" }
  ],
  "keywords": ["stove"]
}
```

`startUrls` must be an array of objects with a `url` field, as above. A plain string or an array of strings is rejected. In direct mode, keywords and the other filters keep only the posts that match. A sort or time written in a URL (for example `/top/?t=week`) wins over *Feed sort* and *Time range*. `old.reddit.com` and `r/all` also work. A user page returns that user's own posts only (not the comments they wrote). Search, wiki and multireddit pages are not supported and are skipped with a warning, and short `redd.it` links are skipped too.

#### Get the comments of one post

```json
{
  "contentType": "comments",
  "startUrls": [
    { "url": "https://www.reddit.com/r/camping/comments/abc123/post_title/" }
  ]
}
```

Replace the URL with a real post. More ready-to-use inputs are in the `examples` folder of the Actor.

### Input fields

| Field | What it does |
|---|---|
| Content type | posts, media, comments, communities or people. |
| Keywords | What to search for: words in any order, or an exact phrase in double quotes. Required for communities and people. |
| Reddit page URLs / Subreddit feeds / Feed sort | Direct mode: read subreddit, user and post pages directly (posts, media and comments). |
| Subreddits | Narrow a keyword search to some subreddits. |
| Time range, Sort by | Time range and order of a search (and time range for top / controversial feeds). |
| Minimum comments, Minimum score, Minimum upvote ratio | Keep only posts above these values (empty = no filter). |
| Authors, Title contains, Post text contains, Post flairs, Linked domains, Linked URL contains | Keep only posts that match. |
| Text (self) posts, Adult (NSFW) content | Keep or exclude text posts and NSFW content. |
| Max results per page, Max pages (total) | Page size (up to 100) and how many pages to read in total, over all keywords and feeds. |
| Include raw JSON | Add the original Reddit data of each item. |

### Output example

Each result is one row in the dataset. The columns depend on the content type. Example for **posts**:

```json
{
  "scrapedAt": "2026-10-16T08:21:44.000Z",
  "keyword": "portable grill",
  "subreddit": "camping",
  "sort": "top",
  "timeRange": "year",
  "score": 128,
  "upvoteRatio": 0.93,
  "totalVote": 140,
  "comments": 42,
  "author": "example_user",
  "title": "Best portable grill for car camping?",
  "selftext": "I am looking for a small grill that fits in a trunk.",
  "flair": "Gear",
  "domain": "self.camping",
  "url": "https://www.reddit.com/r/camping/comments/abc123/best_portable_grill/",
  "nsfw": false,
  "posted": "2026-10-10T14:03:11.000Z",
  "permalink": "https://www.reddit.com/r/camping/comments/abc123/best_portable_grill/"
}
```

**Comments:** `subreddit`, `postId`, `postTitle`, `postPermalink`, `commentId`, `parentId`, `depth`, `author`, `body`, `score`, `isSubmitter`, `posted`, `permalink`.
**Communities:** `display_name`, `title`, `subscribers`, `created`, `public_description`, `description`, `subreddit_type`, `over18`, `lang`, `url`.
**People:** `name`, `link_karma`, `comment_karma`, `total_karma`, `created`, `is_gold`, `is_mod`, `has_verified_email`, `public_description`, `url`.

All dates are in UTC (ISO 8601).

### What people use it for

- **Market and product research.** Find what people ask for and complain about in a niche.
- **Brand and keyword monitoring.** Track mentions of a brand, product or topic, filtered by score and flair.
- **Lead and audience research.** Find active subreddits and the people who post in them.
- **Content and trend research.** Collect the best posts of a subreddit by week, month or year.
- **Datasets for analysis and AI.** Export posts and full comment threads for sentiment analysis or model training.

### Good to know

- **How much you can get is limited by Reddit, not by the Actor.** In our tests a keyword search returned around 250 results for a broad keyword. Subreddit feeds go deeper: about 1,000 posts for *new* and *hot*, about 450-500 for *top* and *controversial*.
- **Large comment threads.** A post returns up to about 500 comments in one request, with replies up to 10 levels deep. In very large threads some replies that Reddit hides behind "load more" are not included.
- **Comments use more requests.** In comments mode, every matching post needs one extra request, so set **Max pages (total)** to keep runs short.
- **Where filters are applied.** Minimum comments, minimum score and minimum upvote ratio are applied after the posts are read. In a search the other filters (title, text, author, flair, domain, URL) are sent to Reddit; in direct mode they are applied after reading.
- **Rising** does not exist for user pages (the Actor uses *new* there). The *rising* and *controversial* orders are available in direct mode only.

### FAQ

**Do I need a Reddit account or API key?** No.

**Can I scrape the whole of Reddit?** Yes. Leave *Subreddits* empty and use keywords.

**Why did I get fewer results than I expected?** Reddit limits how deep a search or a feed can go (see *Good to know*), and your minimum comments, score, upvote ratio and other filters remove posts after they are read.

**Can I get posts without a keyword?** Yes, use Reddit page URLs or Subreddit feeds.

**Can I schedule it or call it from my own code?** Yes. Like any Apify Actor it can be scheduled, called through the API, and connected to integrations such as webhooks.

**Something does not work or you need a feature.** Open an issue on the Actor page and describe your input and the run link.

### Responsible use

The Actor reads publicly visible Reddit pages. Make sure your use of the data follows Reddit's terms and the laws that apply to you, especially when you collect information about people.

# Actor input Schema

## `contentType` (type: `string`):

What to search for. "posts" (default) = text, link, image and video posts. "media" = posts that contain an image, video, GIF or gallery. "comments" = all comments from the posts that match your search; this uses one extra request per post, so set "Max pages (total)" to limit the number of posts. "communities" = subreddits that match the keywords (name, members, description, rules for posting...). "people" = profiles/redditors that match the keywords (karma, account age...). Only keywords, Sort by, NSFW (not safe for work), Max results per page and Max pages apply to Communities and People (for People, Sort by is applied by this Actor: hot = link karma, top = total karma, new = account creation date, comments = comment karma); all other filters apply to Posts, Media and Comments. Direct mode (Reddit page URLs / Subreddit feeds) works with Posts, Media and Comments only.

## `includeRaw` (type: `boolean`):

When enabled, each row gets an extra "raw" field containing the original Reddit JSON of that one item (a post, community, person or comment), so you can pick any field that is not in the default output. For Comments, "raw" is the comment without its replies (each reply is its own row). Works for every content type. Makes the output much larger.

## `keywords` (type: `array`):

Required for Communities and People. Optional for Posts, Media and Comments: you can search with other filters instead (Subreddits, Authors, Title contains, ...), or read feeds. In direct mode (Reddit page URLs / Subreddit feeds) it only keeps the posts whose title or text contains the keyword (several words must all appear; use double quotes for an exact phrase). Words or phrases to search for. Posts, Media and Comments: the keyword is sent to Reddit as plain text (q=<keyword>). A keyword can be searched in two ways. (1) All words, any order: type the words without quotes, for example portable grill. Reddit returns posts that contain all the words, anywhere in the title or text and in any order (in a test of 100 posts, 91 contained both words and 34 had them side by side). (2) Exact phrase: put the phrase in double quotes and type the quotes as part of the keyword, for example "portable grill". Reddit then returns posts where the words appear together in that order (in the same test, 98 of 100). Each item in the list is a separate search and the results are added together, so \["portable grill", "camping stove"] finds posts about either one; it does not require both in the same post. Comments: the keyword finds the posts whose comments are collected. For Posts, Media and Comments, if you fill in "Title contains" or "Post text contains" under Advanced filters, those replace the keyword search: the keywords are not used in the query (not in direct mode, where all filters are applied together). Communities and People: the keyword is sent to Reddit as plain text. Communities: Reddit matches the keyword, ignoring upper/lower case, against the subreddit name, title, short description and sidebar description. Names that contain the keyword inside a longer word can match too (for example "camping" finds r/OhioCamping). Results arrive in Reddit's own order (not sorted by size), and the first page can also contain large, loosely related communities whose returned fields do not contain the keyword; this comes from Reddit's search, not from a filter of this Actor. Double quotes make the match much stricter (in a test with outdoor camping, the first page had 100 communities without quotes and 9 with quotes). People: the keyword is matched mainly against the public profile description (for example outdoor camping finds a profile that says "I film outdoor fishing and camping trips"). Double quotes make the match stricter and return fewer results (in the same test 19 people without quotes and 3 with quotes). A user name that contains the keyword inside one longer word (for example u/Outdoorcampingshop) is usually NOT found. The People results of this Actor come from Reddit's search API and can differ from the Profiles tab on reddit.com, which uses a different search; this is a limit of Reddit's API, not a filter of this Actor.

## `subreddits` (type: `array`):

Subreddits to search in, written without the "r/" prefix (for example "camping"). All subreddits are searched together in a single query per keyword. Optional: leave empty to search all of Reddit (this can return a very large number of posts, so use specific keywords or filters). Applies to Posts, Media and Comments searches only; ignored for Communities and People and in direct mode (use "Subreddit feeds" there).

## `sort` (type: `string`):

How the results are ordered before your filter settings are applied. Choose one sort. This is the sort of the search; it is ignored in direct mode (use "Feed sort"). Posts, Media and Comments (Reddit orders the posts found): "relevance" (default) = closest match to the keywords; "hot" = trending now; "top" = highest score; "new" = most recent first; "comments" = most discussed (every sort respects the time range). People (redditors): Reddit ignores the sort for people, so this Actor sorts the rows itself: "relevance" (default) = Reddit's own order (best name match first); "hot" = link karma, highest first; "top" = total karma (link + comment), highest first; "new" = account creation date, newest account first; "comments" = comment karma, highest first. For People with hot, top, new or comments the Actor fetches every page allowed by "Max pages (total)" and sorts all the rows it collected. Accounts without a value (for example suspended or deleted accounts) are always listed last, and ties keep Reddit's relevance order. Only the accounts Reddit returns for your keyword are sorted, so the order is not a ranking of all of Reddit. Communities: Reddit may ignore the sort and mostly return relevance order.

## `timeRange` (type: `string`):

Only include posts published within this period: "hour", "day", "week", "month", "year" (default) or "all". Applies to Posts, Media and Comments only; ignored for Communities and People. In direct mode it is used only when "Feed sort" is top or controversial (a time in a Start URL, for example ?t=week, wins).

## `startUrls` (type: `array`):

Optional. Reddit pages to read directly instead of searching. Accepted: a subreddit (https://www.reddit.com/r/camping/), a subreddit with a sort and time (https://www.reddit.com/r/camping/top/?t=week), a user page (https://www.reddit.com/user/PlentyDirection5691/) and a single post (https://www.reddit.com/r/camping/comments/abc123/title/). A sort or time written in the URL wins over "Feed sort" and "Time range". old.reddit.com and r/all also work. A user page returns that user's own posts only (not the comments they wrote). Search, wiki and multireddit pages are not supported and are skipped with a warning; short redd.it links are skipped too. For a post URL, Posts and Media return the post and Comments returns its comments (up to about 500 per post; the keyword and Advanced filters are not applied to a post URL you give explicitly). Applies to Posts, Media and Comments only. API / JSON input: an array of objects, e.g. \[{"url": "https://www.reddit.com/r/camping/"}]. A plain string or an array of strings is rejected.

## `listingSubreddits` (type: `array`):

Optional. Subreddits to read as a feed, written without the "r/" prefix (for example "camping"). Each subreddit is read in the order chosen in "Feed sort"; this does not search, so it is not limited to about 250 results like a search. Reddit gives about 1,000 posts per feed for hot and new, about 440-500 for top and controversial of all time, and about 25 for rising. Pages of 100 posts are read until Reddit has no more. Different from "Subreddits" above, which only narrows a keyword search. Applies to Posts, Media and Comments only.

## `listingSort` (type: `string`):

Order of the posts in a feed (Subreddit feeds, and Reddit page URLs that do not state a sort): hot, new, top, rising or controversial. "top" and "controversial" use "Time range". "rising" returns only a few posts (about 25) and does not exist for user pages (new is used instead).

## `minScore` (type: `integer`):

Optional. Keep only posts whose score (upvotes minus downvotes) is at least this value. Leave empty for no score filter. For Comments it filters the parent posts, not the individual comments. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `minUpvoteRatio` (type: `number`):

Optional. Keep only posts where the share of upvotes is at least this value, from 0 to 1 (for example 0.5 means at least 50% upvoted). Leave empty for no upvote-ratio filter. For Comments it filters the parent posts. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `minComments` (type: `integer`):

Optional. Keep only posts that have at least this many comments (Reddit's comment count of the post). Useful for finding posts people actually discussed and for dropping posts nobody answered, which saves time when you want real opinions. Leave empty for no comment filter. For Comments it filters the parent posts, so posts below the value are not opened. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `authors` (type: `array`):

Reddit usernames without the "u/" prefix. Only posts written by these users are kept. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `titles` (type: `array`):

Words or phrases that must appear in the post title (for example "camp stove"). Multi-word phrases are matched exactly. If set, it replaces the keyword search: the keywords are then not used at all in the search, neither in the title nor in the post text. In direct mode they do not replace the keywords: all filters are applied together. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `selftexts` (type: `array`):

Words or phrases that must appear in the post body text. Multi-word phrases are matched exactly. If set, it replaces the keyword search: the keywords are then not used at all in the search, neither in the title nor in the post text. In direct mode they do not replace the keywords: all filters are applied together. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `flairs` (type: `array`):

Post flair labels to match (for example "Gear Review"). Multi-word flairs are matched exactly. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `domains` (type: `array`):

Domain names that the post links to (for example "youtube.com"), written without "https://". Only link posts can match. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `urls` (type: `array`):

Text that must appear in the URL the post links to. Use values without spaces. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `textPosts` (type: `string`):

Filter by post type. "any" applies no filter, "only" keeps text-only posts, "exclude" keeps only posts that link elsewhere. Applies to Posts, Media and Comments only; ignored for Communities and People.

## `nsfw` (type: `string`):

Filter by adult (18+) content. "any" (default) applies no filter, "only" keeps NSFW (not safe for work) items, "exclude" keeps only items not marked NSFW. Applies to every content type (for Communities and People it uses the adult flag of the subreddit or profile). For Communities and People, "any" returns both regular and adult results, "exclude" drops the adult ones, and "only" keeps only items flagged 18+, so an ordinary keyword such as "camping" can return no results at all; leave it on "any" unless you want only adult communities or profiles.

## `maxResultsPerPage` (type: `integer`):

Number of items requested from Reddit per page (the "limit" parameter of the search URL). Reddit allows at most 100. A lower value means more pages and more API requests for the same number of results, so the default 100 is best for most runs. Optional: leave empty or enter 0 to use the default (100); the maximum is 100.

## `maxPages` (type: `integer`):

Optional. Maximum number of result pages to fetch in TOTAL for the whole run, counted over all keywords and feeds together (not per keyword). One page holds up to "Max results per page" items and costs one API request. Leave empty for no page limit (paging then stops when Reddit returns no more results). Otherwise pages are fetched one after another until this total is reached; keywords that come after the limit is used up are skipped, so the first keywords can use up all pages. Reddit cuts the results off by itself (in a test with the keyword "camping" it returned only about 230-250 items, 3 pages). Set to 1 (or 0, which is treated as 1) to fetch only the first page of the first keyword. For People with sort hot, top, new or comments, the Actor always fetches every page up to this limit (it cannot stop early) because the best accounts can be on any page; a higher value gives a more complete sorted list but uses more requests.

## Actor input object example

```json
{
  "contentType": "posts",
  "keywords": [
    "camping"
  ],
  "subreddits": [],
  "sort": "relevance",
  "timeRange": "year",
  "startUrls": [],
  "listingSubreddits": [],
  "listingSort": "new",
  "authors": [],
  "titles": [],
  "selftexts": [],
  "flairs": [],
  "domains": [],
  "urls": [],
  "textPosts": "any",
  "nsfw": "any",
  "maxResultsPerPage": 100
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset items of the run: posts, media posts, comments, communities or people found on Reddit. Pick the matching view in the Output tab.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "camping"
    ],
    "subreddits": [],
    "startUrls": [],
    "listingSubreddits": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("watcharin/reddit-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["camping"],
    "subreddits": [],
    "startUrls": [],
    "listingSubreddits": [],
}

# Run the Actor and wait for it to finish
run = client.actor("watcharin/reddit-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "camping"
  ],
  "subreddits": [],
  "startUrls": [],
  "listingSubreddits": []
}' |
apify call watcharin/reddit-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,watcharin/reddit-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MGIzrfTaqyiW167dM/builds/mNBjIhN4MKe06VV2d/openapi.json
