Alfalfa

Facebook Page API: page details with email, phone and address as JSON

The Graph API returns a page's public fields only for pages you manage or after app review for public metadata. This endpoint returns the public details of any page or profile, contact details included, the way a signed-out visitor sees the page. One call per list of pages, JSON back, no Facebook account.

Updated September 2026. Endpoint hosted on Apify; an Apify account and API token are the only requirements.

What the Graph API gives you today

Fields such as about, emails, phone, website, location, fan_count and followers_count exist on the Page object, but reading them for pages you do not administer requires the Page Public Metadata Access feature, granted after app review with a use-case description. Rate limits apply per app. For lead lists, directories or research across many pages, most developers never get through the review.

The endpoint

One HTTP call. The synchronous form waits for the run and returns the records in the same response (fine for up to a few minutes of work); the asynchronous form returns a run id at once and you read the dataset when it has finished, with webhooks if you want a callback.

Synchronous

curl -X POST "https://api.apify.com/v2/acts/alfalfa~facebook-pages-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN&format=json" \
  -H 'Content-Type: application/json' \
  -d '{"startUrls": [{"url": "https://www.facebook.com/shakeshack"}, {"url": "https://www.facebook.com/tacobell"}], "scrapeAbout": true}'

Asynchronous

# start the run (returns immediately with the run id and dataset id)
curl -X POST "https://api.apify.com/v2/acts/alfalfa~facebook-pages-scraper/runs?token=$APIFY_TOKEN" \
  -H 'Content-Type: application/json' -d '{"startUrls": [{"url": "https://www.facebook.com/shakeshack"}, {"url": "https://www.facebook.com/tacobell"}], "scrapeAbout": true}'
# read the results when the run has finished (JSON, CSV or XLSX; paginate with offset and limit)
curl "https://api.apify.com/v2/datasets/<defaultDatasetId>/items?token=$APIFY_TOKEN&format=json&offset=0&limit=1000"

Python

from apify_client import ApifyClient  # pip install apify-client

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("alfalfa/facebook-pages-scraper").call(run_input={
  "startUrls": [
    {
      "url": "https://www.facebook.com/shakeshack"
    },
    {
      "url": "https://www.facebook.com/tacobell"
    }
  ],
  "scrapeAbout": true
})
items = list(client.dataset(run.default_dataset_id).iterate_items())
print(len(items), items[0])

JavaScript

import { ApifyClient } from 'apify-client'; // npm install apify-client

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('alfalfa/facebook-pages-scraper').call({"startUrls": [{"url": "https://www.facebook.com/shakeshack"}, {"url": "https://www.facebook.com/tacobell"}], "scrapeAbout": true});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Request fields

FieldTypeMeaning
startUrlsarrayPage or profile URLs; sub-pages like /about are resolved to the page. The official pages field is accepted too.
scrapeAboutbooleanRead the full About text into about_me ($2 per 1,000 pages that have one). On by default to match the official output.
scrapeTransparencybooleanPage transparency block: creation date, ad status, confirmed owner.
includeFailedPagesbooleanReturn a record with error for pages that could not be read instead of skipping them.

Response fields

One JSON object per record. Field names are the ones the official Apify Actor uses, so code written for it works unchanged.

FieldMeaning
title, pageName, pageId, pageUrl, facebookUrlName, handle, ID and URL.
email, phone, website, websites, address, messengerContact details as the page publishes them.
categories, info, intro, about_me, services, hours, priceRangeWhat the page is and when it is open.
likes, followers, rating, ratingCount, isVerifiedSize and reputation.
profilePictureUrl, coverPhotoUrl, alternativeSocialMedia, pageAdLibrary, pageTransparencyImages, other social profiles, Ad Library and transparency info.

Limits, pagination, scheduling

Pricing

$3.50 per 1,000 pages with contact details included, no start fee; the full About text is an optional $2 per 1,000 pages that have one. Platform usage and residential proxies are included; you pay only for records written to the dataset. The Apify free plan includes $5 of usage a month, enough to try it properly.

Questions people ask

Can I get a page's email through the Graph API?

Only for pages you administer, or after app review for the Page Public Metadata Access feature. This endpoint reads the public page and returns the email, phone, website and address the page itself publishes.

How many pages publish an email?

Roughly a third of business pages show one publicly; phone and website are more common. The response has null where the page publishes nothing.

Does it work for personal profiles?

Yes, for the public part of a profile: name, intro, follower count, links. Private fields are not visible to a signed-out visitor and are not returned.

What does it cost?

$3.50 per 1,000 pages including contact details, no start fee. Apify sells the page data and the contact data as two separate Actors at $12 and $13 per 1,000.

Open the Actor on Apify All five endpoints