# Facebook Page Search Scraper (`parseforge/facebook-page-search-scraper`) Actor

Search Facebook pages by keyword and location, no login. Get page ID, URL, category, followers, verified badge, phone, email, website, address, rating and intro. Export CSV, Excel, JSON or XML.

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

## Pricing

from $3.40 / 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 Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🔎 Facebook Page Search Scraper

> 🚀 **Export Facebook pages by keyword in seconds.** 31 fields per page: page ID, URL, category, exact followers, verified badge, phone, email, website, address, recommendation rate and intro, with no Facebook login and no cookies.

Facebook Page Search Scraper searches Facebook's own page index by keyword, the same index Facebook uses to suggest pages, and returns every matching page as one flat row. Add a location such as "Miami" to find local businesses, filter by category, verified badge or follower count, and get each page's public contact card in the same row.

A single keyword is not limited to one screen of results: the Actor widens the search letter by letter, so "coffee roaster" alone returned 1,284 distinct pages in our tests. In a 60-page test run every row had its page ID, URL, category, followers and verified flag, 95% had a website, 78% an email, 62% a phone number and 62% a street address.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Lead generation teams, local marketing agencies, sales development reps, market researchers, brand and competitor analysts, data teams | Local business lead lists, competitor mapping, influencer and brand discovery, market sizing by category and city, CRM enrichment with Facebook pages |

### 📋 What the Facebook Page Search Scraper does

- 🔍 **Keyword search.** One or many search terms per run. Pages found by several terms are delivered once.
- 📍 **Location.** Add a city, region or country and it is added to every term ("dentist" + "Miami" searches "dentist Miami").
- 🧹 **Filters.** Category contains, verified pages only and a minimum follower count. Filtered-out pages are never written, so they are never charged.
- 📇 **Page details.** Each page is opened for its public contact card: phone, email, website, street address, price range, services, recommendation rate, review count, intro text, other accounts, cover image, talking about and were here counts.
- 📸 **Instagram account.** The linked Instagram username, its follower count and verified flag, straight from Facebook.
- 🔗 **Ready for the next step.** The `url` column is the page's canonical Facebook link, which the ParseForge Facebook posts, pages, reviews and comments Actors take as input.
- ⚡ **Fast mode.** Turn off page details to get ID, name, URL, category, followers, badge, picture and Instagram account for thousands of pages in minutes.

> 💡 **Why it matters:** Facebook is still the business directory for millions of local companies that never built a proper website. A searchable, filterable export of their pages, with the phone and email they publish, is a lead list you cannot buy anywhere else.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Every row has the same 31 columns. Values a page does not publish read `Not Disclosed`. With page details turned off, detail columns read `Not Requested`. A page Facebook restricts for logged-out visitors keeps its search fields and reads `Not Available` in the detail columns.

| Field | Description |
|---|---|
| 🖼 imageUrl | Profile picture (large when details are on) |
| 📌 name | Page name |
| 🔗 url | Canonical Facebook page link |
| 🆔 pageId | Facebook page ID |
| 🆔 profileId | Profile ID of the page (new Pages experience) |
| 👤 username | Page username, when the page has one |
| 🏷 category, categories | Main category and every category shown on the page |
| ✅ verified | Yes or No |
| 👥 followers | Exact follower count |
| 💬 talkingAbout | People talking about this |
| 📍 wereHere | Check-ins ("were here") |
| 📝 intro | The page's intro text |
| 📞 phone, ✉️ email, 🌐 website | Public contact details |
| 🏠 address | Street address shown on the page |
| 💲 priceRange | Price range ($ to $$$$) |
| 🛎 services | Services listed on the page |
| ⭐ ratingText, recommendPercent, reviewCount | Recommendation line, percent who recommend, number of reviews |
| 🔗 socialLinks | Other accounts and extra websites listed on the page |
| 📸 instagramUsername, instagramFollowers, instagramVerified | Linked Instagram account |
| 🖼 coverImageUrl | Cover photo |
| 🔎 detailsFetched | Yes, No or Not Requested |
| 🔍 searchTerm | The search text that found the page |
| 🕒 scrapedAt | Scrape time |
| ❌ error | null on success |

Three real rows from a cloud test run (image links shortened):

```json
[
  {
    "imageUrl": "https://scontent-lax3-1.xx.fbcdn.net/v/t39.30808-1/534865432_1331576194998478_1366912119577779590_n.jpg?...",
    "name": "Restaurant Week Polska",
    "url": "https://www.facebook.com/RestaurantWeekPolska/",
    "pageId": "835484109815412",
    "profileId": "Not Available",
    "username": "RestaurantWeekPolska",
    "category": "Food & Beverage",
    "categories": [
      "Food & Beverage"
    ],
    "verified": "Yes",
    "followers": 121895,
    "talkingAbout": "Not Available",
    "wereHere": "Not Available",
    "intro": "Not Available",
    "phone": "Not Available",
    "email": "Not Available",
    "website": "Not Available",
    "address": "Not Available",
    "priceRange": "Not Available",
    "services": [],
    "ratingText": "Not Available",
    "recommendPercent": "Not Available",
    "reviewCount": "Not Available",
    "socialLinks": [],
    "instagramUsername": "restaurantweek_pl",
    "instagramFollowers": 61680,
    "instagramVerified": "No",
    "coverImageUrl": "Not Available",
    "detailsFetched": "No",
    "searchTerm": "restaurant",
    "scrapedAt": "2026-09-29T01:56:32.126Z",
    "error": null
  },
  {
    "imageUrl": "https://scontent-arn2-1.xx.fbcdn.net/v/t39.30808-1/784928635_122120651883372290_4141082324392833907_n.jpg?...",
    "name": "Dion Artisan Bakery",
    "url": "https://www.facebook.com/dionartisanbakery/",
    "pageId": "1211761218682205",
    "profileId": "61591168720138",
    "username": "dionartisanbakery",
    "category": "Bakery",
    "categories": [
      "Bakery"
    ],
    "verified": "No",
    "followers": 520,
    "talkingAbout": 435,
    "wereHere": 8,
    "intro": "DION Artisan Bakery | Maia cu suflet\nPâine artizanală cu maia naturală, fermentată lent 24–48h. Rețete clasice și gourmet, ingrediente curate, fără compromisuri...",
    "phone": "+40 723 610 450",
    "email": "contact@dionbakery.ro",
    "website": "https://dionbakery.ro/",
    "address": "Soseaua Unirii 40, Corbeanca, Romania",
    "priceRange": "$",
    "services": [],
    "ratingText": "100% recommend (5 reviews)",
    "recommendPercent": 100,
    "reviewCount": 5,
    "socialLinks": [
      "https://www.instagram.com/dionartisanbakery",
      "https://youtube.com/@DionArtisanBakery"
    ],
    "instagramUsername": "dionartisanbakery",
    "instagramFollowers": 277,
    "instagramVerified": "No",
    "coverImageUrl": "https://scontent-arn2-1.xx.fbcdn.net/v/t39.30808-6/814876779_122124670383372290_1414461112118481074_n.jpg?...",
    "detailsFetched": "Yes",
    "searchTerm": "bakery",
    "scrapedAt": "2026-09-29T01:56:52.545Z",
    "error": null
  },
  {
    "imageUrl": "https://scontent-lax3-1.xx.fbcdn.net/v/t39.30808-1/500762756_1280517757417476_1590015204586554752_n.jpg?...",
    "name": "Yoga Studio Fox",
    "url": "https://www.facebook.com/yogastudiofox",
    "pageId": "502162386651194",
    "profileId": "100063777901265",
    "username": "yogastudiofox",
    "category": "Yoga Studio",
    "categories": [
      "Yoga Studio"
    ],
    "verified": "No",
    "followers": 1602,
    "talkingAbout": 38,
    "wereHere": 141,
    "intro": "Bei uns findest du mehrfach zertifizierte Online Aus- & Fortbildungen für (Kinder-)Yoga, Achtsamkeit & Meditation! \n\n👩🏻‍💻 100% Online + Live Q&As\n🏅 American...",
    "phone": "+49 1515 6135426",
    "email": "service@yogastudiofox.com",
    "website": "https://www.youtube.com/c/FoxKidsYoga",
    "address": "Not Disclosed",
    "priceRange": "Not Disclosed",
    "services": [
      "Online classes"
    ],
    "ratingText": "Not yet rated (0 reviews)",
    "recommendPercent": "Not Disclosed",
    "reviewCount": 0,
    "socialLinks": [
      "http://www.yogastudiofox.com/",
      "https://www.instagram.com/yogastudiofox"
    ],
    "instagramUsername": "yogastudiofox",
    "instagramFollowers": 11375,
    "instagramVerified": "No",
    "coverImageUrl": "https://scontent-lax7-1.xx.fbcdn.net/v/t39.30808-6/623283529_1503600441775872_3630366152008092735_n.jpg?...",
    "detailsFetched": "Yes",
    "searchTerm": "yoga studio",
    "scrapedAt": "2026-09-29T01:57:09.289Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- 📇 **A contact card, not just a name.** Phone, email, website, address, intro and ratings in the same row as the search result.
- 🔢 **Exact follower counts** such as 76,437, not "76K".
- 🌊 **Deep results per keyword.** The search is widened automatically until it reaches your Max Items or Facebook runs out of matching pages.
- 🔓 **No login, no cookies.** Your Facebook account is never involved, so it can never be restricted.
- 🧹 **Filters before you pay.** Category, verified badge and minimum followers are applied before a row is written.
- 🔗 **Chains with the rest of ParseForge.** Feed the `url` column straight into the Facebook posts, pages, reviews or comments Actors.

### 📈 How it compares to alternatives

| | This Actor | Typical Facebook page search Actors |
|---|---|---|
| Page ID, name, URL, verified, picture | ✅ | ✅ |
| Category and exact follower count | ✅ | Rarely |
| Phone, email, website, address | ✅ (as published by the page) | ❌ |
| Intro, price range, recommendation rate, reviews | ✅ | ❌ |
| Linked Instagram account and followers | ✅ | ❌ |
| Location words | ✅ plain text such as "Miami" | Some need an internal location ID |
| Category, verified and follower filters | ✅ | ❌ |
| Several keywords in one run | ✅ | Often one per run |
| Login or cookies needed | No | No |

Honest ceilings: Facebook's search matches page names, so a location word finds local pages that carry the place in their name rather than every business inside a map area. Opening hours, map coordinates and the page's post history are not part of this Actor. A small share of pages are restricted by their owners for logged-out visitors (for example by age or country); those keep their search fields and read `Not Available` in the detail columns.

### 🚀 How to use

1. Create a free Apify account with $5 of credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open Facebook Page Search Scraper and type one or more keywords into **Search terms**.
3. Optionally add a **Location**, a **Category contains** text, **Verified pages only** or a **Minimum followers** value.
4. Set **Max Items**, click **Start** and download the dataset as CSV, Excel, JSON or XML.

Example:

```json
{ "searchTerms": ["dentist", "orthodontist"], "location": "Miami", "maxItems": 200 }
```

### 💼 Business use cases

#### 📞 Local lead generation

Search "roofing contractor" with a location and export every page's phone, email and website into your CRM or dialer.

#### 🏷 Competitor and market mapping

Pull every page that matches a product keyword, then sort by followers and recommendation rate to see who leads a category.

#### 🤝 Influencer and brand discovery

Filter by **Verified pages only** or a follower minimum to shortlist established brands and creators, with their Instagram accounts alongside.

#### 🧾 CRM and data enrichment

Match company names to their official Facebook page, page ID and contact card before a campaign.

### 🔌 Automating Facebook Page Search Scraper

Schedule the Actor daily or weekly in Apify, and connect the results to Make, Zapier, Slack, Airbyte, GitHub or Google Drive. Every run's dataset is also available from the Apify API as CSV, Excel, JSON or XML.

### 🌟 Beyond business use cases

- 🎓 **Research.** Study how businesses in a sector or city present themselves on Facebook.
- 🧑 **Personal.** Build a list of local shops, clubs or venues you want to follow.
- 🤲 **Non-profit.** Find community organizations and charities working on a topic.
- 🧪 **Experimentation.** Create labelled datasets of page categories for classification models.

### 🤖 Ask an AI assistant about this scraper

Paste this Actor's link into ChatGPT, Claude or Gemini and ask how to find the pages you need, which keywords to combine and how to filter the export.

### ❓ Frequently Asked Questions

#### 🔓 Do I need a Facebook account or cookies?

No. The Actor uses only what Facebook shows logged-out visitors. No account of yours is ever involved.

#### 🌊 How many pages can one keyword return?

Usually hundreds and often more than a thousand. Our test for "coffee roaster" found 1,284 distinct pages. Very specific keywords return fewer, and the run stops as soon as Facebook has no more matches.

#### 📍 How does the location work?

The location words are added to each search term, and Facebook matches them against page names. "dentist Miami" returned 15 of 15 Miami dental practices on the first screen. Pages that do not mention the place in their name may be missed.

#### 🧹 Are filtered-out pages charged?

No. Filters run before a row is written, and only written rows are charged.

#### 📞 Why is the phone or email empty for some pages?

The page does not publish it. Those cells read `Not Disclosed`. In our test runs 62% of pages showed a phone number and 78% an email address.

#### 👥 Why do some pages share the same follower count?

Global brands run regional pages (for example several Pizza Hut pages) that Facebook reports with the brand's global follower count. Each regional page still has its own page ID and URL.

#### ⚡ What does turning off page details change?

The run skips opening each page, so it is several times faster, and each row keeps the search fields: page ID, name, URL, category, followers, verified badge, picture and Instagram account. The detail columns read `Not Requested`.

#### 🚫 What does "Not Available" mean in the detail columns?

Facebook showed "This content isn't available" for that page to logged-out visitors, usually because the owner restricted it. The page's search fields are still delivered.

#### 🔗 Can I feed the results into other ParseForge Actors?

Yes. The `url` column is the canonical page link and works as input for the Facebook Posts, Pages, Reviews and Comments Scrapers listed below.

#### 🛡 Do I need a proxy?

The Actor uses Apify Proxy by default and retries a page through a residential address if datacenter traffic is refused. You can pick your own proxy groups in the input.

#### 🔁 What if a search term matches nothing?

The run log says so and the other terms keep running. Nothing is charged for a term with no matches.

### 🔌 Integrate with any app

Use the Apify API, the JavaScript and Python clients, webhooks or the Make, Zapier and n8n integrations to send Facebook page data wherever you work.

### 🔗 Recommended Actors

- [Facebook Posts Scraper](https://apify.com/parseforge/facebook-posts-scraper): next step, the posts of each page you found
- [Facebook Pages Scraper](https://apify.com/parseforge/facebook-pages-scraper): full page profiles from a list of page links
- [Facebook Reviews Scraper](https://apify.com/parseforge/facebook-reviews-scraper): the reviews behind the recommendation rate
- [Facebook Comments Scraper](https://apify.com/parseforge/facebook-comments-scraper): comments on the posts of those pages
- [Facebook Search Scraper](https://apify.com/parseforge/facebook-search-scraper): groups, events, posts and videos by keyword

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** this is an independent tool, not affiliated with Facebook or Meta Platforms. It collects only publicly available data.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search Facebook pages for, one per line, for example "coffee roaster" or "dentist". Each term is searched on its own and pages found by several terms are delivered once.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000. The total across all search terms, shared fairly between them.

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

Optional city, region or country added to every search term, for example "Miami" gives "dentist Miami". Facebook matches it against page names, so it finds local pages that carry the place in their name.

## `categoryContains` (type: `string`):

Keep only pages whose Facebook category contains this text, for example "Coffee shop", "Dentist" or "Restaurant". Not case sensitive.

## `verifiedOnly` (type: `boolean`):

Keep only pages with Facebook's verified badge.

## `minFollowers` (type: `integer`):

Keep only pages with at least this many followers. Leave empty for no minimum.

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

Open each page for its contact and business details: talking about, were here, intro, phone, email, website, address, price range, services, recommendation rate, review count, other accounts and cover image. Turn it off for a faster run that returns only what the search itself gives: ID, name, URL, category, followers, verified badge, picture and Instagram account.

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

Apify Proxy is on by default (datacenter). When a page refuses datacenter traffic, its last try goes out through a residential address, unless you pick your own proxy groups here.

## Actor input object example

```json
{
  "searchTerms": [
    "coffee roaster"
  ],
  "maxItems": 10,
  "verifiedOnly": false,
  "includeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields of each page

## `fullData` (type: `string`):

Complete dataset with all 31 fields

# 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 = {
    "searchTerms": [
        "coffee roaster"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/facebook-page-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 = {
    "searchTerms": ["coffee roaster"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/facebook-page-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 '{
  "searchTerms": [
    "coffee roaster"
  ],
  "maxItems": 10
}' |
apify call parseforge/facebook-page-search-scraper --silent --output-dataset

```

## MCP server setup

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