Facebook Public Profiles Scraper avatar

Facebook Public Profiles Scraper

Pricing

Pay per event

Go to Apify Store
Facebook Public Profiles Scraper

Facebook Public Profiles Scraper

Extract public Facebook profile identity, bio, work, education, location, follower signals, verification, images, and links without a login.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Extract facebook public profiles into typed records for lead enrichment, research, and recurring data pipelines. Provide public profile URLs and receive identity, bio, work, education, location, relationship, follower signals, verification, profile image, and external-link fields without a Facebook login.

The Actor works with username URLs such as https://www.facebook.com/zuck and numeric URLs such as https://www.facebook.com/profile.php?id=4. It processes only information visible on the public logged-out profile.

What does Facebook Public Profiles Scraper do?

The Actor turns a list of public Facebook profile URLs into one normalized dataset item per useful profile.

It:

  • validates and canonicalizes Facebook profile URLs;
  • removes duplicate input URLs;
  • renders the public logged-out profile;
  • extracts visible Intro and identity fields;
  • normalizes abbreviated follower counts such as 121M to integers;
  • returns null or an empty array when a field is not public;
  • retries a challenged profile with a fresh browser session;
  • stops at your maxItems limit.

It does not log into Facebook, search for people by name, infer hidden attributes, or bypass profile privacy settings.

Who is this Facebook profile extractor for?

Lead operations teams

Enrich a list of known public profile URLs with current public role, education, and location context before review in a CRM.

Researchers and analysts

Create consistent snapshots of public figures or creators instead of manually copying fields from individual profiles.

Developers and data engineers

Feed typed JSON into a spreadsheet, warehouse, CRM, webhook, or scheduled comparison pipeline.

Talent and partnership teams

Review publicly stated work and education information for already identified people. Always apply an appropriate lawful basis and human review.

What Facebook profile data is extracted?

FieldTypeMeaning
sourceUrlstringURL supplied in the input
urlstringCanonical public Facebook profile URL
usernamestring or nullUsername from a username URL
profileIdstring or nullPublic numeric profile ID when exposed
namestringPublic display name
accountTypestring or nullVisible profile/category label
biostring or nullPublic Intro or bio text
workstring[]Visible roles and workplaces
educationstring[]Visible schools and education statements
currentCitystring or nullVisible current city
hometownstring or nullVisible hometown
relationshipstring or nullVisible relationship statement
followersinteger or nullNormalized visible follower count
followinginteger or nullNormalized visible following count
verifiedbooleanWhether a verification signal is exposed
profilePictureUrlstring or nullPublic profile image URL
externalLinksstring[]Public non-Facebook profile links
scrapedAtISO timestampTime of extraction

Why use this Actor?

  • No Facebook credentials: only the public logged-out surface is used.
  • Typed enrichment output: downstream tools receive stable fields rather than raw HTML.
  • Privacy-aware nulls: unavailable fields are not guessed.
  • Bulk-ready input: submit multiple known profile URLs and set an output limit.
  • Efficient rendering: images, video, fonts, styles, and trackers are blocked where they are unnecessary for extraction.
  • Failure visibility: a run fails when no useful profile can be extracted instead of returning a misleading empty success.

How to get started

  1. Open the Actor input page.
  2. Add one or more public Facebook profile URLs to Facebook profile URLs.
  3. Set Maximum profiles to the number of records you need.
  4. Click Start.
  5. Open the default dataset to inspect, download, or integrate the records.

A useful first input is:

{
"startUrls": [
{ "url": "https://www.facebook.com/zuck" },
{ "url": "https://www.facebook.com/BillGates" }
],
"maxItems": 2
}

Input parameters

startUrls

Required array of public facebook.com profile URLs. Supported shapes are:

  • username URL: https://www.facebook.com/zuck;
  • numeric profile URL: https://www.facebook.com/profile.php?id=4.

URLs for posts, groups, events, Marketplace, search results, or login pages are outside this Actor's scope and fail validation.

maxItems

Optional integer from 1 to 1,000. The Actor stops after this many useful records. The default is 100. If fewer input URLs are available, only those inputs are processed.

Output example

This shortened record reflects the current public output shape:

{
"sourceUrl": "https://www.facebook.com/zuck",
"url": "https://www.facebook.com/zuck",
"username": "zuck",
"profileId": "4",
"name": "Mark Zuckerberg",
"accountType": "Profile · Public figure",
"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",
"followers": 121000000,
"following": null,
"verified": true,
"profilePictureUrl": "https://scontent-...fbcdn.net/...",
"externalLinks": [],
"scrapedAt": "2026-08-07T14:07:27.673Z"
}

Facebook can change public values and visibility at any time. Treat the example as a schema illustration, not a promise that a count or personal statement remains unchanged.

How much does it cost to extract Facebook public profiles?

The Actor uses pay-per-event pricing:

  • one start event is charged once per run;
  • one item event is charged for each useful profile record;
  • rejected, failed, duplicate, or non-emitted records have no item charge.

The start event is $0.005. The item price decreases by Apify plan:

Plan tierPrice per emitted profile
FREE$0.00460
BRONZE$0.00400
SILVER$0.00312
GOLD$0.00240
PLATINUM$0.00160
DIAMOND$0.00112

Your run total follows:

$0.005 start event + emitted profile records × active item tier

For example, on the FREE tier, 1 profile costs $0.00960, 10 profiles cost $0.05100, and 100 profiles cost $0.46500. On BRONZE, the same batches cost $0.00900, $0.04500, and $0.40500. Rejected, failed, duplicate, and non-emitted records do not add an item event.

Batching profiles into one run avoids paying the start event separately for each profile. Apify platform usage is included in the event price rather than added as a separate customer charge.

Tips for reliable runs

  • Supply canonical profile URLs collected with an appropriate lawful purpose.
  • Use username or numeric profile URLs, not search-result or post URLs.
  • Start with a small batch before scheduling a large enrichment job.
  • Expect fields to differ by profile because each person controls public visibility.
  • Use profileId or canonical url as the stable join key when available.
  • Store scrapedAt alongside snapshots when comparing data over time.

Limits and failure behavior

Facebook may show less information for some profiles, locations, or sessions. A valid record can therefore contain null fields or empty arrays.

The Actor retries a blocked or incomplete profile once with a fresh session. Individual failures are logged while useful profiles continue. If every requested profile fails, the run exits with an error. This prevents a blocked page from appearing as a successful empty dataset.

The Actor does not:

  • discover profiles from a person name or keyword;
  • access private, friends-only, or login-only information;
  • return posts, comments, friends, followers lists, or private contact details;
  • perform built-in historical change detection;
  • guarantee that a public CDN image URL remains permanent.

Recurring lead enrichment workflow

For repeated enrichment:

  1. keep approved public profile URLs in your CRM or input store;
  2. run this Actor on a schedule;
  3. export each result with its scrapedAt timestamp;
  4. compare the current row to the prior row in your own database or automation;
  5. route meaningful changes to human review.

This Actor produces fresh snapshots. Scheduling and comparison are configured through Apify Tasks, webhooks, or your downstream system; the Actor does not claim a change unless your workflow compares snapshots.

Export and integration options

The default dataset can be downloaded as JSON, CSV, Excel, XML, or RSS through Apify. Common patterns include:

  • send completed datasets to Google Sheets or Airtable;
  • upsert records into a CRM using profileId or url;
  • load snapshots into BigQuery, Snowflake, or PostgreSQL;
  • trigger Make, Zapier, or n8n from a run-finished webhook;
  • call the Actor from an internal enrichment API.

Run with the Apify API

Replace APIFY_TOKEN with your token.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~facebook-public-profile-scraper/runs?token=APIFY_TOKEN&waitForFinish=120" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url": "https://www.facebook.com/zuck"}],
"maxItems": 1
}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/facebook-public-profile-scraper').call({
startUrls: [{ url: 'https://www.facebook.com/zuck' }],
maxItems: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/facebook-public-profile-scraper').call(run_input={
'startUrls': [{'url': 'https://www.facebook.com/zuck'}],
'maxItems': 1,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use with MCP and AI assistants

Add this Actor to Claude Code through Apify MCP:

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/facebook-public-profile-scraper"

Claude Desktop

Add this server object to the mcpServers section of Claude Desktop's configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/facebook-public-profile-scraper"
}
}
}

Cursor

Open Settings → Tools & MCP → New MCP Server and use the same Apify MCP URL shown above.

VS Code

Add the same HTTP server URL to your workspace MCP configuration, then select the automation-lab/facebook-public-profile-scraper tool.

Example prompts:

  • “Extract the public profile record for https://www.facebook.com/zuck.”
  • “Enrich these approved Facebook profile URLs and return name, work, education, city, and follower count.”
  • “Create current snapshots for this list and highlight null fields that need manual review.”

Public availability does not remove privacy, copyright, contractual, or data-protection obligations. Use the Actor only when you have a lawful purpose and authority to process the requested information.

Do not use the output for harassment, unlawful discrimination, sensitive-trait inference, credential collection, or decisions that require protected data. Follow Facebook's terms, applicable privacy laws, data-minimization principles, retention limits, and deletion requests. Obtain legal advice for your jurisdiction and use case.

Troubleshooting

Why is a field null or an array empty?

The profile does not expose that field on its public logged-out surface, or Facebook did not deliver it in the current session. The Actor intentionally does not infer private values.

Why was my URL rejected?

The URL must identify a profile by username or profile.php?id=<number>. Post, section, group, search, Marketplace, and non-Facebook URLs are rejected before a chargeable browser request.

Why did the run fail with no profiles extracted?

Facebook returned blocked, login-only, unavailable, or incomplete pages for every input. Check that the profiles are public and the URLs open without a login, then retry later rather than interpreting an empty result as valid.

Can this Actor search Facebook profiles by name?

No. It extracts known public profile URLs. Name search is a different workflow and is not silently approximated.

FAQ

Does it require Facebook cookies or credentials?

No. The Actor uses the public logged-out profile surface.

Does it scrape private profiles?

No. Only publicly visible fields are returned.

Can I process multiple profiles?

Yes. Add multiple URLs and set maxItems up to 1,000. Duplicate input URLs are processed once.

Can I monitor profiles?

You can schedule repeated snapshot runs and compare records in your own workflow. Built-in history or change alerts are not included.

Are profile pictures downloaded?

No. The Actor returns the public metadata URL and blocks image downloads during extraction to reduce transfer and runtime.

Support

When reporting a problem, include the Actor run URL, a public reproducible profile URL, the expected public field, and the observed error. Do not include Facebook credentials, private profile data, or unrelated personal information.