Whatsapp scraper — from an experiment to a weekly report

Back in March, the idea was still mostly a chain of hopes: an agent opens WhatsApp Web, somehow scrolls enough history without losing the important bits, exports it, then another model translates and summarizes everything.

It turned out that the reliable version is less magical, but much more useful.

Now the browser work is deterministic. A terminal command opens WhatsApp Web with the already logged-in profile, goes through every configured community thread, injects the exporter, collects the requested period and stores one JSON export per thread. Then the summary step takes the whole matching set and produces one Markdown report in English.

The agent is still there where it makes sense: reading the collected conversations and turning them into a useful report. But it is no longer asked to manually operate a fragile web UI and improvise a scrolling strategy every week.

The community became multiple threads

At the beginning, it was one residents chat. Since then it has evolved into a WhatsApp Community with separate threads, so this is not really about watching several unrelated chats.

Right now I follow several parts of the same building conversation: a general residents thread, a discussion thread, the gym, the pool, and issue-specific threads when they appear. Each has a different signal-to-noise ratio and purpose, but together they are the actual picture of what is happening in the community.

The workflow treats those threads as one reporting set. Each keeps its own export, but they all use the same date range and arrive in one combined summary. The final structure is stable: Overview, Residence Management, Utilities & Infrastructure, Gym, Incidents & Safety, Neighbor Announcements, and Action Items. Empty sections are omitted, so it does not become a template full of “nothing happened here”.

There is also a small pool of LLM CLIs behind it, so the summary flow can use the configured available tool instead of being hard-wired to one provider.

The boring reliability work

WhatsApp Web is the obvious unstable part. Its DOM changes, class names are obfuscated, and a scraper can look successful while quietly missing the real content.

So the exporter now works from the message metadata rather than one fragile selector, and supports both the older message bubbles and the newer row-style message containers. Before a production export, the orchestrator takes a small snapshot of the parser-relevant DOM and checks that it still matches one of the supported shapes.

The other important check is progress: did the scroll actually reach the requested start boundary, and does the exported count match the collected messages? If not, the run fails visibly and leaves redacted diagnostics and screenshots for investigation instead of producing a confident summary from a partial scrape.

That is probably the most important difference between a demo and something I can rely on.

Current state from the user side

For me the experience is now very simple: I choose a range, run one command, and get a concise English report for the community threads I need to observe.

A summary for the community threads over one to four weeks takes only a couple of minutes now — generally under five minutes. Considering that the alternative is manually opening each Spanish thread, reading through its history, translating the relevant messages, and trying to remember what needs action, it is super convenient.

I do not use this as an always-on scheduled service. I keep a simple “export chat” task in my self-made Notion tracker, reschedule it after I use it, and run get-updates when I want a report. There is no background process, no loop to manage, and no recovery story after the laptop has been asleep.

Sometimes I run it regularly, sometimes I do not. The important part is that it can retrieve any reasonable date range and give me a fresh, concise summary when I come back to it. I still need to keep the WhatsApp profile authenticated, but the essential loop is stable: export, validate, summarize, read.

The direction now is to keep it small and dependable, continue hardening it when WhatsApp changes its UI, and let it save attention rather than become another complicated system to maintain.