# Facebook Posts Scraper (`scrapium/facebook-posts-scraper`) Actor

📘 Facebook Posts Scraper extracts public posts, reactions, comments, timestamps, media & links from pages/groups at scale. ⚙️ Export JSON/CSV, API-ready. 🔎 Perfect for social listening, competitor analysis & content research—privacy-safe and TOS-compliant. 🚀

- **URL**: https://apify.com/scrapium/facebook-posts-scraper.md
- **Developed by:** [Scrapium](https://apify.com/scrapium) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 7 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$19.99/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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Facebook Posts Scraper

A powerful Apify actor that extracts public Facebook posts from pages, groups, and profiles with advanced filtering, engagement metrics, and optional video transcript extraction.

### 🎯 Overview

This actor scrapes Facebook posts from public pages, groups, and profiles, extracting comprehensive data including post content, engagement metrics, media attachments, user information, and optional video transcripts. It features intelligent proxy fallback, timeframe filtering, and robust error handling for reliable data collection at scale.

### ✨ Key Features

- **📄 Multi-source scraping** - Extract posts from Facebook pages, groups, and public profiles
- **📅 Timeframe filtering** - Filter posts by absolute dates or relative time (days, weeks, months, years)
- **📊 Engagement metrics** - Automatically extracts likes, comments, shares, and reaction counts
- **🎬 Video transcript extraction** - Optional extraction of video transcripts for video/reel posts
- **🔄 Smart proxy fallback** - Automatically falls back from no proxy → datacenter → residential proxy
- **⚡ Efficient pagination** - Handles large page histories with automatic pagination
- **🛡️ Error handling** - Robust retry logic and rate limit handling
- **📦 Structured output** - Clean JSON format ready for analysis

### 📥 Input Parameters

#### Required Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `startUrls` | Array | List of Facebook page URLs, usernames, or keywords. Supports multiple formats: full URLs (`https://www.facebook.com/pagename`), usernames (`pagename`), or group identifiers. |

#### Optional Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxPosts` | Integer | `10` | Maximum number of posts to scrape per page (1-10000) |
| `includeVideoTranscript` | Boolean | `false` | Extract video transcript for video/reel posts (if available) |
| `dateFilterType` | String | `"relative"` | Time filter type: `"absolute"` or `"relative"` |
| `absoluteStartDate` | String | `""` | Start date in YYYY-MM-DD format (when `dateFilterType` is `"absolute"`) |
| `absoluteEndDate` | String | `""` | End date in YYYY-MM-DD format (when `dateFilterType` is `"absolute"`). Leave empty for current date. |
| `relativeValue` | Integer | `0` | Number of time units (when `dateFilterType` is `"relative"`) |
| `relativeUnit` | String | `"days"` | Time unit: `"days"`, `"weeks"`, `"months"`, or `"years"` |
| `includeEngagement` | Boolean | `true` | Include engagement metrics (likes, comments, shares) |
| `includeVideoMetadata` | Boolean | `true` | Include detailed video metadata |
| `proxyConfiguration` | Object | `{"useApifyProxy": false}` | Proxy settings. Default: no proxy. Automatically falls back to datacenter, then residential proxy if needed. |

#### Input Example

```json
{
  "startUrls": [
    "iamsrk",
    "Cristiano",
    "https://www.facebook.com/pagename/"
  ],
  "maxPosts": 100,
  "includeVideoTranscript": true,
  "dateFilterType": "relative",
  "relativeValue": 30,
  "relativeUnit": "days",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

### 📤 Output Format

Each post in the dataset contains the following fields:

| Field | Type | Description |
|-------|------|-------------|
| `facebookUrl` | String | URL of the Facebook page/profile |
| `postId` | String | Unique post identifier |
| `pageName` | String | Name/username of the page |
| `url` | String | Direct URL to the post |
| `time` | String | Post timestamp in ISO format (YYYY-MM-DDTHH:MM:SS.000Z) |
| `timestamp` | Number | Unix timestamp |
| `user` | Object | User/page information (id, name, profileUrl, profilePic) |
| `text` | String | Post text content |
| `textReferences` | Array | Mentions, tags, and references in the post |
| `likes` | Number | Number of likes/reactions |
| `comments` | Number | Number of comments |
| `shares` | Number | Number of shares |
| `topReactionsCount` | Number | Count of top reactions |
| `media` | Array | Media attachments (images, videos) with metadata |
| `feedbackId` | String | Facebook feedback identifier |
| `topLevelUrl` | String | Canonical post URL |
| `facebookId` | String | Facebook page/user ID |
| `pageAdLibrary` | Object | Ad library information |
| `inputUrl` | String | Original input URL used |
| `captionText` | String | Video transcript (only if `includeVideoTranscript` is true and transcript is available) |

#### Output Example

```json
{
  "facebookUrl": "https://www.facebook.com/iamsrk/",
  "postId": "1397878851694949",
  "pageName": "iamsrk",
  "url": "https://www.facebook.com/reel/1849391758997898/",
  "time": "2025-11-15T10:41:16.000Z",
  "timestamp": 1763203276,
  "user": {
    "id": "100044185428261",
    "name": "Shah Rukh Khan",
    "profileUrl": "https://www.facebook.com/100044185428261",
    "profilePic": "https://scontent.fdac142-1.fna.fbcdn.net/v/t39.30808-1/366996841_856684082481098_8756972728894965534_n.jpg?..."
  },
  "text": "It is humbling and deeply touching to have a landmark in Dubai carry my name...",
  "textReferences": [
    {
      "id": "100068746803211",
      "url": "https://www.facebook.com/100068746803211",
      "profile_url": "https://www.facebook.com/100068746803211",
      "short_name": "Danube Properties",
      "work_info": null,
      "work_foreign_entity_info": null,
      "mobileUrl": "https://m.facebook.com/100068746803211/"
    }
  ],
  "likes": 40224,
  "comments": 2279,
  "shares": 1484,
  "topReactionsCount": 7,
  "media": [
    {
      "mediaset_token": "pcb.1397878851694949",
      "url": "https://www.facebook.com/reel/1849391758997898/",
      "comet_product_tag_feed_overlay_renderer": null
    }
  ],
  "feedbackId": "ZmVlZGJhY2s6MTM5Nzg3ODg1MTY5NDk0OQ==",
  "topLevelUrl": "https://www.facebook.com/100044185428261/posts/1397878851694949",
  "facebookId": "100044185428261",
  "pageAdLibrary": {
    "is_business_page_active": false,
    "id": "100044185428261"
  },
  "inputUrl": "https://www.facebook.com/iamsrk/",
  "captionText": "Video transcript text here..."
}
```

### 🛠️ How to Use

#### Step 1: Configure Input

1. **Start URLs**: Enter Facebook page URLs, usernames, or group identifiers
   - Full URL: `https://www.facebook.com/pagename`
   - Username: `pagename`
   - Group: `groupname` or `https://www.facebook.com/groups/groupname`

2. **Post Limit**: Set `maxPosts` to control how many posts to scrape per page (1-10000)

3. **Timeframe Filter** (Optional):
   - **Relative**: Set `dateFilterType` to `"relative"`, then specify `relativeValue` (e.g., 30) and `relativeUnit` (e.g., "days")
   - **Absolute**: Set `dateFilterType` to `"absolute"`, then specify `absoluteStartDate` and `absoluteEndDate` in YYYY-MM-DD format

4. **Video Transcripts** (Optional): Set `includeVideoTranscript` to `true` to extract transcripts from video/reel posts

5. **Proxy Configuration** (Optional): Configure proxy settings. By default, uses no proxy and automatically falls back if needed.

#### Step 2: Run the Actor

Click "Start" to begin scraping. The actor will:

1. Normalize input URLs
2. Initialize proxy configuration (with automatic fallback)
3. Scrape posts from each target sequentially
4. Apply timeframe filters
5. Extract video transcripts (if enabled)
6. Save results to the dataset

#### Step 3: Download Results

Results are automatically saved to the dataset. You can:

- View results in the Apify platform
- Download as JSON, CSV, or Excel
- Access via API

### 🎯 Use Cases

- **📈 Marketing & Social Media Analysis** - Track competitor content, analyze engagement trends, identify top-performing posts
- **📰 Journalism & Research** - Monitor public conversations, analyze group discussions, gather community insights
- **📊 Brand Monitoring** - Track brand mentions across Facebook pages and groups
- **🧠 AI/ML Dataset Creation** - Build datasets for sentiment analysis, NLP, or content analysis
- **🛒 E-commerce Trend Tracking** - Identify viral products and trending topics in Facebook groups
- **📱 Content Strategy** - Analyze successful post formats, timing, and engagement patterns

### ⚙️ Technical Details

#### Proxy Fallback Strategy

The actor implements intelligent proxy fallback:

1. **No Proxy** (default) - Direct connection to Facebook
2. **Datacenter Proxy** - Falls back if direct connection is blocked
3. **Residential Proxy** - Final fallback if datacenter proxy fails

This ensures maximum reliability while respecting user preferences.

#### Timeframe Filtering

- **Relative Time**: Filter posts from the last N days/weeks/months/years
- **Absolute Dates**: Filter posts between specific start and end dates
- Filters are applied both at the GraphQL API level and client-side for accuracy

#### Video Transcript Extraction

When `includeVideoTranscript` is enabled:

- Automatically detects video/reel posts
- Extracts transcripts using Facebook's GraphQL API
- Adds transcript as `captionText` field in the output
- Gracefully handles cases where transcripts are unavailable

#### Rate Limiting & Error Handling

- Automatic retry logic with exponential backoff
- Rate limit detection and handling
- Consecutive empty response detection
- Detailed error logging for debugging

### 📈 Scalability

The actor is designed to handle:

- **Small Scale** (1-100 posts) - Quick research and analysis
- **Medium Scale** (100-10,000 posts) - Competitor audits and trend analysis
- **Large Scale** (10,000+ posts) - Enterprise-level data collection

Supports scraping from:

- Facebook Pages
- Facebook Groups
- Public Profiles

### ⚖️ Legal & Ethical Considerations

This actor scrapes only publicly accessible data. It:

- ✅ Does not access private or restricted content
- ✅ Respects Facebook's Terms of Service
- ✅ Does not bypass login restrictions
- ✅ Complies with data privacy laws (GDPR, CCPA, etc.)

**Important**: Always use scraped data responsibly and in compliance with applicable laws and platform terms.

### 🔧 Troubleshooting

#### Common Issues

1. **No posts returned**
   - Check if the page/group is public and accessible
   - Verify the URL format is correct
   - Try enabling proxy configuration

2. **Rate limiting errors**
   - The actor automatically handles rate limits with retries
   - Consider reducing `maxPosts` or adding delays between runs

3. **Video transcripts not extracted**
   - Ensure `includeVideoTranscript` is set to `true`
   - Note that not all videos have transcripts available
   - Check that the post URL contains `/videos/` or `/reel/`

4. **Proxy issues**
   - The actor automatically falls back through proxy types
   - Ensure your Apify account has proxy access if using Apify proxies

### 📞 Support

For custom solutions or feature requests, contact: **dev.scraperengine@gmail.com**

### 🏁 Conclusion

The Facebook Posts Scraper provides a powerful, reliable solution for extracting Facebook post data at scale. With advanced filtering, engagement metrics, and optional video transcript extraction, it's perfect for marketers, researchers, and data analysts who need structured Facebook insights.

# Actor input Schema

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

📌 **Required.** Enter one or more Facebook *page* targets.

• **Full URL:** `https://www.facebook.com/nytimes/` or `https://www.facebook.com/Cristiano/`
• **Username only:** `nytimes`, `Cristiano`, `iamsrk` — the actor will turn these into full URLs.

You can mix URLs and usernames. Each target is scraped in sequence (one page after another) to reduce rate limits. 🔄

## `maxPosts` (type: `integer`):

🎯 **Limit how many posts to collect *per target page*.**

• Minimum: **1** — Maximum: **10,000**.
• Default: **10** — Good for quick tests.
• Increase for deeper timelines (e.g. 50–500). The actor stops once this count is reached for each page. 🛑

## `includeVideoTranscript` (type: `boolean`):

📝 **Capture video captions & transcripts!**

• **ON** ✨ — Extracts closed captions/transcripts from video & reel posts into the output.
• **OFF** — Video posts still appear with metadata, but no transcript text.

Default: **OFF** for faster scraping. Turn **ON** when you need subtitle/caption data. 🎬

## `timeoutMode` (type: `string`):

Choose how per-target timeout is determined. **Auto** scales timeout from requested post count. **Manual** uses your custom timeout value.

## `targetTimeoutSecs` (type: `integer`):

Used only when Timeout Mode is set to **Manual**. The actor will stop a target when this time limit is reached.

## `oldestPostDateUnified` (type: `string`):

⏳ **Only include posts *after* this date.**

• **Absolute:** Pick a calendar date (e.g. `2024-01-01`).
• **Relative:** e.g. `7` days, `2` months, `1` year — counted backward from today.

Leave empty to allow posts from any past date. Combines with "Posts Older Than" for a window. 🗓️

## `newestPostDate` (type: `string`):

🛑 **Only include posts *before* this date.**

• **Absolute:** e.g. `2024-12-31`.
• **Relative:** e.g. `0` for “today” or a number of days/months/years ago.

Use together with "Posts Newer Than" to scrape a precise date range. Leave empty for no end limit. 📆

## `proxyConfiguration` (type: `object`):

🛡️ **Anti-block & reliability.**

• The actor **prefers Apify Residential proxy** when available for higher success rates.
• If residential isn’t set, it falls back to **Apify Datacenter** proxy.
• You can optionally provide **custom proxy URLs** here as a fallback.

No proxy configuration is required for basic runs; the actor will use Apify proxy when possible. 🔒

## Actor input object example

```json
{
  "startUrls": [
    "iamsrk",
    "https://www.facebook.com/nytimes/"
  ],
  "maxPosts": 10,
  "includeVideoTranscript": false,
  "timeoutMode": "auto",
  "targetTimeoutSecs": 1200,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "https://www.facebook.com/nytimes"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapium/facebook-posts-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 = {
    "startUrls": ["https://www.facebook.com/nytimes"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapium/facebook-posts-scraper").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": [
    "https://www.facebook.com/nytimes"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scrapium/facebook-posts-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Facebook Posts Scraper",
        "description": "📘 Facebook Posts Scraper extracts public posts, reactions, comments, timestamps, media & links from pages/groups at scale. ⚙️ Export JSON/CSV, API-ready. 🔎 Perfect for social listening, competitor analysis & content research—privacy-safe and TOS-compliant. 🚀",
        "version": "0.1",
        "x-build-id": "1dvissg4n284MRNZf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapium~facebook-posts-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapium-facebook-posts-scraper",
                "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/scrapium~facebook-posts-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapium-facebook-posts-scraper",
                "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/scrapium~facebook-posts-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapium-facebook-posts-scraper",
                "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",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "🔗 Facebook Page URLs or Usernames",
                        "type": "array",
                        "description": "📌 **Required.** Enter one or more Facebook *page* targets.\n\n• **Full URL:** `https://www.facebook.com/nytimes/` or `https://www.facebook.com/Cristiano/`\n• **Username only:** `nytimes`, `Cristiano`, `iamsrk` — the actor will turn these into full URLs.\n\nYou can mix URLs and usernames. Each target is scraped in sequence (one page after another) to reduce rate limits. 🔄",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPosts": {
                        "title": "📊 Maximum Posts per Page",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "🎯 **Limit how many posts to collect *per target page*.**\n\n• Minimum: **1** — Maximum: **10,000**.\n• Default: **10** — Good for quick tests.\n• Increase for deeper timelines (e.g. 50–500). The actor stops once this count is reached for each page. 🛑",
                        "default": 10
                    },
                    "includeVideoTranscript": {
                        "title": "🎥 Include Video Transcripts",
                        "type": "boolean",
                        "description": "📝 **Capture video captions & transcripts!**\n\n• **ON** ✨ — Extracts closed captions/transcripts from video & reel posts into the output.\n• **OFF** — Video posts still appear with metadata, but no transcript text.\n\nDefault: **OFF** for faster scraping. Turn **ON** when you need subtitle/caption data. 🎬",
                        "default": false
                    },
                    "timeoutMode": {
                        "title": "⏱️ Timeout Mode",
                        "enum": [
                            "auto",
                            "manual"
                        ],
                        "type": "string",
                        "description": "Choose how per-target timeout is determined. **Auto** scales timeout from requested post count. **Manual** uses your custom timeout value.",
                        "default": "auto"
                    },
                    "targetTimeoutSecs": {
                        "title": "⏳ Per-Target Timeout (seconds)",
                        "minimum": 60,
                        "maximum": 72000,
                        "type": "integer",
                        "description": "Used only when Timeout Mode is set to **Manual**. The actor will stop a target when this time limit is reached.",
                        "default": 1200
                    },
                    "oldestPostDateUnified": {
                        "title": "📅 Posts Newer Than (Start Date)",
                        "type": "string",
                        "description": "⏳ **Only include posts *after* this date.**\n\n• **Absolute:** Pick a calendar date (e.g. `2024-01-01`).\n• **Relative:** e.g. `7` days, `2` months, `1` year — counted backward from today.\n\nLeave empty to allow posts from any past date. Combines with \"Posts Older Than\" for a window. 🗓️"
                    },
                    "newestPostDate": {
                        "title": "⌛ Posts Older Than (End Date)",
                        "type": "string",
                        "description": "🛑 **Only include posts *before* this date.**\n\n• **Absolute:** e.g. `2024-12-31`.\n• **Relative:** e.g. `0` for “today” or a number of days/months/years ago.\n\nUse together with \"Posts Newer Than\" to scrape a precise date range. Leave empty for no end limit. 📆"
                    },
                    "proxyConfiguration": {
                        "title": "🌐 Proxy Settings",
                        "type": "object",
                        "description": "🛡️ **Anti-block & reliability.**\n\n• The actor **prefers Apify Residential proxy** when available for higher success rates.\n• If residential isn’t set, it falls back to **Apify Datacenter** proxy.\n• You can optionally provide **custom proxy URLs** here as a fallback.\n\nNo proxy configuration is required for basic runs; the actor will use Apify proxy when possible. 🔒"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
