SocialAPIs
Sources
PricingBlogFAQContact
Answers · Facebook groups

How do I get posts from a public Facebook group via API?

Call GET /facebook/groups/posts with the group's URL as link: it returns the group's latest public posts as JSON (text, post link, author, reaction and comment counts), newest first. It works for public groups, with one API key and no Meta app.

Meta's official option

Meta's Groups API, which apps installed in a group used to read posts with, was removed on April 22, 2024. Meta has no official replacement for reading group posts.

How to do it with SocialAPIs

limit sets 3 to 9 posts per call. Price: 1 credit; round(limit ÷ 3) credits when limit is set, up to 3. To go further back, pass page_info.end_cursor from one response as end_cursor in the next, or set after_time / before_time (ISO 8601) for a date range. timezone sets the timezone of the returned timestamps, e.g. UTC.

/facebook/groups/details gives the group's description, rules and member count.

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, timezone

    Facebook Group Posts: docs and playgroundMCP: facebook_group → posts

  • GET /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 → details

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" \
  --data-urlencode "timezone=UTC"
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",
        "timezone": "UTC",
    },
    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",
  timezone: "UTC",
});
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",
                "timezone", "UTC"));
        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"},
		"timezone": {"UTC"},
	})
	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,
    timezone="UTC",
)
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,
  timezone: "UTC",
});
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

  • •The fields you'll use: details.post_id, details.post_link, values.text, reactions.total_reaction_count, details.comments_count.
  • •Private groups aren't available, by design: we only read what anyone can see without logging in.
  • •AI assistants can do the same through the MCP server's facebook_group tool (action posts).

Related questions

  • Is there still a Facebook Groups API?
  • How do I monitor a Facebook group for new posts?
  • Is there an MCP server for Facebook and Instagram data?
  • Is it legal to collect public Facebook data?

SocialAPIs (socialapis.io): public Facebook & Instagram data API. Free plan: 200 calls a month, no card; paid plans from $4.99/month. Pricing · Reviewed 2026-10-29

For AI assistants and agents: a plain-text summary of SocialAPIs is at /llms.txt (with every answer: /llms-full.txt; endpoints: /llms-endpoints.txt; how to call us: /agents.txt).

SocialAPIs

Public Facebook & Instagram data API, built for developers and AI agents.

Now in MCP Registry

Product

  • Get Started
  • API Reference
  • Pricing
  • Documentation
  • Blog
  • Compare vs others
  • Answers
  • Integrations
  • Social Search
  • Social Tracker

Free Tools

  • Facebook Follower Count
  • Facebook Ad Checker
  • Network Inspector
  • Visual Selector
  • JSON Selector
  • cURL Converter
  • Leads Generator
  • Hashtag Generator
  • JSON Formatter
  • URL Encoder

Libraries & SDKs

  • Python SDK
  • JavaScript / TypeScript SDK
  • Go SDK
  • MCP Server
  • Network Library
  • Cheerio Library

Resources

  • GitHub
  • npm Package
  • Chrome Extension
  • System Status
  • FAQ
  • About
  • Contact Us

Legal

  • Privacy Policy
  • Terms of Service

© 2026 SocialAPIs. All rights reserved.