I have several Facebook groups to monitor, and I dislike Facebook. Group discussions have turned into an arena for trolls, propaganda and confident misinformation. What I need from these groups is announcements, deadlines and now and then a real recommendation, and those get buried in whatever order the feed decides to show. I kept missing the ones with deadlines in them. That bothered me enough to script my way out, with a tool that harvests the groups, strips the noise (human and algorithmic) and gives me a summary I can act on.
Facebook has no API for groups, and the existing options did not really solve this for me:
- scraping services give you raw data, and you have to upload your session cookies to their cloud
- the paid monitors do keyword alerts from $199/month and cannot get into members-only groups anyway
- the open-source scrapers are mostly abandoned
So I wrote my own. fbtool logs into Facebook with a real browser and scrolls each group the way a human would. I decided not to parse the page, Facebook reshuffles its markup all the time and that is a war you eventually lose. Instead it records the data the feed itself loads:
- exact timestamps
- full post text
- permalinks
- top comments
Everything lands in a local SQLite database. A model of your choice (OpenAI, Anthropic, or fully local via Ollama/vLLM) then turns the recent history into a Markdown digest grouped by topic, with links back to the threads that matter. I read the digest in two minutes, where the feed is built to make me spend as much time as possible.
Here is a slice of a real digest from the owners group of my building, translated from Bulgarian, with names and numbers redacted:
# Facebook group summary — 2026-07-26 _Covering 60 days (28 posts across 1 groups)_ ### 1) Building safety and maintenance - **Loose facade panel on the 13th floor** – reported hanging off the building next to the elevators; second-floor neighbors warned to stay off their terraces until it is checked. https://www.facebook.com/groups/…/posts/…/ - **Kids on scooters in the garage** – riding fast down the exit ramp, a real accident risk; parents asked to react. ### 2) Containers, garbage and a composting idea - Garbage piles up around the containers every other day even when the bins are empty; sometimes it blocks the stairs to them. - A composting / food-waste proposal for the container area, with support in the comments. **Deadline: 7.09** for the community to decide and act. **Actionable / time-sensitive:** Anyone who wants in on the container initiative needs to organize **before September 7**.
That September 7 deadline is exactly the kind of post I used to find out about a week too late.
The database turned out to be useful beyond the digest too. Two examples ship in the repo:
- ask.py answers questions over the history of a group. I asked “who offered a parking space for rent?” and got the right post with the right permalink.
- wishlist_watch.py checks new posts against a plain-language wishlist and can fire a notification from cron.
A deadlines-to-calendar extractor or a directory of recommended local services would be small additions on top of the same data.
One warning, this is against the Facebook ToS. A gentle once-a-day run from your home IP is low risk, but do not point it at an account you cannot afford to lose. The README covers this in detail.
The code is on GitHub. Two minutes of reading instead of twenty minutes of scrolling works well for me.
