Case studies / Strategy Collective

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.

GBP Post Generator: automated posting for 62 healthcare brands across 1,000 locations.
Solution 1

A different post for every location

Live Yext data supplies the practice name, city and services. The brand config supplies voice, mission, target keywords and phrases to avoid. GPT-4 returns a post under 500 characters with a patient-focused call to action, in a single prompt with no agent loop. Specific claims are blocked outright: the system will not write “board certified” for any practice.
Solution 2

One API key, 33 sub-accounts, 4,000 entities

Yext already holds the Google authorisation for every listing, so going direct would mean per-client OAuth and GBP API quota approval for dozens of practices. Entities sit across roughly 33 sub-accounts, so the system pre-builds a map of roughly 4,000 entities, refreshed every 24 hours with a single-entity fallback. Routing becomes one lookup instead of a search.
The entity map behind the routing, at 4,467 entities across 34 accounts on the day of this capture.
Solution 3

An hourly sweep instead of a job scheduler

A cron job wakes hourly and checks which brands are due against each brand’s days, time window and timezone. Topics rotate round-robin, images avoid the last seven used, and a date stamp prevents a brand posting twice in a day. No message broker, no worker pool, no scheduler state to corrupt.
Solution 4

Keeping state alive on infrastructure that forgets

Railway’s filesystem is wiped on every deploy. Every save goes to JSONBin and a local file, the newer copy wins on load, and thirty timestamped backups support rollback. If settings ever load with zero brands, the save is aborted, so a bad read can never overwrite good state.

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.

About Strategy Collective
Strategy Collective is a small marketing agency serving healthcare providers across the United States, managing dozens of medical practices from pediatricians to fertility clinics to dermatologists.
Tags
AI agents, Search visibility
Tech stack
GPT-4
Yext
FastAPI
Want similar results?
We build AI agents and software for teams ready to move faster.
Get in touch
contact image