# Reddit Scraper For Posts & Comments (`creative_tablecloth/reddit-scraper-for-posts`)

Access Reddit data freely without authentication. Quickly extract detailed information from Reddit posts and comments, both efficiently and cost-effectively. (approx $0.015 for 1,000 results)

- **URL**: https://beta-securitybyobscurity.apify.com/creative\_tablecloth/reddit-scraper-for-posts.md
- **Developed by:** [Jinny Kim](https://beta-securitybyobscurity.apify.com/creative_tablecloth) (community)
- **Categories:** Social media, Automation, News
- **Stats:** 312 total users, 30 monthly users, 94.7% runs succeeded, 6 bookmarks
- **User rating**: No ratings yet

## Pricing

$25.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.
You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

# README

## Reddit Scraper for Posts & Comments

### Overview

This is unofficial Reddit API that provides seamless, unrestricted access to Reddit data without the need for authentication. With its straightforward setup and minimal input requirements, you can easily extract detailed information from specific Reddit posts and their associated comments.

### Key Features

- **No Authentication Needed**: Access a wealth of data without the need to log in.
- **Super Simple Setup**: Start scraping with just a single required field—the post URL.
- **Cost-Effective**: 1,000 entries for only about $0.015.

### User Case

This API is specially designed to extract detailed data from a specific Reddit post URL, focusing on the posts and associated comments.

- **Example Use Case URL**: https://www.reddit.com/r/learnprogramming/comments/lp1hi4/is\_webscraping\_a\_good\_skill\_to\_learn\_as\_a\_beginner/

### Data Extraction Details

The API extracts a variety of user-friendly data points from Reddit posts and comments:

- **Posts**: Includes title, content, creation time, upvotes, total number of comments, URL to the post, and media details (if any).
- **Comments**: Details include the comment text, timestamp, upvotes, and direct URL to the comment.
- **User Info**: Usernames and user IDs of the post and comment authors.
- **Community Insights**: Name of the subreddit, number of members, and subreddit URL.
- **Media Information**: Links to any associated images, videos, and whether the post contains media.
- **Miscellaneous Info**: Information about whether the post is an advertisement, pinned, for adults only, etc.

### Data Output Formats

- JSON
- XML
- CSV
- Excel
- HTML

### Example Applications

- Brand Monitoring: Keep tabs on how your brand or products are discussed across various Reddit communities.
- Market Research: Gather and analyze discussions and sentiments on a wide array of topics from different subreddits.
- Trend Analysis: Detect emerging trends and shifts in public opinion in real-time.

### Text File Input

- Ensure each URL includes "https://" at the beginning, such as https://www.reddit.com/r/learnprogramming/comments/lp1hi4/is\_webscraping\_a\_good\_skill\_to\_learn\_as\_a\_beginner
- Do not separate URLs with commas. List each URL on a new line

### Data Output Example

Below is a sample of the JSON output provided by the API, demonstrating the data structure for posts and comments:

````json
[
  {
    "contentType": "post",
    "createdAt": "2024-06-07T18:10:58Z",
    "id": "t3_1dawsz6",
    "parseId": "1dawsz6",
    "subreddit": "MadeMeSmile",
    "communityName": "r/MadeMeSmile",
    "authorId": "t2_g19v0vw3u",
    "author": "somethingdeido",
    "title": "Dad surprised daughter in the airplane",
    "body": "",
    "upvotes": 9578,
    "noOfcomments": 124,
    "communityMembers": 9547058,
    "url": "https://reddit.com/r/MadeMeSmile/comments/1dawsz6/dad_surprised_daughter_in_the_airplane/",
    "thumbnailUrl": "https://external-preview.redd.it/OGRpcXhydHZvYTVkMfEOqfXk-XD_VCqP5Tc4o87o6R-9nDdJPvSBaXDLmdsR.png",
    "videoUrl": "https://v.redd.it/eaa45s5woa5d1/DASH_480.mp4",
    "isVideo": true,
    "isAd": false,
    "isPinned": false,
    "isOver18": false
  },
  {
    "contentType": "comment",
    "createdAt": "2024-06-07T19:18:36Z",
    "id": "t1_l7n8cbx",
    "parseId": "l7n8cbx",
    "parentId": "t3_1dawsz6",
    "postId": "t3_1dawsz6",
    "subreddit": "MadeMeSmile",
    "communityName": "r/MadeMeSmile",
    "authorId": "t2_74rjf",
    "author": "erayachi",
    "body": "I friggin' love her going to confront this weirdo, then the look of recognition. This is so damn sweet, my heart's gonna pop.",
    "upvotes": 1808,
    "noOfreplies": 6,
    "url": "https://reddit.com/r/MadeMeSmile/comments/1dawsz6/dad_surprised_daughter_in_the_airplane/l7n8cbx/"
  }
]

# Actor input Schema

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

The URLs of Reddit pages you want to scrape. You can add multiple URLs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.reddit.com/r/clevercomebacks/comments/1daoqiw/blue_tick_guy_got_ticked/"
    }
  ]
}
````

# 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 = {
    "startUrls": [
        {
            "url": "https://www.reddit.com/r/clevercomebacks/comments/1daoqiw/blue_tick_guy_got_ticked/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("creative_tablecloth/reddit-scraper-for-posts").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 = { "startUrls": [{ "url": "https://www.reddit.com/r/clevercomebacks/comments/1daoqiw/blue_tick_guy_got_ticked/" }] }

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

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.reddit.com/r/clevercomebacks/comments/1daoqiw/blue_tick_guy_got_ticked/"
    }
  ]
}' |
apify call creative_tablecloth/reddit-scraper-for-posts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=creative_tablecloth/reddit-scraper-for-posts",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Reddit Scraper For Posts & Comments",
        "description": "Access Reddit data freely without authentication. Quickly extract detailed information from Reddit posts and comments, both efficiently and cost-effectively. (approx $0.015 for 1,000 results)",
        "version": "0.0",
        "x-build-id": "oY1lx9709oi7oR20R"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/creative_tablecloth~reddit-scraper-for-posts/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-creative_tablecloth-reddit-scraper-for-posts",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/creative_tablecloth~reddit-scraper-for-posts/runs": {
            "post": {
                "operationId": "runs-sync-creative_tablecloth-reddit-scraper-for-posts",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/creative_tablecloth~reddit-scraper-for-posts/run-sync": {
            "post": {
                "operationId": "run-sync-creative_tablecloth-reddit-scraper-for-posts",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "The URLs of Reddit pages you want to scrape. You can add multiple URLs.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
