# Facebook Search Scraper - Posts by Keyword (`parseforge/facebook-search-scraper`) Actor

Searches Facebook by keyword for pages, groups, posts or videos, ranked as Facebook lists them. Page results carry 35 fields: name, URL, category, about and mission, likes, followers, rating and reviews, check-ins, hours, price range, address, phone, email, website and verification.

- **URL**: https://apify.com/parseforge/facebook-search-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Social media, Lead generation
- **Features:** Limited permissions
- **Stats:** 90 total users, 16 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 result items

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Facebook Search Scraper

**Scrape Facebook pages, groups, events, posts and videos by keyword, or read any public Facebook event in full from its URL.** Get structured data without login or API key. Export to CSV, JSON, Excel, or XML.

**Low minimum charge:** $0.005 to start a run, then you only pay for the results you get.

Facebook Search is locked behind a login wall and the official API only covers your own pages. This actor finds the public Facebook pages, groups and events that match your keywords, then opens each one to read its public profile: category, follower counts, contact details, business information. Already have the events you care about? Paste their links in **Event URLs** and get each event in full: date and timezone, venue with street address, city and map pin, every host, category, ticket link, cover image, recurring dates and the public responded count. Each result comes back as a flat row, ready for analysis.

| Who uses it | What they scrape Facebook for |
|---|---|
| Market researchers | Which brands and communities dominate a niche on Facebook |
| Lead generation teams | Find Facebook pages and groups that match an ideal customer profile |
| Community managers | Find the Facebook groups and events around a topic or place |
| Event promoters and ticketing teams | Track competing Facebook events: dates, venues, hosts, ticket links and how many people responded |
| OSINT analysts | Map public Facebook entities around a person, brand, or event |

### What it does

This Actor finds Facebook pages, groups or events matching your keywords and returns each one as a flat row.

- 🔍 **Search types:** pages, groups, events, posts or videos, one type per run.
- 📝 **Posts and videos:** each public post or video comes back with its text, author, publish time, reactions, comments and shares, plus views and length for videos.
- 📋 **Multiple queries:** pass a list of search terms and get results for all of them in one dataset.
- 🧾 **Page details:** each result is opened on Facebook for category, followers, phone, email, website, verified status, map coordinates and business information. Turn it off with `enrichPages: false` for a faster, cheaper run.
- 👥 **Groups get group data:** member count, privacy (public or private), group id and description. Facebook shows group pages only to residential connections, so when the proxy is left on its default the Actor opens groups through Apify's residential pool by itself.
- 🎫 **Event details by URL:** paste Facebook event links and get 33 fields per event: name, start and end in ISO 8601, timezone, date sentence, duration, venue, venue page, street address, city, latitude and longitude, organizer, every co-host with verified flag, categories, ticket link, cover image, online or in person, cancelled and past flags, recurrence with the other dates, and the public responded count. No search needed.
- 📅 **Events from search get the same detail:** start and end time, timezone, venue, address, city, map pin, hosts, categories and the responded count, all read from the event itself and never from the "suggested events" Facebook shows next to it.
- ⚙️ **Result caps:** `resultsPerQuery` per term and `maxItems` for the whole run, from 1 to 1,000,000.
- 🧮 **You pay for data, not for misses:** a result Facebook shows no public data for is still written to your dataset, marked with `error`, and is not charged.
- 📤 **Export ready:** download as CSV, JSON, Excel, or XML from the Apify dataset.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Facebook data

**📈 Track brand presence.**

A market researcher runs weekly searches for a brand name across pages and groups to see which communities are growing and what competitors appear.

**🎯 Build lead lists.**

A sales team searches for industry keywords in pages and groups, then exports the results to enrich their CRM with Facebook company pages.

**🧠 Map communities.**

A community manager searches groups and events for a city or a topic to find where the audience already gathers.

**🕵️ Investigate entities.**

An OSINT analyst runs a person's name or an event keyword across all three search types to map the related public pages, groups and events.

**🎟 Monitor events.**

A ticketing team pastes the Facebook links of competing shows every morning and tracks each one's date, venue, co-hosts, ticket link and how many people responded, all in one sheet.

### Why choose this scraper

|  | What you get |
|---|---|
| **No login or API key** | Reads public search listings directly, so you skip OAuth and app registration |
| **One fixed schema** | Every result, whether a page, group or event, lands in the same flat structure |
| **Bulk queries** | Run dozens or hundreds of search terms in a single actor run |
| **Scale on demand** | Collect up to a million results per run on Apify's infrastructure |

### How it compares

For Facebook events, here is how it stands next to the most used events scraper on the Store and the in-house options.

| | This Actor | apify/facebook-events-scraper |
|---|---|---|
| Event by URL | Yes | Yes |
| Search by keyword | Yes | Yes |
| Pages and groups too | Yes | No, events only |
| Street address, city, map pin | Yes | Yes |
| Attendance | Public "responded" total | Going, interested and responded |
| Price per 1,000 events by URL (free plan) | $12 | $13 |

Logged out, Facebook publishes only the total number of people who responded to an event. It does not publish the going and interested split or who they are, and this Actor never logs in, so it reports the true total instead of guessing a split.

| | Facebook Search Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When Facebook changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### What a Facebook event looks like

One row from **Event URLs**, from a real run on 2026-09-24 (cover link shortened). Text Facebook does not publish comes back as `Not Disclosed`, so a spreadsheet column never mixes blanks with values.

```json
{
  "imageUrl": "https://scontent.xx.fbcdn.net/v/t39.30808-6/799848949_1035875932822286_n.jpg",
  "name": "OTE Jazz Festival Finale",
  "url": "https://www.facebook.com/events/263-carpenter-street-columbus-oh-43206/ote-jazz-festival-finale/1599117765338763/",
  "eventId": "1599117765338763",
  "type": "event",
  "startTime": "2026-09-20T17:00:00.000Z",
  "endTime": "2026-09-21T01:30:00.000Z",
  "timezone": "EDT",
  "dateText": "Sunday, September 20, 2026 at 1:00 PM – 9:30 PM EDT",
  "duration": "8 hr 30 min",
  "isPast": true,
  "isCanceled": false,
  "isOnline": false,
  "frequency": "SINGLE",
  "description": "Due to the rain we are working on an alternative location. Look out for updates.\n\n1:30pm Island & Soul Picnic w/TNatty!\n3:30pm Copacetic\n5:00pm Selina & Friends\n6:30pm FEWXION\n8:00pm Jazmin Ghent\nGet your free tickets at our website",
  "venue": "263 Carpenter Street, Columbus, OH 43206",
  "venueUrl": "Not Disclosed",
  "address": "263 Carpenter St, Columbus, OH 43205-1805, United States",
  "city": "Columbus, Ohio",
  "latitude": 39.95927,
  "longitude": -82.97486,
  "organizer": "Olde Towne East Jazz Festival",
  "organizerId": "100091996662274",
  "organizerUrl": "https://www.facebook.com/otejazzfest",
  "respondedCount": 75,
  "ticketUrl": "Not Disclosed",
  "privacy": "PUBLIC",
  "parentEventId": "Not Disclosed",
  "hosts": [
    {
      "id": "100091996662274",
      "name": "Olde Towne East Jazz Festival",
      "url": "https://www.facebook.com/otejazzfest",
      "verified": true
    }
  ],
  "categories": [],
  "otherDates": [],
  "inputUrl": "https://www.facebook.com/events/1599117765338763/",
  "scrapedAt": "2026-09-24T15:42:33.828Z",
  "error": null
}
```

### Configure the run

Drive the Actor with a list of search queries and pick one search type: pages, groups, events, posts or videos. `resultsPerQuery` caps each term, `maxItems` caps the run. Turn `enrichPages` off if you only need what the listing shows. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "queries": [
    "nike",
    "apple"
  ],
  "searchType": "pages",
  "maxItems": 10
}
```

A larger pull:

```json
{
  "queries": [
    "nike",
    "apple"
  ],
  "searchType": "pages",
  "resultsPerQuery": 50,
  "maxItems": 200
}
```

Listings only, no page visits, at a third of the price:

```json
{
  "queries": [
    "running club madrid"
  ],
  "searchType": "groups",
  "enrichPages": false,
  "maxItems": 100
}
```

Full details for events you already have, straight from their links:

```json
{
  "eventUrls": [
    "https://www.facebook.com/events/1599117765338763/",
    "https://www.facebook.com/events/moore-theatre/alok-live-in-seattle-wa/1152235360242574"
  ]
}
```

Events near a city, with times and venues:

```json
{
  "queries": [
    "concert madrid",
    "food festival madrid"
  ],
  "searchType": "events",
  "resultsPerQuery": 20,
  "maxItems": 40
}
```

### Pricing

Pay per result. Two events, so you only pay for the page visits you asked for:

| Event | Price | When it fires |
|---|---|---|
| Result item | $0.012 | Per Facebook page, group or event written to your dataset, including each event read from **Event URLs** |
| Page enrichment | $0.018 | Per search result, only when `enrichPages` is on (the default). Not charged on events read from **Event URLs** |

| Results collected | With page details | Listings only |
|---|---|---|
| 100 results | $3.00 | $1.20 |
| 1,000 results | $30.00 | $12.00 |
| 10,000 results | $300.00 | $120.00 |

A result that Facebook shows no public data for is written to your dataset with an `error` field and **is not charged**. An event read from its URL costs $0.012, so 1,000 events cost $12.

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Facebook Search Scraper](https://apify.com/parseforge/facebook-search-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Facebook through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/facebook-search-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your search query is not too specific. Try a broader term, or switch to a different search type. A run that finds nothing ends as a success with an empty dataset and charges you nothing beyond the Actor start, and the run's status message says which of your queries came back empty.

**Why did the run stop before reaching my max results?**

Facebook may not have more results for that query and search type. The actor stops when the public listing is exhausted.

**Can I search for groups and pages in the same run?**

No. Each run uses one search type. Run the actor multiple times with different search types if you need more than one.

**Why do some rows have an `error` field?**

Facebook serves a login wall instead of a public profile for some results. Those rows are still written so you can see what was found, they carry the URL and the listing title, and they are not charged.

**A groups run returned rows with `error` and nothing else.**

Facebook sends datacenter IPs to its login page for every group. With the proxy on its default, the Actor retries each group through Apify's residential pool, which is what made group runs deliver again. If you picked your own proxy group or proxy URLs, it keeps your choice: switch it to RESIDENTIAL, or set `enrichPages: false` to keep the listing data (name, URL and snippet) without opening each group.

**A posts or videos run returned fewer rows than I asked for.**

Posts and videos are found through the public search engines, which index only part of Facebook. For a narrow topic they may know a handful of posts, and the Actor returns what exists instead of padding the dataset with pages. A post from a private group or one Facebook does not show logged out comes back with an `error` and is not charged.

**The run stopped early and said so. Why?**

The Actor watches its own run timeout and stops starting new queries when there is not enough time left to finish one, so the results it already collected are written rather than lost. Raise the run timeout to collect the rest.

**An event URL came back with an `error`.**

The event was removed, made private or age-restricted, or Facebook kept serving its page without the event details after three tries on fresh IPs. The row keeps the event ID and the link you gave and is not charged. Run it again later, or switch the proxy to a residential group.

**Why do events show a responded count and not going and interested?**

Logged out, Facebook shows only the total number of people who responded. The split and the guest list need a Facebook login, which this Actor never uses.

**Why are some fields empty in my results?**

Facebook does not always show the same metadata for every result. Empty fields mean that information was not present in the public listing.

### FAQ

| Question | Answer |
|---|---|
| Do I need a Facebook account or API key? | No. This actor reads public Facebook Search listings without login or API credentials. |
| What search types can I scrape? | Pages, groups, events, posts and videos. You choose one type per run. |
| Can I search for multiple queries at once? | Yes. Pass a list of search queries and the actor will collect results for each one in a single run. |
| How many results can I get? | You can set a maximum from 1 to 1,000,000 results per run. The actor stops when it reaches that cap or when no more results are available. |
| What data does each result include? | **Pages:** name, URL, slug, page ID, category and categories, description, follower and talking-about counts, verified status, phone, email, website, mission and about text, address, city, country, latitude and longitude, rating and review counts, founding date, opening hours, price range, Messenger link, profile and cover photos. **Groups:** group ID, name, description, member count and privacy. **Events:** event ID, name, description, start and end time, timezone, the date sentence, duration, venue and venue page, street address, city, coordinates, organizer, every co-host, categories, privacy, online, cancelled and past flags, recurring dates, the public responded count, ticket link and cover image. Facebook does not publish every field for every result, so a field it does not show comes back null. |
| Can I export the data? | Yes. Download your dataset as CSV, JSON, Excel, or XML directly from Apify. |
| Is this legal? | You are responsible for complying with Facebook's terms of service and applicable laws. This actor only accesses publicly available search listings. |
| Can I schedule recurring runs? | Yes. Use Apify's scheduler to run this actor daily, weekly, or on any custom interval. |
| What if I get no results for a query? | Facebook may return no results for very specific or uncommon queries. Try a broader term or a different search type. The run still succeeds and charges nothing for the empty queries. |
| Can I get the details of a Facebook event I already have? | Yes. Put its link in **Event URLs**. Any public event link works, including the long form with the venue and title in it and one date of a recurring event. |
| Can I get the guest list of an event? | No. Logged out, Facebook shows only how many people responded, not who they are. The Actor reports that total in `respondedCount`. |
| Can I scrape Facebook profiles or private content? | No. This actor reads public listings and public page profiles only. It does not log in, and it does not access personal profiles, private groups, or any content behind a login. |

### Related actors

- [Facebook Pages Scraper](https://apify.com/parseforge/facebook-pages-scraper?fpr=vmoqkp): 30 fields per page, followers and contact info.
- [Facebook Groups Scraper](https://apify.com/parseforge/facebook-groups-scraper?fpr=vmoqkp): group posts and member counts.
- [Facebook Posts Scraper](https://apify.com/parseforge/facebook-posts-scraper?fpr=vmoqkp): posts with the reaction split.
- [Eventbrite Event Scraper](https://apify.com/parseforge/eventbrite-scraper?fpr=vmoqkp): events, venues and ticket prices from Eventbrite.
- [Meetup Event Scraper](https://apify.com/parseforge/meetup-scraper?fpr=vmoqkp): Meetup events and groups.

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

⭐ **Found this Actor useful?** [Leave a review](https://console.apify.com/actors/m5GRLRRCpHItqIz19/reviews). It takes a minute and helps us keep it maintained.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `queries` (type: `array`):

One search term per line. Terms are de-duplicated, and a single line holding a comma- or newline-separated list is split for you. Leave empty if you only want the event details from Event URLs below.

## `eventUrls` (type: `array`):

Facebook event links to read in full, one per line: date and timezone, venue with address, city and map pin, every host, category, cover image, recurring dates and the public responded count. Any public event URL works, including the long /events/venue/title/ID form and one date of a recurring event. No search needed.

## `searchType` (type: `string`):

What to search for, one type per run. Posts and videos return the public post or video: text, author, publish time, reactions, comments, shares, and views and duration for videos.

## `resultsPerQuery` (type: `integer`):

How many results to collect for each query, before the overall maximum applies.

## `maxItems` (type: `integer`):

Maximum number of results for the whole run, event URLs included. Left empty, it is every event URL plus queries x results per query.

## `enrichPages` (type: `boolean`):

Open each search result on Facebook for contact details, counters, category and business information. For events it reads the full event: timezone, address, city, hosts, categories and the responded count. Turn it off for a faster, cheaper run that returns only what the search listing shows.

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

Facebook blocks datacenter traffic quickly. Apify Proxy is used by default.

## Actor input object example

```json
{
  "queries": [
    "nike",
    "apple"
  ],
  "eventUrls": [
    "https://www.facebook.com/events/1599117765338763/"
  ],
  "searchType": "pages",
  "resultsPerQuery": 10,
  "maxItems": 10,
  "enrichPages": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Complete dataset

# 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 = {
    "queries": [
        "nike",
        "apple"
    ],
    "eventUrls": [
        "https://www.facebook.com/events/1599117765338763/"
    ],
    "searchType": "pages",
    "resultsPerQuery": 10,
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/facebook-search-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 = {
    "queries": [
        "nike",
        "apple",
    ],
    "eventUrls": ["https://www.facebook.com/events/1599117765338763/"],
    "searchType": "pages",
    "resultsPerQuery": 10,
    "maxItems": 10,
}

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

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

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

```

## CLI example

```bash
echo '{
  "queries": [
    "nike",
    "apple"
  ],
  "eventUrls": [
    "https://www.facebook.com/events/1599117765338763/"
  ],
  "searchType": "pages",
  "resultsPerQuery": 10,
  "maxItems": 10
}' |
apify call parseforge/facebook-search-scraper --silent --output-dataset

```

## MCP server setup

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

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

## OpenAPI specification

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