Facebook
GET /v1/facebook/group-posts

Facebook Group Posts API

Newest posts from a public Facebook group — caption, author, engagement, sortBy; 1 credit per post.

~20 credits (1/result) per request
TL;DR
Newest posts from a public Facebook group — caption, author, engagement, sortBy; 1 credit per post. The Facebook Group Posts API (Facebook) is a single authenticated GET request to /v1/facebook/group-posts that responds with clean JSON and costs ~20 credits (1/result). Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.

What is the Facebook Group Posts API?

Pass a public Facebook group URL and get its newest posts as clean JSON: id (the numeric post id), caption, publishedAt, author (id when Facebook exposes it — never the group slug as username), url (https://www.facebook.com/groups/{slug}/posts/{id} — there is no permalink twin), thumbnailUrl when the post has a still, and engagement. sortBy maps to Facebook's group sort (TOP_POSTS | RECENT_ACTIVITY | CHRONOLOGICAL default | CHRONOLOGICAL_LISTINGS). Up to 80 posts per call (about 7s for a handful, about 35s for 50); a larger limit returns the first 80 with hasMore true and truncatedReason per-call-cap. The envelope names the yield: requested, totalReturned, hasMore (true when the page came back full), truncatedReason (listing-window when the group had fewer posts than limit), and fetchedAt. likes / comments / views / shares are always keyed (null when unknown — never treat a missing key as 0), each with *IsApproximate. Billing is 1 credit per returned post, minimum 2; empty results and failures are 0 credits. Pass cache=true for the 24h shared cache. Private groups (or groups that show nothing to non-members) answer 404 with code FACEBOOK_GROUP_PRIVATE and retryable false at 0 credits. A deleted group is 404. Other failures are 502 or 503 (90s deadline), both with a body and 0 credits — retry those; a recent good page may be served instead as stale: true at 0 credits.

Replacing CrowdTangle? Here is what this endpoint covers, and what it does not. CrowdTangle alternative

Moving this call from ScrapeCreators? Here is the endpoint-by-endpoint map. ScrapeCreators alternative

What you get

  • requested / listingHits / hydrateFailures / hydrateSkipped / hasMore / truncatedReason
  • sortBy on the envelope (Facebook sorting_setting)
  • engagement *IsApproximate on every keyed likes/comments/shares count (null counts as present)

Try it

Open in Playground

Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).

Parameters

Sign in to run live
curl "https://api.captapi.com/v1/facebook/group-posts?url=https%3A%2F%2Fwww.facebook.com%2Fgroups%2Fdogspotting" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

Edit the parameters and the code updates instantly. Switch languages and hit copy.

Example response

{
  "success": true,
  "data": {
    "url": "https://www.facebook.com/groups/dogspotting",
    "totalReturned": 2,
    "posts": [
      {
        "platform": "facebook",
        "url": "https://www.facebook.com/groups/dogspotting/posts/10165927007174467/",
        "id": "10165927007174467",
        "caption": "Dog in a basket…I repeat…dog in a basket!",
        "description": "Dog in a basket…I repeat…dog in a basket!",
        "publishedAt": "2026-07-27T16:34:51.000Z",
        "author": {
          "displayName": "Beth Oxford"
        },
        "engagement": {
          "likes": 87,
          "comments": 0
        },
        "isVideo": false,
        "permalink": "https://www.facebook.com/groups/dogspotting/posts/10165927007174467/"
      },
      {
        "platform": "facebook",
        "url": "https://www.facebook.com/groups/dogspotting/posts/10165913663824467/",
        "id": "10165913663824467",
        "caption": "Waiting patiently in the Mustang.",
        "description": "Waiting patiently in the Mustang.",
        "publishedAt": "2026-07-24T22:16:11.000Z",
        "thumbnailUrl": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.30808-6/754824625_10163571025602896_890543610805686018_n.jpg?stp=dst-jpg_tt6&cstp=mx2048x1536&ctp=p600x600&_nc_cat=107&ccb=1-7&_nc_sid=63...",
        "author": {
          "displayName": "Chet Rhodes"
        },
        "engagement": {
          "likes": 36,
          "comments": 2
        },
        "isVideo": false,
        "permalink": "https://www.facebook.com/groups/dogspotting/posts/10165913663824467/"
      }
    ],
    "sortBy": "CHRONOLOGICAL"
  }
}

Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Request-Id (include it when contacting support). Where the response has a source field, it names the path that served the data: native, extended, cache or asr. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.

Response structure

A successful call returns success and a data object with the following fields:

Top-level fields

  • urlPublic Facebook group URL you queried.
  • totalReturnedNumber of items returned in this response.
  • sortByFacebook sorting_setting echoed back: TOP_POSTS | RECENT_ACTIVITY | CHRONOLOGICAL | CHRONOLOGICAL_LISTINGS.

Posts

Each item in posts contains:

  • platformPlatform identifier for this response (matches the endpoint's platform).
  • urlThis post's Facebook URL (https://www.facebook.com/groups/{slug}/posts/{id}). There is no permalink twin — that key was an embed-alias of url and did not ship.
  • idId of this posts item.
  • captionPost text. There is no description twin (the old example copied caption into description).
  • descriptionDescription of this posts item.
  • publishedAtPublish date (ISO 8601) when the platform exposes an absolute timestamp.
  • authorAuthor name or handle.
  • engagementEngagement metrics for the item.
  • isVideoWhether the item is a video.
  • permalinkCanonical Instagram permalink for the embed.

Parameters

NameTypeRequiredDescription
urlstringYesPublic Facebook group URL, e.g. https://facebook.com/groups/ID. Must contain /groups/ — profile/page URLs are a definitive 400 (use /v1/facebook/profile-posts for those). The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble.
limitintegerNoMax posts to return (default 20, max 200; up to 80 per call — above that you get 80 with truncatedReason per-call-cap). Billed 1 credit per returned post, minimum 2.
sortBystringNoTOP_POSTS | RECENT_ACTIVITY | CHRONOLOGICAL (default) | CHRONOLOGICAL_LISTINGS. Maps to Facebook sorting_setting.
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs ~20 credits (1/result) — billed per result, so the exact amount scales with how many items you request. Pass cache=true for a free 24h cache hit; default is always fresh (metrics refresh within ~1 hour).

Using an AI agent? This endpoint is the MCP tool facebook_group_posts via @captapi/mcp. Set it up →

How it works

  1. 1. Sign up — get 100 free credits, no card required.
  2. 2. Create a key from your dashboard.
  3. 3. Send one request to /v1/facebook/group-posts and parse the JSON response.

Use cases

Content Pipelines

Ingest a channel's catalog in bulk.

Monitoring

Detect new uploads automatically.

Archiving

Snapshot a creator's library — metadata plus CDN media URLs (re-fetch before mediaUrlsExpireAt).

Analytics

Aggregate performance across many videos.

Frequently asked questions

What does the Facebook Group Posts API do?+

The Facebook Group Posts API lets you list items in bulk with metadata from a public Facebook post using one GET request to /v1/facebook/group-posts. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the Facebook Group Posts API cost?+

At the default limit this endpoint costs 20 credits (1 per result). Billing scales with how many results you request. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.

Do I need a Facebook API key or OAuth?+

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle access, rate limits, retries, and authentication for you.

Why did I get fewer posts than I asked for?+

truncatedReason says why. listing-window: the group had fewer posts available than your limit. per-call-cap: you asked for more than 80, so you got the newest 80 (hasMore is true). You are billed 1 credit per post actually returned, minimum 2.

Where is permalink? And why did shares have no *IsApproximate?+

permalink does not ship — it was an embed-alias of url and is gone. Use posts[].url. shares: null is a present key, so sharesIsApproximate is now always stamped (false when the count is null). comments and commentsIsApproximate are always keyed too — never treat a missing comments key as 0.

Do topComments include the commenter's gender?+

No. Facebook sometimes exposes an inferred gender on group commenters; we drop it. topComments is {id, text, publishTime, author{id,name,url}}.

Is the Facebook Group Posts API suitable for production use?+

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

More Facebook APIs

Ready to use the Facebook Group Posts API?

Sign up, grab your key, and make your first call in 60 seconds.

Facebook Group Posts API — Captapi