i spent my summer at Phoebe, where i worked on our go-to-market engineering team. Phoebe builds ai agents for home-care agencies.
i wanted the whole path, from finding companies to catching bookings, to improve from each outcome. that takes an experimental mindset, plus systems that keep working when a model guesses wrong or a booking notification never arrives.
what is go-to-market?
Jeanne DeWitt Grosser, then Vercel’s coo, who built Stripe’s early sales team, got asked this question. go-to-market is any function that touches a customer or makes a dollar.
TAM, the total addressable market, tells you who could buy. icp, the ideal customer profile, tells you who fits. an mql meets marketing’s qualification criteria; an sql has been qualified for sales follow-up. cpl is cost per lead. cpql is cost per qualified lead. cac is customer acquisition cost. roas is revenue attributed to ads divided by ad spend. a cheap lead still has to become a useful conversation.
everything starts as an experiment
every launch needs a hypothesis, a success criterion, and a stop date. otherwise, spending continues because nobody agreed what failure looks like.
we recorded which tests earned more investment.
| test | what happened | decision |
|---|---|---|
| video creative | early cheap leads did not repeat | stop that version |
| compliance keywords | clicks without conversions | stop |
| ads inside ChatGPT | no demos in the test window | stop |
| broad cold lists | named account lists worked better | narrow the audience |
| organic creative | strong posts supplied the next paid tests | repost, then test paid |
an organic winner earns a paid experiment. it still has to prove it can produce qualified demand.
follow the lead upstream
work backward from a demo request: find the company, choose a reason to reach out, capture the response, then route it to the right person.
find the companies, then keep the evidence
we combined state licensing records, the npi registry, Google Maps through Serper, Care.com, Blitz, Clay, and Deepline. a company, its branches, and its employees need separate records. collapsing them into one domain loses the local buyer.
enrich in cost order: reuse evidence, pay to fill gaps, and keep the source.
some useful evidence is hiding in plain sight. a “caregiver login” link can reveal the software a business uses. that matters when product fit depends on an integration. the link is a clue to verify, not proof that every branch uses that system.
refreshing records creates another problem: an agent can undo a correction someone just made. the protection belongs at the database boundary. preserve the corrected field, log the conflict, and let unrelated fields update.
find a reason to reach out
a job posting offers timing: someone is spending money to solve a problem. our scanner used hiring signals to find relevant companies and local decision-makers.
the difficult part was identity. a listing might sit under a parent brand while the buyer runs one branch. deduping on the brand’s domain suppresses distinct offices. resolve the employer and location before applying cooldowns or finding a contact.
keep the conversation together
email and LinkedIn need the same account history, owner, and reply state. a reply should stop the other channel’s pending follow-up.
our operating document held the campaign rules. we tested paired approaches: a softer offer, such as sharing useful evidence, and a direct invitation to book. we called these mql and sql campaign variants; the copy itself does not qualify the recipient.
give the ads agent a write boundary
the ads console supported reviewed changes, validation, and a fingerprint check that rejected changes if the account had moved since review. we built the Google Ads agent on top of those controls.
its objective is cost per qualified lead, using crm outcomes joined to the original click. the model writes a typed plan with evidence, an evaluation window, and a rollback. a critic challenges it. code decides whether to allow, request approval, or block it.
sparse data can justify leaving the account alone. lessons and rejection reasons feed the next proposal; broader permissions require measured results and an explicit policy change.
turn a response into a conversation
for a demo-line caller, Deepline resolves the number to a person and company, finds contact details, and validates the email. the icp model scores the collected evidence with tool calls disabled. that limits fresh invention; it does not make the score infallible.
the Slack card offers add or decline. add authorizes enrollment in the follow-up campaign. separately, callback requests become HubSpot tasks for a rep. speed-to-lead is the time between that request and a real response.
make missing bookings visible
we compared the replacement inbound path with the old path in shadow mode, field by field. that exposed bookings the old path had missed.
a poller also reads bookings from the source. webhooks, the source’s event notifications, and polling meet at the same durable ledger. booking identities and delivery claims prevent recovery from creating duplicate work. failures remain available for retry and inspection.
once a conversation happens, its outcome belongs back in the system: which company qualified, which message got a reply, which ad produced a booking. that evidence changes the next list, the next campaign, and the next hypothesis.