# Facebook Page Contact Info Scraper - Emails, Phones & Address (`parseforge/facebook-page-contact-info-scraper`) Actor

Get emails, phones, addresses with map pins, websites, social links and followers from public Facebook pages. Export to CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/facebook-page-contact-info-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.50 / 1,000 facebook pages

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 📇 Facebook Page Contact Info Scraper

> 🚀 **Export the public contact details of any Facebook page in seconds.** Paste page links or usernames and get emails, phone numbers, street address with map coordinates, websites, linked social accounts, exact follower counts and the page's transparency record. 5 pages with full transparency came back in 9 seconds in our cloud test.

This Actor reads the About tab that Facebook shows to anyone who opens a business page without logging in, and turns it into a clean spreadsheet row. It takes the data from the structured records behind that tab, not from scraped text, so an email is always the page's email field and a phone is always the phone field. For Katz's Delicatessen it returns the email, the phone, the Houston Street address with its map pin (40.72222, -73.98751), the Instagram account, 52,509 reviews at 98% recommend and the company Facebook confirms is responsible for the page.

Every row has 36 fields: identity (name, username, Facebook ID, Ad Library page ID, verified badge), contact (email, phone, address, latitude, longitude, website, social profiles), audience (followers, following, talking about, check-ins), reputation (recommend percentage, review count, price range, services, hours status) and transparency (creation date, running ads, confirmed owner, Ad Library link). No login, no cookie, no browser.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Sales and lead generation teams | Turn a list of Facebook pages into callable, emailable leads |
| Marketing agencies | Enrich prospect lists of local businesses with contact data |
| Local SEO and listings managers | Audit name, address and phone consistency across locations |
| Market researchers | Profile competitors by audience size, reviews and ad activity |
| CRM and data teams | Fill missing emails, phones and websites in existing records |
| Ad and brand safety analysts | Check who owns a page and whether it is running ads |

### 📋 What the Facebook Page Contact Info Scraper does

1. Accepts Facebook page URLs (`facebook.com/katzsdeli`, `m.facebook.com/...`, `profile.php?id=...`, legacy `/pages/Name/ID` links), plain usernames or numeric page IDs.
2. Opens each page's **Contact and basic info** tab as a logged-out visitor.
3. Reads every contact field the owner published: all emails, all phones, the address with its map pin, all websites and every linked social account (Instagram, TikTok, X, YouTube, LinkedIn and more), with Facebook's redirect links unwrapped to the real URL.
4. Adds the page header: name, username, Facebook ID, verified badge, profile and cover photos, exact followers, following, talking about and check-ins.
5. Adds reviews and business info: recommend percentage, review count, price range, services and hours status.
6. With **Add page transparency** on (the default), reads the Page transparency tab: the Ad Library page ID, creation date as YYYY-MM-DD, whether the page is running ads, the confirmed owner and a ready Ad Library link.
7. Writes one row per page. Pages Facebook hides from logged-out visitors come back as a free error row that says why.

> 💡 **Why it matters:** a Facebook page is often the only up-to-date contact record a small business keeps. Restaurants, dealers, clinics and shops change their phone on Facebook before they touch their website. Reading the page's own contact fields gives you the number they actually answer.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Each dataset row is one Facebook page. 36 columns per row.

| Field | Type | Description |
|---|---|---|
| 🖼 `imageUrl` | string | Profile picture |
| 📌 `title` | string | Page name |
| 🏷 `pageName` | string | Page username (vanity), `N/A` when the page has none |
| 🔗 `url` | string | Canonical page URL |
| 🆔 `facebookId` | string | Facebook profile ID of the page |
| 🆔 `pageId` | string | Page ID used by the Meta Ad Library |
| ✅ `isVerified` | string | `Yes` or `No` |
| 🗂 `category` | string | Primary category |
| 📧 `email` | string | First public email |
| 📞 `phone` | string | First public phone, as Facebook formats it |
| 📍 `address` | string | Street address |
| 🧭 `latitude` | number | Map pin latitude |
| 🧭 `longitude` | number | Map pin longitude |
| 🌐 `website` | string | First linked website |
| 👥 `followers` | number | Exact follower count |
| ➡️ `following` | number | Pages this page follows |
| 💬 `talkingAbout` | number | People talking about the page |
| 📌 `checkins` | number | Check-ins ("were here") |
| ⭐ `ratingPercent` | number | Percent of reviewers who recommend |
| 📝 `ratingCount` | number | Number of reviews |
| 💲 `priceRange` | string | For example `$$` |
| 🕐 `hoursStatus` | string | Status at scrape time, for example `Open now` or `Always open` |
| 📝 `intro` | string | Intro text |
| 📅 `creationDate` | string | Page creation date, YYYY-MM-DD |
| 📣 `isRunningAds` | string | `Yes` when the page is running ads |
| 🏢 `confirmedOwner` | string | Organization Facebook confirms is responsible for the page |
| 📚 `adLibraryUrl` | string | The page's Meta Ad Library link |
| 🖼 `coverPhotoUrl` | string | Cover photo |
| 🗂 `categories` | array | All categories |
| 🛎 `services` | array | Services, for example Dine-in |
| 📧 `emails` | array | All public emails |
| 📞 `phones` | array | All public phones |
| 🌐 `websites` | array | All linked websites |
| 🔗 `socialProfiles` | array | Linked social accounts: platform, handle, URL |
| 🕒 `scrapedAt` | string | When the row was collected |
| ❌ `error` | string | Populated only on failed rows |

A field the page owner did not publish shows `Not Disclosed`. The transparency fields show `N/A` when **Add page transparency** is off.

#### Real sample records

```json
{
  "imageUrl": "https://scontent-arn2-1.xx.fbcdn.net/v/t39.30808-1/347587684_597250122171933_7563996541647031112_n.jpg?stp=c187.0.1275.1275a_dst-jpg_tt6&cstp=mx1275x1275&ctp=s200x200&_nc_cat=1&ccb=1-7&_nc_sid=2d3e12&_nc_ohc=_mluL9TnSYoQ7kNvwGJcQj0&_nc_oc=Ado-cwq2R5FEEMnzGTjkYzJ7C2WeG1LYvlAtXW_HrarpVVqlz-PEv-nzzs3SvFxr0yI&_nc_zt=24&_nc_ht=scontent-arn2-1.xx&_nc_gid=aBSirQrLjOAvI8kl_yLExg&_nc_ss=70289&oh=00_AQIfmM18OLgdW3myP6n3irj1QSQhr9_TrS8AMVp9on13NQ&oe=6ABB70DA",
  "title": "Katz's Delicatessen",
  "pageName": "katzsdeli",
  "url": "https://www.facebook.com/katzsdeli",
  "facebookId": "100064806517961",
  "pageId": "89033874836",
  "isVerified": "No",
  "category": "Deli",
  "email": "cs@katzsdelicatessen.com",
  "phone": "(212) 254-2246",
  "address": "205 E Houston St, New York, NY, United States, 10002",
  "latitude": 40.72222,
  "longitude": -73.98751,
  "website": "http://katzsdelicatessen.com/",
  "followers": 940593,
  "following": 0,
  "talkingAbout": 76987,
  "checkins": 529285,
  "ratingPercent": 98,
  "ratingCount": 52509,
  "priceRange": "$$",
  "hoursStatus": "Closing Soon",
  "intro": "New York City's most iconic deli.",
  "creationDate": "2009-06-12",
  "isRunningAds": "Yes",
  "confirmedOwner": "KATZ DELICATESSEN OF HOUSTON STREET INC",
  "adLibraryUrl": "https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=ALL&view_all_page_id=89033874836",
  "coverPhotoUrl": "https://scontent-arn2-1.xx.fbcdn.net/v/t39.30808-6/347638085_5639895616114156_695043930763579880_n.png?stp=dst-png&cstp=mx828x315&ctp=s828x315&_nc_cat=108&ccb=1-7&_nc_sid=cc71e4&_nc_ohc=T9cSNd7cOBYQ7kNvwEMTyQk&_nc_oc=AdqkvRhiqO4YKsKcwDN0qyC8yZEFr7eTAP9eDPbvTXgeJNO1XuKawTFw1bM5aL7fjGU&_nc_zt=23&_nc_ht=scontent-arn2-1.xx&_nc_gid=aBSirQrLjOAvI8kl_yLExg&_nc_ss=70289&oh=00_AQJRFBBIeSM_5lo5glcxVB-B04Vb79NCzI74p5wLIT1edw&oe=6ABB3F94",
  "categories": ["Deli"],
  "services": ["Dine-in", "Outdoor seating", "In-store pickup"],
  "emails": ["cs@katzsdelicatessen.com"],
  "phones": ["(212) 254-2246"],
  "websites": ["http://katzsdelicatessen.com/"],
  "socialProfiles": [
    { "platform": "Instagram", "handle": "katzsdeli", "url": "https://www.instagram.com/katzsdeli" }
  ],
  "scrapedAt": "2026-09-24T20:17:58.145Z",
  "error": null
}
```

```json
{
  "title": "Keyes Toyota",
  "pageName": "KeyesToyota",
  "url": "https://www.facebook.com/KeyesToyota",
  "facebookId": "100064058500501",
  "pageId": "192701300769125",
  "isVerified": "No",
  "category": "Automotive Parts Store",
  "email": "toyotakeyes@gmail.com",
  "phone": "(818) 305-6926",
  "address": "5855 Van Nuys Boulevard, Los Angeles, CA, United States, 91401",
  "latitude": 34.17717,
  "longitude": -118.44969,
  "website": "https://www.keyestoyota.com/",
  "followers": 5351,
  "following": 15,
  "talkingAbout": 30,
  "checkins": 5971,
  "ratingPercent": 88,
  "ratingCount": 482,
  "priceRange": "Not Disclosed",
  "hoursStatus": "Open now",
  "intro": "Keyes Toyota",
  "creationDate": "2011-03-25",
  "isRunningAds": "Yes",
  "confirmedOwner": "Lithia Motors, Inc",
  "adLibraryUrl": "https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=ALL&view_all_page_id=192701300769125",
  "categories": ["Automotive Parts Store"],
  "services": [],
  "emails": ["toyotakeyes@gmail.com"],
  "phones": ["(818) 305-6926"],
  "websites": ["https://www.keyestoyota.com/"],
  "socialProfiles": [],
  "scrapedAt": "2026-09-24T20:17:57.820Z",
  "error": null
}
```

```json
{
  "title": "BBC News",
  "pageName": "bbcnews",
  "url": "https://www.facebook.com/bbcnews",
  "facebookId": "100064620046507",
  "pageId": "228735667216",
  "isVerified": "Yes",
  "category": "Media/news company",
  "email": "yourvoice@bbc.co.uk",
  "phone": "Not Disclosed",
  "address": "BBC Broadcasting House, London, United Kingdom, W1A 1AA",
  "latitude": 51.51853,
  "longitude": -0.14406,
  "website": "http://www.bbc.co.uk/news",
  "followers": 62052592,
  "following": 49,
  "talkingAbout": 839435,
  "checkins": 9376,
  "ratingPercent": "Not Disclosed",
  "ratingCount": "Not Disclosed",
  "priceRange": "Not Disclosed",
  "hoursStatus": "Always open",
  "intro": "BBC News is recognised by audiences around the world as a provider of news that you can trust.",
  "creationDate": "2009-12-24",
  "isRunningAds": "Yes",
  "confirmedOwner": "British Broadcasting Corporation",
  "adLibraryUrl": "https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=ALL&view_all_page_id=228735667216",
  "categories": ["Media/news company"],
  "services": [],
  "emails": ["yourvoice@bbc.co.uk"],
  "phones": [],
  "websites": ["http://www.bbc.co.uk/news"],
  "socialProfiles": [],
  "scrapedAt": "2026-09-24T20:18:00.368Z",
  "error": null
}
```

### ✨ Why choose this Actor

- **Map coordinates on every published address.** The latitude and longitude come from the page's own map pin, so rows drop straight into a map, a territory plan or a distance filter without a geocoding step.
- **Every contact, not just the first.** All emails, all phones and all websites are kept as lists, alongside a first-value column that is easy to sort and filter.
- **Social accounts, unwrapped.** Linked Instagram, TikTok, X, YouTube, LinkedIn and other accounts come with platform, handle and the real URL, not Facebook's `l.facebook.com` redirect.
- **Exact audience numbers.** Followers are the exact count (940,593), not a rounded "940K", plus talking about and check-ins.
- **Page transparency included.** Ad Library page ID, creation date, running-ads flag and the confirmed owner company, with a ready Ad Library link. Useful for ad research and for spotting who really runs a page.
- **Structured fields, not guesses.** Values come from Facebook's own field records (email field, phone field, address field), not from a regex over the page text, so a phone number in a post never ends up in your phone column.
- **110 languages.** Categories, services, hours and phone formatting can come back in any of the 110 languages Facebook offers, while dates, owner and ad status stay machine-readable.
- **Pay only for pages that came back.** Pages that do not exist or are hidden from logged-out visitors produce a free error row that says why.
- **No credentials, no browser.** Plain HTTP with automatic IP rotation. You never hand over a Facebook login.

### 📈 How it compares to alternatives

| | This Actor | Typical page contact scrapers | Cookie based scrapers | Manual copy and paste |
|---|---|---|---|---|
| Requires your Facebook login | No | No | Yes | Yes |
| Email, phone, address, website | Yes, all values | Usually first value | Yes | Yes |
| Map coordinates | Yes | No | Rarely | Look it up yourself |
| Linked social accounts | Yes, unwrapped URLs | Rarely | Varies | Yes |
| Exact follower count | Yes | Often rounded | Varies | Rounded |
| Page transparency (owner, ads, creation date) | Yes | Creation date at most | Varies | Several clicks per page |
| Age-restricted pages (alcohol sellers) | Not available, see FAQ | Not available | Yes | Yes, when logged in |
| Account risk | None | None | Your account can be flagged | None |

The Actor returns what the page owner chose to publish. In our test of 25 well-known brand pages, 23 were readable, 22 listed a website, 7 a phone and 4 an email. Local businesses (restaurants, dealers, clinics, shops) publish phone, address and email far more often than global brands, which is where this Actor is most useful. Facebook hides some pages from logged-out visitors, typically age-restricted pages of businesses that sell alcohol, and those return an error row instead of data.

### 🚀 How to use

1. Create a free Apify account. New accounts include $5 of free platform credit, which is plenty to try this out: [console.apify.com/sign-up](https://console.apify.com/sign-up?fpr=vmoqkp)
2. Open the Actor and go to the Input tab.
3. Paste Facebook page links into **Facebook page URLs**, or usernames and page IDs into **Page usernames or IDs**.
4. Set **Max Items** to the number of pages you want.
5. Leave **Add page transparency** on for owner, ad status and creation date, or turn it off for a faster run.
6. Click **Start**. The log shows which contact fields each page published as it goes.
7. Open the **Dataset** tab and download as CSV, Excel, JSON or XML, or pull it from the API.

```json
{
  "startUrls": [{ "url": "https://www.facebook.com/katzsdeli" }],
  "pageNames": ["KeyesToyota", "bbcnews"],
  "maxItems": 100,
  "includeTransparency": true,
  "language": "en_US"
}
```

### 💼 Business use cases

#### Local business lead lists

Agencies and SaaS sales teams selling to restaurants, dealers, salons and clinics can take a list of Facebook pages from a directory or a search and turn it into leads with email, phone, address and website in one pass. The map coordinates let you split the list into sales territories without geocoding.

#### CRM enrichment and data hygiene

Match your CRM accounts to their Facebook pages and fill the gaps: a missing email, a second phone, the website the business actually links, its Instagram handle. Because every value is kept as a list, you can compare them with what you already hold and flag the records that changed.

#### Local SEO and listings audits

Multi-location brands and listings managers can check that each location's page shows the right name, address and phone. `latitude` and `longitude` expose pins that drifted away from the real storefront.

#### Competitor and ad research

Pull the transparency block for a competitor set: who confirms ownership of each page, when it was created, whether it is running ads right now, and a direct link to its ads in the Meta Ad Library. Pair it with follower and review numbers to size each competitor.

### 🔌 Automating Facebook Page Contact Info Scraper

- **Make** and **Zapier**: run the Actor when a new lead with a Facebook link lands in your CRM and write the contact fields back.
- **Slack**: post a message when a tracked page changes its phone, email or ad status.
- **Airbyte**: sync datasets into Snowflake, BigQuery or Postgres for a running history of your prospect pages.
- **GitHub**: schedule runs from Actions and keep versioned snapshots of a page list.
- **Google Drive**: drop a CSV or Google Sheet into a shared folder after every run.
- **API and webhooks**: every run emits a dataset ID; subscribe to the run succeeded webhook and pull the rows into any system.

### 🌟 Beyond business use cases

- **Research**: study how organizations present themselves on Facebook, which contact channels they publish and how that varies by country or category.
- **Personal**: collect the phones and addresses of the venues you plan to visit into one list.
- **Non-profit**: build contact lists of local organizations and community groups for outreach.
- **Experimentation**: the coordinates, categories and audience numbers make a small, clean geo dataset for mapping and analytics projects.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant to get help designing your run:

> I am using the ParseForge Facebook Page Contact Info Scraper on Apify. It takes Facebook page URLs, usernames or page IDs and returns one row per page with 36 fields, including title, pageName, url, facebookId, pageId, isVerified, category, email, phone, address, latitude, longitude, website, followers, following, talkingAbout, checkins, ratingPercent, ratingCount, priceRange, services, hoursStatus, intro, creationDate, isRunningAds, confirmedOwner, adLibraryUrl, emails, phones, websites and socialProfiles. It only returns what the page owner published and cannot read pages Facebook hides from logged-out visitors. Help me design a run to answer this question: \[your question here].

### ❓ Frequently Asked Questions

**🔐 Do I need a Facebook account or cookie?**
No. The Actor reads only what Facebook shows to a logged-out visitor. You never supply credentials, so no account of yours is exposed.

**📭 Why is the email or phone "Not Disclosed" for some pages?**
The page owner did not publish it. The Actor returns every contact field the page shows to the public and never guesses. Local businesses publish phone and email far more often than global brands: in our test of 25 brand pages, 7 listed a phone and 4 an email.

**🚫 Why did a page return an error row?**
Either the page does not exist, or Facebook hides it from visitors who are not logged in. That is typical for age-restricted pages of businesses that sell alcohol, such as some supermarkets and bars. Error rows are never charged.

**🧭 Where do the coordinates come from?**
From the map pin Facebook shows next to the page's address. When a page has an address without a pin, the coordinates show `Not Disclosed`.

**📞 Why do phone formats differ between pages?**
The phone is returned exactly as Facebook formats it for the selected language and the visitor's location, for example `(212) 254-2246` or `+44 20 7730 1234`. The digits are the page's own.

**🌍 What does the Language setting change?**
Categories, services, hours status and phone formatting come back in the chosen language. Creation date, running ads and owner always come back in a fixed, machine-readable form, and counts are plain numbers in every language.

**📣 What is the page transparency data?**
The public block Facebook shows about who runs a page: its Ad Library page ID, the date it was created, whether it is running ads now and, when Facebook has confirmed it, the organization responsible for it. It costs one extra request per page and can be turned off.

**👍 Does it return page likes?**
No. Facebook replaced likes with followers on current pages and no longer shows a like count to visitors. The Actor returns the exact follower count instead.

**🕐 Does it return full opening hours?**
Only the status Facebook shows publicly at the moment of the run, such as `Open now`, `Closing Soon` or `Always open`. The weekly schedule is not part of the public page data.

**🌐 Do I need a proxy?**
Keep the default Apify Proxy. Facebook shows a login wall to an IP after a few dozen page views, so the Actor uses a new IP for every attempt and moves to residential IPs by itself when datacenter IPs get walled.

**⏱ How fast is it?**
5 pages with full transparency took 9 seconds in our cloud test. The Actor reads 5 pages at a time.

**📥 What export formats are supported?**
CSV, Excel, JSON, XML, plus direct API access and integrations with Make, Zapier, Airbyte, Slack, Google Drive and more.

**⚖️ Is this legal?**
The Actor collects business contact information that page owners publish to everyone. You remain responsible for how you use the data, including compliance with GDPR, CCPA, anti-spam law and Facebook's terms.

### 🔌 Integrate with any app

Every run writes to an Apify dataset reachable through a REST API, so the output drops into whatever you already use. Native integrations cover Make, Zapier, Airbyte, Slack, Google Drive, GitHub, Google Sheets and webhooks, and the API covers everything else.

### 🔗 Recommended Actors

- [Facebook Pages Scraper - 30 Fields, Followers & Info](https://apify.com/parseforge/facebook-pages-scraper) - page profiles with recent posts and the full About text.
- [Facebook Reviews Scraper](https://apify.com/parseforge/facebook-reviews-scraper) - the reviews behind a page's recommend percentage.
- [Facebook Posts Scraper - 33 Fields, Reaction Split](https://apify.com/parseforge/facebook-posts-scraper) - what the pages you collected are posting.
- [Facebook Ads Library Scraper - 15 Search Filters](https://apify.com/parseforge/facebook-ads-library-scraper) - the ads behind the Ad Library links in your dataset.
- [Facebook Search Scraper - Posts by Keyword](https://apify.com/parseforge/facebook-search-scraper) - find pages and posts by keyword.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** independent tool, not affiliated with Facebook or Meta; only publicly available data.

# Actor input Schema

## `startUrls` (type: `array`):

Links to public Facebook pages, for example https://www.facebook.com/katzsdeli or https://www.facebook.com/profile.php?id=100064806517961.

## `pageNames` (type: `array`):

Page usernames (the part after facebook.com/) or numeric page IDs. Use this or the URL list, or both.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `includeTransparency` (type: `boolean`):

Also read the Page transparency tab: Ad Library page ID, creation date, whether the page is running ads and the organization responsible for it. Adds one request per page.

## `language` (type: `string`):

Language Facebook uses for categories, services, hours and phone formatting. Counts and contact values are not translated.

## `proxyConfiguration` (type: `object`):

Apify Proxy is recommended. Datacenter is the default and the cheapest.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/katzsdeli"
    },
    {
      "url": "https://www.facebook.com/KeyesToyota"
    },
    {
      "url": "https://www.facebook.com/NASA"
    }
  ],
  "pageNames": [
    "bbcnews",
    "humansofnewyork"
  ],
  "maxItems": 10,
  "includeTransparency": true,
  "language": "en_US",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Page, contact details and audience

## `fullData` (type: `string`):

Complete dataset with all 36 fields

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.facebook.com/katzsdeli"
        },
        {
            "url": "https://www.facebook.com/KeyesToyota"
        },
        {
            "url": "https://www.facebook.com/NASA"
        }
    ],
    "pageNames": [
        "bbcnews",
        "humansofnewyork"
    ],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/facebook-page-contact-info-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [
        { "url": "https://www.facebook.com/katzsdeli" },
        { "url": "https://www.facebook.com/KeyesToyota" },
        { "url": "https://www.facebook.com/NASA" },
    ],
    "pageNames": [
        "bbcnews",
        "humansofnewyork",
    ],
    "maxItems": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/facebook-page-contact-info-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.facebook.com/katzsdeli"
    },
    {
      "url": "https://www.facebook.com/KeyesToyota"
    },
    {
      "url": "https://www.facebook.com/NASA"
    }
  ],
  "pageNames": [
    "bbcnews",
    "humansofnewyork"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call parseforge/facebook-page-contact-info-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/facebook-page-contact-info-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7EG3dGKeG3GMouIay/builds/PZzAI5lrTnOOeJUUW/openapi.json
