100 free credits. No credit card required.Start building
Logo
Back to blog

Facebook Groups API Alternative in 2 Calls

·16 min read

4 public groups for 1 credit. Facebook Groups API alternative after the 22 April 2024 removal. Pass include=details for member counts on the same path.

Facebook Groups API Alternative in 2 Calls

The Facebook Groups API cannot do this job. Meta deprecated it in Graph API v19 on 23 January 2024 and removed it from all versions on 22 April 2024, so public groups for a keyword come from GET /v1/facebook/search/groups. That call, plus one Bluesky post search, is the facebook groups api alternative. The job is those two endpoints on SocialCrawl.

include=details is a parameter on that same groups path. A second page is optional. On 2026-10-17, for query=sourdough, the plain call returned 4 hits for 1 credit, with has_more true. The documented page ceiling is up to 10 groups, and this page held 4. The details parameter filled 4 groups and charged 5 credits. One later page repeated two group ids under different post titles. One Bluesky search returned 100 posts for 1 credit. A slash date on since came back HTTP 400 and charged 0 credits.

Send the samples with curl. The header is x-api-key: $SOCIALCRAWL_API_KEY.

What do you need before the first call?

  • One API key for the SocialCrawl API. The same key is sent on both endpoints.
  • curl, or any client that can set a request header.
  • A search of public groups. These calls do not post into a group, export a member list, or administer a group.
  • The worked query is sourdough, captured on 2026-10-17. A rerun on another day should follow the same method, not these group ids.

What happened to the Facebook Groups API?

Meta shipped Graph API v19.0 on 23 January 2024. The v19 changelog says the facebook groups api change applies to v19.0 and to all versions on 22 April 2024. The same-day announcement says: "The Facebook Groups API is deprecated in v19 and in 90 days will be removed from all versions." That window ends on 22 April 2024.

The changelog page also prints "Available until May 21, 2026." That line is the support window for version 19. The Groups permissions were already scheduled for removal on 22 April 2024.

What that changelog retires is the permissioned facebook graph api groups feature, publishing and member info for a group the caller administers. The v19 changelog and the v19 post do not describe a keyword search over public groups the caller does not run.

Why was the Facebook Groups API deprecated?

The changelog names what left. It does not state a reason. Removed on 22 April 2024, across all versions, are the permissions publish_to_groups and groups_access_member_info, the reviewable Groups API feature, and the ability for group admins to install apps on a group even when they hold an admin or developer role on the app. The v19 post names the same permissions and the Groups API feature.

Private replies stayed off that list. The post says most Private Replies developers have no change to make in v19. Developers who called Groups Post endpoints after a Private Replies webhook need a Page access token. That path is for a group you are already connected to.

Fetched on 2026-10-17, the v26.0 root index describes itself as a full list of Graph API root nodes. There is no Group root between Group Doc and Group Message. The search-shaped roots on that index are Ads Archive and Branded Content Search. No group-search edge is listed. The Group reference and the group feed reference both landed on that index. The Groups API reference landed on the docs home. The Groups API feature page landed on the v19 changelog. Each response was HTTP 200. None of those pages was a Group reference.

The Page line on the same index says "Get groups a Page is a member of." That wording is about membership. Edges past that line were not opened, and they are not described here.

How do you search Facebook groups by keyword?

GET /v1/facebook/search/groups takes query and returns public group hits. On 2026-10-17, query=sourdough returned HTTP 200, cached false, and credits_used 1. data.total was null. data.dropped was 0. The body had 4 rows. pagination.page_size was 4, has_more was true, and a next_cursor was present.

bash
curl -sS "https://www.socialcrawl.dev/v1/facebook/search/groups?query=sourdough" \
  -H "x-api-key: $SOCIALCRAWL_API_KEY"

The match is group_page or post_in_group. On this plain page, display_name was null on the three post_in_group rows and set on the one group_page row, and author.followers, author.bio, author.private, and author.joined_at were null on all 4 rows. author.ext.group was absent, so privacy_label was not in the response.

computed.relevance was set on all 4 rows. Relevance mode was score, threshold 0.5, kept 4, dropped 0, extra_credits 0, origin default. This run did not pass relevance=filter.

  • sourdoughgeeks, post_in_group, display name null. "Simple sourdough bread recipe with step-by-step instructions". Relevance 0.98.
  • 1006060197306320, group_page, display name "Sourdough for Beginners", same string as the hit title. Relevance 0.98.
  • 330526660347434, post_in_group, display name null. "Homemade sourdough bread from a friend who bakes". Relevance 0.9.
  • 205841196231440, post_in_group, display name null. "History and basics of sourdough bread making | Gallatin, TN". Relevance 0.98.

On the include=details response, the post_in_group rows had display_name set. Results that rank for this topic are general Facebook API roundups, posts about scheduling into groups, and community-plugin lists. Those pages do not show a keyword search that returns group rows.

Is there a Facebook API for groups that returns member counts?

The same path with include=details filled members and privacy on 4 of 4 rows and charged 5 credits. data.hydration reported rows 4, looked_up 4, filled 4, cached 0, unfilled 0, and extra_credits 4. Envelope credits_used was 5, the 4 extra credits plus 1 for the page. The balance around that call dropped by 5. credits_held was 10 and was not the charge. The strings details_partial and details_unavailable do not appear.

bash
curl -sS "https://www.socialcrawl.dev/v1/facebook/search/groups?query=sourdough&include=details" \
  -H "x-api-key: $SOCIALCRAWL_API_KEY"

This call matches a page price of 1 credit plus 1 credit for each group whose details were filled. Four fills, so 5. The groups search note from 23 September 2026 caps fresh detail lookups at 10 groups. The same note skips the charge for a group already in cache, and for a group it could not fill. This pull had cached 0 and unfilled 0.

data.hydration.ms on that response was 2805. Curl's timer for the same HTTP call was 5429 ms. The 5429 ms figure is the client timer, not an envelope field. The 2805 is this response only.

The details call was a new search, not a lookup of the previous ids. Three ids were shared. The plain page alone had 205841196231440. The details page alone had homebakeryforbeginners. The details next_cursor string still matched the plain call's cursor. Two searches about two minutes apart did not return the same fourth group.

On this path, the facebook groups api alternative returns member counts as author.followers. That field is a count, not a member list.

Groupauthor.idgroup.idfollowersmatchrelevance
Sourdough Geekssourdoughgeeks28416041626025091,069,480post_in_group0.97
Sourdough for Beginners100606019730632010060601973063202,302,654group_page0.97
Foodie330526660347434330526660347434268,466post_in_group0.78
Home Bakery for Beginnershomebakeryforbeginners683303171221113398,248post_in_group0.96

author.id and author.ext.group.id differ for Sourdough Geeks and Home Bakery for Beginners. They match for the other two. After details, dedupe on author.ext.group.id when the slug and the numeric id differ. This pull did not show one group twice on the same page under both forms.

All 4 rows had privacy_label Public and visibility_label Visible. Privacy is author.ext.group.privacy_label. author.private stayed null. This pull returned no private group.

posts_last_month returned 10000 on Sourdough for Beginners and on Foodie. Sourdough Geeks returned 2261. Home Bakery for Beginners returned 6097. In that same row order, posts_last_day was 106, 312, 2503, and 247, and joined_at was 2020-04-09, 2023-08-28, 2012-04-17, and 2025-05-28. These are four search hits for one keyword. They are not an average group size.

Foodie, at relevance 0.78, stayed above the 0.5 threshold because a post inside a general food group matched. It is a food group, not a sourdough group. author.ext.group.activity.new_members_text was the string "No new members in the last week" on all 4 rows. That string is not a counted zero.

What does the next page of a group search repeat?

Pass the plain call's pagination.next_cursor as cursor. This run stopped after that page. The response was HTTP 200, credits_used 1, and 4 rows, all post_in_group. display_name, followers, and bio were null on all 4. page_size was 4, has_more was still true, and another cursor was present and not followed. No author.id repeated inside the page.

Two ids from the plain page came back under different titles. sourdoughgeeks returned "What is a sourdough starter and how to make it?" at relevance 0.98. 1006060197306320 had been group_page with the display name "Sourdough for Beginners". On page 2 it was post_in_group, display name null, title "Understanding Sourdough Bread Texture and Consistency for ...", relevance 0.97. The ellipsis is part of the returned string.

The other two rows were new. 2292507957440825 returned "Learn to make sourdough bread at home | Colorado Springs, CO" at 0.98. sourdoughbreadbakingcommunity returned "Sourdough bread recipe from family tradition" at 0.98.

Across the plain page, the details page, and page 2 there were 7 distinct author.id values. Page 2 still had has_more true, so 7 is not the size of the result set. Dedupe on author.id before you count groups. On page 2, 1006060197306320 kept its id and lost display_name on a post_in_group hit.

How do you search Bluesky posts for the same keyword?

The second endpoint is one Bluesky post search. This run sent sort=latest and did not send until. The product note from 23 September 2026 also accepts sort=top. This run did not call it.

bash
curl -sS "https://www.socialcrawl.dev/v1/bluesky/search?query=sourdough&sort=latest" \
  -H "x-api-key: $SOCIALCRAWL_API_KEY"

The response was HTTP 200, cached false, and credits_used 1. It held 100 posts. data.total was null. data.dropped was 0. There were zero duplicate post.id values, and published_at was non-increasing. pagination.next_cursor was null, has_more was false, and page_size was 100. On this envelope, has_more: false means there was no next cursor. The 100 posts are this page, not a count of every post that exists.

The newest published_at was 2026-10-17T01:59:12.109Z. The oldest on this page was 2026-10-16T09:29:47.736Z. That older timestamp is the oldest row on this page, not the oldest post that exists. The same note says a later window is another call with until set to that oldest published_at. This run did not send until.

post.content.text was null on 1 of the 100 posts and empty on none. On the unified schema, post.engagement.views was null on all 100, and computed.engagement_rate was null on all 100, so no rate was computed. computed.language was present on 91 posts: en 87, null 9, de 2, fr 1, it 1.

Likes on this page were 40 zeros, maximum 42, sum 376. Comments were 76 zeros, maximum 7, sum 45. Shares were 90 zeros, maximum 3, sum 19. Those counts are this page only.

This run saw no HTTP 503. The source can still throttle, so this post describes a single search.

What fails on a bad since, or if you skip the privacy label?

A US-style date is refused before the search, and the refusal does not charge. This request sent since=09/23/2026 with the slash encoded as %2F.

bash
curl -sS "https://www.socialcrawl.dev/v1/bluesky/search?query=sourdough&sort=latest&since=09%2F23%2F2026" \
  -H "x-api-key: $SOCIALCRAWL_API_KEY"

HTTP 400, error.type INVALID_REQUEST, credits_used 0. The error.message was:

text
Invalid `since`: '09/23/2026' is not a date. Use YYYY-MM-DD or an ISO 8601 datetime with a timezone, for example 2026-09-01 or 2026-09-01T00:00:00Z.

Send YYYY-MM-DD, or an ISO 8601 datetime with a timezone, as in 2026-09-01 or 2026-09-01T00:00:00Z. The envelopes on this run sum to 8 credits: 1 for the plain group page, 5 for include=details, 1 for the group cursor page, 1 for the Bluesky search, and 0 for this 400.

A group can be public in search and still private to read. Check author.ext.group.privacy_label before you treat GET /v1/facebook/group/posts as available. All 4 detail rows in this pull were Public. A public-in-search but private-to-read group was not observed. author.private stayed null after details, even with privacy_label filled. This pull did not call GET /v1/facebook/group or GET /v1/facebook/group/posts. The groups search note says a row URL is already in the form those endpoints accept. This pull has no posts payload to show for that.

Also from this run:

  • About two minutes later, the fourth id was homebakeryforbeginners instead of 205841196231440.
  • The same author.id came back on page 2 as a different hit. 1006060197306320 lost display_name on that post_in_group row.
  • posts_last_month of 10000 is the value the field returned on two groups. Foodie at relevance 0.78 is a general food group.

Where do Facebook pages, posts, and the Ad Library belong?

Group keyword search stops at public groups. Page metadata, page posts, and the Ad Library are a separate walkthrough: pages, posts, and the Ad Library. The request shapes for pulling Facebook page and post data live on that post. A comparison of sources for pages and ads is comparing Facebook data APIs for pages and ads.

Frequently asked questions

Is the Facebook Groups API deprecated?

Yes. Meta deprecated the Facebook Groups API in Graph API v19 on 23 January 2024 and removed it from all versions on 22 April 2024. Both the v19 changelog and the same-day Graph and Marketing API post state that schedule. The permissions removed with it are publish_to_groups, groups_access_member_info, and the Groups API feature.

Is there a Facebook Groups API alternative for public groups?

For public groups, the facebook groups api alternative is GET /v1/facebook/search/groups, plus one GET /v1/bluesky/search when you also want posts. On 2026-10-17, query=sourdough returned 4 group hits for 1 credit, with has_more true. Pages, posts, and the Ad Library are other calls.

How do you search public Facebook groups by keyword?

Call GET https://www.socialcrawl.dev/v1/facebook/search/groups?query=sourdough with the header x-api-key: $SOCIALCRAWL_API_KEY. On 2026-10-17 that query returned 4 hits for 1 credit. The documented page ceiling is up to 10 groups. This page held 4, and has_more was true. Pass include=details on the same path when you need member counts and privacy_label.

Can the Facebook API still get group members?

This pull did not return a member list. include=details returned author.followers for four groups: Sourdough Geeks 1,069,480, Sourdough for Beginners 2,302,654, Foodie 268,466, and Home Bakery for Beginners 398,248. Those are follower counts on search hits, not an export. author.private stayed null.

Can the Facebook API get group posts?

This pull did not call GET /v1/facebook/group/posts. On the plain page, the post_in_group hits had a post title and a null display_name, and the group_page hit carried the group name. On the include=details response, post_in_group rows had display_name set. Check author.ext.group.privacy_label before calling group/posts. All 4 detail rows here were Public. A group that is public in search and private to read was not in this pull. Page posts are covered on the other Facebook posts linked above.

Does a Facebook Groups API alternative cover private groups?

Not in this pull. All 4 detail rows were Public and Visible. author.private stayed null, and no private group was returned. This run does not show coverage of private groups.

Topics
#facebook-groups-api-alternative#facebook-groups-api#search-facebook-groups#facebook-groups-api-deprecated#facebook-api-for-groups#bluesky-search-api#bluesky-post-search

Related posts

🤖 AI agent or LLM? Read this page as markdown