Is there still a Facebook Groups API?
No. Meta removed the Facebook Groups API for every Graph API version on April 22, 2024, so apps can no longer read group posts through it. For public groups, SocialAPIs' GET /facebook/groups/posts returns the latest posts as JSON with one API key; private groups aren't available through any public-data API.
Meta's official option
Meta deprecated the Groups API with Graph API v19.0 (January 2024) and removed it on April 22, 2024. Integrations built on it, including the Zapier and Make "new post in group" triggers, stopped working with it. Group admins still have Facebook's own tools inside the group.
How to do it with SocialAPIs
/facebook/groups/posts takes the group's URL as link and returns 3 to 9 posts per call (limit), newest first. Price: 1 credit; round(limit ÷ 3) credits when limit is set, up to 3.
/facebook/groups/details returns the group's name, description, rules and member count, and /facebook/groups/id turns a group link into its ID.
Endpoints
GET /facebook/groups/posts1 credit; round(limit ÷ 3) credits when limit is set, up to 3
Fetch recent posts from a Facebook group, including text, media, reactions, and comments.
Params:
link(required),limit,end_cursor,after_time,before_time,timezoneFacebook Group Posts: docs and playgroundMCP:
facebook_group→postsGET /facebook/groups/details1 credit
Get detailed metadata and statistics about a Facebook group including member count, description, and rules.
Params:
link(required)Facebook Group Details: docs and playgroundMCP:
facebook_group→detailsGET /facebook/groups/id1 credit
Retrieve the Facebook Group ID from a public group link.
Params:
link(required)Facebook Group ID: docs and playgroundMCP:
facebook_group→id
curl -G "https://api.socialapis.io/facebook/groups/posts" \
--max-time 100 \
--fail-with-body \
-H "x-api-token: $SOCIALAPIS_API_KEY" \
--data-urlencode "link=https://www.facebook.com/groups/gieldagryplanszowe" \
--data-urlencode "limit=3"import os
import requests
response = requests.get(
"https://api.socialapis.io/facebook/groups/posts",
headers={"x-api-token": os.environ["SOCIALAPIS_API_KEY"]},
params={
"link": "https://www.facebook.com/groups/gieldagryplanszowe",
"limit": "3",
},
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/groups/posts", {
link: "https://www.facebook.com/groups/gieldagryplanszowe",
limit: "3",
});
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/groups/posts", Map.of(
"link", "https://www.facebook.com/groups/gieldagryplanszowe",
"limit", "3"));
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/groups/posts", url.Values{
"link": {"https://www.facebook.com/groups/gieldagryplanszowe"},
"limit": {"3"},
})
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_group_posts(
"https://www.facebook.com/groups/gieldagryplanszowe",
limit=3,
)
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.getGroupPosts("https://www.facebook.com/groups/gieldagryplanszowe", {
limit: 3,
});
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: Monitor a Facebook group's new posts automaticallyUse it from Claude, ChatGPT or Cursor (MCP)
Good to know
- Public groups only: no logins, no cookies, no member-only content.
- Each post has
details.post_id,details.post_linkandvalues.text; older posts come page by page withpage_info.end_cursor. - Members' names are personal data: keep only what your use case needs (GDPR applies in the EU and UK).