Growth & Marketing AI
Scoring Buyer Personas With the Same Feedback Loop as Account-Level ICP Fit
Result:
A persona model that scores every contact at a fit account against an authored role/seniority hypothesis, then re-weights that score with real engagement data, so the specific person opening emails and attending demos outranks whoever merely holds the expected title.
Problem#
A dynamic ICP model answers which company to pursue. It doesn’t answer which person at that company to reach. A fit account might list fifty contacts in the CRM with no signal about which one responds to outreach, opens an email, or shows up to a demo, so the default is guessing from title alone: reach the VP, skip the manager. That’s the same failure mode as a static ICP tag, a label authored once and trusted forever, just one level down. A title says what someone’s role is supposed to be, not whether they’re the one engaging.
Pattern#
Treat the persona the same way as the account-level ICP: data with a feedback loop, scored per contact instead of per company.
- Store the hypothesis as a row. A
personatable holds the authored criteria (role category, seniority band, department) as structured, queryable data, the same shape as theicptable it sits beside. - Score every contact against it. A derived view scores each person 0-1 against each persona row’s criteria, turning “is this a director-level marketing contact” into a number instead of a CRM field someone filled in once.
- Blend the score with what’s really happening. A weighted moving average pulls in each contact’s live engagement events (email opens, meetings accepted, content downloaded, demos attended), so recent behavior counts for more than the title on their business card. A VP who never opens an email gets re-weighted down even as their title stays the same.
- Surface the gap between the label and reality. For each authored persona, show percent engaging and which contacts are driving that number, refreshed on a schedule so the “actual” side never goes stale.
- Rank emergent contacts too, independent of the authored personas. The same engagement data, cut without regard to persona tier, surfaces whichever contacts are responding right now, even ones nobody tagged as the target persona. When a hands-on manager outranks the VP nobody’s heard from, the outreach plan should follow the data, not the org chart.
Data requirements#
Two tables need to already exist and be populated before this produces anything real:
- Contacts: one row per individual person, tied to an account, with the fields a persona hypothesis gets scored against (title, department, seniority signal).
- Engagement events: timestamped, tied to a contact, at whatever granularity matters (email open, meeting accepted, content download, demo attended).
Example prompts#
Feed these to Claude Code once the tables above exist, one per step of the pattern:
- “Write a Postgres migration for a
personatable storing authored persona hypotheses: role category, seniority band, department, one row per archetype.” - “Write a view
persona_fit_scorethat joinscontactstopersonaand scores each contact 0-1 against every persona row’s criteria.” - “Add a materialized view that blends
persona_fit_scorewith a weighted moving average ofengagement_eventsper contact, weighting the last N days more heavily than older data.” - “Set up a pg_cron job against that materialized view, refreshed on whatever cadence matches how often engagement events land.”
- “Write a query that ranks contacts by engagement alone, no persona tier, and diffs it against the authored personas to surface contacts responding without being tagged the target persona.”
Output#
Score contacts this way and outreach stops defaulting to title alone. A rep working a fit account
gets pointed at whoever is opening emails and attending demos, even when that person
isn’t the title the authored persona expected, and the model flags it automatically instead of the
rep discovering it three calls in. Wired into the roster-intelligence MCP
server’s list_personas tool, that ranked list becomes
something an SME can just ask for by account name.
Variations#
- The engagement events worth weighting depend on the funnel: a self-serve product should weight product usage over email opens; a long sales cycle should weight meeting attendance more heavily.
- The match threshold for “does this contact count toward this persona’s score” is a tuning knob, the same way it is for the account-level model: tighter thresholds cut false positives but shrink the sample the scorecard is built on.
- The same shape catches a departing champion early: filter the scorecard to one contact and alert on a sustained drop in engagement, before a deal quietly stalls because the person driving it changed roles.