Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Facebook Page Contact Info Scraper icon

Facebook Page Contact Info Scraper

Get any Facebook Page's public contact info: website, email, phone, address, category and followers. No login needed. $1.30 per 1,000 Pages.

410 runs on Apify $0.0013 per Facebook Page ($1.3 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust startUrls, maxPages, proxyUrls (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0013 per Facebook Page = $1.3 per 1,000

You are charged forWhenPrice
Facebook PageOne Facebook Page delivered to your dataset, with its website, email, phone, street address, category, opening status, price range, services, linked accounts, recommendation summary, verified badge, follower, like, talking-about and check-in counts, profile picture and bio. Sample rows, diagnostics, duplicate Pages, blocked Pages and Pages that publish no contact details are never charged.$0.0013

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-16, and they are what you are actually charged.

Inputs

FieldWhat it doesType
startUrlsThe Pages to read. Each entry can be a full Page URL (https://www.facebook.com/katzsdeli), an About-tab URL, a bare handle (katzsdeli), an @handle, a numeric Page id, or a profile.php?id= link. Up to 200 per run; duplicates are removed before anything is fetched.array
maxPagesOptional ceiling on how many of the Pages above to actually read, so you can point the Actor at a long list and still cap the spend. Leave empty to read all of them. Hard ceiling 200.integer
proxyUrlsLeave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port.array
sessionCookiesLeave this empty unless you need it. Runs are logged out by default and that is enough for public Facebook content. Facebook shows some things only to a signed-in account, and it limits how fast any one account may read; supplying your own cookie uses your account and your own rate limit, shared with nobody. In Chrome: open facebook.com while signed in, press F12, then Application > Cookies > https://www.facebook.com, and paste the values as "c_user=…; xs=…". One line per account. Treat these like a password: anyone with them can act as that account, and Facebook may sign the session out or restrict the account for automated use.array

What you get

A structured dataset — each result includes fields like:

inputUrlhandlepageNamepageUrlpageIdisVerifiedcategorycategorieswebsitewebsitesemailemailsphonephones

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

Facebook Page Contact Info Scraper: website, email, phone and address from any public Page

Paste Pages, get one row each with the contact details the Page publishes: website, email, 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
OutputOne row per Page
Ceiling200 Pages per run
Account neededNone from you
Price$1.30 per 1,000 Pages, flat on every plan

🔍 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 the useful surprise on a lead list: Pages often link their Instagram, YouTube or X account in About, and each comes back as a network, a handle and a URL.

📥 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.
maxPagesall of themA 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.
proxyUrlsnoneOptional. One URL per line if you want the traffic to leave through servers you already pay for.
sessionCookiesnoneOptional, and most runs never touch it. Your own c_user and xs pair, so heavy runs use your account's own rate limit. Treat the values like a password.

Run it with empty input and you get one labelled sample row, free, so you can see the shape before you spend anything.

📤 What you get back

A real row from a real run:

{
  "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": "[email protected]",
  "emails": ["[email protected]"],
  "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/lookaside/crawler/media/?media_id=100064806517961",
  "bio": "New York City's most iconic deli.",
  "scrapedAt": "2026-09-21T01:31:06.640Z"
}
FieldWhat it is
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, followersApprox, likesCountFacebook publishes followers as a rounded string ("936K followers"). followersApprox is that string as a number, so it is rounded too.
talkingAboutCount, checkinsCountExact figures, not rounded, on Pages that publish them.
isVerified, profilePicture, scrapedAtThe blue badge, the Page picture, and when the row was read.

Anything the Page does not publish comes back null or empty rather than guessed.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itBilled
A Pageok: true and charged: trueyes
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.
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.
BLOCKEDFacebook would not serve that Page on this run. Re-running usually clears it.
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 a run refuses from the start and nothing at all has been delivered, it stops instead of grinding through the rest of your list. The Pages it did not reach are named in a single uncharged BLOCKED 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.

▶️ How to run it

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.

💰 How much does it cost?

$1.30 per 1,000 Pages. The same rate on every Apify plan, no volume tiers.

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.

💡 What people use it for

  • Turning a list of Page handles into a call sheet with email, phone and website on one 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.

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

🧭 Which Facebook scraper do you need?

If you wantUse
The contact details on a PageThis one
What that Page has been postingFacebook Posts Scraper
The recommendations and reviews under itFacebook Reviews Scraper
Reels from that PageFacebook Reels Scraper
The comments under one of its postsFacebook Comments Scraper

❓ Questions people ask

Do I need a Facebook account? No. Public Pages read fine without one. sessionCookies is there for people running heavily who would rather use their own account's rate limit.

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.

What happens if I paste the same Page twice? It is read once and charged once. Duplicates are removed before anything is fetched.

Is scraping Facebook legal? This reads public Page information only. Business contact details are still personal data under GDPR and similar laws, so have a reason for collecting them and respect opt-outs. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

Can I run it on a schedule? Yes, on Apify's scheduler, or start it from the API and read the dataset when it finishes.

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