# Facebook Profile Scraper (`seemuapps/facebook-profile-scraper`) Actor

Scrape public Facebook profiles in bulk - name, bio, work, education, hometown, current city, relationship, followers, verified badge and links.

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

## Pricing

$35.00 / 1,000 profile scrapeds

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 Profile Scraper

Extract public Facebook profile details in bulk - name, bio, work history, education, hometown, current city, relationship status, follower counts, verified badge, profile picture and external links. No login required.

### What you get

One clean record per profile with:

- **Identity**: `name`, `username`, numeric `profileId`, canonical `url`, `alternateName`, `gender`
- **Bio and category**: `bio` (Intro text), `accountType` (e.g. Public figure, Digital creator, Artist), `profileKind` (PROFILE or PAGE)
- **Work history**: `work[]` - employer, employer page URL, position, and whether it is a current role
- **Education**: `education[]` - school, school page URL, field of study, level (high school / college)
- **Places**: `currentCity` and `hometown`
- **Relationship**: `relationship` status plus `relationshipPartner` and `relationshipPartnerUrl` where shown
- **Audience**: exact `followers`, `likes`, `talkingAbout`, and the `joined` date when it is displayed
- **Trust signals**: `verified` badge, `creationDate`, `isRunningAds`
- **Media and links**: `profilePictureUrl`, `coverPhotoUrl`, `website`, `externalLinks[]`
- **Status**: `isPrivate` and `error` so you always know why a row is empty

Feed in a list of URLs or usernames and export the result to JSON, CSV, Excel or Google Sheets from the Apify console.

### Use cases

- Lead generation and B2B prospecting - pull job titles, employers and locations for creators and founders
- Influencer and creator vetting - confirm follower counts, verification and category before outreach
- Audience and market research - profile the people behind public brands and communities
- Recruiting and background research - work history and education at a glance
- CRM and people-data enrichment - append Facebook attributes to an existing contact list

### How to use

1. Paste one or more profiles into **Profile URLs or usernames**. Accepted formats:
   - `https://www.facebook.com/zuck`
   - `https://m.facebook.com/zuck/`
   - `https://www.facebook.com/profile.php?id=4`
   - `zuck` (bare username)
2. Optionally set **Max profiles** (default 100, `0` for no limit)
3. Keep the default **Proxy configuration** (residential) - Facebook blocks most datacenter IPs
4. Run the actor and open the **Dataset** tab - one record per profile

Duplicate inputs are removed before scraping.

### Which profiles can be scraped?

Facebook only shows profile details to visitors who are not logged in when the owner has made the profile public - profiles in **professional mode**, **public figures**, **creators**, and any profile whose About section is visible to "Everyone". Business Pages are supported too (work/education fields stay empty and page-specific fields such as `likes` and `isRunningAds` are filled instead).

Standard personal profiles that are only visible to friends, or that Facebook locks for logged-out visitors, cannot be read. For those the actor still emits a row with `isPrivate: true` and an explanatory `error`, and **you are not charged** for it.

`following` is never available on public profiles without logging in and is always `null`.

### Output format

Each dataset record:

```json
{
  "sourceUrl": "https://www.facebook.com/zuck",
  "url": "https://www.facebook.com/zuck",
  "username": "zuck",
  "profileId": "4",
  "name": "Mark Zuckerberg",
  "alternateName": null,
  "bio": "Bringing the world closer together.",
  "accountType": "Public figure",
  "profileKind": "PROFILE",
  "work": [
    { "employer": "Meta", "employerUrl": "https://www.facebook.com/Meta", "position": "Founder and CEO", "isCurrent": true, "text": "Founder and CEO at Meta" },
    { "employer": "Biohub", "employerUrl": "https://www.facebook.com/biohub", "position": null, "isCurrent": true, "text": "Works at Biohub" }
  ],
  "education": [
    { "school": "Harvard University", "schoolUrl": "https://www.facebook.com/Harvard", "fieldOfStudy": "Computer Science and Psychology", "level": "COLLEGE", "isCurrent": false, "text": "Studied Computer Science and Psychology at Harvard University" }
  ],
  "currentCity": "Palo Alto, California",
  "hometown": "Dobbs Ferry, New York",
  "relationship": "Married",
  "relationshipPartner": "Priscilla Chan",
  "relationshipPartnerUrl": "https://www.facebook.com/priscilla",
  "joined": null,
  "followers": 121000000,
  "following": null,
  "likes": 121203400,
  "talkingAbout": 647914,
  "verified": true,
  "gender": "MALE",
  "profilePictureUrl": "https://scontent.xx.fbcdn.net/%E2%80%A6",
  "coverPhotoUrl": "https://scontent.xx.fbcdn.net/%E2%80%A6",
  "externalLinks": [],
  "website": null,
  "otherDetails": [],
  "creationDate": "February 11, 2004",
  "isRunningAds": true,
  "isPrivate": false,
  "error": null,
  "scrapedAt": "2026-09-06T02:10:31.512Z"
}
```

A private or locked profile:

```json
{
  "sourceUrl": "https://www.facebook.com/some.person",
  "url": "https://www.facebook.com/some.person",
  "username": "some.person",
  "name": null,
  "work": [],
  "education": [],
  "isPrivate": true,
  "error": "Profile is private or not publicly visible."
}
```

### Pricing

You pay per successfully scraped profile. Rows for private, locked or not-found profiles are free.

### Notes

- Intro details are only as complete as what the profile owner chose to show publicly - a profile may expose work but no city, for example. Anything the actor could not classify is kept verbatim in `otherDetails`.
- The same person referenced by both a username URL and a `profile.php?id=` URL is treated as two inputs.
- Free-tier runs are capped at 50 profiles; paid plans remove the limit.

# Actor input Schema

## `startUrls` (type: `array`):

Public Facebook profiles to scrape. Accepts full URLs (https://www.facebook.com/zuck), mobile URLs, numeric profile URLs (https://www.facebook.com/profile.php?id=4), or bare usernames (zuck). Duplicates are removed. One dataset record is produced per profile.

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

Maximum number of profiles to scrape in this run. Set 0 to process every profile in the list.

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

Proxy used to load the public profile page that contains the Intro details (work, education, hometown, current city, relationship). Residential proxies are strongly recommended - datacenter IPs are frequently blocked.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.facebook.com/zuck"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Each record contains sourceUrl, url, username, profileId, name, bio, accountType, work\[], education\[], currentCity, hometown, relationship, joined, followers, following, likes, verified, gender, profilePictureUrl, coverPhotoUrl, externalLinks\[], website, isPrivate, error and scrapedAt.

# 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 = {
    "startUrls": [
        "https://www.facebook.com/zuck"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("seemuapps/facebook-profile-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 = {
    "startUrls": ["https://www.facebook.com/zuck"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("seemuapps/facebook-profile-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 '{
  "startUrls": [
    "https://www.facebook.com/zuck"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call seemuapps/facebook-profile-scraper --silent --output-dataset

```

## MCP server setup

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