SocialAPIs
Sources
PricingBlogFAQContact
Answers · Facebook groups

How do I monitor a Facebook group for new posts?

Call GET /facebook/groups/posts on a schedule (every hour suits most groups), keep the post IDs you've already seen, and send each new one to Slack, email or a spreadsheet. Meta's own Groups API can't do this since it was removed on April 22, 2024, but a public group's posts are still one API call away.

Meta's official option

There's no official option any more: the Groups API, and the Zapier and Make triggers built on it, stopped working on April 22, 2024. Facebook's notifications work for one person following a group by hand, with no feed you can pipe into a tool.

How to do it with SocialAPIs

The tutorial has a 40-line Python script and the same workflow in n8n: Schedule Trigger → HTTP Request → Split Out data.posts → Remove Duplicates on details.post_id → Slack. Use after_time to fetch only posts since your last check and limit=9 for busy groups.

Cost: one group checked every hour with the default limit=3 is about 720 calls a month, 1 credit each. The full price rule: 1 credit; round(limit ÷ 3) credits when limit is set, up to 3.

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

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=9"
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": "9",
    },
    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: "9",
});
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", "9"));
        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": {"9"},
	})
	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=9,
)
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: 9,
});
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

  • •Run it once by hand first so the existing posts are recorded as seen; otherwise the first run alerts on all of them.
  • •Filter on values.text for keywords ("for sale", "wanted") before alerting.
  • •Public groups only.

Related questions

  • Is there still a Facebook Groups API?
  • How do I get posts from a public Facebook group via API?
  • How can Claude access Facebook or Instagram data?
  • How much does a Facebook data API cost?

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.