RevOps Automation Demo · built for the application

CoinGecko RevOps — I built the automations, not just the deck

The JD names Zapier, n8n, Claude, Gemini, Apps Script and "agentic" routing. So I built three of them against a realistic crypto-API pipeline. Each runs two ways: zero-infra on a Google Sheet today, or live on HubSpot. Code is on the repo; this page is the tour.

HubSpotn8nClaudeGoogle Apps Script15 sample deals · 8 leads ← back to the full RevOps teardown
01

Stale-deal & data-hygiene detector

JD: Data Integrity · Pipeline

Runs each weekday: flags deals missing an owner or amount, and deals that have gone quiet past a per-stage threshold (New 7d · Qualified 14d · Proposal 21d · Negotiation 30d), then nudges the owner in Slack. Kills the leaks that silently corrupt the forecast.

Sample output (from the 15 demo deals)
DEALSTAGEISSUE
Veritas FundProposalstale 48d
Wallet9Proposalstale 52d
BlockMetricsQualifiedstale 31d · no owner
Meridian DAOQualifiedno owner · no amount
ChainScopeQualifiedstale 16d
// the rule, identical in Apps Script & n8n
const staleDays = { New:7, Qualified:14,
                   Proposal:21, Negotiation:30 };
for (const d of deals) {
  const issues = [];
  if (!d.owner)  issues.push('missing owner');
  if (!d.amount) issues.push('missing amount');
  const days = daysSince(d.last_activity);
  const th = staleDays[d.stage];
  if (th && days > th)
    issues.push(`stale: ${days}d in ${d.stage}`);
  if (issues.length) nudgeOwner(d, issues);
}
02

Agentic lead router

JD: Lead Management — "agentic routing"
// transparent score → capacity-aware assignment
let s = 0;
s += emp>=500?35: emp>=100?25: emp>=25?15:5;
if (['Institutional','Exchange','Fund']
      .includes(seg)) s += 25;
s += /booked a call|redistribution/.test(sig)?25:10;

// only reps with spare capacity + segment/region fit
let pool = reps.filter(r =>
  r.segments.includes(seg) &&
  load[r.name] < r.capacity);
pool.sort(byMostSpareCapacity);
const rep = pool[0]?.name ?? 'escalate';

Each inbound lead gets a transparent 0–100 score (size · segment · intent · source), then is assigned to the best-fit rep who still has capacity — so high-intent institutional leads get a 15-minute first-touch SLA and nobody gets overloaded. The score is plain code; an LLM only labels ambiguous cases.

Sample routing (from the 8 demo leads)
LEADSCORE→ REPSLA
Northwind Asset Mgmt85Aisha15 min
Castell Securities85Priya15 min
Stratos Exchange85Aisha15 min
Petal Wallet23Marcus1 day
03

AI weekly pipeline digest

JD: Revenue Analytics — "AI-assisted insights to leadership"

Every Monday, aggregate the pipeline into metrics (never raw rows — no PII, no hallucinated deals), hand them to Claude, and post a tight, human-approved digest to leadership. It writes the "so what," which is the part leadership actually reads.

// model sees aggregates only
{ open_pipeline_usd: 941400,
  target_usd: 600000, coverage_ratio: 1.57,
  pipeline_by_stage: { Proposal:331600,
    Negotiation:488000, ... },
  stale_deals: 5, deals_missing_fields: 2 }
📊 Claude's draft (sample)

Healthy on volume (1.57× coverage) — quality is the risk, not quantity.

  • $331.6k of Proposal pipeline is aging — 3 of 5 stale deals sit there; proposals are stalling after send.
  • $488k concentrated in Negotiation across 4 institutional deals — strong, but single-rep concentration risk on Priya.
  • 2 deals missing owner/amount will distort the forecast until fixed.
Top 3 actions
  1. AE Re-engage the 5 stale deals, Proposal-stage first.
  2. RevOps Require owner + amount at Qualified to stop forecast leakage.
  3. Leadership Rebalance Negotiation concentration on Priya.
Why it's built this way
Deterministic where it counts. Scoring & assignment are auditable code — an LLM can't silently overload a rep or drop a lead. The model only labels and narrates.
No raw data to the model. The digest is built from aggregated metrics only — no PII, no invented deals.
Human-in-the-loop. Claude drafts; a person approves before it reaches leadership. Same rules in Apps Script and n8n.

Prepared by Edward Tay · for the CoinGecko Revenue Operations Associate (L2) role · Jun 2026 · edwardtay.com · Edwardtay7@gmail.com · sample data is synthetic.