# Facebook Search Scraper - Pages, Groups & Posts by Keyword (`seemuapps/facebook-search-scraper`) Actor

Search Facebook by keyword and location to find business Pages, Groups and posts, with optional email, phone, address, website and member counts.

- **URL**: https://apify.com/seemuapps/facebook-search-scraper.md
- **Developed by:** [Seemu Scraping](https://apify.com/seemuapps) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 search results

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

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

## What's an Apify Actor?

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

## Facebook Search Scraper - Pages, Groups & Posts by Keyword

Search Facebook by keyword and location and export matching business **Pages**, **Groups** and **posts**. Pages come with email, phone, address and website, and Groups come with member counts and activity. You don't need a Facebook account or cookies.

### What you get

**Pages** (businesses, brands, creators)

- Page name, URL, Facebook ID, the location shown in search and a short description
- With **Include full details**: category, **email**, **phone**, **address**, **website**, extra links, rating and review count, followers, likes, price range, creation date, whether the Page is currently running ads, Ad Library page ID, profile picture and cover photo

**Groups**

- Group name, URL, Facebook ID and a short description
- With **Include full details**: full description, **member count**, privacy (Public/Private), visibility, **posts per day and per month**, admin count, categories and creation date

**Posts**

- Post title, URL, post date, text snippet, and the Page or Group it was posted in
- Optional time filter: last 24 hours, week, month or year

You can export results to JSON, CSV, Excel or Google Sheets from the **Dataset** tab.

### Use cases

- **Local lead generation**: find every dentist, plumber, salon or restaurant in a city and pull their email, phone and website
- **Sales prospecting**: build lists of small businesses by niche and location for cold outreach
- **Community research**: find the most active Facebook Groups in your niche to join, advertise in or partner with
- **Market and competitor research**: see which businesses in a category are running Facebook ads
- **Social listening**: track public Page and Group posts that mention your brand, product or keyword

### How to use

1. Enter one or more **Search keywords**, such as `dentist`, `vintage cars` or `coffee roaster`
2. Choose **What to find**: Pages, Groups or Posts
3. Optionally add a **Location** such as `Austin TX`, `Manchester` or `Sydney` to target local businesses
4. Set **Max results per keyword** (default 50)
5. Turn on **Include full details** to get contact info for Pages or member counts for Groups
6. Run the actor. Results appear in the **Dataset** tab.

**Tips**

- Short, specific keywords work best. For wider coverage, run several related keywords (`dentist`, `orthodontist`, `dental clinic`) or several nearby locations.
- Each keyword returns up to about 100 unique results. Duplicates across keywords are removed automatically.
- Use **Search country** (e.g. `GB`, `AU`) to localise results outside the US.

### Input example

```json
{
  "searchQueries": ["dentist"],
  "searchType": "pages",
  "location": "Austin TX",
  "maxResultsPerQuery": 50,
  "includeDetails": true
}
```

### Output example

A Page with full details:

```json
{
  "type": "page",
  "searchQuery": "dentist",
  "searchLocation": "Austin TX",
  "url": "https://www.facebook.com/ChoiceAustinDental/",
  "facebookId": "100066838848202",
  "name": "Choice Austin Dental",
  "listedLocation": "Austin TX",
  "detailsFetched": true,
  "category": "Dentist & Dental Office",
  "email": "appt@austindental.com",
  "phone": "(512) 345-5552",
  "address": "11645 Angus Road, Suite 10, Austin, TX, United States, Texas",
  "website": "https://austindental.com/",
  "rating": "Not yet rated (4 reviews)",
  "followerCount": 185,
  "likeCount": 185,
  "creationDate": "June 16, 2011",
  "isRunningAds": false
}
```

A Group with full details:

```json
{
  "type": "group",
  "searchQuery": "vintage cars",
  "url": "https://www.facebook.com/groups/940932126873613/",
  "facebookId": "940932126873613",
  "name": "PRE 1950 Classic and Vintage Cars",
  "detailsFetched": true,
  "description": "A group for any car or vehicle if you prefer PRE 1950. Discuss and share. Sales welcome",
  "privacy": "Public",
  "visibility": "Visible",
  "memberCount": 45732,
  "postsLastDay": 6,
  "postsLastMonth": 210,
  "creationDate": "2022-12-19T17:34:44.000Z"
}
```

A post:

```json
{
  "type": "post",
  "searchQuery": "vintage cars",
  "url": "https://www.facebook.com/classiccarsdotcom/posts/1501153352043645/",
  "name": "For Sale: 1970 Oldsmobile 442 in Battle Ground, Washington",
  "postedAt": "2026-09-18",
  "postedAtText": "Sep 18, 2026",
  "authorUrl": "https://www.facebook.com/classiccarsdotcom/",
  "groupUrl": null
}
```

Every record has the same set of fields. Fields that don't apply to a result type, or that Facebook doesn't show publicly, are `null`. The **Pages (leads)**, **Groups** and **Posts** views in the Dataset tab show only the relevant columns.

### Pricing

You pay per result:

- **Search result**: charged once for every Page, Group or post saved to the dataset
- **Details result**: charged once more for each result where full details were found. It only applies when **Include full details** is on. If details can't be found for a result, you're charged only the search result.

### Limitations

- Only public Pages, Groups and posts can be found. Private profiles and content behind a login are not included.
- Search results come from a public web index. Very new Pages or posts may not appear yet, and each keyword reaches about 100 results.
- Post dates and snippets come from the search listing. Relative dates such as "3 days ago" are converted to an approximate calendar date.
- Some Pages don't list an email or phone number publicly. In that case those fields are `null`.

### FAQ

**Do I need a Facebook account?**
No. The actor only collects publicly available information.

**How do I get more results?**
Add more keywords or locations. For example, search `plumber` in `Denver`, `Aurora` and `Lakewood` in one run.

**Can I combine Pages and Groups in one run?**
Each run searches one type. Run the actor again with a different **What to find** setting, or save both runs as tasks.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search Facebook for, one per line (e.g. 'dentist', 'vintage cars', 'coffee roaster'). Each keyword is searched separately.

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

Pages: business and brand Pages matching the keyword, ideal for local lead generation. Groups: public and visible Groups about the keyword. Posts: public Page and Group posts that mention the keyword.

## `location` (type: `string`):

Optional city, region or country to narrow results (e.g. 'Austin TX', 'Manchester', 'Sydney'). Added to every keyword search.

## `maxResultsPerQuery` (type: `integer`):

Stop after this many unique results for each keyword. Search depth is limited to roughly 100 results per keyword; add more specific keywords or locations to go wider.

## `includeDetails` (type: `boolean`):

Pages: add email, phone, address, website, category, rating, followers and ad status. Groups: add description, member count, privacy, activity (posts per day/month) and creation date. Charged as a separate details event only when details are found. Not used for Posts.

## `country` (type: `string`):

Optional 2-letter country code (e.g. US, GB, CA, AU) to localise the search results. Leave empty for the default.

## `datePosted` (type: `string`):

Posts only: limit results to posts indexed within this time window.

## Actor input object example

```json
{
  "searchQueries": [
    "dentist"
  ],
  "searchType": "pages",
  "location": "Austin TX",
  "maxResultsPerQuery": 20,
  "includeDetails": true,
  "datePosted": "any"
}
```

# Actor output Schema

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

One row per Page, Group or post. Fields: type, url, name, snippet, and (with full details) email, phone, address, website, category, followers, member count and more.

# 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 = {
    "searchQueries": [
        "dentist"
    ],
    "location": "Austin TX",
    "maxResultsPerQuery": 20,
    "includeDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/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 = {
    "searchQueries": ["dentist"],
    "location": "Austin TX",
    "maxResultsPerQuery": 20,
    "includeDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/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 '{
  "searchQueries": [
    "dentist"
  ],
  "location": "Austin TX",
  "maxResultsPerQuery": 20,
  "includeDetails": true
}' |
apify call seemuapps/facebook-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,seemuapps/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/YweZDdAYtNosSOYXU/builds/skxbxuW22ZgakaV0q/openapi.json
