# Facebook Profile Scraper | No Login | Bulk | $4/1K (`memo23/facebook-profile-scraper`) Actor

Scrape public Facebook profiles and Pages without logging in. Paste profile URLs, usernames or numeric IDs and get name, bio, work, education, city, hometown, relationship, websites, followers, verified badge and photos. One row per profile. No cookies. $4 per 1,000 profiles.

- **URL**: https://apify.com/memo23/facebook-profile-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, Lead generation, Marketing
- **Stats:** 2 total users, 1 monthly users, 97.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 profiles

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 Profile Scraper — Public Profiles & Pages, No Login

Turn Facebook profile links, usernames or numeric IDs into clean, structured profile rows without logging in.
Get the name, category, bio, work, education, city, hometown, relationship, websites, exact follower counts, verified badge, and profile and cover photos of public profiles and Pages. One row per profile, ready for JSON, CSV or Excel.

### Why Use This Scraper?

- ✅ No login, cookies or Facebook account. Paste the profiles and run.
- ✅ Exact follower counts such as `121350061`, not just the rounded "121M" label.
- ✅ Profiles and Pages in the same run. Every row says which one it is and gives its category.
- ✅ The full public intro card: work, education, current city, hometown, relationship, websites, emails and phones.
- ✅ Every common link format works: vanity URLs, `profile.php?id=` links, `/people/` permalinks, mobile hosts, `fb.com`, plain usernames and numeric IDs.
- ✅ Pay only for delivered profiles. Anything that isn't delivered is listed with its reason and never billed.
- ✅ Duplicate-safe. The same profile given twice, by username and by ID, is delivered once.

### Overview

Facebook Profile Scraper is built for sales and marketing teams, influencer researchers, recruiters and data teams who already have a list of Facebook profiles or Pages and need structured data about them.

You give it a list of profiles. It returns one dataset row per profile with what Facebook shows a logged-out visitor on the profile's header and intro card: identity, category, bio, work, education, places, links, audience counts and photos.

Personal profiles and Pages come back in the same row shape. The `accountType` field tells them apart. The actor reads profiles, not their content: posts, photos, comments, friends lists and follower lists are not scraped.

### Supported Inputs

#### Input types

| Input type | Pattern | Example |
|---|---|---|
| Profile or Page URL | `facebook.com/<name>` | `https://www.facebook.com/zuck` |
| Numeric-ID link | `facebook.com/profile.php?id=<id>` | `https://www.facebook.com/profile.php?id=4` |
| People permalink | `facebook.com/people/<Name>/<id>/` | `https://www.facebook.com/people/<Name>/<id>/` |
| Legacy Page URL | `facebook.com/pg/<name>/` | `https://www.facebook.com/pg/NASA/` |
| Mobile and short hosts | `m.`, `mbasic.`, `web.`, `touch.` or `fb.com` | `https://m.facebook.com/BillGates` |
| Username | letters, digits, dots, `-` and `_`; a leading `@` is fine | `zuck` or `@zuck` |
| Numeric ID | digits only | `4` |

Links are normalized before fetching, so `https://m.facebook.com/NASA/?ref=bookmarks` and `NASA` are the same input.

#### Copy-pasteable startUrls

```json
{
  "startUrls": [
    "https://www.facebook.com/zuck",
    "https://m.facebook.com/NASA",
    "BillGates"
  ]
}
```

#### Unsupported inputs

- ❌ Groups, events, posts, photos, videos, reels, Marketplace, search and hashtag links (`/groups/`, `/events/`, `/posts/`, `/watch/`, `/marketplace/`, `/search/`, `/hashtag/` and similar). They are rejected before any fetch and listed in `NOT_DELIVERED` with the reason.
- ❌ Links that are not on facebook.com or fb.com, including shortened links such as bit.ly.
- ❌ Anything behind the Facebook login: friends-only details, private profiles, friends lists.
- ❌ Keyword or name search. This actor reads a list of profiles you already have. To find profiles by keyword, run [Facebook Search Scraper](https://apify.com/memo23/facebook-search-scraper) first and feed its URLs in here.

### Use Cases

| Audience | Use case |
|---|---|
| **Sales & lead generation** | Enrich a list of business Pages with category, website, email and phone before outreach |
| **Influencer marketing** | Compare creators and public figures by exact follower count and verified status |
| **Brand & competitor monitoring** | Schedule a run over competitor Pages and track their follower counts over time |
| **Recruiting & research** | Read the public work and education lines of profiles you already have links for |
| **Data teams & agencies** | Turn a column of Facebook links in a CRM or spreadsheet into clean, typed fields |

### How It Works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-facebook-profile.png" alt="How Facebook Profile Scraper works" />
</p>

1. **Paste profiles.** URLs, usernames or numeric IDs, in any mix.
2. **Normalize and dedupe.** Every input becomes one canonical profile link. Duplicates are fetched once, and links that are not profiles are set aside.
3. **Fetch the public page.** Each profile is loaded as a logged-out visitor through residential IPs, with up to three attempts.
4. **Parse the header and intro card.** Name, category, bio, work, education, places, links, audience counts and photos.
5. **Export.** One row per profile in JSON, CSV or Excel. Every input that gets no row, other than a duplicate of a delivered profile, is listed in the `NOT_DELIVERED` record with its reason.

### Input Configuration

#### Input fields

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `startUrls` | array of strings | yes | – | Profile or Page URLs, usernames or numeric IDs, one per line. Objects of the form `{"url": "..."}` are accepted too. Duplicates are fetched once. |
| `maxItems` | integer | no | `1000` | Stop after this many profile rows. |
| `maxConcurrency` | integer (1–10) | no | `4` | How many profiles are fetched at the same time. |
| `proxy` | object | no | built-in residential pool | Leave empty for most runs. Facebook shows a login page to datacenter IPs, so if you set your own proxy, make it residential. |

#### Common scenarios

**1. A few profiles**

```json
{
  "startUrls": ["https://www.facebook.com/zuck", "BillGates"],
  "maxItems": 10
}
```

**2. A mixed column from a spreadsheet**

```json
{
  "startUrls": [
    "https://m.facebook.com/NASA",
    "https://www.facebook.com/profile.php?id=4",
    "@BillGates"
  ],
  "maxConcurrency": 6
}
```

**3. Your own residential proxy**

```json
{
  "startUrls": ["https://www.facebook.com/NASA"],
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### Output Overview

Each dataset item is one profile or Page:

- **Identity:** profile ID, username, name, canonical URL, account type (`profile` or `page`), category, verified badge, memorialized flag
- **About:** bio, work, education, current city, hometown, relationship
- **Contact and links:** websites, emails and phones, when the intro card shows them publicly
- **Audience:** exact follower count with Facebook's rounded label, following, friends, "talking about this", likes
- **Media:** profile picture and cover photo URLs
- **Raw intro:** `introItems`, every intro line with its link, for anything the named fields don't cover
- **Run metadata:** the input you gave (`inputUrl`) and `scrapedAt`

Profiles and Pages share one shape. A field the profile doesn't show is `null`, and an empty list is `[]`. Pages usually have a category, websites and a "talking about this" count but no work or education. Personal profiles are often the other way round.

### Output Samples

#### Personal profile, input `https://www.facebook.com/zuck` (trimmed)

```json
{
  "profileId": "4",
  "username": "zuck",
  "name": "Mark Zuckerberg",
  "alternateName": null,
  "url": "https://www.facebook.com/zuck",
  "accountType": "profile",
  "category": "Public figure",
  "verified": true,
  "bio": "Bringing the world closer together.",
  "work": ["Founder and CEO at Meta", "Works at Biohub"],
  "education": ["Studied Computer Science and Psychology at Harvard University"],
  "currentCity": "Palo Alto, California",
  "hometown": "Dobbs Ferry, New York",
  "relationship": "Married to Priscilla Chan",
  "websites": [],
  "followers": 121350061,
  "followersText": "121M followers",
  "following": null,
  "talkingAbout": 1167169,
  "profilePictureUrl": "https://scontent.fdel26-1.fna.fbcdn.net/v/t39.30808-1/798035993_...jpg?...",
  "coverPhotoUrl": "https://scontent.fdel26-1.fna.fbcdn.net/v/t39.30808-6/632550896_...png?...",
  "isMemorialized": false,
  "introItems": [
    { "text": "Founder and CEO at Meta", "url": "https://www.facebook.com/Meta" },
    { "text": "Lives in Palo Alto, California", "url": "https://www.facebook.com/Palo-Alto-California-104022926303756/" }
  ],
  "inputUrl": "https://www.facebook.com/zuck",
  "scrapedAt": "2026-09-19T06:41:59.420Z"
}
```

#### Page, input `https://www.facebook.com/NASA` (trimmed)

```json
{
  "profileId": "100044561550831",
  "username": "NASA",
  "name": "NASA - National Aeronautics and Space Administration",
  "url": "https://www.facebook.com/NASA",
  "accountType": "page",
  "category": "Government organisation",
  "verified": true,
  "bio": "Explore the universe and discover our home planet. ...",
  "work": [],
  "education": [],
  "websites": ["https://www.nasa.gov/nasa-app/", "https://www.nasa.gov/"],
  "emails": ["public-inquiries@hq.nasa.gov"],
  "phones": [],
  "followers": 28723422,
  "followersText": "28M followers",
  "following": 52,
  "followingText": "52 following",
  "talkingAbout": 83410,
  "linkedPageId": "54971236771",
  "inputUrl": "https://www.facebook.com/NASA",
  "scrapedAt": "2026-09-19T06:41:58.528Z"
}
```

Both rows come from a test run on the Apify platform on 2026-09-19.

### Key Output Fields

| Group | Fields |
|---|---|
| **Identity** | `profileId`, `username`, `name`, `alternateName`, `url`, `accountType`, `category`, `verified`, `isMemorialized`, `linkedPageId` |
| **About** | `bio`, `work[]`, `education[]`, `currentCity`, `hometown`, `relationship` |
| **Contact & links** | `websites[]`, `emails[]`, `phones[]` |
| **Audience** | `followers`, `followersText`, `following`, `followingText`, `friends`, `talkingAbout`, `likes` |
| **Media** | `profilePictureUrl`, `coverPhotoUrl` |
| **Raw intro** | `introItems[]` with `text` and `url` |
| **Run** | `inputUrl`, `scrapedAt` |

### FAQ

#### Do I need a Facebook account, cookies or a login?

No. The actor reads each profile the way a logged-out visitor sees it. You never share credentials, and no account is at risk.

#### Which links work?

Profile and Page URLs on www, m, mbasic, web, touch and fb.com hosts, `profile.php?id=` links, `/people/<Name>/<id>/` permalinks, legacy `/pg/<name>/` links, bare usernames (with or without `@`) and numeric IDs. Group, event, post, photo, video, Marketplace and search links are rejected and listed in `NOT_DELIVERED`.

#### How exact are the follower counts?

`followers` is the exact number Facebook puts in the page's own metadata, for example `121350061`. `followersText` keeps the rounded label shown on screen, such as "121M followers". If a page carries no exact figure, `followers` falls back to the rounded label, so "121M" becomes `121000000`.

#### Why are some fields empty?

The actor only returns what a logged-out visitor can see. Many personal profiles hide their work, education, city or relationship, and Pages rarely list work or education. Hidden fields are `null` or `[]`. `friends` and `likes` are filled only when Facebook shows those counts publicly, which is rare today.

#### Can it scrape private profiles, friends lists or posts?

No. Private and friends-only details, friends lists, follower lists, posts, photos and comments are out of scope. For posts, use [Facebook Posts Scraper](https://apify.com/memo23/facebook-page-posts-scraper).

#### What happens to profiles that can't be scraped?

They are listed in the run's `NOT_DELIVERED` record (Storage → Key-value store) with the input and a reason, such as "Facebook says this profile or Page is not available", an invalid link, or "not attempted: maxItems reached". They are never pushed to the dataset, so they are never billed.

#### Do the photo links expire?

Yes. `profilePictureUrl` and `coverPhotoUrl` are signed Facebook CDN links that stop working after a few days. If you need the images, download them soon after the run.

#### Do I need a proxy?

No. Runs use a built-in residential pool by default. If you set your own proxy, use a residential one, because Facebook shows a login page to datacenter IPs.

#### How fast is it?

A test run of three profiles took about 9 seconds. Up to 10 profiles are fetched in parallel (`maxConcurrency`), and each one gets up to three attempts before it is set aside.

#### Can I find profiles by name or keyword?

Not with this actor. Use [Facebook Search Scraper](https://apify.com/memo23/facebook-search-scraper) to find profiles and Pages by keyword, then paste their URLs here.

### Support

- Issues and feature requests: the **Issues** tab on this actor in Apify Console.
- Custom work:
  - Website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- Custom fields, bulk profile lists or scheduled monitoring: <muhamed.didovic@gmail.com>
- API access (no Apify platform fee, usage fee only): <muhamed.didovic@gmail.com>

### Explore More Scrapers

- [**Facebook Search Scraper**](https://apify.com/memo23/facebook-search-scraper): find people, Pages and posts by keyword
- [**Facebook Page Contact Details**](https://apify.com/memo23/facebook-page-contact-detail-scraper): emails, phones and opening hours of business Pages
- [**Facebook Posts Scraper**](https://apify.com/memo23/facebook-page-posts-scraper): posts from Pages and post URLs, no login
- [**Facebook URL to ID**](https://apify.com/memo23/facebook-url-to-id): numeric IDs for Page, profile, group and post links
- [**Facebook Public Group Posts & Comments**](https://apify.com/memo23/facebook-public-group-posts-scraper): posts and comments from public groups

Full list at [apify.com/memo23](https://apify.com/memo23).

### 🤖 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-profile-scraper`).

**Purpose:** Scrape public Facebook profiles and Pages without a login: one row per profile with identity, intro card, exact follower count and photos.

**Minimal input:**

```json
{
  "startUrls": ["https://www.facebook.com/NASA"],
  "maxItems": 5
}
```

**Output:** one dataset row per profile or Page with `profileId`, `username`, `name`, `alternateName`, `url`, `accountType` (`profile` or `page`), `category`, `verified`, `bio`, `work[]`, `education[]`, `currentCity`, `hometown`, `relationship`, `websites[]`, `emails[]`, `phones[]`, `followers`, `followersText`, `following`, `followingText`, `friends`, `talkingAbout`, `likes`, `profilePictureUrl`, `coverPhotoUrl`, `linkedPageId`, `isMemorialized`, `introItems[] {text, url}`, `inputUrl` and `scrapedAt`.

**Behaviors an agent should know:**

- `startUrls` takes URLs, usernames (`zuck`) or numeric IDs (`4`). Set `maxItems` to cap rows.
- Inputs are deduplicated by link and by profile ID, so a profile never appears twice.
- Every input that gets no row (duplicates aside) is listed in the key-value record `NOT_DELIVERED` as `{input, url, reason}`.
- Billing is pay per event: a start event per run plus one event per profile row. Rejected, not-found, blocked and skipped inputs are never billed.
- Only data visible to a logged-out visitor is returned. There are no posts, friends lists or private fields, and no keyword search.
- Photo URLs are signed CDN links that expire after a few days.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Meta Platforms, Inc. or any of its subsidiaries. Facebook is a trademark of Meta Platforms, Inc. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available Facebook profile and Page information shown to logged-out visitors: no login, cookies, authenticated endpoints, or content behind the facebook.com login wall. Profile data can be personal data. Users are responsible for ensuring their use complies with Facebook's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.

***

### SEO Keywords

facebook profile scraper, scrape facebook profiles, facebook page scraper, facebook scraper no login, facebook profile API, Apify facebook scraper, fb profile scraper, public profile scraper, social media profile scraper, follower count scraper, verified badge checker, profile bio extractor, lead enrichment data, influencer research data, competitor audience tracking, page contact details, social media intelligence, creator analytics data, B2B lead generation, Meta profile data

# Actor input Schema

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

One per line: a profile or Page URL (https://www.facebook.com/zuck), a numeric-id link (https://www.facebook.com/profile.php?id=4), a /people/<name>/<id>/ permalink, or just a username (zuck) or numeric ID (4). m.facebook.com, web.facebook.com and fb.com links work too. Duplicates are fetched once. Group, event, post, video and search links are not profiles and are skipped.

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

Stop after this many profile rows. Default 1000; use a small number such as 10 for a test. Profiles that could not be delivered are never billed.

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

How many profiles are fetched at the same time, from 1 to 10. Default 4.

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

Optional. Leave empty to use the built-in residential pool. Facebook shows a login page to datacenter IPs, so if you set your own proxy, use a residential one, for example {"useApifyProxy": true, "apifyProxyGroups": \["RESIDENTIAL"]}.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.facebook.com/zuck",
    "https://www.facebook.com/BillGates"
  ],
  "maxItems": 1000,
  "maxConcurrency": 4
}
```

# Actor output Schema

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

No description

# 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",
        "https://www.facebook.com/BillGates"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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",
        "https://www.facebook.com/BillGates",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/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",
    "https://www.facebook.com/BillGates"
  ]
}' |
apify call memo23/facebook-profile-scraper --silent --output-dataset

```

## MCP server setup

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