195,894 views in two weeks. Not a single manual publication. That is the output of a bot that posts one listing to dozens of local Facebook groups entirely on its own.
This is the full breakdown of that system: how it is written, where it broke, what guardrails it runs on and what it actually delivered. No theory. Every number here comes from a live deployment.
Where this bot came from
The starting point was mundane. A 525 m² warehouse for rent near Gorzów, Poland, and dozens of local classified groups around it. Posting by hand means hours of clicking every week, and at any real scale it is a short path to an account block.
So I wrote a bot that does it for me. Playwright walks into group after group, types the text character by character, waits for the photos and the video to upload, clicks Publish. A human will not post 37 times a day for two weeks straight. A machine will.
The three hardest problems
1. The FB group list is virtualized. The DOM lies
Checkboxes vanish as you scroll, elements exist in the tree but not on screen. Classic selectors fall apart. I ended up clicking by mouse coordinates and reading the group name through elementFromPoint. Less elegant, far more reliable.
2. Passkey 2FA blocked Playwright
A fresh browser profile will not get past hardware-key login. So the bot attaches over CDP to a real Chrome where I log in once, by hand. Each account gets its own profile and fingerprint. The session survives for weeks.
3. Anti-ban from day one, not after the first block
The limits were in place before the first post went out: 3-5 posts per day at the start, gaps between publications initially 8-18 minutes (after the ramp-up I brought it down to 8-13), random jitter, at most 2 groups from the same town in a row, a 7:00-23:00 posting window and a 48-hour cooldown per group. Plus a kill switch: if FB shows a checkpoint, the whole system stops immediately, every account.
"Posted" is not the same as "posted correctly"
The most important lesson of the whole project. I caught a case where a post went out truncated and without its video, while the system reported success, because Facebook returned a valid response.
That is why the bot does a read-back: after publishing, a crawler returns to the group and checks that the post is REALLY there and the content matches. Every publication moves through statuses: scheduled, sent, confirmed or absent. "Sent" only means we clicked Publish. Only the crawler flips it to confirmed. Truncated content or missing media? Status failed, not published.
If you are building similar automation: do not trust "200 OK". Count facts, not declarations.
A validator that makes lying impossible
The second safeguard runs before a post ever leaves. Each campaign has a whitelist of allowed numbers and a blocklist of forbidden claims. A template with a number outside the whitelist, or a feature from the blocklist, is rejected automatically. The bot is physically unable to publish "525 m²" where the warehouse has a different size, or promise anything the offer does not include.
One listing turned into a multi-campaign system
The warehouse was campaign number one. Then came a second, completely different one: Stadomat.pl, a herd management app for cattle farmers. Same engine, different content, different groups, a separate account with its own session.
The funnel for a new campaign looks like this:
- Finding groups: the bot queries FB search by phrases (for Stadomat: farming topics, nationwide). 330 groups are in targeting, 307 of them waiting as candidates.
- Joining: throttled, a few per day, per account. Currently 21 groups joined, zero blocks.
- AI scoring: every group gets a topical-fit and customer-fit score before it enters rotation.
- Content: three post variants (short, medium, long). Only the ones I approve by hand get published. Rotating the approved set doubles as an A/B test.
Results after two weeks
The warehouse campaign, two weeks of the automat running:
- 195,894 views of the listing,
- +247,867% reach compared to manual posting,
- 99 groups across 31 towns,
- up to 37 posts per day, each verified by the crawler.
Can automation grow your Facebook reach? It can. But it is not magic, it is consistency. A cadence no human sustains, plus verification most humans skip.
Four lessons that stick
- The DOM can lie. With virtualized lists, click by coordinates and read the screen, not the tree.
- Do not fight 2FA, route around it legitimately. CDP into a real browser with a real session beats any emulation attempt.
- Limits go in before the first post. After the first block it is too late.
- A success report without verification is worthless. Read-back plus hard failed/published gates is the difference between a system and a toy.
I covered the business side of this approach earlier in Automating Facebook Group Posting. And for what day-to-day AI-assisted building looks like on projects like this one, see my multi-agent dev team setup.
Need Automation in Your Business?
If you want to implement process automation in your company, you do not have to do it alone. Check out AI automation for business or book a free 20-minute call and I will tell you where to start and what results to expect.