// gtm engineer · san francisco

Henry Marble.
I build the systems
behind GTM motions.

Former SDR turned GTM Engineer with 5 years at Cloudflare and Pave. I know where GTM systems break because I lived it: bad routing, cold Tier 1 inbounds, sequence data that never reaches revenue outcomes, scoring tools reps ignore because they can’t explain the number, handoffs that drop context. My build philosophy: lower every barrier between a rep and their next best action, and give managers the insight to coach on specifics rather than gut feel.

Salesforce HubSpot n8n Clay SQL Python / Pandas

// beacon — gtm intelligence platform

Five modules, each targeting a distinct failure point in outbound sales operations. One shared data layer. One MCP server.

Loop Sequence-to-revenue attribution and rewrite engine
live

Closes the attribution gap Outreach explicitly admits exists: no step-level meeting attribution. Ingests sequence data from Outreach and Salesloft, maps it to Salesforce pipeline outcomes at the step level, diagnoses failure modes in underperforming steps, and generates persona-aware LLM rewrite recommendations. Includes "Ask Beacon" for natural language analytics with streaming responses and auto-generated charts.

What's built: Position-adjusted Bayesian attribution model with U-shaped multi-touch credit allocation · step intent classifier (6 types) with intent-specific thresholds · 5-module classifier pipeline with RewriteEngine deep module and LLMClient Protocol abstraction · 34KB messaging intelligence knowledge base · 6-tool FastMCP server (Railway, SSE) · Next.js dashboard with 7 views, 3 role personas (Manager, RevOps, Rep), streaming Ask Beacon, and interactive rewrite drawer · 9 Supabase migrations · test suite with boundary tests and canned LLM client

Python Pandas Outreach API Salesloft API Salesforce API Claude API Supabase FastMCP Next.js TypeScript Recharts Railway Vercel
Intel Product knowledge MCP server and Slack bot
live

MCP server giving GTM reps instant access to product knowledge, objection handling, and competitive intel from any interface they already use. The server is the product; channels are wrappers.

What's built: FastMCP server with ask_product tool · PostHog knowledge base (objections, competitors, personas, pricing) · llm.py provider abstraction (Anthropic, OpenAI, Gemini) · ingest.py pipeline · Slack bot with gap logging to Notion · Railway / Docker deployment

Python FastMCP Claude API Slack API Docker Railway
Signal Weighted scoring engine for rep signal prioritization
wip

Rep signal prioritization engine. Configurable weighted scoring across multi-source account signals with plain-English reasoning per score. Built for teams too small for 6sense but drowning in intent noise.

In development: Configurable weighted scoring model · signal ingestion adapters (intent, job change, product usage, CRM activity) · time decay functions · Claude API plain-English reasoning layer · prioritized account list UI

Python Pandas Salesforce API Claude API Supabase Next.js FastMCP
Graph Account hierarchy normalization
planned

Account hierarchy normalization engine. Ingests hierarchy data from multiple sources, resolves conflicts, flags discrepancies, and produces a clean sellable account structure.

What's planned: Multi-source ingestion (SEC EDGAR, OpenCorporates, CRM) · probabilistic entity resolution via Splink · conflict detection and confidence scoring · clean hierarchy output with source attribution · Claude API disambiguation layer

Python Splink SEC EDGAR Salesforce API Claude API Supabase NetworkX
Pair AE/SDR pairing intelligence and shared timeline
planned

AE/SDR pairing intelligence layer. Unified account-level touchpoint timeline across both reps, pre-inbound attribution surfacing, and pairing-level messaging performance.

What's planned: Unified touchpoint timeline (Outreach + Salesforce) · pre-inbound attribution detection with configurable lookback window · dead messaging flagging · shared account book view · pairing performance analysis via Loop data layer

Python Outreach API Salesforce API Claude API Supabase Next.js FastMCP

// plays

End-to-end workflows built with real tools, real APIs, and real world scenarios.

01 Inbound Synthesis Engine
live

Signal-to-rep middleware that unifies first-party and third-party intent signals into account-level scoring and surfaces the synthesis inside the rep's existing workflow. n8n execution layer, Supabase unified ledger, Slack Block Kit delivery surface.

n8n Supabase Slack API Claude API Salesforce HubSpot Marketo RB2B Signal Scoring
Inbound Synthesis — current state inbound flow
Inbound Synthesis — proposed state architecture
Inbound Synthesis — account scoring layer

Inbound fails because most systems are architected around the form-fill as the unit of scoring. Real buying intent is an account-level pattern unfolding across multiple people, properties, and weeks. The current stack can't synthesize it — so reps act on 4% of the iceberg.

Synthesis layer: Reads every observable interaction across every surface — Marketo, Salesforce, Warmly/RB2B, Bombora, G2. Rolls person-level activity up under account context, weights first-party above third-party, tracks velocity and buying committee composition.

Signal-weighted scoring model: Repeat-visit multipliers, velocity triggers, and committee composition bonuses. HOT status gated on first-party points. Every score has a "see sources" path — no black box.

Tier 1 SLA state machine: Modeled in Supabase with 60/120-minute escalation. Lead records stay in Salesforce; ephemeral Postgres handles timer state only.

Rep delivery surface: Slack Block Kit DM with 5 action buttons — Outreach, Sales Nav, Salesforce, Account Intel, Explain. Wired to the workflow that acts. Not a dashboard to open.

Signal Ingest Unified Ledger Account Scoring
Account Rail Committee pattern → best contact → Slack DM Lead Rail (parallel) MQL form-fill → existing routing
02 New Vertical Sales Planning & Execution
live

Clay enrichment workbook targeting a new vertical for a fictional Series B CLM platform. Full Find, Enrich, Transform, Export pipeline scoped to financial services accounts showing hiring and product signals.

Clay Claygent Enrichment ICP Scoring New Segment Expansion
Clausewise Clay workbook — ICP scoring view

Clausewise (fictional Series B CLM/contract management platform) wants to expand from legal into financial services. No existing account list, no ICP definition for the vertical, no signal data to prioritize outreach. The GTM team needs a repeatable enrichment pipeline, not a one-off spreadsheet.

Find: Sourced financial services accounts matching Clausewise's ICP criteria using Clay's built-in company search, filtered by industry, headcount, and funding stage.

Enrich: Claygent columns checking each account's blog for recent product announcements and careers page for open compliance/legal roles. These act as buying signals: a company hiring a Head of Legal or posting about SOX compliance is more likely to need a CLM tool.

Transform: Tiered accounts into Tier 1 (strong fit + active signals), Tier 2 (fit, weaker signals), and Tier 3 (marginal fit) using conditional logic. AI-generated personalized email openers per account referencing specific signals found during enrichment.

Export: Formatted for CRM import with all enrichment columns, tier assignment, and personalized openers ready for sequence loading.

Company Search Claygent: Blog Check Claygent: Hiring Check Tier Scoring AI Openers CRM Export
03 New Hire Signal Routing Automation
live

n8n workflow that ingests job change signals via webhook, enriches with Apollo, scores against ICP criteria, and routes to Salesforce, HubSpot, and Slack based on tier. Event-driven, dual-CRM, source-agnostic by design.

n8n Apollo API Salesforce HubSpot Slack Webhook ICP Scoring
n8n New Hire Signal Router — workflow canvas

Job change signals are one of the strongest buying triggers in B2B, but most teams either miss them or dump them into a spreadsheet. When a VP of Security starts at a new company, you have a 2-week window before they settle in. The signal needs to hit the right rep, in the right CRM, with enough context to act on immediately.

Ingest: Webhook endpoint accepts job change payloads from any source. Event-driven architecture, not polling. Source-agnostic: works with LinkedIn Sales Nav exports, Apollo alerts, or custom scrapers.

Enrich: Apollo Organization Enrichment API adds employee count, industry, HQ location, and funding data to each signal. Turns a name + title into a scored, contextualized lead.

Score: Custom ICP scoring engine in a Code node. Title seniority (10-40pts), company size (10-25pts), industry fit (10-20pts), previous company signal (15pts). Deterministic, explainable, adjustable.

Route: Three-tier Switch node. Tier 1 (70+): creates lead in Salesforce + HubSpot, DMs the assigned rep directly in Slack with score breakdown and CRM link. Tier 2 (40-69): creates lead in Salesforce + HubSpot, assigns to an SDR via segment-based round robin. Tier 3 (<40): HubSpot only for nurture. Dual-CRM write shows CRM-agnostic thinking. Create-or-Update prevents duplicates.

Webhook Apollo Enrich ICP Score
Tier 1 (70+) SFDC + HubSpot + Slack DM Tier 2 (40-69) SFDC + HubSpot + Round Robin Tier 3 (<40) HubSpot nurture only

Tier 1 signals DM the assigned rep directly with the contact name, new title, company, ICP score breakdown, and a link to the Salesforce record. No channel noise. The rep who owns the account gets the signal where they already work.

// doom inc — mock b2b security saas org

Full GTM operations stack for a fictional Series B cybersecurity company. Same org, two CRMs — demonstrating cross-platform RevOps fluency.

Salesforce GTM Org Apex, Flow Builder, lead routing, SLA enforcement
live

Full Salesforce build simulating the RevOps infrastructure of a fictional Series B security SaaS. Custom data model, lead routing, SLA enforcement, and operational reporting — the kind of system a GTM Engineer would own on day one.

What's built: 7 custom Lead fields · 6-rule routing chain (segment + persona → rep or queue) · Tier 1 SLA breach Flow · post-conversion Apex trigger with test coverage · 4 operational reports · GTM Ops dashboard · scoped permission set

Apex Flow Builder SOQL Lead Routing SLA Automation Salesforce
HubSpot GTM Org Workflows, pipeline management, lifecycle automation
live

HubSpot mirror of the DOOM Inc GTM stack — same fictional Series B security SaaS, different CRM. Built to demonstrate cross-platform RevOps fluency: contact lifecycle management, deal pipeline configuration, and automated workflows without writing a line of Apex.

What's built: Custom contact properties (ICP Fit, GTM Segment, Persona, SLA Tier) · deal pipeline with stage-gated automation · enrollment workflows for SLA breach alerting and post-conversion follow-up · active lists for segment-based reporting · operational dashboard surfacing pipeline health by segment and rep

HubSpot Workflows Pipeline Management Lead Routing SLA Automation RevOps

CRM / GTM

Salesforce Outreach Salesloft Nooks Clay ZoomInfo Cognism LinkedIn Sales Nav Pocus Marketo

Code / Data

Apex (SFDC) SOQL SQL Python Pandas Next.js TypeScript

Automation

Flow Builder Assignment Rules Apex Triggers MCP (Model Context Protocol) n8n Zapier

Dev Tools

SF CLI VS Code Git / GitHub Swift / iOS Claude Code OpenCode Ollama Qwen
Certified Salesforce Administrator
Salesforce
in progress
Splunk Search Expert
Splunk
earned
Python for Cybersecurity
UCLA Extension
earned

I've spent 5+ years working inside GTM motions — Cloudflare BDR, Pave SDR. Sequences, CRM hygiene, pipeline data, tool sprawl. I know where the systems break because I've felt it firsthand: leads routed to the wrong rep, Tier 1 inbounds sitting cold for hours, no visibility into queue depth, conversion with zero handoff.

I'm building the technical skills to fix that. Currently working through Salesforce development, GTM systems design, and shipping my own app on the side.

UC Berkeley, Anthropology. UCLA Extension, Cybersecurity Boot Camp.