Most GTM stacks produce activity, not learning. Signal lives in one tool, execution in another, outcomes in a third — so nothing compounds and every send teaches the system nothing. This one closes the loop: it scores firms on real FDA enforcement data, contacts a queue, records what happened, and refits its own scoring model from the result.
detect → understand → act → measure → learn
│ │
│ openFDA enforcement signals │
│ grounded briefs, drafted outreach │
│ outcome recorded per contacted firm │
└──────────── weights refitted ─────────────────┘The fifth step is the one almost no revenue stack performs. Steps one to four exist in every modern GTM setup; without the fifth, the scoring model is a guess someone made once and never corrected.
The system starts at uniform weights — it knows nothing. A hidden response model decides who replies; the learner never sees it. If the loop works, the learner should recover those hidden weights from outcomes alone, and its queue should beat a randomly chosen one.
What this experiment does and does not establish. I wrote both the learner and the hidden response model, and both use the same functional form — a logistic function over the same five features. So recovering the hidden weights shows the learning machinery is implemented correctly. It does not show that real prospect replies are well predicted by five FDA-derived features; that is an assumption this experiment grants itself by construction. Read the numbers below as a passing test of the algorithm, not as evidence of go-to-market performance. The claim "1.51× lift" is only true inside the simulation, and quoting it without that sentence attached would be an overstatement.
| Cycle | Learned queue | Random control | Lift | L1 error | Outcomes seen |
|---|---|---|---|---|---|
| 1 | 40% | 25% | 1.60x | 0.692 | 40 |
| 2 | 50% | 32% | 1.54x | 1.400 | 80 |
| 3 | 35% | 38% | 0.93x | 0.610 | 120 |
| 4 | 32% | 35% | 0.93x | 0.226 | 160 |
| 5 | 42% | 35% | 1.21x | 0.157 | 200 |
| 6 | 48% | 32% | 1.46x | 0.141 | 240 |
| 7 | 42% | 25% | 1.70x | 0.253 | 280 |
| 8 | 38% | 20% | 1.88x | 0.098 | 320 |
The interesting part is the failure. At cycles 2–4 the learner has too few samples, overshoots, and its recovery error spikes to 1.40. Lift collapses to 0.93x — no better than picking at random. As evidence accumulates it converges, and lift climbs to 1.88x. Lift tracks learning, which is what you would want to see if the mechanism is real rather than decorative.
| Feature | Learned | True | Error |
|---|---|---|---|
| severity | 0.409 | 0.400 | 0.009 |
| recency | 0.305 | 0.300 | 0.005 |
| systemic | 0.101 | 0.150 | 0.049 |
| quality_flag | 0.123 | 0.100 | 0.023 |
| ongoing | 0.062 | 0.050 | 0.012 |
Top of the queue under the learned weights. Every line traces to an FDA field.
Target role: VP Quality / Head of Regulatory Affairs — no person, email, or phone is generated.
Target role: VP Quality / Head of Regulatory Affairs — no person, email, or phone is generated.
Target role: VP Quality / Head of Regulatory Affairs — no person, email, or phone is generated.
scripts/simulate_outcomes.py that the learner never imports. No real campaign has run through this system. That is the experiment, not a shortcut — it lets the learner be measured against a known answer.git clone https://github.com/Aditya-chouhan/revenue-brain-demo cd revenue-brain-demo/scripts python3 fetch_signals.py # 1,000 real openFDA enforcement records python3 run_loop.py # 8 closed-loop cycles, with control arm python3 brief.py # grounded briefs for the top of the queue python3 build_site.py # regenerate this page
Pure standard-library Python. No dependencies, no API key, no paid data, no build step. Every number on this page is regenerated by those commands.