How a healthcare agency automated Google posts across 1,000 locations

1,000+
Healthcare locations posting automatically
~48
Unique posts per run day, none written by hand
15 min
To onboard a new brand, down from three hours
TL;DR
Strategy Collective’s team wrote and published a Google Business Profile post for every client location by hand, every week.
We built a Python and FastAPI app on Railway where GPT-4 writes location-specific posts and the Yext API publishes them, routed by a pre-built entity map.
Around 48 unique posts go out per run day across 62 active brands and 1,000+ locations, and onboarding a brand dropped from three hours to fifteen minutes.
Strategy Collective manages dozens of medical practices, each with one or more Google Business Profile listings. Keeping them active means a short promotional post with a photo for every location, every week. That was done by hand. The GBP Post Generator now does all of it on a schedule, picking a topic and image per brand, having GPT-4 write a post for each location’s name, city and services, and publishing through Yext.
The challenges
A stale listing ranks worse and converts worse. The only way to keep listings active was manual, and the effort scaled with locations rather than value.
Every post was assembled by hand
Schedule in a spreadsheet, copy in a Google Doc, images in Drive, then published through Yext one location at a time.
Obvious shortcuts make it worse
Google’s spam detection penalises identical content across listings, so every post had to stay different.
Onboarding a client took most of a morning
A new brand needed more than three hours of configuration before a single post went out.
What we built
We built and delivered the system between March and August 2026: a single Python application, FastAPI with Jinja2 templates serving an API and admin dashboard, deployed on Railway as two services. It is AI content automation with an MCP server alongside, so the team can operate it conversationally.

A different post for every location
One API key, 33 sub-accounts, 4,000 entities
.jpg)
An hourly sweep instead of a job scheduler
Keeping state alive on infrastructure that forgets
Conclusion
Nobody writes the posts any more. The team’s remaining work is onboarding a brand, now about fifteen minutes, and occasionally adjusting topics or schedules. The system grew from a handful of brands to more than seventy configured, and the agency describes it as a crucial part of how it sells marketing packages to healthcare clients.
Want a publishing engine built like this one? Get in touch.
1,000+
Healthcare locations posting automatically
~48
Unique posts per run day, none written by hand
15 min
To onboard a new brand, down from three hours
Runtime: Python, FastAPI with Jinja2 templates | Hosting: Railway, two services
Generation: OpenAI GPT-4, single prompt per location, posts under 500 characters
Publishing: Yext Partner Portal API, syndicated to Google Business Profile
Persistence: JSONBin primary, local file cache, newest-wins on load, 30 timestamped backups
Operations: MCP server exposing 18 tools for conversational control
FAQ
How do you automate Google Business Profile posts for multi-location healthcare practices?
An hourly cron checks which brands are due, GPT-4 writes a post per location from live Yext data and the brand config, and the Yext API publishes it to each listing.
Why publish through Yext instead of the Google Business Profile API?
Yext already holds the Google authorisation for each location. Going direct would mean per-client Google OAuth and separate GBP API quota approval.
How do you keep state on an ephemeral host like Railway?
Dual-write every save to JSONBin and a local file, take the newer copy on load, keep thirty timestamped backups, and abort any save that loads zero brands.
What guardrails apply to AI-written healthcare posts?
Specific claims are blocked outright, such as “board certified”. More in how to use AI for SEO.


