Facebook Business Page Finder by Keyword & City
Pricing
from $0.49 / 1,000 results
Facebook Business Page Finder by Keyword & City
Find Facebook business pages by direct URL, or discover them by keyword and city, and get names, categories, addresses, follower counts, contact details, business hours, ratings, and reviews. A Facebook login cookie is recommended for full coverage.
Pricing
from $0.49 / 1,000 results
Rating
0.0
(0)
Developer
Nimbryxo-studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Security
Limited permissionsShare
Find Facebook business Pages by keyword and location, or enrich a list of Page URLs, and get back the identity, contact details, social links, follower count, recommendation percentage, open status, price range, services, Page Transparency date, ad status, images, and real review objects that Facebook exposes publicly.
The actor is built for local lead generation and page research. It discovers Pages through Facebook's own page search, then reads each Page's public root and About tabs without cookies. No Facebook login is needed to enrich URLs; a c_user + xs session cookie is required only for keyword discovery.
What this actor does
- Two ways in: paste Facebook Page URLs,
pageIds(numeric IDs or usernames), or run keyword + location discovery withsearchTerms+locations. - Cookie-aware discovery: Facebook's
/search/pages/endpoint returns results only to a logged-in session. The actor validates that the supplied cookie containsc_userandxs, replays the page's own search cursor for up to 10 results per request, and stops atmaxItems. - Cookieless enrichment: Page root and About tabs are fetched with browser-compatible requests, and cookies are never sent to Page or About URLs.
- Efficient About reads: the actor stops reading each About tab after the useful public data (about 560–650 KB) instead of downloading the full ~20 MB response.
- Lead-ready output: identity, category, address and coordinates, phone, email, website, Messenger link, Instagram/social links, followers (raw and parsed), recommendation percentage, review count, open status, price range, services, verified flag, creation date, ad status, Ad Library link, profile/cover images, and reviews.
- Post-fetch filters:
strictLocation,categoryFilter,minFollowers,verifiedOnly, andcontactFilter. - Explicit failure rows:
includeFailedPagesemits diagnostic rows with a stableerrorCodeanddetailsErrorinstead of silently dropping pages.failOnEmptyturns a zero-page run into a failed run. - Omit-empty output: fields Facebook does not expose for a Page are left out of that record, never emitted as
null,"", or[].
Output per page
pageId— Facebook Page ID, when exposed by the public payloadpageName,username,title— Page identityfacebookUrl,pageUrl,resolvedUrl— requested canonical URL and final resolved URLpageType— alwayspageisVerified—true/falsewhen Facebook exposes the flag; omitted when unknowncategory— primary Page categoryaddress,city,region,postalCode,country— parsed from the public addresslatitude,longitude,addressUrl— coordinates and a Google Maps linkphone,email,website,messenger— public contact details andhttps://m.me/<pageId>socialLinks— Instagram and other linked accounts exposed on the Pagefollowers,followersText— parsed follower count and the raw label (9.1K followers)recommendPercentage,reviewCount,ratingText— the real Facebook recommendation metrics; no synthetic star ratingopenStatus—Open now,Closed now,Always open,Opening soon, and similarpriceRange,services,about— business details and the About textcreationDate,adStatus— Page Transparency valuespageAdLibraryUrl— constructed Meta Ad Library URL for the PageprofilePictureUrl,coverPhotoUrl— Page imagesreviews[]— review objects withreviewerName,recommends,reviewText,reviewDate, plus optionalreviewId,authorProfileUrl,reactions,commentCountsearchTerm,searchLocation— the discovery query that produced the rowinputUrl— the URL or ID supplied or discovereddataSource—facebook_search+public_pageorfacebook_public_pagefieldsFound— number of populated data fieldsdetailsError— why optional detail tabs were skipped, when partialreviewsError— why the optional reviews tab was empty or skippedscrapedAt— ISO 8601 UTC timestamp
Empty fields are omitted at every depth. A record with no reviews has no reviews key; a Page with no public email has no email key.
Error rows
When includeFailedPages is on, a failed target or discovery query produces a diagnostic row instead of disappearing:
{"url": "https://www.facebook.com/this-page-does-not-exist-zz9x7","errorCode": "not_found","detailsError": "This Facebook page is unavailable or was removed.","httpStatus": 200,"fieldsFound": 0,"dataSource": "facebook_public_page","scrapedAt": "2026-10-22T09:30:00+00:00"}
Stable errorCode values: search_login_required, search_empty, blocked, timeout, not_found, login_wall, brand_redirect, not_a_page, http_error, no_data, parse_empty.
Input
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array of {url} | [] | Direct Facebook Page URLs to enrich. |
pageIds | array of strings | [] | Numeric Page IDs, usernames, or Page URLs. Numeric IDs are fetched through facebook.com/<id>. |
searchTerms | array of strings | [] | Keywords for page discovery, e.g. Coffee Shop or Dentist. Requires a c_user + xs cookie. |
locations | array of strings | [] | City or region names added to each search query as a soft hint. Facebook does not expose a reliable city filter; verify the enriched address. |
strictLocation | boolean | false | Drop pages whose enriched address does not contain the location. Best-effort post-filter, not a city boundary. |
categoryFilter | array of strings | [] | Keep pages whose enriched category contains any of these terms (case-insensitive). Applied after enrichment. |
minFollowers | integer | 0 | Keep pages with at least this many followers. Pages with no follower count are dropped when this is above 0. |
verifiedOnly | boolean | false | Keep only pages whose public payload explicitly marks them as verified. |
contactFilter | select | any | Keep pages with email, phone, or website. Options: any, email, phone, website. |
includeReviews | boolean | true | Fetch the public reviews tab. Adds one request per page. Coverage is partial (Facebook exposes reviews for some pages only). |
includeFailedPages | boolean | true | Emit diagnostic rows for pages that cannot be enriched. Failed rows do not consume maxItems. |
failOnEmpty | boolean | false | Fail the run when zero page rows are produced. Useful for scheduled jobs that must not silently succeed with an empty dataset. |
maxItems | integer | 100 | Maximum successful page rows (1–5,000). Discovery over-collects candidates to absorb failures. |
cookies | string | empty | Optional. Only used for keyword discovery. Needs both c_user and xs. Accepts a JSON cookie array or a raw name=value; ... header. |
proxyConfiguration | proxy | Apify residential | Used only for keyword discovery. Facebook blocks search from datacenter IPs, so the default is Apify residential proxy. Set useApifyProxy: false to try a direct connection. |
Example: enrich known pages (cookieless)
{"startUrls": [{ "url": "https://www.facebook.com/ozonecoffeeuk" },{ "url": "https://www.facebook.com/curatorscoffee" }],"maxItems": 2,"includeReviews": true}
Example: find coffee shops in London
{"searchTerms": ["Coffee Shop"],"locations": ["London"],"strictLocation": true,"categoryFilter": ["Coffee"],"maxItems": 100,"cookies": "c_user=1000...; xs=...","includeReviews": false}
Example: lead-ready pages only
{"searchTerms": ["Dentist", "Hair Salon"],"locations": ["Manchester", "Leeds"],"contactFilter": "email","minFollowers": 100,"maxItems": 250,"cookies": "c_user=1000...; xs=..."}
searchTerms examples always include a cookies value because Facebook keyword
search requires a c_user + xs session; without it the run fails with a clear
message (or, when direct targets are also supplied, emits a
search_login_required diagnostic row and enriches the direct targets).
Cookies and Facebook search
Facebook's own page search (/search/pages/?q=...) returns HTTP 404 with an empty body to anonymous requests, even after warming a datr/sb session. A session containing c_user and xs returns the search page and its results. Other cookies add nothing for this endpoint.
- Cookies are used only for discovery.
- Keyword discovery uses the
proxyConfigurationinput (Apify residential by default) because Facebook returns the login wall for datacenter IPs. You can setuseApifyProxy: falseto try a direct connection. - Page and About enrichment works better without cookies; the actor never sends them to Page URLs or through the discovery proxy.
- If
searchTermsare supplied withoutc_user+xs:- with direct
startUrls/pageIds, the run continues with cookieless enrichment and emits asearch_login_requireddiagnostic row whenincludeFailedPagesis on; - without direct targets, the run fails with a clear message.
- with direct
- A cookie never becomes part of the output.
Honest limits
- City is a query hint, not a filter. Facebook's internal place filter exists in some UI paths, but every public place UID tested returned zero results. The actor therefore appends the location to the keyword and offers
strictLocationas a post-filter. A London query can return pages from The Hague, Amsterdam, Mexico, or Azerbaijan;strictLocationremoves rows whose enriched address does not contain the location. - No likes count. Facebook does not expose a like count on public Page payloads. The actor returns followers and recommendation metrics only.
- No structured weekly hours. Public payloads expose only a status string (
Open now,Closed now,Always open), not a day-by-day grid. - No 5-star rating. Facebook retired Page star ratings.
recommendPercentageandreviewCountare the real metrics; no rating is synthesized. - Reviews are partial. Facebook exposes reviews for some pages only. Treat
reviewsas "reviews when public", not a guarantee. - Email is the scarcest field. Across the discovery sample, phone was present on roughly 84% of pages, address on 79%, website on 84%, and email on 68%. Missing fields mean the Page owner did not publish them.
- Some pages are not pages. Search can return personal profiles, groups, and other surfaces. The actor filters known non-page categories and classifies the rest in error rows (
not_a_page,no_data,brand_redirect).
Scaling
maxItemsdefaults to 100 and supports up to 5,000.- Discovery over-collects about 2× the requested count, because some candidates turn out to be unavailable, login-walled, or filtered out.
- Multiple
searchTerms×locationsmultiply the candidate pool. For 1,000+ rows, use several specific terms and cities rather than one generic query. - Page enrichment runs two requests at a time with polite jitter. About tabs are read only up to the useful public data, keeping bandwidth low.
Use cases
- Local lead generation — collect dentists, cafés, salons, or contractors by keyword and city with public phone/email/website contacts.
- CRM enrichment — append category, address, followers, and social links to a list of known Facebook Pages.
- Franchise and multi-location mapping — compare follower counts and recommendation percentages across locations.
- Market research — size a category in a region and inspect price ranges, services, and Page creation dates.
- Trust and ad checks — use
isVerified,creationDate,adStatus, andpageAdLibraryUrlto qualify a Page. - Review monitoring — pull public review text and recommendation verdicts for pages that expose them.
FAQ
Do I need a Facebook account or cookies?
Only for keyword discovery. Page URL and Page ID enrichment is cookieless. To use searchTerms, add a cookie header containing both c_user and xs from a logged-in browser session. Cookies are never required for startUrls or pageIds.
Why did a search return zero results?
Facebook search needs a valid logged-in session. Check that the cookie contains c_user and xs and has not expired. If you also supplied direct URLs, the run continues with them and emits a search_login_required diagnostic row when includeFailedPages is on.
Why is the city not exact?
Facebook's public page search is keyword-ranked, not location-filtered. The location is appended to the query as a hint. Use strictLocation: true to drop rows whose enriched address does not contain the location, and expect lower result counts.
Why are email or phone missing from some records?
Facebook only exposes contact fields that the Page owner made public. Across typical business pages, email is the least available field. A missing field is omitted from the record rather than returned as null.
Why are there no likes or weekly opening hours?
Facebook's public payload does not include a likes count or a structured day-by-day hours grid. The actor returns followers, recommendPercentage, reviewCount, and the current openStatus instead of inventing values.
Why do some Pages have no reviews?
Facebook exposes reviews only for pages that have them and make them public. includeReviews adds one request per page; coverage is partial.
What does fieldsFound mean?
It is the number of populated data fields in the row. Combined with detailsError, it distinguishes "Facebook did not publish this field" from "the actor failed to read it".
What happens when a Page is unavailable or redirects?
With includeFailedPages (default), the actor emits a row with an errorCode such as not_found, brand_redirect, not_a_page, or no_data. Set failOnEmpty: true if a scheduled run should fail when no page rows are produced.
Is this affiliated with Facebook or Meta?
No. This is an independent third-party actor that reads publicly accessible Facebook Pages. It is not affiliated with, endorsed by, or operated by Meta Platforms, Inc.

