# Facebook Search Scraper — People, Pages, Posts & More (`memo23/facebook-search-scraper`) Actor

The most complete Facebook search: people, pages, places, events, posts, videos and top — in one actor, no login and no cookies. Get names, URLs, profile pictures, verified badges, event dates, and post text with authors. Auto-paginates across results. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/memo23/facebook-search-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, AI, Agents
- **Stats:** 179 total users, 71 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.90 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Search Scraper

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/facebook-search/logo.png" width="130" alt="Facebook Search Scraper">
</p>

**Search Facebook across every tab — people, pages, events, posts and videos — and get clean structured data. No login, no cookies, no browser. Enter a keyword, pick a search type, and the actor queries Facebook's own search and returns names, profile/page URLs, profile pictures, verification badges, page descriptions, the business's own website, and post text with author IDs.**

| You give | You get |
|---|---|
| A keyword + a search type | One structured row per matching result |

> Pure HTTP. No account, no cookies, no headless browser. Results come straight from Facebook's own search — not scraped from Google.

***

### Why use this scraper

- **No login and no cookies.** You don't provide a Facebook account or session. The actor bootstraps a guest token and calls Facebook's search directly.
- **Six search types, one actor.** People, pages, events, posts, videos, or "top" (all) — selected with a single `searchType` field.
- **Native Facebook results.** Straight from Facebook's ranking, not a Google `site:` workaround.
- **City filtering.** Pass a Facebook place UID and the search is scoped to that city — Facebook's own City filter, on people, pages, places and events.
- **Auto-pagination.** Set `maxItems` and the actor walks the result cursor across pages for you.
- **Business websites.** Pages and places return the site the business links to, already unwrapped from Facebook's `l.php` redirect — feed it straight into enrichment.
- **Rich fields.** Names, URLs, pictures, verified badges, page descriptions, the profile's "Lives in" line, and for posts and videos the body text, author name + numeric ID + profile URL, permalink and timestamp.

### How it works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/facebook-search/how-it-works-facebook-search.png" width="900" alt="How the Facebook Search scraper works">
</p>

1. **You give** a keyword (or several) and a search type.
2. **We fetch** — bootstrap a guest token, call Facebook's search API (one query serves every tab), and page through the results via the cursor. FB traffic egresses through residential proxies.
3. **You get** structured rows (JSON, CSV, or Excel), each tagged with a `rowType`.

### Supported search types

| `searchType` | Returns | Key fields | City filter |
|---|---|---|---|
| `people` | Profiles | name, profile URL, picture, verified, "Lives in" line | yes |
| `pages` | Pages | name, page URL, picture, verified, description, website | yes |
| `places` | Places / businesses | name, URL, picture, verified, description, website | yes |
| `events` | Events | name, event URL, picture | yes |
| `posts` | Public posts | text, author + author ID, permalink, time | no |
| `videos` | Reels & videos | caption, reel URL, thumbnail, uploader + ID, time | no |
| `top` | Mixed (all of the above) | per-entity fields | no |

### Use cases

- **Lead generation** — find people and pages matching a niche, brand, or location.
- **Brand & competitor monitoring** — track public posts and pages mentioning a keyword.
- **Event discovery** — pull events matching a topic or city.
- **Audience & influencer research** — surface profiles and pages around a theme.
- **Social listening** — collect public post text + authors for a keyword over time.

### Input configuration

| Field | Type | Notes |
|---|---|---|
| `searchType` | select | `top`, `people`, `pages`, `places`, `events`, `posts`, `videos` |
| `searchQueries` | array | One or more keywords to search |
| `locationUid` | string | Optional. Facebook place UID to scope the search to one city |
| `onlyPostsNewerThan` | string | Optional. Start of a date window, e.g. `2026-01-01`. **Posts only** |
| `onlyPostsOlderThan` | string | Optional. End of the window, e.g. `2026-03-31` (that whole day included). **Posts only** |
| `maxItems` | integer | Max total results across all queries |
| `pageDelayMs` | integer | Delay between paginated calls |
| `proxy` | object | Residential recommended (Facebook rate-limits datacenter IPs) |

#### Example input

```json
{
  "searchType": "people",
  "searchQueries": ["coffee roaster", "specialty coffee"],
  "maxItems": 200
}
```

#### Searching one city

`locationUid` applies Facebook's own City filter, so `places` searches return
businesses in that city and `people` searches return profiles who list it as
their location:

```json
{
  "searchType": "places",
  "searchQueries": ["coffee"],
  "locationUid": "112548152092705",
  "maxItems": 100
}
```

**Finding the UID.** Open a Facebook city page and take the number out of the
URL — `facebook.com/places/106078429431815/` is London. Or run a search on
facebook.com, apply the **City** filter, and copy the resulting URL. The field
accepts all three forms: the bare number, the `/places/<uid>/` URL, or the full
search URL.

A few to start with: London `106078429431815`, Paris `110774245616525`,
Portland OR `112548152092705`.

**Two things to know.** The UID has to be a real place — Facebook accepts any
page id here and then matches nothing, so a wrong id gives an empty run rather
than an error (the log says so when it happens). And Facebook has no city filter
for `posts`, `videos` or `top`; set one there and the actor runs unfiltered and
logs a warning instead of failing.

### Output

Null fields are omitted from the samples below; every row carries the full key
set, so CSV and Excel exports line up.

#### `rowType: "page"` / `"place"`

```jsonc
{
  "rowType": "page",
  "id": "100064803603692",
  "name": "Coffee Island",
  "url": "https://www.facebook.com/CoffeeIslandCyprus",
  "profilePicture": "https://scontent.../...jpg",
  "isVerified": true,
  "description": "Το ταξίδι στη χώρα του καφέ… Welcome to Coffee Island!",
  "website": "http://www.coffeeisland.com.cy/",
  "query": "coffee island",
  "searchType": "pages"
}
```

#### `rowType: "person"`

```jsonc
{
  "rowType": "person",
  "id": "100044619540852",
  "name": "John Smith",
  "url": "https://www.facebook.com/thejohnsmith",
  "profilePicture": "https://scontent.../...jpg",
  "isVerified": true,
  "subtitle": "Lives in San Antonio, Texas",
  "searchType": "people"
}
```

#### `rowType: "event"`

```jsonc
{
  "rowType": "event",
  "name": "Cavendish Beach Music Festival 2026",
  "url": "https://www.facebook.com/events/1108414837875098/"
}
```

#### `rowType: "post"`

```jsonc
{
  "rowType": "post",
  "id": "1023706227132483",
  "authorName": "White Oak Mtn Coffee",
  "authorId": "100084793454538",
  "authorUrl": "https://www.facebook.com/whiteoakmtncoffee",
  "text": "Coffee connects people from all over the world. 🌎☕️…",
  "postUrl": "https://www.facebook.com/whiteoakmtncoffee/posts/pfbid02EY%E2%80%A6",
  "creationTime": "2026-08-17T15:25:28.000Z"
}
```

#### `rowType: "video"`

```jsonc
{
  "rowType": "video",
  "id": "122127066963218787",
  "authorName": "The Home Coffee",
  "authorId": "61586563628977",
  "text": "🥛🍫 Nutella Iced Coffee ☕️🧊…",
  "url": "https://www.facebook.com/reel/1004992302321918/",
  "profilePicture": "https://scontent.../thumbnail.jpg",
  "creationTime": "2026-07-01T10:14:39.000Z"
}
```

### Key output fields

| Field | Description |
|---|---|
| `rowType` | person / page / event / post / video |
| `name` | Profile / page / event name (or post author) |
| `url` | Facebook URL of the result |
| `id` | Facebook numeric ID of the profile, page, place, event or post |
| `profilePicture` | Avatar / cover image (video rows carry the thumbnail here) |
| `isVerified` | Verified badge (people & pages) |
| `description` | Page / place description from the result card |
| `website` | The business's own site, unwrapped from Facebook's `l.php` redirect |
| `subtitle` | The profile's location line, e.g. "Lives in San Antonio, Texas" |
| `locationDescriptor` | Address or neighbourhood when Facebook appends one to the name |
| `text` | Post body, or the video caption |
| `authorName` / `authorId` / `authorUrl` | Post or video author, with their numeric ID |
| `postUrl` / `creationTime` | Permalink and timestamp (posts & videos) |
| `query` / `searchType` | The search that produced the row |
| `locationUid` | The city UID the row was filtered by (only when one was set) |

### FAQ

**Do I need a Facebook account or cookies?** No. The actor works fully logged-out with a guest token — nothing to provide.

**Is this Facebook's real search?** Yes — it calls Facebook's own search endpoint, so results and ranking match what you'd see on the site (not a Google `site:facebook.com` workaround).

**Can I search a date range?** Yes, on the `posts` tab. Set `onlyPostsNewerThan` and/or
`onlyPostsOlderThan`. Facebook's own date filter is month-granular at the edges and lets a few
out-of-window posts slip through — verified live: a 2019 window returned three posts dated into
January 2020. So the filter is used to narrow the crawl, and results are then trimmed to your exact
dates. **Anything outside the window is never pushed and never charged**, and the run log reports how
many were trimmed. Date windows do not apply to the other tabs; ask for one there and the run says so
rather than pretending to filter.

**Can I search a specific city?** Yes — set `locationUid` to a Facebook place UID (e.g. `106078429431815` for London) and people, pages, places and events searches are scoped to that city. Facebook offers no city filter for posts, videos or top.

**Do I get the business's website?** Yes, when the page publishes one — `website` holds the real destination, already unwrapped from Facebook's `l.php` redirect, so it drops straight into an enrichment step.

**Do posts come with like and comment counts?** No. Facebook withholds engagement counts from logged-out requests, and this actor never logs in. You get the body, author (with numeric ID), permalink and timestamp.

**Which proxy should I use?** Residential. Facebook rate-limits datacenter and cloud IPs, so residential proxies give reliable throughput.

**How many results can I get?** It auto-paginates until `maxItems` or the results run out. Each keyword returns its own paginated set.

**Why isn't group search supported?** Facebook gates group search behind a login, which this no-cookie actor deliberately avoids. People, pages, events, posts and videos are all available logged-out.

### Notes & limitations

- Only **public** search results are returned (logged-out visibility).
- Group search is not available without a login and is intentionally omitted.
- City filtering (`locationUid`) covers people, pages, places and events; Facebook exposes no city filter for posts, videos or top.
- Reaction, comment and share counts are not returned — Facebook does not send them to logged-out requests.
- Event start times are not in Facebook's search response; event rows carry the name, URL and cover image, and the date lives on the event page itself.
- `description` and `website` are present only when the page publishes them; `subtitle` appears on the minority of profiles that show a public location.
- Facebook changes its internals periodically; the actor is maintained to keep pace.

### Support

Found a bug or need a search type that isn't exposed? Open an issue on the Actor's **Issues** tab on Apify, or reach out via the Apify Store profile. Include your input JSON and the run ID.

### Explore more scrapers

More Facebook and social tools from the same developer:

- [Facebook Marketplace Scraper](https://apify.com/memo23/facebook-marketplace-scraper-ppe) — newest Marketplace listings, fast
- [Facebook Public Group Posts & Comments](https://apify.com/memo23/facebook-public-group-posts-scraper) — no cookies needed
- [Facebook Comments Scraper](https://apify.com/memo23/facebook-comments-scraper) — full comment threads for any public post
- [Facebook Ads Library Scraper](https://apify.com/memo23/facebook-ads-library-scraper-ppe) — ads intel with reach included
- [Google Flights Scraper](https://apify.com/memo23/google-flights-scraper) — fares & multi-city from $1/1k

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/facebook-search-scraper`).

**Purpose:** Facebook's own native search across people, pages, places, events, posts and videos — fully logged-out (no account, no cookies) via a bootstrapped guest token, so results match Facebook's ranking rather than a Google `site:` workaround.

**Minimal input:**

```json
{
  "searchType": "people",
  "searchQueries": ["coffee roaster"],
  "maxItems": 50
}
```

**Output:** one row per result — rowType, id, name, url, profilePicture, isVerified, query, searchType. Pages and places add description and website (the business's own site, already unwrapped from Facebook's `l.php` redirect); people add subtitle (the "Lives in …" line); posts and videos add text, authorName, authorId, authorUrl, postUrl and creationTime. Every row carries the full key set with nulls where a field does not apply.

**Behaviors an agent should know:**

- `searchType` selects the tab: `top`, `people`, `pages`, `places`, `events`, `posts`, `videos` (default `people`); one query serves every tab.
- `locationUid` scopes the search to one city by Facebook place UID (e.g. `106078429431815` = London) and works on `people`, `pages`, `places`, `events`; on `posts`, `videos` and `top` Facebook has no city filter, so the actor ignores it and logs a warning. A UID that is not a place returns zero rows rather than an error.
- Always set `maxItems` (total across all queries, default 100) — the actor auto-paginates the result cursor until the cap or the results run out.
- Group search is not supported (login-gated and deliberately omitted); only public, logged-out results are returned.
- Datacenter proxy is the default and works well; switch to RESIDENTIAL only if you hit rate limits at high volume.
- Engagement counts (reactions, comments, shares) and event start times are not available logged-out and are never returned; do not prompt for them.
- Billing: Pay-per-event billing — see the Pricing tab on the actor page.

### ⚠️ Disclaimer

This actor collects **publicly available** data from Facebook search for legitimate purposes such as market research, lead generation, and social listening. You are responsible for how you use the data. Comply with Facebook's Terms of Service, applicable data-protection law (including the GDPR when handling personal data), and all local regulations. Do not use collected personal data for unsolicited contact where prohibited. This tool is not affiliated with, endorsed by, or connected to Facebook or Meta.

### SEO Keywords

Facebook search scraper, Facebook scraper, Facebook people search, Facebook pages scraper, Facebook posts scraper, Facebook events scraper, Facebook search API, scrape Facebook without login, Facebook data extraction, social media scraper, Facebook profiles scraper, Facebook keyword search, Facebook lead generation, social listening tool, Facebook public data, no-cookie Facebook scraper, Facebook video search, Meta search scraper, Apify Facebook scraper, Facebook search results, Facebook search by city, Facebook location filter, Facebook city UID, Facebook place ID search, Facebook business website scraper, Facebook page description scraper, Facebook reels scraper.

# Actor input Schema

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

Which Facebook search tab to scrape.

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

Keywords to search for on Facebook.

## `locationUid` (type: `string`):

Optional. Scope the search to one city by its Facebook place UID — e.g. 106078429431815 for London, 110774245616525 for Paris. You can also paste the full facebook.com/places/<uid>/ URL, or a Facebook search URL that already has a city filter applied. To find a UID: open facebook.com/search, apply the City filter, then copy the number out of the resulting URL. Supported on People, Pages, Places and Events. Facebook offers no city filter for Posts, Videos or Top — the actor runs those unfiltered and logs a warning. The UID must be a real place: any other page id returns zero results instead of an error.

## `onlyPostsNewerThan` (type: `string`):

Start of the date window, e.g. 2026-01-01. Posts tab only. Facebook's own date filter is month-granular at the edges, so results are trimmed to your exact dates before anything is pushed or charged.

## `onlyPostsOlderThan` (type: `string`):

End of the date window, e.g. 2026-03-31 (that whole day is included). Posts tab only.

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

Maximum total results across all queries.

## `pageDelayMs` (type: `integer`):

Polite delay between paginated calls to avoid rate limits.

## `proxy` (type: `object`):

Datacenter (default) works well and is fast. If you hit rate limits at high volume, switch to RESIDENTIAL.

## Actor input object example

```json
{
  "searchType": "people",
  "searchQueries": [
    "coffee"
  ],
  "locationUid": "106078429431815",
  "maxItems": 100,
  "pageDelayMs": 800,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# 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": [
        "coffee"
    ],
    "onlyPostsNewerThan": "",
    "onlyPostsOlderThan": "",
    "maxItems": 100,
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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": ["coffee"],
    "onlyPostsNewerThan": "",
    "onlyPostsOlderThan": "",
    "maxItems": 100,
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/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": [
    "coffee"
  ],
  "onlyPostsNewerThan": "",
  "onlyPostsOlderThan": "",
  "maxItems": 100,
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call memo23/facebook-search-scraper --silent --output-dataset

```

## MCP server setup

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