I build demand gen engines for AI and B2B SaaS companies that need to grow fast without burning budget to do it. Over 10 years I have taken four companies from zero pipeline to Series A, cut CAC by as much as 65%, and generated over $42M in combined pipeline across B2B SaaS, AI, healthcare, real estate, and education.
Nine items, four engines underneath: a classification engine (reviews, calls, dispositions), a scripted audit engine (ad accounts at scale), an answer-engine panel, and a draft-zero writing system. Each engine wears different clothes per buyer. That's what makes this deliverable solo.
Bring the problem. Choose the ingredients. The machine assembles them under nine laws and argues back when you are wrong. You leave with a formula that has a serial number.
I work inside whatever stack a client already runs. These are the instruments currently in rotation.
The network lacked a consistent definition of performance across practices, agencies, Salesforce, analytics, and the call center. Built a shared funnel taxonomy covering lead submission, qualification, service-line intent, scheduled NPV, kept appointment, spam, duplication, and service-area exclusions.
The work shifted reporting away from blended CPL and toward qualified demand, appointment conversion, and the operational reasons leads failed to progress.
Audited practice-level media accounts and found fragmented campaign structures, inconsistent conversion values, and brand traffic hidden inside non-brand reporting. Developed a consolidation plan covering portfolio bidding, location assets, conversion values, negative keywords, geographic controls, and qualified-lead economics.
Search represented the majority of media spend, making structural accuracy more important than surface-level campaign optimization.
Led the implementation of online scheduling and SMS for the network's largest Florida practice across eligibility logic, consent, Salesforce lead creation, patient matching, and appointment follow-up. Adapted the model for its New York practice, where treatment eligibility, geography, age, and service-line rules differed.
The system required marketing, operations, legal, Salesforce, call-center, and clinical workflows to operate as one acquisition experience.
When I built the disqualification taxonomy at US Fertility, I did it the slow way. I read through disposition notes from a 70-agent call center until the same twelve reasons kept coming up: out of the service area, didn't meet age or eligibility rules, insurance didn't match, price shock, wrong service line, already a patient, spam, duplicates. If I ran the same project today, it would take days instead of weeks.
The first step is de-identification, and it happens before anything reaches a model. A script strips out names, phone numbers, and dates of birth, and the model itself runs in an environment covered by a BAA. Then I run the classification twice, with two differently worded prompts, and only keep the labels where both passes agree. The 10 to 15 percent where they disagree is the part I read myself, and it's usually where the most useful findings live. Agents tend to log "not ready yet" and "not qualified" the same way, but those two need opposite treatment. One goes into nurture, the other gets excluded from targeting. A model can't reliably make that call, so I do.
Once the taxonomy is confirmed, every reason gets tied to a media action: geographic exclusions, negative keywords, changes to the form, or budget rules based on what a qualified lead costs by reason.
The audit I ran across US Fertility's practice-level Google Ads accounts turned up brand spend sitting inside non-brand campaigns, which changed the real economics on about 75 percent of the network's media spend. I found it by reading accounts one at a time. Today I'd read them all at once.
A script pulls every search terms report through the API into a single table. Simple text matching against each practice's brand terms, clinic names, sub-brands, and common misspellings handles most of the volume. A model only looks at the queries text matching can't decide, like a doctor's last name plus a city.
The one call I'd never hand to a model: in a network built through acquisition, a physician's name only counts as a brand term if that physician came with the deal and stayed. If they left, searches on their name are now sending your budget toward a competitor. No model knows the acquisition history, so that classification happens against the org chart, by hand.
There's a rule I work by when AI enters a HIPAA environment: models can read what patients have already said, and people write everything patients will read. At US Fertility, every patient-facing surface, the scheduling flows, SMS, consent language, and lifecycle email, was written by humans and reviewed through legal and clinical workflows. That rule is also what lets the analytical work move quickly. When it's clear from the start what will never be automated, the compliance conversation gets short.
At Mage Legal, the sequences targeted M&A partners at AmLaw 100 and 200 firms, where sales cycles run long and diligence pain builds quietly in the background. If I built those lists today, I'd tier the audience by deal cadence. Clay runs the enrichment, and a model reads each partner's announced deals and sorts them by sector, size, and how often they close. A mid-market partner doing eight add-on acquisitions a year is living with diligence pain constantly. A partner on one megadeal has a floor of associates to absorb it. Every message references one real deal from the partner's own record, and I edit each one before it goes out.
There's a check I'd never skip: "partner" covers equity, non-equity, and income roles, and they have very different authority over spending on tools. No data vendor labels that reliably, so I verify the top accounts against the firm's structure before a sequence runs. A perfectly personalized message to someone without budget still converts at zero.
The jump from 0.5 to 5 percent conversion at Mage came from restructuring the campaigns and testing landing pages against real traffic. What I'd add today is a filter that runs before any money gets spent. I generate variants under a fixed set of constraints, bar-compliant language, no outcome claims, and the vocabulary an M&A partner actually uses. Then each variant goes past a panel of simulated reviewers prompted to behave like skeptical AmLaw partners looking for a reason to close the tab.
The panel has one job: catching the variant with a wrong term of art or an overclaim before it burns budget failing in public. Real traffic still picks the winners. Models are good at spotting copy an expert would find amateurish, and much worse at predicting what converts, so I use them for the first job only.
The outbound program for the concierge medical practice brought in 52 patients at a $50K average, about $2.6M in new revenue, from a small universe of households across Manhattan, the Hamptons, Connecticut, and New Jersey. At that size, what I'd change today is the economics of the first line. Clay enriches each prospect from public sources like executive bios, board seats, foundation pages, and published interviews. A model drafts an opening line from one verifiable public fact, and then I rewrite every message myself before it sends. The model solves the blank page across two thousand prospects. I still own every word that goes out.
The rule that keeps this from going wrong: I only reference things a person has chosen to publish about themselves. Interviews, bylines, their foundation's website. Property records and donation databases stay out no matter what the model finds, because at this price point, one message that feels like surveillance ends the relationship before it starts.
Sixty practices came through the acquisition program. What I'd change today is making sure outreach only ever reaches practices that are structurally able to accept it. NPI registry and state license data narrow the field by specialty and geography. Then a model reads each practice's website for signs of ownership: MSO or PE language in the footer, branding that matches a known platform, a careers page that routes to a parent company. Independent practices move forward, and acquired ones come off the list before an email spends any goodwill.
One caution from experience: stale websites lie. A practice acquired eight months ago is often still running its old site, so I verify the top of the list against acquisition announcements by hand before anything sends.
At GitStart I extended demand gen to the answer engines, adapting technical content for visibility in ChatGPT, Perplexity, and Claude. The pages that worked were written as direct answers, with the claim, the evidence, and the named entities close together, because these engines lift passages, and they lift the passages that settle a question cleanly. The bigger lever was repetition across independent surfaces. The same positioning showed up in the docs, on GitHub, and in community threads, because the engines trust an association they can find in several places more than anything a company says about itself on its own site.
The measurement layer I run now is a recurring panel: a fixed set of buyer-intent prompts asked of all three engines on a schedule, with citations logged, so share of voice becomes a number that moves over time. And the content takes a real position on contested questions, the offshore-quality debate being the big one, because the engines cite sources that resolve a disagreement and pass over explainers that stay neutral.
Reddit worked as an acquisition channel at GitStart because every reply came from a person, from an account with real posting history. Engineering subreddits are quick to spot anything that smells automated, and once an account is burned, it's gone. The layer I'd add now sits before the human: a model reads thread activity and sorts intent into venting, seeking recommendations, or actively evaluating, so only the top two tiers reach me. Reading the room stays my job. Some qualified threads are traps, already hostile enough that a helpful reply turns into a pile-on, and passing on those is often the right call. Replies into the right threads cost almost nothing in media terms, which is part of how blended CPL came down from $750 to $110.
RecFest is oversaturated. Every brand competes with similar booth designs and similar AI promises. Treated the conference as a temporary cultural environment to shape, not a funnel to extract from. Strategy ran three layers: intellectual intrigue during the day, cultural immersion in the evening, social bonding after hours.
Single flagship webinar anchored to a live industry tension: training teams being asked to prove ROI under tightening budgets. Distribution was light-touch: partner email lists, organic LinkedIn, narrow paid amplification to senior L&D titles only, calendar-driven reminders.
At a saturated HR conference, the constraint was capturing attention off the show floor without burning paid spend. Parked an ice cream truck outside the convention center entrance during the lunch window. Free ice cream, QR code lead capture, no pitch.
Structured AMAs in relevant subreddits with instructors and operators as speakers. Pre-planned subreddit selection, timing, objection responses, and subtle CTAs. Designed to be genuinely useful first, promotional second.
AMA traffic skewed toward motivated, self-selecting learners. Downstream LTV exceeded paid channels despite lower top-of-funnel volume.