Facebook Page Contact Info Scraper
Pricing
from $1.24 / 1,000 facebook pages
Facebook Page Contact Info Scraper
Get the public contact details of Facebook Pages: website, email, phone and street address, plus category, opening status, linked social accounts, the verified badge and follower counts. Paste links, handles or Page ids, up to 200 a run. No Facebook account needed. $1.30 per 1,000 Pages.
Pricing
from $1.24 / 1,000 facebook pages
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
51
Total users
31
Monthly active users
8 days ago
Last modified
Categories
Share
Give it Facebook Page links or handles and get each Page's contact details in one row: website, e-mail, phone, street address, category, the social accounts it links to and how many people follow it.
What you get is whatever that Page chose to publish. A restaurant usually fills in everything; a personal brand Page may list a website and nothing else. When a Page carries no contact facts at all, you get an uncharged row saying so rather than a row full of nulls you paid for.
| Input | Page links, handles or numeric Page ids, up to 200 per run |
| Output | One row per Page: website, e-mail, phone, address, category, linked accounts, opening status, recommendation line, follower and check-in counts |
| Ceiling | 200 Pages per run |
| Account needed | None |
| Price | $1.30 per 1,000 Pages on the free plan, down to $1.24 on Business. The free plan's $5 a month covers about 3,800 |
🔍 What Facebook Page Contact Info Scraper does
It reads the public About information a Page publishes and flattens it into one row. Every detail
that can appear more than once comes back twice: email and emails, phone and phones,
website and websites. The singular field is the first one, for a spreadsheet; the plural holds
the lot, for a database. Facebook's own links are stripped out of websites, so you get the
business site rather than a link back to Facebook.
Duplicates are removed before anything is read, so the same Page written as a handle in one line and a full link in another is fetched once and charged once.
socialLinks is often the most useful part: Pages link their Instagram, YouTube or X account in
About, and each comes back as a network, a handle and a URL.
Pick a language and the Page's labels come back in it; counts and contact details stay as they are.
📋 What data you get from each Facebook Page
| What you get | Field |
|---|---|
| The Page's ids and link | pageId, handle, pageUrl, inputUrl |
| Name, badge, picture and bio | pageName, isVerified, profilePicture, bio |
| Website, e-mail and phone | website, websites, email, emails, phone, phones |
| The street address, as one line | address |
| Other accounts it links to | socialLinks |
| What the business is and offers | category, categories, services, priceRange, openingHoursStatus |
| The recommendation line | ratingSummary, recommendPercent, reviewsCount |
| Audience counts | followers, followersApprox, likesCount, talkingAboutCount, checkinsCount |
| The language of the labels, when you picked one | language |
▶️ How to scrape Facebook Page contact details
- Open Facebook Page Contact Info Scraper and click Try for free.
- Put your Pages into Facebook Pages, one per line.
- Set Maximum Pages to read if you are pointing it at a long list and want a spend ceiling.
- Click Start.
- Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
Run it with empty input and you get one labelled sample row, which is not charged.
💰 How much does it cost to scrape Facebook Page contact details?
$1.30 per 1,000 Pages. That is the free plan's price; paid plans pay a little less: $1.28 on Starter, $1.26 on Scale and $1.24 on Business. On the free plan, the $5 Apify gives you each month covers about 3,800 Pages.
You pay for Pages that come back with contact details. The sample row, every diagnostic row,
duplicate spellings of the same Page, Pages that publish nothing to find and Pages the run never
reached are not charged. Picking a language does not change the price.
📥 What you give it
{"startUrls": ["https://www.facebook.com/katzsdeli", "shakeshack"],"maxPages": 50}
| Field | Default | What it is |
|---|---|---|
startUrls | none | The Pages to read. A full Page link, an About-tab link, a bare handle like katzsdeli, an @handle, a numeric Page id, or a profile.php?id= link. Up to 200 per run. |
maxPages | none, reads every Page in the list | A ceiling on how many of those Pages actually get read, so you can point it at a long list and still cap the spend. 1 to 200. |
language | English | The language for the Page's labels: category, categories, openingHoursStatus, services, priceRange and ratingSummary. 34 languages, such as es_ES, fr_FR, de_DE, pt_BR, ja_JP or ar_AR. Everything else stays as it is in English, so counts and contact details parse the same. One more read per Page, same price. Facebook writes the price range in the reader's currency symbol, so a New York deli shows €€ in Spanish. |
proxyUrls | none | Optional. One URL per line if you want the traffic to leave through servers you already pay for. |
📤 What you get back
A real row from a run on 21 September 2026, with the picture link trimmed:
{"ok": true,"charged": true,"recordType": "page","inputUrl": "https://www.facebook.com/katzsdeli","handle": "katzsdeli","pageName": "Katz's Delicatessen","pageUrl": "https://www.facebook.com/katzsdeli/","pageId": "100064806517961","isVerified": false,"category": "Deli","categories": ["Deli"],"website": "http://katzsdelicatessen.com/","websites": ["http://katzsdelicatessen.com/"],"email": "cs@katzsdelicatessen.com","emails": ["cs@katzsdelicatessen.com"],"phone": "(212) 254-2246","phones": ["(212) 254-2246"],"address": "205 E Houston St, New York, NY, United States, 10002","socialLinks": [{ "network": "Instagram", "handle": "katzsdeli", "url": "https://www.instagram.com/katzsdeli" }],"openingHoursStatus": "Open now","priceRange": "Price Range · $$","services": "Dine-in · Outdoor seating · In-store pickup","ratingSummary": "98% recommend (52,515 reviews)","recommendPercent": 98,"reviewsCount": 52515,"followers": "936K followers","followersApprox": 936000,"likesCount": null,"talkingAboutCount": 66154,"checkinsCount": 529265,"profilePicture": "https://lookaside.fbsbx.com/...","bio": "New York City's most iconic deli.","scrapedAt": "2026-09-21T01:31:06.640Z"}
| Field | How to read it |
|---|---|
inputUrl, handle, pageId, pageUrl | What you asked for, and the three ways to identify the Page afterwards. pageId is the key that never changes. |
email / emails, phone / phones, website / websites | First value and full list. Phones come back in the format the Page published them in, so a French Page gives a French format. |
address | One line, as published. There are no separate street, city and postcode fields, because the Page does not publish them separately. |
category, categories, bio, services, priceRange | How the Page describes itself and what it says it offers. |
socialLinks | Other accounts linked from About, each with network, handle and url. |
openingHoursStatus | The live status line only, such as Open now or Closed now. |
ratingSummary, recommendPercent, reviewsCount | The recommendation line on Pages that have one, split into a number and a count. |
followers, followersApprox | Facebook publishes followers as a rounded string ("936K followers"). followersApprox is that string as a number, so it is rounded too. |
likesCount | Often empty now, because Facebook shows followers where it used to show likes. |
talkingAboutCount, checkinsCount | Exact figures, not rounded, on Pages that publish them. |
isVerified, profilePicture, scrapedAt | The blue badge, the Page picture, and when the row was read. |
language | Only when you picked a language: the one the labels are in. It says en_US when Facebook did not show that Page in your language on the second read, and the labels stayed in English. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it | Billed |
|---|---|---|
| A Page | ok: true, charged: true and recordType: "page" | yes |
| The sample row | _sample: true | no |
| A diagnostic | _diagnostic: true and an errorCode | no |
Filter on charged == true and you have your data. That flag is what separates real rows from the
sample and the diagnostics, not a receipt.
errorCode | What happened |
|---|---|
BAD_INPUT | That entry could not be read as a Page, or language is not one on the list. |
NOT_FOUND | No public Page there. Misspelled handles and deleted Pages land here. |
NO_CONTACT_INFO | The Page is readable but publishes no contact details at all. |
NOT_SERVED | This request was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
NETWORK | Facebook could not be reached. |
TIME_BUDGET | The run ran out of time before reaching that Page. |
PROXY_INPUT_ADJUSTED | A proxyConfiguration setting this Actor does not use was dropped. The run carried on. |
CHARGE_ERROR | A billing event could not be recorded. Told to you rather than hidden. |
UNEXPECTED_ERROR | Anything else, with the message attached. |
If nothing at all has come back after the first few tries, the run stops instead of grinding
through the rest of your list. The Pages it did not reach are named in a single uncharged NOT_SERVED
row, so you know exactly what to re-run.
One quirk of the Console's Overview table: it shows the identity and contact columns, so the address, the social links, the opening status and the audience counts read as missing there. Open the row or download the JSON and they are all present.
💡 What people use it for
- Turning a list of Page handles into one sheet, with email, phone and website on each line.
- Enriching a CRM: match on
pageId, fill the blanks, and usesocialLinksto find the accounts nobody recorded. - Local research, where
address,categoryandpriceRangegive you the shape of a high street in one run. - Checking whether Pages you already work with still publish the contact details you have on file.
When a Page lists a website but no e-mail, three steps usually find one:
- Run this on your Pages.
- Keep the rows where
emailis empty andwebsiteis not, and copy thewebsitevalues. - Paste them into Contact Details Scraper
as
websites. It reads each site's contact, about and legal pages for addresses the Page never published.
🚧 What it does not do
- Only what the Page publishes. No email is inferred, guessed or looked up elsewhere. A Page with a blank About section returns an uncharged row saying so.
- No weekly opening timetable. You get the live status line,
Open noworClosed now, not Monday to Sunday hours. - Follower counts are rounded, because Facebook rounds them before publishing.
talkingAboutCountandcheckinsCountare exact where they exist. - No posts, reviews or comments. Those are separate actors, linked below.
- Public Pages only. Personal profiles, groups and anything behind a login are out of scope.
- Phone and address arrive region-formatted, as the Page wrote them, not normalised to one standard. Parse them if you need parts.
- 200 Pages per run. Split a bigger list across runs.
- It is not an official Facebook tool. Dami's Studio is independent and is not affiliated with or endorsed by Facebook or Meta, or by any other company named on this page.
🧭 Which Facebook scraper do you need?
| If you want | Use |
|---|---|
| The website, e-mail and phone on a Page | This one |
| A Page's name, likes and verified badge, ten Pages a run | Facebook Pages Scraper |
| What that Page has been posting | Facebook Posts Scraper |
| The recommendations and reviews under it | Facebook Reviews Scraper |
| The comments under one of its posts | Facebook Comments Scraper |
| The ads that Page is running | Meta Ad Library Scraper |
| E-mails and phones from the business's own website | Contact Details Scraper |
❓ Questions people ask
Do I need a Facebook account to get a Page's contact details?
No. Runs read public Pages logged out, the way any signed-out visitor sees them, and no account is used at any point.
Can I give it a numeric Page id?
Yes, and an @handle, a bare handle, an About-tab link or a profile.php?id= link. They all
resolve to the same Page.
Why is the email missing on some Pages?
Because the Page did not publish one. Nothing here guesses an address from a domain. Open the Page's About tab in a private browser window: if no e-mail shows there, there is none to read.
Can I call it from code or connect it to an AI assistant?
Yes. The
API tab has
ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP
client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/facebook-page-contact-info-scraper.
Either way the run happens on your Apify account at the same price.
Is scraping Facebook legal?
This reads the public information a Page publishes, the way a signed-out visitor sees it: no account, nothing private. A business e-mail or phone can still be personal data under GDPR, Canada's PIPEDA and similar laws, so keep only what you have a reason to keep. Anti-spam laws, such as CASL in Canada, the EU's e-privacy rules and CAN-SPAM in the US, decide how you may contact anyone on your list, and some of them ask for consent before a marketing message. Facebook's own terms still apply to what you do with it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Paste the Page you used and the run ID, and the log is enough for us to see what happened.