Use Facebook Page & Profile Finder by Keyword or URL with Python
Find Facebook Pages or public profiles by keyword, or scrape a list of Facebook URLs directly, and get back contact info, category, ratings, follower counts, reviews, and recent posts.
1. Choose the data you need
Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.
2. Prepare a source-based input
This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.
{
"addDetail": false,
"fetchPageDetails": false,
"includePosts": false,
"includeReviews": false,
"maxPosts": 3,
"maxResults": 1,
"mode": "search",
"rehostImages": false,
"searchQueries": [
"McDonald's"
],
"searchType": "pages",
"verifiedOnly": false
}
Download input.example.json and save your reviewed copy as input.json.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | Choose whether to discover Pages/profiles by keyword or read the Facebook URLs you already have. |
searchQueries | array | optional | Keywords to search on Facebook (mode=search), e.g. 'coffee shop', 'dentist Berlin'. A pasted facebook.com/search/pages/?q=... URL is accepted too. Either this or startUrls is required. |
searchType | string | optional | Search for Pages, public profiles, or both. Applies to mode=search. |
location | string | optional | A city or country added to every keyword, e.g. 'Berlin' or 'Kansas City, Missouri'. Facebook search is relevance-ranked, so this narrows results toward that place; it is not a strict geographic filter. |
locationUids | array | optional | Optional numeric Facebook Place IDs, one page search per UID, e.g. 108591349161413 from facebook.com/places/<id>/. maxResults is distributed across the UIDs and duplicate pages are removed. Results can include nearby businesses; this is not a strict city boundary. |
categoryFilter | string | optional | Optional case-insensitive text filter on a page's category, e.g. 'dentist' or 'restaurant'. Applied after page details are read; leave empty for all categories. |
startUrls | array | optional | Direct Facebook Page or profile URLs to read (mode=urls), e.g. https://www.facebook.com/McDonalds, https://www.facebook.com/profile.php?id=..., /people/... or /p/.... Either startUrls, startIds or searchQueries is required. |
startIds | array | optional | Numeric Facebook IDs or @handles to read (mode=urls), e.g. 100064458773195 or @McDonalds. Combine with startUrls if you have both. Either startUrls, startIds or searchQueries is required. |
maxResults | integer | optional | Upper bound on rows per search query (mode=search) or in total (mode=urls). Facebook may return fewer when the index is exhausted. Deep searches use extra networking automatically. |
fetchPageDetails | boolean | optional | Open each result to add category, contact details, follower counts, ratings and reviews links. Turn off for a fast identity-only list of names, URLs, IDs and verification badges. |
includeReviews | boolean | optional | Fetch up to 10 real reviews per page when Facebook publishes them. Adds one request per result. |
addDetail | boolean | optional | Add creation date, whether the Page is currently running ads, and its public Page Transparency ID. Adds one request per result. |
includePosts | boolean | optional | Add up to maxPosts recent posts from the Page/profile timeline (text, timestamp, permalink, media and engagement when visible). |
maxPosts | integer | optional | Maximum recent posts to keep per result when includePosts is on. Facebook may serve fewer when the timeline is empty or restricted. |
verifiedOnly | boolean | optional | Keep only results Facebook marks as verified. Unverified or unknown results are dropped. |
rehostImages | boolean | optional | Copy profile and cover images into Apify storage so their URLs stay valid, instead of returning Facebook's signed CDN links (which expire after about five days). Adds one download per image. |
3. Start an Actor run
Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.
Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.
import json
import os
import urllib.request
# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
actor_input = json.load(stream)
token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
"https://api.apify.com/v2/acts/CJq13RwjCKKPE9rcc/runs?timeout=120&maxTotalChargeUsd=0.50",
data=json.dumps(actor_input).encode("utf-8"),
headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.
4. Inspect the actual results
Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.
Structured Facebook Page or profile records: name, ID, URL, verified badge, entity type, category, contact details, followers, ratings, reviews, Page Transparency and recent post data.
Questions before you run
Which inputs are required?
The published required fields are mode
What does this guide verify?
The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.
What if the run request times out?
Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.
Generated from source build QgeIPeYymvYKKgS13 and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.