Eight years running paid acquisition engines in B2B SaaS — $43.9M in pipeline, $10M+ in managed budget. Now building the agent systems and internal tools that remove the manual work between marketing, sales, and revenue.
Every figure here is tied to pipeline, revenue, or efficiency — measured in the CRM, not the ad platform.
The use cases are obvious: automate campaign setup, enrich inbound leads, turn content into sales enablement, stop making people ask three colleagues whether an account already exists. But prototypes don't ship, integrations break, and nothing survives contact with a real workflow. That's the gap I close.
I spent eight years building paid acquisition engines in B2B SaaS — Google Ads, LinkedIn, Meta, ABM via 6sense, content syndication — and learned that the channel work is the easy part. What compounds is the architecture underneath: attribution that reaches revenue, scoring that reflects real ICP, and now an agent and tooling layer that removes the manual coordination between marketing and sales.
Everything I build is bounded. Write surfaces are minimal and deliberate. Deterministic logic handles anything that must be consistent; AI is reserved for judgement. Anti-fabrication controls validate against actual tool results rather than good intentions. And each system ships with a runbook written for someone who didn't build it — because a tool that stops working when the builder leaves the room hasn't transformed anything.
Six systems in production or pilot — five agents and one coded internal application. Each is documented to a seven-section standard: baseline, capability, architecture, guardrails, runbook, impact, adoption. The interesting part isn't what they generate — it's what they refuse to do.
Turns one structured campaign brief into a launch-ready technical package: readiness validation, a full UTM matrix, HubSpot landing page setup, email and request packages, QA checklist, and cross-functional handoff details — with safe draft-only HubSpot page creation already working against the live API.
Launching a multi-region field event or webinar means collecting a brief, checking for missing inputs, building UTM links for every channel, preparing landing page setup details, requesting invite and reminder emails, coordinating across marketing ops, web, field, demand gen, and campaigns, then producing a QA checklist — and doing it all by hand, consistently, every time. The real cost isn't the drafting. It's the rework loops: a request bouncing back three days later for a missing field, or a UTM inconsistency discovered after launch that quietly breaks reporting.
Every deferred item involves production write permissions. Connecting them early risks wrong campaigns created in the CRM, accidental publishes, duplicate landing pages, broken attribution, and unrequested noise in other teams' tools. The MVP proves the workflow safely first; production writes get added with named owners, approval steps, audit logs, confirmation gates, error handling, and a rollback path. Scoping restraint is the design decision, not a limitation of it.
Time-savings figures are deliberately not published. A defensible number requires the team's real cycle times — campaigns per quarter, hours per launch today, and how often requests bounce back — and that baseline is being collected rather than estimated. The verifiable claim is the architecture: a real GTM operations problem scoped, deterministic and AI responsibilities separated on purpose, safety controls built in from the first commit, and the whole thing grounded in the team's actual conventions rather than a generic template.
Reads HubSpot to size, segment, and assess campaign-ready audiences. Returns a fixed ten-section brief — audience size (total vs marketable), persona and title breakdowns, industry and account coverage, data quality gaps, ready-to-use list criteria, recommended motion, and stated limitations — delivered as a Slack canvas a field marketer can execute from directly.
Answering "do we have enough audience for this?" meant a request to marketing ops, hand-built HubSpot filters, a CSV export, pivot tables for persona and industry breakdowns, a separate marketability check, and a prose brief someone had to interpret and rebuild. Days of latency, inconsistent standards, and data gaps discovered only after a campaign underperformed.
Answers one question: what is our current commercial relationship with this company, and who internally should I speak with? Returns relationship type, match confidence, account ownership, open opportunities, account team, and exactly one recommended internal contact chosen by a fixed priority ladder.
Anyone about to contact, evaluate, buy from, or partner with an external company needed to know whether a relationship already existed. That meant asking in Slack and waiting, searching Salesforce directly (assuming a licence and knowledge of the object model), interrupting RevOps — or skipping the check and reaching out cold.
Turns any marketing asset — whitepaper, customer story, webinar transcript, battlecard, analyst report — into a fourteen-section sales-ready deliverable: elevator pitch, talking points, discovery questions, cold and warm outreach, objection handling, personas, statistics with sales-relevance notes, and an executive cheat sheet readable in under sixty seconds.
Marketing publishes assets written for a reader who has time. SDRs have a call in four minutes. That gap was crossed by product marketing hand-writing an enablement one-pager per asset — slow, and only for assets someone remembered to request — or by the rep reading the asset themselves, or most often not at all. The coverage gap, not the quality gap, was the real cost.
Triggered automatically on every inbound MQL. Pulls campaign data from Salesforce, researches the prospect and their company, retrieves relevant case studies, and auto-uploads a structured brief back into the CRM for SDR outreach — eliminating manual pre-call research across the entire inbound pipeline.
Drafts personalised three-email sequences per prospect, routes them to the SDR via Slack for approval, then writes the confirmed copy directly into Salesforce and Gong. Removes research and copywriting overhead for an entire region while keeping a human approval gate before anything reaches a prospect.
These recur across everything I've shipped — agents and coded applications alike. They're the substance of the work, and the reason it holds up under scrutiny.
Write surface is decided before capability. One agent is read-only with a single delivery write. One has no write surface at all. One writes only after a human confirms. The launch app creates drafts and refuses to publish.
UTMs, validation rules, and readiness scoring are coded logic, not model output. AI is reserved for judgement. Anything that must produce the same answer twice shouldn't be generated probabilistically.
Where possible the check is "did a real tool call return this?" — not "did the model try to be accurate?" Schema resolution before filtering. Fixed fallback phrases when a source is silent. Intention isn't a control.
Each system has a documented set of things it declines to do, demonstrated rather than hidden. A tool that only shows successes is a prompt. A tool that refuses correctly is a system.
Each build ships with a runbook written for someone who didn't build it. A tool that stops working when the builder leaves the room hasn't transformed anything.
Every record carries an honest list of contradictions and gaps in its own instruction set, with severity and proposed fixes. Self-audit before someone else audits you.
The acquisition engine underneath the automation work — where structure, attribution, and intent-based thinking drove measurable revenue.
Rebuilt Google Ads architecture around buyer intent, then wired offline conversions to Salesforce so every optimisation signal traced to revenue — not form fills.
Cut Paid Social spend by 50% while holding lead volume flat and increasing attributed pipeline 110% — through audience segmentation, retargeting architecture, and frequency-based spend controls.
Adapted channel mix, funnel design, and conversion paths to the reality of EMEA enterprise buying — rather than porting a North America playbook and hoping.
The existing model let operational contacts through as MQLs while deprioritising accounts sales actively owned. Reps had stopped trusting the score — which made the whole routing layer decorative.
The demand gen function had no unified CRM layer — no scoring, no nurture automation, no cadence orchestration, and no reporting connecting marketing spend to revenue outcomes.
Grew the paid footprint across Google, Meta, LinkedIn, and YouTube while building the reporting layer that let the team see which spend was actually producing revenue.
Not a list for show. These are the platforms I actually ship with — chosen because they're production-tested inside real revenue workflows.
The right tool is chosen for the specific problem, not out of habit — and often the right answer is better use of what's already in the stack.
Eight years in B2B SaaS performance marketing sharpened one instinct above all: every CPL win eventually decays. The attribution architecture, the scoring model, the agent layer — those are the things that keep paying.
Outside the day job I'm learning AI agents and generative AI as infrastructure to build on rather than a trend to follow — which mostly means building things, breaking them, and writing down what broke.
If you know where AI should help your marketing organisation but can't get it to run reliably inside real workflows — that's the problem I solve. Open to global opportunities in Singapore, the US, and Europe.