Is there an API to get public Facebook page data without the Graph API?
Yes. SocialAPIs returns a public Facebook Page's details (name, category, followers, contact info) with GET /facebook/pages/details and its latest posts with GET /facebook/pages/posts, using one API key: no Meta developer app, no app review, no Page access token. It reads what a logged-out visitor can see on the Page.
Meta's official option
Meta's Graph API is the official route, and for Pages you manage it's the right tool (insights, publishing, messages). Reading public content of Pages you don't manage needs the Page Public Content Access feature, which goes through app review and business verification, and Meta has narrowed what it returns over the years.
How to do it with SocialAPIs
Send the Page's URL as link. /facebook/pages/details returns the Page's profile. /facebook/pages/posts returns 3 to 9 posts per call (limit) with a cursor for the next page, and takes after_time / before_time for a date range.
Prices per call: Page details 1 credit; 5 credits when exact_followers_count=true; Page posts 1 credit; round(limit ÷ 3) credits when limit is set, up to 3.
Only have a name? GET /facebook/search/pages?query=… finds the Page first.
Endpoints
GET /facebook/pages/details1 credit; 5 credits when exact_followers_count=true
Get Facebook page details.
Params:
link(required),exact_followers_count,page_sectionFacebook Page Details: docs and playgroundMCP:
facebook_page→detailsGET /facebook/pages/posts1 credit; round(limit ÷ 3) credits when limit is set, up to 3
Get Facebook page posts.
Params:
link(required),limit,end_cursor,after_time,before_time,timezoneFacebook Page Posts: docs and playgroundMCP:
facebook_page→postsGET /facebook/search/pages1 credit
Search for Facebook pages by keyword with optional location filtering.
Params:
query(required),location_uid,end_cursorFacebook Search Pages: docs and playgroundMCP:
facebook_search→pages
curl -G "https://api.socialapis.io/facebook/pages/details" \
--max-time 100 \
--fail-with-body \
-H "x-api-token: $SOCIALAPIS_API_KEY" \
--data-urlencode "link=https://www.facebook.com/EngenSA"import os
import requests
response = requests.get(
"https://api.socialapis.io/facebook/pages/details",
headers={"x-api-token": os.environ["SOCIALAPIS_API_KEY"]},
params={
"link": "https://www.facebook.com/EngenSA",
},
timeout=100,
)
response.raise_for_status()
print(response.json())// Node 18+, as an ES module (e.g. main.mjs)
async function get(url, params) {
const query = new URLSearchParams(params).toString();
const response = await fetch(query ? `${url}?${query}` : url, {
headers: { "x-api-token": process.env.SOCIALAPIS_API_KEY },
signal: AbortSignal.timeout(100000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
return response.json();
}
const data = await get("https://api.socialapis.io/facebook/pages/details", {
link: "https://www.facebook.com/EngenSA",
});
console.log(data);import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
private static final HttpClient CLIENT = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
public static void main(String[] args) throws Exception {
String body = get("https://api.socialapis.io/facebook/pages/details", Map.of(
"link", "https://www.facebook.com/EngenSA"));
System.out.println(body);
}
static String get(String url, Map<String, String> params) throws Exception {
String query = params.entrySet().stream()
.map(e -> URLEncoder.encode(e.getKey(), StandardCharsets.UTF_8) + "="
+ URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
.collect(Collectors.joining("&"));
HttpRequest request = HttpRequest.newBuilder(URI.create(query.isEmpty() ? url : url + "?" + query))
.header("x-api-token", System.getenv("SOCIALAPIS_API_KEY"))
.timeout(Duration.ofSeconds(100))
.GET()
.build();
HttpResponse<String> response = CLIENT.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() / 100 != 2) {
throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
}
return response.body();
}
}package main
import (
"fmt"
"io"
"log"
"net/http"
"net/url"
"os"
"time"
)
func main() {
body, err := get("https://api.socialapis.io/facebook/pages/details", url.Values{
"link": {"https://www.facebook.com/EngenSA"},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}
func get(endpoint string, params url.Values) ([]byte, error) {
if len(params) > 0 {
endpoint += "?" + params.Encode()
}
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
if err != nil {
return nil, err
}
req.Header.Set("x-api-token", os.Getenv("SOCIALAPIS_API_KEY"))
client := &http.Client{Timeout: 100 * time.Second}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
if resp.StatusCode/100 != 2 {
return nil, fmt.Errorf("HTTP %d: %s", resp.StatusCode, body)
}
return body, nil
}# pip install socialapis-sdk
import os
from socialapis import Facebook
client = Facebook(api_token=os.environ["SOCIALAPIS_API_KEY"])
response = client.get_page_info("https://www.facebook.com/EngenSA")
print(response)// npm install socialapis-sdk
import { Facebook } from "socialapis-sdk";
const client = new Facebook({ apiToken: process.env.SOCIALAPIS_API_KEY });
const response = await client.getPageInfo("https://www.facebook.com/EngenSA");
console.log(response);Your API key goes in the x-api-token header (here from the SOCIALAPIS_API_KEY environment variable). Get a free key.
Tutorial: Facebook API without the Graph APIUse it from Claude, ChatGPT or Cursor (MCP)
Good to know
- Followers come back rounded by default (
followers_display, e.g. "91K followers");exact_followers_count=truereturns the exactfollowers_countat the higher price shown above. - Public Pages only: no private profiles, no Page insights (reach, demographics), no posting. For your own Page's insights, use the Graph API.
- Each post has
details.post_id,details.post_link,values.textand its reaction, comment and share counts.