MarTech / RevOps · Funnel Config Linter

Funnelguard

Your funnel is lying to you. Catch it at config time — not at the QBR.

Buyer & pain

RevOps Manager / GTM Engineering Lead / Marketing Ops Director — attribution rot enters at build time (bad UTM tag, form with no workflow, lifecycle-stage action that demotes existing Customers to Lead) and surfaces months later as corrupted QBR data. Bizible and Dreamdata show the damage after the fact. Nobody enforces taxonomy at form-build and ad-build time.

Problem

A blog ad goes live with utm_medium=cpc instead of organic. A Support Ticket form quietly resets Customer-stage contacts to Lead, re-enrolling them in lead-acquisition nurture sequences. A form ID mismatch means the Re-Engage workflow has never enrolled a single contact from the Exit Intent popup. These aren't edge cases — they're the actual class of mistakes RevOps teams inherit.

Before

The Q2 channel ROI report counts organic blog sessions as paid-search clicks. 7 existing customers are receiving "start your free trial" emails. 14 MQLs have no owner assignment and are going cold. The QBR is a meeting where nobody trusts the numbers.

After

Critical: 6 | Warning: 9 | Info: 1 — Funnelguard scans the synthetic Acme Corp Q2 config and surfaces 16 findings: the blog UTM collision, the Support Ticket lifecycle downgrade, the 14 unowned MQLs, the form-ID mismatch, and more — each with an exact, actionable fix in practitioner voice.

What the 30-second demo proves

  1. Lifecycle systems ownership — FG-012 (7 customers in Lead Nurture Q2) is the tell: this finding is only alarming if you know what lead nurture enrollment does to a customer relationship. That's owned-the-system knowledge, not API knowledge.
  2. Attribution at the config layer — FG-002 flags a UTM medium taxonomy collision; not "link is broken" but "this will misattribute organic as paid-search in GA4 and every connected attribution model."
  3. Operationalized quality gates — each finding has an exact fix naming the field, workflow, and corrective action a HubSpot admin would recognize.
  4. Deterministic, auditable rules — each rule is a pure TypeScript function; no LLM, no API, no guessing. Same config, same findings, every run.

How it works

  1. Scenario selector — three synthetic funnel configs load pre-scanned: Acme Corp Q2 (default), SaaS Post-Series A, E-Commerce Brand.
  2. Rule engine runs client-side — 12 rule functions across 4 categories (UTM Integrity, Form Binding, Lifecycle Logic, Attribution Gap) evaluate the JSON config in under 200ms.
  3. Findings ledger — 4px severity-border rows with finding ID in mono, practitioner-voice headline, detail, fix, and affected-object cross-links. Filter by severity or category; count updates live.
  4. Config viewer — collapsible structured JSON inspector shows every scanned object. Clicking an affected-object reference in a finding highlights the corresponding config entry.

Integration surface

Static Astro site. All rules are client-side TypeScript pure functions — no backend, no HubSpot API, no real CRM data. The rule engine is typed and composable; each rule has a clear signature a team could extend. Deploys as a Cloudflare Pages subpath.

Skills proven

Roles this maps to

Try the live demo → dallascrilley.com