Facebook Pages & Contacts — Search by Keyword & City, No Login
Pricing
from $3.00 / 1,000 results
Facebook Pages & Contacts — Search by Keyword & City, No Login
Search Facebook itself for pages by keyword and city, and get each page's About-tab contact details in the same run: email, phone, address, website, social handles, open/closed status, price range, rating, exact likes, verified badge. No login, no cookies, no browser.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
3
Bookmarked
121
Total users
35
Monthly active users
5 days ago
Last modified
Categories
Share
Facebook Pages & Contacts Scraper
Search Facebook itself for pages by keyword and city, and get each page's About-tab contact details in the same run — email, phone, address, website, social handles, open/closed status, price range, rating, exact likes and verified badge. No login, no cookies, no browser.
Why Use This Scraper?
- Facebook's own search, not Google's. Results come from
facebook.com/search, the same list a Facebook user sees. Actors built on a Googlesite:facebook.comquery return whatever Google indexed, go dark when Google changes a page, and cannot filter by city. - A city filter that works.
"Kansas City, Missouri"is resolved to Facebook's own place before anything is charged, and the search is filtered on it. Measured: 12 of 12 results for two trade keywords carried 816 area codes. - Contacts in the same run. Each page's About tab is read for email, phone, address, website, Instagram and other handles, hours status, price range and rating — the fields most page scrapers leave blank because they read the page root instead.
- No cookies. The previous version of this actor required your own logged-in Facebook cookies. Both halves now run as a logged-out guest.
- Exact likes.
1275, not1.2K, from the page head. - Failures say why. An unknown city ends the run with a message rather than unfiltered rows; a page whose About tab cannot be read still returns its search result with
detailsErrorset.
Overview
One row per page found. Two keywords at maxPages: 20 give up to 40 rows, each carrying searchQuery and searchLocation so a batch stays attributable.
Supported Inputs
| Input | Example |
|---|---|
| Keyword | siding and windows |
| Keyword + city | dentist with location: "Manchester, New Hampshire" |
| Facebook place UID | locationUid: "108591349161413" — skips the city lookup |
| Legacy search URL | https://www.facebook.com/search/pages/?q=roofing in startUrls |
Use Cases
- Local lead lists — every roofer, dentist or gym Facebook knows in a city, with phone and email.
- Territory research — page count, rating and likes per keyword per city.
- Agency prospecting — pages with no website listed, or no email, in a given trade and town.
- Social graph — the Instagram and TikTok handles local businesses list on Facebook.
How It Works
A guest session is opened on Facebook and the city, if given, is resolved to a Facebook place id through Facebook's own typeahead. Each keyword is then searched as pages with that place as a filter, ten results per request, following the cursor until maxPages is reached. For every page found, its About tab is fetched as a stream and cut the moment the contact section has arrived — about 100 KB per page instead of the 2 MB the full tab weighs — and read from Facebook's field_type enum, which is stable across languages. The page head is fetched for the profile picture and exact like count.
Pure HTTP over a residential proxy. No browser, no login.
Input Configuration
| Field | Type | Default | Notes |
|---|---|---|---|
searchQueries | array | — | Keywords, one per line. Facebook search URLs accepted. |
location | string | — | City, ideally with state or country. Resolved to a Facebook place before charging. |
locationUid | string | — | Facebook place id, from facebook.com/places/<uid>/. Skips the lookup. |
includePageDetails | boolean | true | Fetch the About tab for each page. Off = search results only. |
maxPages | integer | 20 | Pages per keyword. |
language | string | en-US | Accept-Language. Changes localised free text such as category names, not what is extracted. |
startUrls | array | — | Legacy: search URLs. Merged with searchQueries. |
proxy | object | — | Non-paying sample runs only. Paying runs use a built-in residential proxy. |
Example input
{"searchQueries": ["siding and windows", "roofing"],"location": "Kansas City, Missouri","maxPages": 20}
Output Overview
One flat row per page, 36 fields when details are on. Search-result fields are always present; About-tab fields are null with detailsError set when the tab could not be read.
Output Sample
A real row from a live run:
{"searchQuery": "roofing","searchLocation": "Kansas City, Missouri","pageName": "Collins Roofing","pageUrl": "https://www.facebook.com/CollinsRoofing","pageLink": "https://www.facebook.com/CollinsRoofing","pageId": "100063613988618","isVerified": false,"category": "Roofing Service","tag": null,"subtitle": null,"description": "Collins Roofing is a full service roofing company. 40+ Years Experience Lifetime Warranties Availabl","locationDescriptor": null,"photoURL": "https://scontent.fupn3-1.fna.fbcdn.net/v/t39.30808-1/696846527_1568020308661754_827356433326780853_n.jpg?…","profilePictureUrl": "https://scontent.fupn3-1.fna.fbcdn.net/v/t39.30808-1/696846527_1568020308661754_827356433326780853_n.jpg?…","scrapedAt": "2026-09-15T11:45:34.738Z","email": "collinsroofingkc@yahoo.com","phone": "+1 816-252-3088","address": "501 Nw 5th St, Blue Springs, MO, United States, 64014","website": "http://www.collinsroofingkc.com/","websites": [],"socialLinks": [],"instagram": null,"hoursStatus": "Closed now","priceRange": "$$","rating": "98% recommend (34 reviews)","ratingPercent": 98,"reviewCount": 34,"likes": 1275,"talkingAbout": 52,"wereHere": 120,"followers": "1.2K followers","following": "22 following","intro": "Collins Roofing is a full service roofing company. \n40+ Years Experience\nLifetime Warranties Availabl","fieldsFound": ["category","address","profile_phone","profile_email","website","ratings","business_hours","business_price"],"detailsError": null,"pageDetails": {"Category": "Roofing Service","address": "501 Nw 5th St, Blue Springs, MO, United States, 64014","Mobile": "+1 816-252-3088","Email": "collinsroofingkc@yahoo.com","Website": "http://www.collinsroofingkc.com/","Ratings": "98% recommend (34 reviews)","Hours": "Closed now","Price Range": "$$"}}
Key Output Fields
| Field | Notes |
|---|---|
searchQuery / searchLocation | Which keyword and resolved city produced this row. |
pageName / pageUrl / pageId | The page as Facebook lists it in search. |
category / subtitle / description / locationDescriptor | From the search result. |
email / phone / address / website / websites | From the About tab's contact section. null where the page lists none. |
socialLinks / instagram | Platform, handle and a built URL for each social handle listed. |
hoursStatus | Open now / Closed now / Always open. The per-day schedule is not served to a logged-out client and is not guessed. |
priceRange / rating / ratingPercent / reviewCount | $$, 98% recommend (34 reviews) and its parts. |
likes / talkingAbout / wereHere | Exact counts from the page head. |
followers / following | Facebook's rounded labels. |
isVerified / intro / profilePictureUrl | Badge, intro line, signed CDN image link. |
fieldsFound | Which contact field types the page rendered — distinguishes "not listed" from "not extracted". |
detailsError | null on success; not_found, login_wall, no_about_tab or blocked when the About tab could not be read. The search-result half of the row is still delivered. |
pageDetails | The nested shape the previous version emitted, kept so an existing pipeline keeps working. |
error / message | Present only on a query-level failure row: no_results, search_failed. |
FAQ
Do I need a Facebook account or cookies? No. Both the search and the About tab are read as a logged-out guest. Every figure in this README came from such a run.
Why do I get pages from outside my city?
The filter is Facebook's own, applied to Facebook's own search, and it is not perfect — a multi-location business or one that tagged the wrong place can appear. address tells you where each page actually is.
Why does one row have detailsError: "not_found"?
The search result linked to a page whose About tab Facebook does not serve to a guest — usually a personal profile or a page that has since been renamed. The search fields for that row are still there.
Can I get opening hours by day? Not logged out. Facebook renders only the current open/closed status server-side.
How is this different from the Facebook Search Scraper? That one returns search results across every type — people, pages, posts, places — and stops there. This one searches pages only and enriches each with its About tab in the same run.
Support
Open an issue on the Actor's Issues tab. Bug reports with a run id, the keyword and the city get looked at first.
Explore More Scrapers
- Facebook Page Contact Details — the same About-tab details for page URLs you already have
- Facebook Search Scraper — people, pages, posts, places and events by keyword
- Facebook Reels Scraper — every reel on a page with play counts
- Facebook Comments Scraper — comment threads on any public post
🤖 For AI Agents & LLM Apps
Purpose: Find Facebook pages by keyword and city using Facebook's own search, and return each page's contact details — email, phone, address, website, social handles, hours status, price range, rating, exact likes, verified badge — in one row.
Minimal tested input:
{ "searchQueries": ["roofing"], "location": "Kansas City, Missouri", "maxPages": 10 }
Output: array of flat objects, one per page. Fields: searchQuery, searchLocation, pageName, pageUrl, pageId, isVerified, category, subtitle, description, locationDescriptor, profilePictureUrl, email, phone, address, website, websites, socialLinks, instagram, hoursStatus, priceRange, rating, ratingPercent, reviewCount, likes, talkingAbout, wereHere, followers, following, intro, fieldsFound, detailsError, pageDetails, scrapedAt, plus legacy aliases pageLink, tag, photoURL.
Agent-relevant behaviour: a null contact field means the page does not list it — check fieldsFound. detailsError non-null means the search half is present but the About tab was unreadable; do not treat it as a missing page. likes is exact, followers is rounded. An unknown location ends the run with exitCode 0 and a status message rather than returning unfiltered rows. pageDetails duplicates the flat contact fields in the older nested shape.
Billing: per delivered row. Query-level failure rows are free.
⚠️ Disclaimer
This Actor reads only publicly available Facebook page information — no login, no cookies, no private content. You are responsible for using the output lawfully, including under the GDPR, the CCPA and Facebook's terms where they apply to you. Nothing here is legal advice.
SEO Keywords
facebook page search scraper, facebook pages by keyword, facebook business search by city, facebook local business scraper, facebook page contact scraper, facebook page email phone, facebook lead generation, facebook business leads by location, facebook pages with contact details, facebook search pages contacts, facebook page finder, facebook business directory scraper, facebook about tab scraper, facebook page scraper no login, apify facebook pages contacts