Facebook People Search Scraper
Pricing
Pay per event
Facebook People Search Scraper
Search Facebook by keyword and export public people result cards with profile IDs, names, URLs, verification signals, profile-picture metadata, ranks, and query provenance. No Facebook account or cookies required.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Search Facebook's anonymous public people directory by keyword and export clean profile result cards. Facebook People Search Scraper returns public names, profile IDs, URLs, profile-picture metadata, visible context, verification signals, ranks, and source-query provenance without asking for a Facebook login or user cookies.
Use role, company, specialty, or location phrases to create review-ready recruiting and prospect research lists. Results are stored in the default Apify dataset for download as JSON, CSV, Excel, XML, or RSS and for delivery to your own pipeline.
What does Facebook People Search Scraper do?
The Actor opens Facebook's public people directory in one anonymous browser session and searches each supplied keyword phrase.
For every visible people result card, it:
- extracts the public profile name and canonical URL;
- captures a numeric ID when Facebook exposes one;
- falls back to the public
pfbidor username asprofileId; - keeps the query and one-based result rank;
- records visible profile-picture metadata and card context;
- marks verification only when a visible badge is present;
- deduplicates duplicate desktop/mobile renderings within each query;
- saves typed records to the run's default dataset.
It does not log in, enrich private fields, or open every profile page.
Who is it for?
This Actor is designed for workflows that start with public profile discovery:
- Recruiters finding people associated with public role or skill phrases.
- Sales researchers assembling candidate profiles for manual qualification.
- Agency teams exploring public specialist and location combinations.
- OSINT analysts collecting query-attributed public identity leads.
- Data teams scheduling recurring searches and comparing exported datasets.
- Developers feeding public result cards into review, enrichment, or CRM queues.
Choose a supplied-URL profile scraper instead when you already know the Facebook profile URLs and need deeper public profile details.
Why use this Actor?
- No account required: no Facebook email, password, token, or cookie input.
- Keyword discovery: start from roles, names, locations, companies, or combined phrases.
- Stable provenance: every record includes its source query and rank.
- Useful identity fallback:
profileIduses numeric ID,pfbid, or username in that order. - Low-transfer browser route: media, font, and image downloads are blocked while image URLs remain available as metadata.
- Fail-closed behavior: challenge, login-only, HTTP error, and unknown pages fail instead of silently returning an empty dataset.
- Apify-native output: schedule runs and export results through datasets, webhooks, API clients, or integrations.
What Facebook people data is extracted?
| Field | Type | Description |
|---|---|---|
query | string | Keyword phrase that produced the card. |
rank | integer | One-based position within that query's visible results. |
profileId | string | Numeric ID, pfbid, or username fallback. |
numericId | string or null | Numeric Facebook profile ID when exposed. |
name | string | Public name shown on the result card. |
profileUrl | string | Canonical public Facebook profile URL. |
isVerified | boolean or null | true for a visible verification badge; otherwise null. |
profilePictureUrl | string or null | Public result-card image URL without downloading the image. |
context | string or null | Visible alternate label or parenthetical role/context. |
scrapedAt | ISO timestamp | Time the card was extracted. |
Nullable fields are honest: Facebook does not show numeric IDs, badges, pictures, or context on every public card.
How to search Facebook people by keyword
- Open the Actor input page.
- Add one or more phrases to Search queries.
- Set Maximum results for the whole run.
- Optionally reduce Results per query to spread the limit across more phrases.
- Click Start.
- Open People results in the run output.
- Export the dataset or connect it to your next workflow.
A specific phrase such as recruiter Austin Texas usually produces more reviewable results than a broad word such as recruiter.
Input parameters
searchQueries
Required array of 1–50 keyword strings. Whitespace is normalized and duplicate phrases are removed. Each string can contain up to 200 characters.
{"searchQueries": ["cybersecurity consultant","cloud architect","data engineer"]}
maxItems
Maximum records saved across all queries. The default is 25 and the accepted range is 1–500. This limit never causes the Actor to invent or expand results.
resultsPerQuery
Maximum cards saved per query, from 1 to 12. The default is 12. Facebook's anonymous directory currently exposes about 12 unique visible cards per phrase.
Example input
This multi-query input creates a role-based prospect research dataset while preserving the query behind each result:
{"searchQueries": ["cybersecurity consultant","cloud architect","data engineer"],"maxItems": 30,"resultsPerQuery": 10}
The Actor processes queries in input order and stops as soon as maxItems is reached.
Example output
The following record shape comes from current public-directory behavior; identifying values are redacted:
{"query": "recruiter Austin Texas","rank": 1,"profileId": "pfbid0SamplePublicIdentifier","numericId": null,"name": "Sample Recruiter","profileUrl": "https://www.facebook.com/people/Sample-Recruiter/pfbid0SamplePublicIdentifier","isVerified": null,"profilePictureUrl": "https://scontent.example.fbcdn.net/sample-profile-picture.jpg","context": "Sample Recruiter (Technical recruiter)","scrapedAt": "2025-01-15T12:00:00.000Z"}
Records from the same profile can appear for different queries intentionally, because query provenance is part of the product. Deduplicate across queries by profileId downstream when your workflow needs one row per person.
How much does it cost to search Facebook people?
The Actor uses pay-per-event pricing:
- a one-time Run started event costs $0.005 per run;
- each Person extracted event is charged at the active account tier;
- the BRONZE price is $0.001736 per result, with lower unit prices at higher tiers.
At the BRONZE tier, 10 results cost about $0.02236, 25 results about $0.04840, and 100 results across multiple queries about $0.17860, including one start event. Empty searches incur only the start event. Apify Console shows the exact active tier and charge before and after a run.
The six result tiers are FREE $0.0019964, BRONZE $0.001736, SILVER $0.0013541, GOLD $0.0010416, PLATINUM $0.0006944, and DIAMOND $0.00048608 per result.
Result quality tips
- Combine a role with a location, industry, or specialty.
- Use several focused phrases instead of one very broad word.
- Keep
resultsPerQuerybelow the global limit when testing many phrases. - Use
queryandrankto preserve search context during review. - Use
profileIdrather than a mutable display name for downstream matching. - Treat a name match as a lead for human review, not proof of employment or identity.
- Schedule the same input to observe visible directory changes over time.
Limits and failure behavior
Facebook controls the anonymous public directory and can change its HTML, ranking, availability, and exposed fields.
Current practical limits:
- about 12 unique public cards are visible per query;
- results are ranked by Facebook and are not exhaustive;
- no exact location, employer, language, or verification filter is promised;
- profile pictures are returned as source URLs and are not downloaded;
isVerifiedis null when no visible badge signal exists;- some queries naturally return fewer or no public cards;
- private, restricted, deleted, and login-only profiles are outside scope.
A recognizable directory page with no cards completes successfully with zero results. An HTTP error, challenge, login-only shell, or unknown response is retried twice and then fails with a non-zero status so scheduled workflows can alert correctly.
Recurring recruiting workflow
A practical scheduled workflow is:
- Create focused role-and-location phrases.
- Run the Actor daily or weekly with an Apify schedule.
- Export
profileId,name,profileUrl,query, andrank. - Compare IDs with the previous dataset.
- Send only newly visible profiles to a human qualification queue.
- Enrich approved public profile URLs with a separate profile-detail Actor.
The Actor itself does not maintain historical state or claim that a changed rank means a person's real-world status changed.
Export and integration options
After a successful run you can:
- download JSON, JSONL, CSV, Excel, XML, or RSS;
- connect the dataset to Google Sheets or another Apify integration;
- trigger a webhook when the run succeeds or fails;
- read items through the dataset REST API;
- use the JavaScript or Python Apify client;
- schedule recurring searches in Apify Console;
- pass qualified profile URLs to another public-data workflow.
Run with the Apify API
Replace APIFY_TOKEN with your token. Do not place tokens in source code.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~facebook-people-search-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["software engineer"],"maxItems":10,"resultsPerQuery":10}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/facebook-people-search-scraper').call({searchQueries: ['recruiter Austin Texas'],maxItems: 8,resultsPerQuery: 8,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/facebook-people-search-scraper').call(run_input={'searchQueries': ['cybersecurity consultant', 'cloud architect'],'maxItems': 20,'resultsPerQuery': 10,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
Use with Apify MCP
Add this Actor as an HTTP MCP tool in Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/facebook-people-search-scraper"
Claude Desktop
Add this JSON to the Claude Desktop MCP configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/facebook-people-search-scraper"}}}
Cursor
Add the same apify server object to Cursor's MCP settings and keep the Actor-specific URL unchanged.
VS Code
Add the same HTTP server URL through your VS Code MCP extension's server configuration. No local command or Facebook credential is required.
Example prompts:
- “Search Facebook people for
cloud architectand return 10 public cards.” - “Run three specialist-role queries, then group the result links by source query.”
- “Export the latest people-search dataset as CSV for manual recruiting review.”
Responsible use and legality
This Actor accesses public result cards without authentication. Public availability does not remove your legal and ethical responsibilities.
- Use data only for a lawful purpose.
- Follow Facebook's terms and applicable privacy, employment, anti-discrimination, and marketing laws.
- Do not infer sensitive attributes from names, images, or profile context.
- Do not use output for harassment, surveillance, spam, or automated high-impact decisions.
- Verify identity and relevance before contacting or evaluating a person.
- Honor deletion, objection, and retention requirements that apply to your organization.
- Collect only the fields needed for your stated workflow.
You are responsible for deciding whether your use is permitted in your jurisdiction and context.
Troubleshooting
The run returned fewer than maxItems
maxItems is a ceiling, not a guaranteed count. Facebook currently exposes at most about 12 unique anonymous cards per phrase, and specific phrases can return fewer. Add more focused queries if that matches your research goal.
numericId or isVerified is null
Facebook does not expose those signals on every card. Use profileId as the normalized identifier and treat null verification as “not exposed,” not as “not verified.”
The run failed after retries
Review the run log for the affected query. Facebook may have returned an HTTP error, challenge, login-only shell, timeout, or changed page shape. Retry later rather than treating a failed run as an empty result set.
Why are images not downloaded?
The Actor blocks image transfer to reduce bandwidth while retaining the public profilePictureUrl attribute. Fetching or storing those images is outside this product's scope.
Related Automation Lab Actors
- Facebook Public Profile Scraper — enrich already known public profile URLs with deeper visible profile details.
- Facebook URL to ID Resolver — normalize supplied Facebook URLs into IDs and object types.
- Facebook Video Search Scraper — discover public Facebook Watch and Reel videos by keyword.
Use this Actor for keyword-to-profile discovery; use the related Actors only when their separate input and output contracts fit the next step.
FAQ
Does it require Facebook login or cookies?
No. The Actor uses Facebook's anonymous public people directory and manages its own temporary browser session.
Can it search by phone number or email?
No. The input is a keyword phrase, and only Facebook's visible public people cards are returned.
Does it scrape complete Facebook profiles?
No. It extracts result-card metadata. Use the related public profile Actor for supplied URLs when you need deeper publicly visible details.
Are results exhaustive?
No. Facebook decides what its anonymous directory shows and currently limits each phrase to about 12 unique cards.
Can I schedule monitoring?
Yes. Schedule the same input in Apify and compare datasets by profileId. The Actor does not make identity or employment-change claims on your behalf.
Are duplicate people possible?
Duplicate renderings within one query are removed. The same profile can remain in separate query results so you can see every matched query; deduplicate by profileId downstream if needed.