Facebook Page Contact Info Scraper avatar

Facebook Page Contact Info Scraper

Pricing

from $1.24 / 1,000 facebook pages

Go to Apify Store
Facebook Page Contact Info Scraper

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

Dami's Studio

Maintained by Community

Actor 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.

InputPage links, handles or numeric Page ids, up to 200 per run
OutputOne row per Page: website, e-mail, phone, address, category, linked accounts, opening status, recommendation line, follower and check-in counts
Ceiling200 Pages per run
Account neededNone
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 getField
The Page's ids and linkpageId, handle, pageUrl, inputUrl
Name, badge, picture and biopageName, isVerified, profilePicture, bio
Website, e-mail and phonewebsite, websites, email, emails, phone, phones
The street address, as one lineaddress
Other accounts it links tosocialLinks
What the business is and offerscategory, categories, services, priceRange, openingHoursStatus
The recommendation lineratingSummary, recommendPercent, reviewsCount
Audience countsfollowers, followersApprox, likesCount, talkingAboutCount, checkinsCount
The language of the labels, when you picked onelanguage

▶️ How to scrape Facebook Page contact details

  1. Open Facebook Page Contact Info Scraper and click Try for free.
  2. Put your Pages into Facebook Pages, one per line.
  3. Set Maximum Pages to read if you are pointing it at a long list and want a spend ceiling.
  4. Click Start.
  5. 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
}
FieldDefaultWhat it is
startUrlsnoneThe 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.
maxPagesnone, reads every Page in the listA 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.
languageEnglishThe 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.
proxyUrlsnoneOptional. 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"
}
FieldHow to read it
inputUrl, handle, pageId, pageUrlWhat you asked for, and the three ways to identify the Page afterwards. pageId is the key that never changes.
email / emails, phone / phones, website / websitesFirst value and full list. Phones come back in the format the Page published them in, so a French Page gives a French format.
addressOne line, as published. There are no separate street, city and postcode fields, because the Page does not publish them separately.
category, categories, bio, services, priceRangeHow the Page describes itself and what it says it offers.
socialLinksOther accounts linked from About, each with network, handle and url.
openingHoursStatusThe live status line only, such as Open now or Closed now.
ratingSummary, recommendPercent, reviewsCountThe recommendation line on Pages that have one, split into a number and a count.
followers, followersApproxFacebook publishes followers as a rounded string ("936K followers"). followersApprox is that string as a number, so it is rounded too.
likesCountOften empty now, because Facebook shows followers where it used to show likes.
talkingAboutCount, checkinsCountExact figures, not rounded, on Pages that publish them.
isVerified, profilePicture, scrapedAtThe blue badge, the Page picture, and when the row was read.
languageOnly 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.

RowHow to spot itBilled
A Pageok: true, charged: true and recordType: "page"yes
The sample row_sample: trueno
A diagnostic_diagnostic: true and an errorCodeno

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.

errorCodeWhat happened
BAD_INPUTThat entry could not be read as a Page, or language is not one on the list.
NOT_FOUNDNo public Page there. Misspelled handles and deleted Pages land here.
NO_CONTACT_INFOThe Page is readable but publishes no contact details at all.
NOT_SERVEDThis request was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED.
NETWORKFacebook could not be reached.
TIME_BUDGETThe run ran out of time before reaching that Page.
PROXY_INPUT_ADJUSTEDA proxyConfiguration setting this Actor does not use was dropped. The run carried on.
CHARGE_ERRORA billing event could not be recorded. Told to you rather than hidden.
UNEXPECTED_ERRORAnything 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 use socialLinks to find the accounts nobody recorded.
  • Local research, where address, category and priceRange give 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:

  1. Run this on your Pages.
  2. Keep the rows where email is empty and website is not, and copy the website values.
  3. 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 now or Closed now, not Monday to Sunday hours.
  • Follower counts are rounded, because Facebook rounds them before publishing. talkingAboutCount and checkinsCount are 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 wantUse
The website, e-mail and phone on a PageThis one
A Page's name, likes and verified badge, ten Pages a runFacebook Pages Scraper
What that Page has been postingFacebook Posts Scraper
The recommendations and reviews under itFacebook Reviews Scraper
The comments under one of its postsFacebook Comments Scraper
The ads that Page is runningMeta Ad Library Scraper
E-mails and phones from the business's own websiteContact 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.

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.