# Facebook Page Search & API: Business Leads Without Login (`s_actors/facebook-page-search-scraper`) Actor

Search Facebook pages by keyword and city ("dentist chicago") without login or cookies. Each page with exact followers, category, email (also from its website), phone, website, address, rating, Instagram. Only new pages mode for weekly lead lists.

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

## Pricing

from $1.73 / 1,000 pages

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

### Facebook Page Search & API: Business Leads Without Login

**Search Facebook pages by keyword and city, without login or cookies.** Type what you would type into a search box, like `dentist chicago`, `yoga studio berlin` or `real estate agent miami`, and get the matching Facebook business pages with everything a lead list needs: **exact follower count, category, email, phone, website, address with coordinates, rating**, Instagram and other accounts.

The email comes from the page itself or, when the page shows none, **from the page's website** (home, contact and imprint pages), and every email domain is **checked for a mail server**. Run the same searches every week with **Only new pages** and get only the pages you have not seen before.

A Facebook page finder and Facebook page search API with clean JSON, CSV or Excel output: for local lead generation, B2B outreach, influencer and partner prospecting, competitor research and business directories.

#### What makes it different

| | |
| --- | --- |
| 🔎 **Search by keyword + city** | Facebook's own page search needs a login; this Actor finds the pages through Google and opens each one as a logged-out visitor |
| 📇 **A full lead in one run** | `email`, `phone`, `website`, `address` with `latitude` / `longitude`, rating and reviews: no second enrichment step |
| 🌐 **Email from the website too** | Pages that publish no email on Facebook get one from their website; `emailSource` tells which |
| 🔢 **Exact followers** | `followers`, `talkingAbout`, `wereHere` as full numbers (2,305, not "2.3K"), to rank leads by audience |
| 🆕 **Only new pages** | Remembers what each search returned and skips it next time: a weekly prospect feed instead of the same list again |
| 🔒 **No account, no cookies, no proxy setup** | Only public data; your Facebook account is never used or at risk |

#### Example

Input: `dentist chicago`, 15 pages per search. Real run, 13 Oct 2026 (first rows):

| Page | Category | Followers | Email | Phone | Address |
| --- | --- | --- | --- | --- | --- |
| My Dentist Chicago | Medical Service | 348 | mydentists@comcast.net | (773) 434-1515 | 2555 W 79th Street, Chicago, IL, United States, 60652 |
| Premier Dentistry at Millennium Park | Dentist & Dental Office | 707 | contactus@pdchicago.com | (312) 726-1901 | 30 N Michigan Ave #1503, Chicago, IL |
| Modern Smiles Chicago | Cosmetic Dentist | 282 | info@modernsmileschicago.com | (312) 500-7080 | 3901 N. Broadway & 1108 N. Wells Street, Chicago, IL |
| The Chicago Dental Studio | Dentist & Dental Office | 2,305 | smile@thechicagodentalstudio.com | (312) 267-1917 | Chicago, IL, United States, 60654-3412 |
| ChicagoDentistry | Dentist & Dental Office | 2,011 | office@chicagodentistry.com | (773) 643-6006 | 1525 E 53rd St, Ste 734, Chicago, IL |

14 of the 15 pages came with an email, all with a phone and an address. The run took 2 Google result pages. The same day, `yoga studio berlin` on Germany returned Berlin studios such as Mahalaya Yoga Berlin (2,569 followers, info@mahalaya-yoga.de, Boxhagener Straße 77-78).

#### Input

| Field | What it does |
| --- | --- |
| **Searches** | One per line: business type or keyword, best with a city (`dentist chicago`, `hair salon london`, `coffee roaster portland`) |
| **Country (Google market)** | Where to search: pick the country of your city (default United States; `berlin` on United States finds Berlin, MD) |
| **Pages per search** | Maximum pages per search, 1-100 (default 50) |
| **Only new pages** | Skip pages returned by earlier runs of the same search (free); for scheduled weekly runs |
| **Also find emails on the page's website** | Opens the page's website and adds its emails (on by default, included in the price) |
| **Only pages with an email** | Return only pages with an email; the others are left out and free |
| **Check that the email domain receives mail** | MX lookup of every email domain (on by default) |
| **Include personal profiles** | Also return people's profiles that Google finds (off by default: only business pages) |
| **Contact pages to open per website**, **Parallel pages** | Website depth (0-5, default 2) and speed (1-20) |

#### Output

| Field | Example |
| --- | --- |
| `query`, `rank` | dentist chicago, 1 (position among the Facebook pages Google found) |
| `name`, `category`, `type`, `url`, `username` | My Dentist Chicago, Medical Service, Page, https://www.facebook.com/mydentistchicago/, mydentistchicago |
| `followers`, `talkingAbout`, `wereHere`, `verified` | 348, null, 9, false |
| `email`, `emailSource`, `emails`, `emailMailServer` | mydentists@comcast.net, facebook, every valid email, true |
| `phone`, `website`, `websites`, `contactPageUrl`, `websiteReachable` | (773) 434-1515, https://www.mydentistchicago.com/ |
| `address`, `location`, `latitude`, `longitude`, `serviceArea` | 2555 W 79th Street, Chicago, IL, United States, 60652, Chicago IL, 41.74976, -87.68738 |
| `instagram`, `linkedin`, `x`, `tiktok`, `youtube`, `pinterest`, `yelp`, `whatsapp`, `socialLinks` | social accounts from the page and its website |
| `openStatus`, `priceRange`, `rating`, `recommendPercent`, `reviewCount` | Closed now, null, Not yet rated (4 reviews), null, 4 |
| `intro`, `pageId`, `profileId`, `profilePictureUrl` | We have exceeded in creating a peaceful..., 364852107637097, 100046578326143, image link |
| `googleTitle`, `googleSnippet`, `country`, `checkedAt` | My Dentist Chicago | Chicago IL, the Google snippet, us, 2026-10-13T11:03:07+00:00 |

Dataset views: *Pages*, *Leads*, *Audience* and *Location & business*.

#### Pricing

Pay per event: **$0.001** per run and **$0.00216** per page (**$2.16 per 1 000 pages**). Apify Scale plan: $1.94 per 1 000, Business plan and above: $1.73 per 1 000. The Google search, the website email search and the mail server check are included. When Facebook keeps showing its login page to our servers on big runs, a page's About section is retried through a residential proxy, charged **$0.01 per started MB** of that traffic (~0.2 MB, ~$0.002 a page). All in, a page with its contacts costs **~$4-4.50 per 1 000**, proxy included. Personal profiles, hidden pages, rows without contacts (`detailsMissing`), repeats and pages skipped by **Only new pages** or **Only pages with an email** are free.

| Example | Cost |
| --- | --- |
| 1 search, 20 pages | ~$0.05-0.09 |
| 10 searches, 50 pages each | ~$1.08-2.00 |
| 52 weekly runs, ~30 new pages per run | ~$3.42-6.70 a year |

#### Other Facebook tools

| Tool | What it does |
|---|---|
| [Facebook Page Scraper](https://apify.com/s_actors/facebook-page-scraper) | Exact followers and growth, page creation date, ads status, latest post |
| [Facebook Email Scraper](https://apify.com/s_actors/facebook-email-scraper) | Emails of Facebook pages you already have, from the page and its website |
| [Facebook Follower Count Checker](https://apify.com/s_actors/facebook-follower-count-checker) | Exact follower count of many pages and its growth over 7 and 30 days |

#### FAQ

**How do I search Facebook pages without logging in?** Put a keyword and a city into **Searches** (`dentist chicago`) and run. Facebook's own search shows pages only to logged-in users, so the Actor finds them through Google and opens each page as a logged-out visitor.

**How many pages does one search return?** Google lists about 100 results for a search, so a busy niche gives 50-80 Facebook pages. For bigger lists add searches by district, suburb or synonym: `dentist lincoln park chicago`, `dental clinic chicago`, `orthodontist chicago`. Repeats across searches are returned once.

**Is there a Facebook page search API?** Yes: run this Actor through the Apify API (below) and get JSON in seconds, without a Facebook app review or access token.

**How does Only new pages work?** The Actor remembers the pages returned for each search text and country. Put the same searches on a weekly schedule: every run returns only pages that are new to you, and you pay only for them.

**Are the emails valid?** Each email domain is checked for a mail server (MX record); addresses on domains that cannot receive mail are dropped. No email is sent.

**Do I need a Facebook account or cookies?** No. Only data that Facebook shows to any logged-out visitor is read.

#### Tips

- Search in the language of the country: `zahnarzt berlin` on Germany finds more German practices than `dentist berlin`.
- Use the *Leads* view for outreach and export it to CSV, Excel or a [Google Sheet](https://apify.com/s_actors/google-sheets-import-export).
- Sort by `followers` to find the biggest pages in a niche, or the smallest ones that need marketing help.

#### Limits

- Pages come from Google's index: very new or inactive pages that Google has not indexed are not found.
- Pages that Facebook hides from logged-out visitors (age or country restricted) are skipped (free).
- When Facebook hides a page's About section even from the residential retry, the page still comes with its name, exact followers and page ID but without contacts, marked in `detailsMissing`, and is free.
- Groups, events, posts and Marketplace are not returned; a post or video link found by Google counts as its page.
- Some websites block automated visitors or load contacts only with JavaScript: then only the Facebook email is returned.

#### Ready-made tasks

| Task | What it does |
| --- | --- |
| [Facebook Business Directory: Pages by Keyword & City](https://apify.com/s_actors/facebook-page-search-scraper/examples/facebook-business-directory) | Local business pages for a keyword and city, with emails, phones and addresses |

#### Related tools

| Tool | What it does |
|---|---|
| [Google Maps Email Extractor](https://apify.com/s_actors/google-maps-email-extractor) | Emails and social links of local businesses from Google Maps |
| [Google Maps Scraper](https://apify.com/s_actors/google-maps-scraper) | Places, ratings, phones and websites from Google Maps |
| [LinkedIn Company Scraper](https://apify.com/s_actors/linkedin-company-scraper) | Exact employee count and headcount growth of companies |
| [Google Sheets Import & Export](https://apify.com/s_actors/google-sheets-import-export) | Send the leads to a Google Sheet |

#### Use with the API and AI agents

Run it via the [Apify API](https://docs.apify.com/api/v2) from Python, Node.js or any HTTP client, or connect it to Claude, ChatGPT and other AI agents through the [Apify MCP server](https://mcp.apify.com): "Find 50 yoga studios in Austin on Facebook and list the ones with more than 1,000 followers and an email."

```json
{
    "queries": ["dentist chicago", "orthodontist chicago"],
    "country": "us",
    "maxPagesPerQuery": 50,
    "onlyNew": true,
    "onlyWithEmail": false
}
```

Each row is one page with `query`, `rank`, `name`, `category`, `followers`, `email`, `phone`, `website`, `address` and `url`.

#### Is it legal?

The Actor collects only public business details that companies publish on their Facebook pages and websites, without logging in. Use personal data such as names, emails and phone numbers in line with GDPR, CAN-SPAM and other privacy and anti-spam laws.

# Actor input Schema

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

One search per line: a business type or keyword, best with a city, e.g. "dentist chicago", "yoga studio berlin", "coffee roaster portland", "real estate agent miami". Each search returns up to "Pages per search" Facebook pages.

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

The Google market the pages are searched in: pick the country of your city ("berlin" on United States finds Berlin, MD and Berlin, NJ). The language follows the country.

## `maxPagesPerQuery` (type: `integer`):

Maximum Facebook pages returned for one search (1-100). Google lists about 100 results for a search, so a busy niche gives 50-80 pages; for more, add searches by district or synonym ("dentist lincoln park chicago", "dental clinic chicago").

## `onlyNew` (type: `boolean`):

Remember the pages returned for each search (same text and country) and skip them in later runs: schedule the same searches weekly and get only the pages you have not seen. Skipped pages are free.

## `searchWebsite` (type: `boolean`):

Opens the website listed on the Facebook page (its home page and, while no email is found, its contact / imprint pages) and adds the emails found there. Included in the price.

## `onlyWithEmail` (type: `boolean`):

Return only pages with at least one email (from Facebook or the website). Pages without one are then left out and free.

## `checkMailServer` (type: `boolean`):

Looks up the mail server (MX record) of every email domain: addresses on domains that cannot receive mail are dropped.

## `includeProfiles` (type: `boolean`):

Google also finds personal profiles of people; by default only Pages (and profiles with a business category) are returned.

## `contactPages` (type: `integer`):

When the home page has no email: how many contact-like pages of the same site to open (contact, imprint, about...). 0 = home page only.

## `maxConcurrency` (type: `integer`):

How many Facebook pages are opened at the same time.

## Actor input object example

```json
{
  "queries": [
    "dentist chicago"
  ],
  "country": "us",
  "maxPagesPerQuery": 20,
  "onlyNew": false,
  "searchWebsite": true,
  "onlyWithEmail": false,
  "checkMailServer": true,
  "includeProfiles": false,
  "contactPages": 2,
  "maxConcurrency": 8
}
```

# Actor output Schema

## `pages` (type: `string`):

One row per page: name, category, followers, email, phone, website, address, rating.

## `leads` (type: `string`):

Contacts for outreach: best email, where it was found, phone, website, address, socials.

## `audience` (type: `string`):

Exact followers, talking about, check-ins, rating, reviews, verification.

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

Address with coordinates, opening status, price range, service area.

## `all` (type: `string`):

Every field of every row.

# 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": [
        "dentist chicago"
    ],
    "maxPagesPerQuery": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("s_actors/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 = {
    "queries": ["dentist chicago"],
    "maxPagesPerQuery": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("s_actors/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 '{
  "queries": [
    "dentist chicago"
  ],
  "maxPagesPerQuery": 20
}' |
apify call s_actors/facebook-page-search-scraper --silent --output-dataset

```

## MCP server setup

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