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

Scrape public Facebook page posts — extract text, timestamps, likes, comments, shares, images, and video URLs. No login required. 40% cheaper than Apify's own actor.

- **URL**: https://apify.com/automation-lab/facebook-posts-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.95 / 1,000 post scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## 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

Extract public posts from any Facebook page — get post text, timestamps, engagement metrics (likes, comments, shares), images, video URLs, hashtags, and more. No login or Facebook account required.

### 🚀 What does it do?

Facebook Posts Scraper loads public Facebook pages and extracts the most recent visible posts. For each post it captures:

- **Post content**: full text, hashtags, @mentions
- **Timestamps**: ISO 8601 date, Unix milliseconds
- **Engagement**: like/reaction count, comment count, share count
- **Media**: image URLs (CDN), video URL, video thumbnail
- **Links**: external links embedded in the post
- **Author info**: page name, page ID, page URL
- **Post metadata**: post URL, post ID, whether it's a video or shared post
- **Comments**: top comments with author, text, and like count (optional)

### 👥 Who is it for?

#### Social media researchers
Track what major brands, news outlets, and organizations are posting on Facebook. Monitor content strategy and messaging trends across multiple pages simultaneously.

#### PR and communications teams
Monitor competitor Facebook pages, track brand mentions, and keep tabs on public-facing messaging without needing a Facebook account.

#### Data analysts & BI teams
Build datasets of Facebook post engagement — which content resonates, what posting cadences look like, how engagement correlates with post type.

#### Marketing agencies
Audit client competitors, benchmark engagement rates, and analyze content formats that drive the most reactions and shares.

#### Journalists and researchers
Gather public social media data for reporting or academic research without needing platform API access.

#### Brand monitoring tools
Feed real-time post data into dashboards, alert systems, or sentiment analysis pipelines.

### 💡 Why use this scraper?

Facebook's Graph API has been severely restricted since 2018-2019. Public page posts are no longer accessible via API without app review and special permissions. The **only way** to get public post data programmatically today is through scraping.

This actor:

- ✅ Requires **no Facebook account** — works with fully public pages
- ✅ Uses **residential proxy** — bypasses Facebook's datacenter IP blocks
- ✅ Returns **structured JSON** — text, timestamps, engagement counts, image URLs
- ✅ Supports **100+ pages per run** — bulk processing with per-page limits
- ✅ **Date filtering** — collect only posts within your time range
- ✅ **Comment extraction** — optionally scrape top comments per post

### 📊 What data do you get?

| Field | Type | Description |
|-------|------|-------------|
| `postUrl` | string | Canonical post URL |
| `postId` | string | Facebook post ID |
| `text` | string | Full post caption / text |
| `timestamp` | string | ISO 8601 publish date |
| `timestampMs` | number | Unix timestamp in milliseconds |
| `likesCount` | number | Total like/reaction count |
| `commentsCount` | number | Number of comments |
| `sharesCount` | number | Number of shares |
| `isVideo` | boolean | Whether the post contains a video |
| `isShared` | boolean | Whether this is a reshared post |
| `images` | array | Array of image CDN URLs |
| `videoUrl` | string | Video URL (if video post) |
| `videoThumbnailUrl` | string | Video thumbnail URL |
| `externalLinks` | array | External links within the post |
| `hashtags` | array | Hashtags extracted from post text |
| `mentions` | array | @mentions extracted from post text |
| `authorName` | string | Page display name |
| `authorUrl` | string | Page URL |
| `pageId` | string | Facebook page numeric ID |
| `pageName` | string | Page URL slug (username) |
| `topComments` | array | Top visible comments (if enabled) |
| `scrapedAt` | string | ISO timestamp when scraped |

### 💰 How much does it cost to scrape Facebook posts?

This actor uses **Pay Per Event (PPE)** pricing — you only pay for posts you extract.

| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|-------|------|--------|--------|------|----------|---------|
| Run start | $0.01 | $0.0095 | $0.0085 | $0.0075 | $0.006 | $0.005 |
| Per post | $0.003 | $0.0027 | $0.0024 | $0.00195 | $0.0015 | $0.0012 |

**Example costs (FREE tier):**
- 10 posts (1 page) → ~$0.04 (start + 10 × $0.003)
- 50 posts (10 pages) → ~$0.16
- 500 posts (100 pages) → ~$1.51

> 💡 **Why use residential proxy?** Facebook blocks datacenter IPs. Residential proxies route your requests through real ISP connections, bypassing these blocks. Proxy bandwidth is included in the above pricing.

**Compare to competitor:** Apify's own `facebook-posts-scraper` charges $0.005/post (FREE tier) — **40% more per post**. Same data, lower price.

### 🔧 How to scrape Facebook posts

#### Step 1: Find the page URLs you want to scrape

Collect the Facebook page URLs:
- Named pages: `https://www.facebook.com/cocacola`
- Page ID format: `https://www.facebook.com/profile.php?id=100064277875532`
- Short username: just enter `cocacola` — the actor will normalize it

#### Step 2: Configure the actor

In the **Pages to scrape** section, add your page URLs. In **Settings**, configure:
- **Max posts per page** — how many recent posts to scrape per page (default: 20)
- **From date / To date** — filter to a specific date range (optional)
- **Include top comments** — also extract top visible comments (optional)

#### Step 3: Run and export

Click **Start** and wait. When finished, export results as JSON, CSV, or connect to your downstream tools via API or webhooks.

### ⚙️ Input configuration

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `pageUrls` | array | required | Facebook page URLs to scrape |
| `maxPostsPerPage` | number | 20 | Max posts per page |
| `fromDate` | string | — | Only posts on/after this date (YYYY-MM-DD) |
| `toDate` | string | — | Only posts on/before this date (YYYY-MM-DD) |
| `includeComments` | boolean | false | Extract top comments per post |
| `proxyCountry` | string | US | Residential proxy country code |

### 📤 Output format

Each post is stored as a separate item in the dataset:

```json
{
  "postUrl": "https://www.facebook.com/nasa/posts/pfbid0...",
  "postId": "pfbid0...",
  "text": "One last look at Earth before we reach the Moon.",
  "timestamp": "2026-04-05T18:30:00.000Z",
  "timestampMs": 1743879000000,
  "likesCount": 52300,
  "commentsCount": 847,
  "sharesCount": 1200,
  "isVideo": false,
  "isShared": false,
  "images": [
    "https://scontent.xx.fbcdn.net/v/..."
  ],
  "videoUrl": null,
  "hashtags": [],
  "mentions": [],
  "authorName": "NASA",
  "authorUrl": "https://www.facebook.com/nasa",
  "pageId": "100044561550831",
  "pageName": "nasa",
  "topComments": [],
  "scrapedAt": "2026-04-06T01:55:00.000Z"
}
````

### 💡 Tips for best results

#### Use multiple page URLs in one run

The actor processes pages sequentially. Add 10, 50, or 100+ page URLs in a single run — each will be scraped for its most recent posts.

#### Set appropriate post limits

Facebook loads posts progressively. `maxPostsPerPage: 5` is good for monitoring recent activity. For historical analysis, try `maxPostsPerPage: 50` with a `fromDate` filter.

#### Use date filtering for efficiency

If you only need posts from the last 7 days, set `fromDate` to avoid scraping older posts. This saves time and reduces costs.

#### Choose the right proxy country

Use the country that matches your target audience. For US-based pages, `US` proxy gives the most accurate engagement numbers. For European pages, try `GB` or `DE`.

#### High-traffic pages vs. niche pages

Major brand pages (Coca-Cola, NYT, NASA) may show only their most recent 1-3 posts to non-logged-in visitors — this is Facebook's standard behavior for large public pages. Niche pages with smaller followings often expose more posts.

### 🔗 Integrations

#### Send new posts to Slack

Connect Facebook Posts Scraper to Zapier or Make, and automatically post new scraped Facebook posts to a Slack channel for your team. Set up a recurring schedule (hourly, daily) to keep your team informed.

#### Feed data to sentiment analysis

Export posts to Google Sheets or BigQuery, then run sentiment analysis to track brand perception over time. Combine with engagement metrics to understand which sentiments resonate most.

#### Build a social listening dashboard

Use the Apify Scheduled Actors feature to run this scraper daily, storing results in a dataset. Connect Apify datasets to Tableau, Looker, or Power BI for a live social media dashboard.

#### Monitor competitor content

Set up recurring runs for your top competitors' Facebook pages. Get daily email alerts when they publish new posts, and track engagement trends over time.

#### Archive public posts for research

For academic research on social media trends, use this actor to build large-scale datasets of public Facebook posts. Export to CSV and analyze with Python or R.

### 🤖 API usage

#### Node.js

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('automation-lab/facebook-posts-scraper').call({
    pageUrls: ['https://www.facebook.com/nasa', 'https://www.facebook.com/nytimes'],
    maxPostsPerPage: 10,
    fromDate: '2026-01-01',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Scraped ${items.length} posts`);
for (const post of items) {
    console.log(`${post.authorName}: ${post.text?.substring(0, 100)}`);
}
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("automation-lab/facebook-posts-scraper").call(run_input={
    "pageUrls": ["https://www.facebook.com/nasa", "https://www.facebook.com/nytimes"],
    "maxPostsPerPage": 10,
    "fromDate": "2026-01-01",
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Scraped {len(items)} posts")
for post in items:
    print(f"{post['authorName']}: {(post.get('text') or '')[:100]}")
```

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~facebook-posts-scraper/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "pageUrls": ["https://www.facebook.com/nasa"],
    "maxPostsPerPage": 10
  }'
```

### 🧠 Use with AI assistants (MCP)

You can use this actor directly from **Claude**, **Cursor**, or any MCP-compatible AI assistant:

**Claude Code setup:**

```bash
claude mcp add --transport sse https://mcp.apify.com/sse?tools=automation-lab/facebook-posts-scraper
```

**Claude Desktop** — add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/sse?tools=automation-lab/facebook-posts-scraper",
      "type": "sse"
    }
  }
}
```

**Example prompts:**

- "Scrape the last 5 posts from facebook.com/nasa and summarize the topics"
- "Get the most recent posts from facebook.com/nytimes and facebook.com/bbcnews"
- "Scrape Facebook posts from @cocacola from the last 30 days"
- "Monitor these 10 brand pages and tell me which has the most engagement this week"

### ⚖️ Is scraping Facebook posts legal?

This actor only scrapes **publicly visible content** — posts that any person can view without logging in. Facebook's own robots.txt and public pages are designed for public access.

**Key points:**

- ✅ Only scrapes public pages — no private profiles, no friends-only content
- ✅ No login required — reads only what's publicly visible
- ✅ No bypassing authentication — uses standard browser requests
- ✅ Complies with [Apify's Terms of Service](https://apify.com/terms-of-service)
- ⚠️ Do not use for spam, harassment, or building competitor contact lists
- ⚠️ Respect GDPR/CCPA — personal data in posts may have additional restrictions
- ⚠️ Review [Facebook's Terms of Service](https://www.facebook.com/terms.php) for your specific use case

For legal guidance specific to your use case, consult with a qualified attorney.

### ❓ FAQ

#### How many posts can I scrape per page?

You can set `maxPostsPerPage` up to 500. Facebook's new layout shows 1–5 posts initially per page visit, and the actor scrolls to load more. The exact number depends on the page's posting frequency and Facebook's current rendering behavior for non-logged-in visitors.

#### Does it require a Facebook account or login?

No. This actor scrapes only publicly visible posts — no credentials needed. If a post requires login to view, it will not be scraped.

#### Why do some pages return fewer posts than the limit?

Facebook controls how many posts it shows to non-logged-in visitors. Very popular pages (millions of followers) often show only their most recent 1–3 posts. Less-trafficked pages may show more. This is Facebook's behavior — not a scraper limitation.

#### Does the scraper work for Facebook profiles vs. pages?

It works best with **Facebook Pages** (brands, organizations, public figures). Personal profiles with privacy settings will not be accessible.

#### Can I scrape posts from a specific date range?

Yes — use `fromDate` and `toDate` parameters (YYYY-MM-DD format). The actor will stop scrolling once it reaches posts older than `fromDate`.

#### What happens if a page is blocked or private?

The actor will log a warning and move to the next page, returning 0 posts for that URL.

#### Why do images have long CDN URLs?

Facebook images are served from their CDN with authentication tokens in the URL. These URLs expire after some time — download and store images if you need permanent copies.

#### How often should I run this for monitoring?

For active pages: daily runs with `fromDate` set to yesterday work well for continuous monitoring. For brand monitoring dashboards, hourly runs on key competitor pages is a common pattern.

### 🔗 Related scrapers

Looking for more Facebook and social media data? Check out our other automation-lab scrapers:

- [Facebook Pages Scraper](https://apify.com/automation-lab/facebook-pages-scraper) — Extract page info: followers, contact details, category, hours
- [Facebook Ad Library Scraper](https://apify.com/automation-lab/facebook-ads-library-scraper) — Scrape active Facebook ads and creative assets
- [Instagram Scraper](https://apify.com/automation-lab/instagram-scraper) — Extract Instagram posts, reels, and profile data
- [TikTok Scraper](https://apify.com/automation-lab/tiktok-scraper) — Scrape TikTok videos and engagement data
- [Twitter/X Scraper](https://apify.com/automation-lab/twitter-x-scraper) — Extract tweets and Twitter profile data

# Actor input Schema

## `pageUrls` (type: `array`):

Enter Facebook page URLs to scrape posts from (e.g. "https://www.facebook.com/cocacola"). Accepts named pages, numeric IDs, and usernames.

## `maxPostsPerPage` (type: `integer`):

Maximum number of posts to extract per page. Scraper scrolls the feed to load more posts. Keep low (5–20) for quick checks, higher for comprehensive monitoring.

## `fromDate` (type: `string`):

Only scrape posts published on or after this date (format: YYYY-MM-DD). Leave empty to scrape all available posts up to the max limit.

## `toDate` (type: `string`):

Only scrape posts published on or before this date (format: YYYY-MM-DD). Leave empty for no end date limit.

## `includeComments` (type: `boolean`):

Scrape the top visible comments for each post (author name, text, like count). Adds a few extra seconds per post.

## `proxyCountry` (type: `string`):

ISO country code for residential proxy (e.g. "US", "GB", "DE"). Controls which country's Facebook content is shown. Use the country relevant to the pages you're scraping.

## Actor input object example

```json
{
  "pageUrls": [
    "https://www.facebook.com/cocacola"
  ],
  "maxPostsPerPage": 5,
  "includeComments": false,
  "proxyCountry": "US"
}
```

# Actor output Schema

## `overview` (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 = {
    "pageUrls": [
        "https://www.facebook.com/cocacola"
    ],
    "maxPostsPerPage": 5,
    "fromDate": "",
    "toDate": "",
    "proxyCountry": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/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 = {
    "pageUrls": ["https://www.facebook.com/cocacola"],
    "maxPostsPerPage": 5,
    "fromDate": "",
    "toDate": "",
    "proxyCountry": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/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 '{
  "pageUrls": [
    "https://www.facebook.com/cocacola"
  ],
  "maxPostsPerPage": 5,
  "fromDate": "",
  "toDate": "",
  "proxyCountry": "US"
}' |
apify call automation-lab/facebook-posts-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Facebook Posts Scraper",
        "description": "Scrape public Facebook page posts — extract text, timestamps, likes, comments, shares, images, and video URLs. No login required. 40% cheaper than Apify's own actor.",
        "version": "0.1",
        "x-build-id": "k4bORxetvOwypD8uZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~facebook-posts-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-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/automation-lab~facebook-posts-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-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/automation-lab~facebook-posts-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-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": [
                    "pageUrls"
                ],
                "properties": {
                    "pageUrls": {
                        "title": "📄 Facebook page URLs",
                        "type": "array",
                        "description": "Enter Facebook page URLs to scrape posts from (e.g. \"https://www.facebook.com/cocacola\"). Accepts named pages, numeric IDs, and usernames.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPostsPerPage": {
                        "title": "⚙️ Max posts per page",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of posts to extract per page. Scraper scrolls the feed to load more posts. Keep low (5–20) for quick checks, higher for comprehensive monitoring.",
                        "default": 20
                    },
                    "fromDate": {
                        "title": "📅 From date",
                        "type": "string",
                        "description": "Only scrape posts published on or after this date (format: YYYY-MM-DD). Leave empty to scrape all available posts up to the max limit."
                    },
                    "toDate": {
                        "title": "📅 To date",
                        "type": "string",
                        "description": "Only scrape posts published on or before this date (format: YYYY-MM-DD). Leave empty for no end date limit."
                    },
                    "includeComments": {
                        "title": "💬 Include top comments",
                        "type": "boolean",
                        "description": "Scrape the top visible comments for each post (author name, text, like count). Adds a few extra seconds per post.",
                        "default": false
                    },
                    "proxyCountry": {
                        "title": "🌍 Proxy country",
                        "type": "string",
                        "description": "ISO country code for residential proxy (e.g. \"US\", \"GB\", \"DE\"). Controls which country's Facebook content is shown. Use the country relevant to the pages you're scraping.",
                        "default": "US"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
