# Social Media Comments Scraper - 5 Platforms (`nooesc/social-media-public-comments`) Actor

Export public comments from Instagram, TikTok, Facebook, YouTube and X (Twitter) post URLs. Get text, authors and timestamps as JSON or CSV for analysis. $1 per 1,000 delivered comments. Coverage can be partial; records may include earlier observations.

- **URL**: https://apify.com/nooesc/social-media-public-comments.md
- **Developed by:** [NooEsc](https://apify.com/nooesc) (community)
- **Categories:** Social media
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 delivered instagram comments

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Export public comments for analysis

Request public comment records from known Instagram, TikTok, Facebook, YouTube and X posts. Each source receives a bounded comment sync before export.

Use this social media comments scraper to bring available audience feedback into your own research, moderation review or sentiment-analysis workflow. It returns **comment text**, not just comment counts. Sentiment scoring and moderation decisions are not built in. No customer social login or proxy setup is needed.

**Coverage matters:** this is a bounded collection, not an "all comments" scraper. Records can include earlier observations, and X and some Instagram sources are previews. The details below explain exactly what you are buying.

### Quick start

1. Open the Actor in Apify Console and paste a public **post URL**, not a profile URL.
2. Start with a small `limitPerPost`, set your run spending limit, and click **Start**.
3. Export the dataset as JSON, CSV or Excel. Inspect source coverage in `OUTPUT` before drawing conclusions.

```json
{"urls":["https://www.youtube.com/watch?v=jNQXAC9IVRw"],"limitPerPost":25,"maxResults":100}
```

### Read this before using the data

This Actor exports the **current stored comment corpus**, not an immutable list of comments first fetched in this run. That corpus can contain earlier public observations. Each record carries its last-observed timestamp and `current_stored_corpus` provenance. You pay for delivered comment records, not a claim that every record was freshly fetched. Sync fetched counts and delivered corpus counts can differ.

X returns bounded public reply previews, and some Instagram paths are previews too. Replies may be present, but complete reply trees, newest-first ordering, deleted-comment detection and exhaustive coverage are not promised. The Actor does not expose nonfunctional sorting or reply-depth controls.

The dataset contains comment text, available author information, platform comment and parent IDs, timestamps and available engagement fields. The `OUTPUT` key-value record contains source-level status/disposition alongside canonical deduplicated results. Always inspect source coverage, not just row count; a successful run can have partial sources.

### Example output

Illustrative excerpt, not live data:

```json
{
  "sourceUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
  "platform": "youtube",
  "status": "succeeded",
  "commentId": "example-comment-id",
  "parentCommentId": null,
  "text": "An illustrative public comment.",
  "author": { "username": "example", "displayName": "Example Viewer" },
  "likes": 2,
  "replyCount": null,
  "observedAt": "2026-09-09T12:00:00.000Z",
  "collectionScope": "current_stored_corpus",
  "syncCoverage": "partial"
}
```

`observedAt` is the comment's last observation time, not necessarily this run's time. `syncCoverage` describes the source sync; it does not make the stored corpus exhaustive. Missing author or engagement fields stay null. A populated `parentCommentId` identifies a reply when supplied, not a promise that all siblings or descendants were collected.

### Limits and cost

Up to 10 post URLs, up to 1,000 records per post, and no more than 1,000 delivered records globally per run. Both requested limits and the Apify spending cap bound work. Launch price: **$1 per 1,000 delivered comment records**; source refreshes/status summaries have no separate result charge. Apify platform usage may apply separately. Console pricing is authoritative.

For example, 100 delivered comments generate **$0.10 in result charges**. Asking for 100 does not guarantee 100 exist or can be retrieved. A new run can deliver and charge for records also seen in an earlier run.

No customer social login, proxy credentials or SIN key is required. Only public content is supported. An unavailable post, zero results or a rate limit must not be interpreted as proof that no comments exist. Aborting stops admission, not already submitted backend jobs. Use `resultId` to deduplicate interrupted dataset delivery; completed `OUTPUT` is canonical.

Built and maintained by NooEsc, powered by SIN. Process public text and author data responsibly and only for purposes you are entitled to pursue.

### API and support

Open the **API** tab for request and SDK examples using the input above. Export text to your own analysis workflow, keeping `sourceUrl`, timestamps and coverage alongside it. Do not treat a preview as a representative sample of the whole audience.

Use the [Issues tab](https://apify.com/nooesc/social-media-public-comments/issues) for help. Include a run URL, platform and expected versus actual behavior; never credentials or private data.

### Other social media data

- [Post Metrics](https://apify.com/nooesc/social-media-post-metrics): views, likes and comment counts when available.
- [Account Profiles](https://apify.com/nooesc/social-media-account-profiles): bios, images and available audience counts.
- [Recent Account Posts](https://apify.com/nooesc/social-media-recent-account-posts): recent posts from Instagram, TikTok and X profiles.

# Actor input Schema

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

Up to 10 known public post URLs. A bounded sync runs first, then records are exported from the current stored corpus; records may include earlier observations. X and some Instagram paths return previews, not complete threads.

## `limitPerPost` (type: `integer`):

Maximum delivered records per source, including any available replies. No promise of all replies, completeness or provider ordering.

## `maxResults` (type: `integer`):

Global cap across sources and replies; the run spending limit also applies. Only delivered comment records are billable.

## Actor input object example

```json
{
  "urls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw"
  ],
  "limitPerPost": 100,
  "maxResults": 1000
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "urls": [
        "https://www.youtube.com/watch?v=jNQXAC9IVRw"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nooesc/social-media-public-comments").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 = { "urls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"] }

# Run the Actor and wait for it to finish
run = client.actor("nooesc/social-media-public-comments").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 '{
  "urls": [
    "https://www.youtube.com/watch?v=jNQXAC9IVRw"
  ]
}' |
apify call nooesc/social-media-public-comments --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nooesc/social-media-public-comments"
        }
    }
}

```

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/EXqDCyrVGdddAXTzO/builds/zFYDRjI6DHXSzEKjF/openapi.json
