Monthly demographic refresh for your candidate markets

Pull fresh population, income, and household stats for every ZIP code on your expansion shortlist, append them to a tracker sheet, and recap in Slack.

Deterministic Code
Sites USAGoogle SheetsSlackOperationsResearch & MonitoringData Sync

On the first business day of every month at 8am, run a deterministic code workflow that refreshes demographics for every ZIP code on my expansion shortlist and appends the results to a Google Sheet so I can watch trends over time. Trigger: cron, first business day of each month, 8am in my timezone.

Inputs live in a Google Sheet called "Candidate Markets" with columns: zip code, market name, target customer profile note. The workflow should read this sheet via Google Sheets Get Values at the start of each run.

Demographic variables to pull per ZIP: total population, median household income, median age, total households, daytime population, and growth rate. At the start of the workflow, call Sites USA List Demographic Variables once to resolve the IDs for those six variables. Also call Sites USA List Known Trade Area Types once to confirm the type ID for ZIP code (it is 0 per the Sites USA docs, but resolve it dynamically the first time). These two lookup calls happen once per run, not per row.

Main loop: for each row read from the Candidate Markets sheet, call Sites USA Get KTA Demographics with the ZIP code, the ZIP KTA type ID, and the six variable IDs. Pace the loop at one request per second to respect Sites USA's rate limit. If a ZIP is not found, log it and continue, do not fail the whole run.

Output: append one row per ZIP per run to a tab called "Snapshot" in the same spreadsheet via Google Sheets Append Values. Columns in order: snapshot date (YYYY-MM-DD), zip code, market name, target customer profile note, population, median household income, median age, households, daytime population, growth rate. Do not overwrite existing rows. The Snapshot tab accumulates one row per ZIP per month so historical trend lines build up.

After the snapshot finishes writing, post a single Slack Send a Message to the channel #market-research (configurable). The message should include the snapshot date, a link back to the spreadsheet's Snapshot tab, the number of ZIPs processed successfully, and the count of any ZIPs that were skipped or failed.

Keep this fully deterministic. Same inputs, same outputs. No AI nodes, no judgement calls, no LLM-generated summaries in the message. The Slack recap is a templated string filled with counts and a link.

Additional information

What does this prompt do?
  • Refreshes demographics for every ZIP code on your expansion shortlist on the first business day of every month.
  • Appends one row per market to a dated Snapshot tab in your Google Sheet so historical trend lines build up automatically.
  • Posts a single Slack recap to your market research channel with a link to the new snapshot and the row count processed.
  • Runs deterministically with the same shortlist in and the same numbers out, no judgement calls in the loop.
What do I need to use this?
  • A Google account with edit access to your Candidate Markets spreadsheet
  • A Sites USA REGIS Online subscription with API access turned on
  • A Slack workspace and a channel for the monthly recap
  • A starter list of ZIP codes you want to track, with a market name and a short profile note per row
How can I customize it?
  • Add or remove ZIP codes by editing the Candidate Markets sheet, no workflow edits needed
  • Swap the tracked demographic variables (for example, add owner-occupied households, daytime employment, or growth rate)
  • Move the recap to a different Slack channel, change the day of the month it runs, or rename the Snapshot tab format

Frequently asked questions

How many markets can this track in one run?
There is no hard cap. Sites USA paces at one call per second, so a 50-ZIP shortlist finishes in under two minutes and a 200-ZIP list in well under five.
Will the workflow overwrite my historical data?
No. Each run appends a new dated batch of rows to the Snapshot tab, so month-over-month trend lines accumulate. Nothing in the sheet is modified in place.
Can I pick a different day of the month?
Yes. The default is the first business day at 8am, but you can change the schedule to any cadence you like, including weekly or quarterly.
What happens if a ZIP code isn't found in Sites USA?
That row is skipped and the workflow continues. The Slack recap shows how many markets were processed so you can spot misses at a glance.
Do I have to touch the workflow between runs?
No. Just keep the Candidate Markets sheet up to date. Add a new ZIP to the list and it gets picked up automatically on the next monthly run.

Stop rebuilding your market shortlist every month.

Connect Sites USA, Google Sheets, and Slack once, and Geni keeps your demographic trend lines updating on the first business day of every month.