I take technical products to market, and build the systems that show what’s working.
Product marketing and marketing technology, with 5+ years across B2B SaaS, AI-powered eCommerce and digital products. I position and launch AI products, then build the data, automation and reporting that turn campaigns into pipeline decisions.
pipeline generated monthly through 20+ integrated campaigns
$200K–$500K
LinkedIn cost per lead, on about $30K a month in ad spend
Under $50
usable prospect coverage after automating enrichment for 1,000+ prospects a month
65% to 95%
accounts in a customer evidence program tying adoption to revenue
~70
Selected work
Launching AI Assistants for B2B and eCommerce teams
Led positioning and launch for Intelligent Insights and 4 AI Assistants (Search, Shopping, Merchandising and Analytics), turning agentic commerce capabilities into use cases for B2B manufacturers, distributors and eCommerce teams. This case covers the Shopping Assistant campaign.
AI Assistants positioned and launched
4
channels, one offer
4
contacts in the email sequence
353
Positioning
Salesloft
HeyReach
HubSpot
Webflow
LinkedIn Ads
Shopping Assistant campaign: every channel pointed to one low-friction offer instead of a sales call. Swipe the diagram to see all of it.
The problem
New products, new buyers. The Shopping Assistant reached past the core B2B search buyer to eCommerce teams, and prospects needed a reason to engage before talking to sales.
How I built itHide details
Positioning
For each assistant, I turned the capability into a use case for a specific buyer: manufacturers, distributors and eCommerce teams. For Shopping, I positioned agentic commerce as a product discovery problem first, not a checkout change. Shoppers may start in an AI assistant instead of a category page, so product data, search and recommendations have to be ready for that. A readiness audit made that problem concrete and gave prospects an easy first step.
What I built for the Shopping launch
The Agentic Commerce Audit offer, with a HubSpot form and promotion workflow.
A 6-email Salesloft sequence to 353 contacts, with a 150-per-day send cap and a holiday-aware schedule.
A 3-message LinkedIn flow in HeyReach.
A paid LinkedIn thought-leadership concept with retargeting to the audit.
Suppression logic so prospects already invited to the webinar weren't pitched it again.
What this shows
Product marketing end to end: positioning by buyer, one offer, and four channels that stayed consistent with each other, down to send caps and suppression rules.
One executive dashboard for every channel and budget
Built an executive marketing dashboard that combines Google Ads, GA4, Instantly, Clay, HeyReach, HubSpot and LinkedIn Ads data, giving the C-suite one view for campaign and budget decisions and saving the team 30+ hours a week.
team hours saved weekly
30+
data sources in one view
7
campaign and budget decisions
C-suite
n8n
APIs
SharePoint
Claude Code
HubSpot
GA4
Seven tools, one view, delivered where leadership already works. Swipe the diagram to see all of it.
The problem
Campaign and spend data lived in seven tools. Leadership couldn't compare channels or budgets in one place, and pulling it together took the team hours of manual work every week.
How I built itHide details
Constraints
No BI budget. No direct Salesforce connection.
What I built
n8n workflows that pull data from each tool through its API on a schedule.
An executive dashboard in SharePoint, built with Claude Code, covering paid, outbound, website and CRM performance.
Opportunity stage read from the HubSpot property that the Salesforce sync writes to, so the dashboard never touches Salesforce directly.
Key decisions
SharePoint instead of a separate BI tool, so leadership opens it where they already work.
Switched Instantly to its campaign analytics endpoint, which includes bounce data and cut the workflow to one API call.
Proof
30+ team hours saved every week.
Backfilled late July to early November 2026, and totals matched the source tools exactly.
Checked every scorecard against raw data, which caught a duplicated test date and a filter tied to the wrong source before anyone made a decision on them.
Capturing LinkedIn leads the CRM was silently dropping
Built an n8n workflow that turns every accepted LinkedIn connection into a HubSpot contact with clean source tracking. Recovered 200+ ICP-matched contacts from 4 months of outreach, and now captures 50+ qualified leads a month automatically.
contacts recovered
200+
meetings booked
10+
to build and ship
2 days
n8n
HeyReach
HubSpot
Webhooks
Triggered only by real acceptances. A separate backfill version replays history with a dry-run switch. Swipe the diagram to see all of it.
The problem
HeyReach's native HubSpot integration only updates existing contacts. Every new LinkedIn connection was lost before it reached the CRM, so there was no follow-up and no attribution.
How I built itHide details
What I built
An n8n webhook that creates a HubSpot contact only when a LinkedIn connection request is accepted.
Sets Lead Source to LinkedIn and Lead Source Detail to HeyReach on new contacts only, so existing attribution is never overwritten.
Finds or creates the company by email domain, and skips personal email domains.
Adds every accepted lead to a static list for follow-up.
A backfill workflow with a dry-run toggle to replay historical connections safely.
Key decisions
Trigger only on accepted connections, with an event check added after HeyReach's webhook started sending the wrong event type. Bad events can't create junk contacts.
Write lead source on new contacts only, so first-touch attribution from other channels survives.
Keep these contacts non-marketing and out of Salesforce until they engage. This holds down HubSpot marketing-contact costs and keeps unqualified records out of sales data.
Proof
200+ contacts backfilled from 4 months of outreach, with dry-run output checked against HeyReach before the live run.
We count ICP-matched accepted connections as qualified leads.
Across the LinkedIn campaigns feeding it: about 20% of connection requests accepted, 7% replied, and 10+ meetings booked.
Finding why a client's pages froze for up to 2 minutes
Found the root cause of page freezes on a client e-commerce site without touching live traffic: a Google Ads tag hanging while it scanned an oversized page field.
worst-case freeze
2 min
suspects tested
3
changes to the live site
0
Browser DevTools
Google Tag Manager
Google Ads tag
ASP.NET
Each suspect was tested and eliminated before the fix was handed off. Swipe the diagram to see all of it.
The problem
Shoppers saw pages freeze for 12 seconds to 2 minutes. Hosting and the tag setup were both suspects, and nobody could say which.
How I found itHide details
Constraints
Read-only Google Tag Manager access. No changes allowed that could affect live visitors.
What I did
Reproduced the freeze with local browser testing instead of changing the live site.
Traced it to the Google Ads tag's automatic content scanning, which hung on an oversized ASP.NET ViewState field present on every page.
Proved it: removing the field removed the freeze. Ruled out hosting and the Tag Manager configuration.
Handed off cleanly: the site fix went to the developer, and the tag-setting fix was written up for the client.
Why it matters
Marketing tags can break the pages they're meant to measure. I can debug at that layer instead of escalating blind.
Let's talk
I'm looking for a product marketing, marketing technology or GTM program role where strategy and systems meet.