Facebook Business Page Finder by Keyword & City avatar

Facebook Business Page Finder by Keyword & City

Pricing

from $0.49 / 1,000 results

Go to Apify Store
Facebook Business Page Finder by Keyword & City

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

Nimbryxo-studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Security

Limited permissions

Share

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 with searchTerms + locations.
  • Cookie-aware discovery: Facebook's /search/pages/ endpoint returns results only to a logged-in session. The actor validates that the supplied cookie contains c_user and xs, replays the page's own search cursor for up to 10 results per request, and stops at maxItems.
  • 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, and contactFilter.
  • Explicit failure rows: includeFailedPages emits diagnostic rows with a stable errorCode and detailsError instead of silently dropping pages. failOnEmpty turns 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 payload
  • pageName, username, title — Page identity
  • facebookUrl, pageUrl, resolvedUrl — requested canonical URL and final resolved URL
  • pageType — always page
  • isVerified — true / false when Facebook exposes the flag; omitted when unknown
  • category — primary Page category
  • address, city, region, postalCode, country — parsed from the public address
  • latitude, longitude, addressUrl — coordinates and a Google Maps link
  • phone, email, website, messenger — public contact details and https://m.me/<pageId>
  • socialLinks — Instagram and other linked accounts exposed on the Page
  • followers, followersText — parsed follower count and the raw label (9.1K followers)
  • recommendPercentage, reviewCount, ratingText — the real Facebook recommendation metrics; no synthetic star rating
  • openStatus — Open now, Closed now, Always open, Opening soon, and similar
  • priceRange, services, about — business details and the About text
  • creationDate, adStatus — Page Transparency values
  • pageAdLibraryUrl — constructed Meta Ad Library URL for the Page
  • profilePictureUrl, coverPhotoUrl — Page images
  • reviews[] — review objects with reviewerName, recommends, reviewText, reviewDate, plus optional reviewId, authorProfileUrl, reactions, commentCount
  • searchTerm, searchLocation — the discovery query that produced the row
  • inputUrl — the URL or ID supplied or discovered
  • dataSource — facebook_search+public_page or facebook_public_page
  • fieldsFound — number of populated data fields
  • detailsError — why optional detail tabs were skipped, when partial
  • reviewsError — why the optional reviews tab was empty or skipped
  • scrapedAt — 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

FieldTypeDefaultDescription
startUrlsarray of {url}[]Direct Facebook Page URLs to enrich.
pageIdsarray of strings[]Numeric Page IDs, usernames, or Page URLs. Numeric IDs are fetched through facebook.com/<id>.
searchTermsarray of strings[]Keywords for page discovery, e.g. Coffee Shop or Dentist. Requires a c_user + xs cookie.
locationsarray 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.
strictLocationbooleanfalseDrop pages whose enriched address does not contain the location. Best-effort post-filter, not a city boundary.
categoryFilterarray of strings[]Keep pages whose enriched category contains any of these terms (case-insensitive). Applied after enrichment.
minFollowersinteger0Keep pages with at least this many followers. Pages with no follower count are dropped when this is above 0.
verifiedOnlybooleanfalseKeep only pages whose public payload explicitly marks them as verified.
contactFilterselectanyKeep pages with email, phone, or website. Options: any, email, phone, website.
includeReviewsbooleantrueFetch the public reviews tab. Adds one request per page. Coverage is partial (Facebook exposes reviews for some pages only).
includeFailedPagesbooleantrueEmit diagnostic rows for pages that cannot be enriched. Failed rows do not consume maxItems.
failOnEmptybooleanfalseFail the run when zero page rows are produced. Useful for scheduled jobs that must not silently succeed with an empty dataset.
maxItemsinteger100Maximum successful page rows (1–5,000). Discovery over-collects candidates to absorb failures.
cookiesstringemptyOptional. Only used for keyword discovery. Needs both c_user and xs. Accepts a JSON cookie array or a raw name=value; ... header.
proxyConfigurationproxyApify residentialUsed 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).

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 proxyConfiguration input (Apify residential by default) because Facebook returns the login wall for datacenter IPs. You can set useApifyProxy: false to 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 searchTerms are supplied without c_user + xs:
    • with direct startUrls/pageIds, the run continues with cookieless enrichment and emits a search_login_required diagnostic row when includeFailedPages is on;
    • without direct targets, the run fails with a clear message.
  • 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 strictLocation as a post-filter. A London query can return pages from The Hague, Amsterdam, Mexico, or Azerbaijan; strictLocation removes 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. recommendPercentage and reviewCount are the real metrics; no rating is synthesized.
  • Reviews are partial. Facebook exposes reviews for some pages only. Treat reviews as "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

  • maxItems defaults 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 × locations multiply 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, and pageAdLibraryUrl to 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.