Console
What the system knows, and how the agents behave. Every change applies on the next run.
The stack
What I would use, what I would buy, what I would explore, and what is your call. The prompt asks for this directly, so it gets its own page rather than a bullet list.
- Running
- Wired into this build and working. You can click it today.
- Would buy
- My recommendation, with the price and the kill rule attached.
- Would explore
- Worth a look. Not committed, not in the budget.
- Your call
- A decision that belongs to Shepherd, not to me. Week one.
Everything marked Running or Would buy adds up to $2,060 a month, and the two largest lines in it are a contractor and paid media that both carry a 90-day kill rule. Nothing marked Explore or Your call has a number, because committing a budget to a tool before the play works is how the budget disappears.
Data and signal
6 in this part of the stack.
Builds the broker universe: people at the appointed brokerages whose titles match the construction, energy, and surety practice list.
Search costs nothing, so the universe is free to build and only revealing an email spends a credit. 338 of the brokers on file came from here.
Hand research
RunningfreePlay 01Named practice leaders pulled from firm leadership pages, press releases, and trade coverage, each stored with the URL it came from.
Apollo misses the senior named leaders, which are exactly the people worth a first email. 105 rows came in this way and the import is a CSV, so anyone can add to it.
It also caught two firms that no longer exist independently. Those rows are flagged, not rewritten.
Trade press feeds
RunningfreePlay 01Construction Dive, ENR, Insurance Journal, Risk & Insurance, Insurance Business, read on demand and classified into signal types.
Third-party intent for free. Project awards, appointments, and moves are published; nobody in this market is systematically acting on them.
Custom monitors
RunningfreePlay 01Extra feeds and keyword watches, added in the Console. Describe one in a sentence and a model drafts the config.
The five feeds are my guess at what matters. An underwriter who reads one newsletter religiously should be able to add it without asking an engineer.
700,000+ project starts a year with owner, general contractor, and value attached.
The project-award signal at full strength instead of whatever the trade press happens to cover. Dodge already sells to insurers, so the data is proven; the question is price against the free version.
Only after the free trade-press signal proves it converts. Buying data before the play works is how a budget disappears.
Website visitor identification
Would explorenot pricedPlay 02Resolves anonymous company visits on shepherdinsurance.com to a firm, and ideally an office.
A broker reading the Excess Casualty page is first-party intent and is worth more than any signal in the trade press. Nothing captures it today.
Answer engines
4 in this part of the stack.
Sends every broker-phrased prompt to every engine with a key, and stores the answer, the carriers named in order, and the citations.
It is the free baseline. Before spending anything on measurement, you need thirty days of numbers to argue with, and this produces them at the cost of the model calls.
AEO and GEO tracking across ChatGPT, Perplexity, Google AI Overviews, Google AI Mode, Gemini, Claude, Copilot, and Grok, with share of voice, citation rate, sentiment, and competitive positioning.
The cheaper alternative in the category, with a free tier. Kept on the list as the fallback if Profound's price does not survive procurement.
The category leader: visibility, share of voice, citation share, and sentiment across every major answer engine plus Google AI Overviews and AI Mode, with prompt volumes and conversation-level data.
The audit already speaks Profound's language: I used their published metric definitions for visibility, average position, share of voice, and citation share, so the day Shepherd subscribes, every stored baseline carries over with zero lost history. And it covers the one surface no model key can reach - Google AI Overviews and AI Mode, where a broker who types a question actually lands.
Buy at day 30, not day 1, once the free baseline has moved. Published pricing starts around $500 a month.
Two API keys that cost nothing and light up two more engines in the audit, including the grounded Google one.
The adapters are already written and tested. This is the cheapest coverage in the whole plan: ten minutes and no card.
Outreach
4 in this part of the stack.
Claude
Running$80/moAnthropicPlay 01 · Play 02 · Play 03Scores brokers on the four axes, classifies signals, researches the one-pager with live search, and drafts every email an underwriter signs.
Quality matters most on the two things a human reads: the brief before a call and the email that goes out under someone's name. Everything cheap and repetitive runs on the smaller model instead.
Nothing calls a model on a timer. Every model call in this build happens because a person clicked.
Email sending
Your call$100/moPlay 01Approved drafts leaving from the underwriter's own mailbox, with replies threading back into the engine.
Two real options: send natively through the Gmail or Microsoft API, or push into whatever sequencer the team already pays for. The answer depends on what the underwriters use today, which is a week-one conversation, not a guess.
Deliberately unbuilt. Wiring a sender before agreeing whose mailbox it is would be the wrong order.
CRM
Your callnot pricedPlay 01 · Play 02Wherever a submission is recorded today. Salesforce, HubSpot, or the policy system.
Every number on this site stops at 'email sent' until a submission record closes the loop. It is also the appointment feed that triggers the day-61 sequence for a brand new office.
Question one on our next call: where does a submission live, and what counts as one.
Slack
Would explorefreePlay 01A slash command that returns the broker one-pager where the underwriters already are.
The brief is the most-used thing in this build and nobody wants to open a website before a call. Small piece of work, real adoption difference.
Paid media
2 in this part of the stack.
LinkedIn Campaign Manager
Would buy$750/moPlay 02Paid ABM pointed at the exact company and title list Play 1 is about to email, exported straight from the audience builder.
It is the only paid channel where the targeting matches the audience: named firms, named titles, no email address required. Start small with a held-out control so the lift is measurable rather than assumed.
Kill at 90 days if the targeted offices do not beat the control.
Paid distribution on clips
Would buy$500/moPlay 03Money behind the two clips that already earned attention organically, aimed at the same broker audience Play 2 builds.
Never boost a clip that has not earned it. Starts day 61, so there is organic data to pick from.
Content
2 in this part of the stack.
Turns one recorded hour with the underwriters into hooks, a storyboard, and a month of platform-native cuts.
The bottleneck on video is never the camera, it is deciding what to say and cutting it. This removes the deciding.
Video editor
Your call$1,500/moPlay 03A contractor at roughly half a day a month, or me.
Twelve to sixteen clips a month is not a full-time job and does not need an agency. Captions and scheduling are under $100 on top.
Infrastructure
2 in this part of the stack.
Supabase
RunningfreePlay 01 · Play 02 · Play 03Postgres behind everything: brokers, signals, cadences, drafts, briefs, audits, spend.
Free at this size, and it is plain Postgres, so nothing here is locked to it.
Vercel
RunningfreePlay 01 · Play 02 · Play 03Hosting, deploys on push, and the environment where the keys live.
Right call while this is a take-home: nothing to babysit. A VPS becomes worth it when the monitors need a real scheduler rather than a serverless cron.
Where I would not build
The honest boundary of this build.
Three things on this list I would not write myself, and it is worth saying which and why. Google AI Overviews and AI Mode are search surfaces rather than APIs, so no model key reaches them and the audit here structurally cannot see the place a broker most likely reads an answer. That is the argument for Profound and it is the only reason I would spend money in Play 3 at all.
Sending email is not a hard engineering problem, but whose mailbox it leaves from is a trust problem, and that decision is the underwriters', not mine. The submission record already exists somewhere in your stack; a second one would just be a second version of the truth.
Everything else on this page is cheaper to build than to buy at your size, which is most of why the stack costs what it does.
The MCP, narrated on purpose
You said not to build it for this submission, so here is the idea instead.
The idea: expose this system's signal book, broker scores, and briefs as an MCP server, so the whole thing surfaces inside Claude, or whatever assistant an underwriter already keeps open. They ask "who should I call this week?" in plain language and the answer comes from the same scored universe and live signals this app shows, without them ever opening this app.
Why it matters: adoption is the tax every internal tool pays, and underwriters did not sign up to learn one. An MCP inverts that. Nothing to log into, nothing to check, no habit to build. The system improves the work inside a surface the user already trusts, which is the only adoption strategy that costs the underwriter zero minutes. It also auto-triggers: an assistant preparing a meeting brief can pull the broker one-pager itself, so the intelligence shows up without being asked for.
How it would plug in: a thin server over the same Supabase tables and scoring functions this app already runs, read-only to start, with the approval queue staying exactly where it is. Nothing new to maintain beyond the mapping. It only makes sense after the signals prove out, which is why it is narrated here and not built.