Buyer Persona Generator

Synthesize qualitative interviews, sales-call notes, and product analytics into rich buyer personas with quotes, objections, and channel preferences.

Synthesize qualitative interviews, sales-call notes, and product analytics into rich buyer personas with quotes, objections, and channel preferences. Strategy consultants charge $40k for one round of persona work. This agent runs continuously and refuses to make things up.

This is the whole blueprint, nothing held back: the model, the tools, the exact prompt, the source on disk, and the setup. Everything you need to run Buyer Persona Generator yourself is on this page, and it deploys in an afternoon.

What it does

Buyer Persona Generator handles the work end to end:

  • Ingest interviews, calls, tickets, reviews, and analytics into one signal store
  • Cluster signals into 1-3 distinct personas with shared traits
  • Build persona cards grounded in direct quotes and traceable sources
  • Validate that each persona has enough source diversity to be defensible

The anatomy

An agent is a composition, not a prompt: a model, the tools it is allowed to call, the integrations that give those tools reach, and the rules that keep it honest. Here is Buyer Persona Generator on one card.

Buyer Persona Generatorblueprint
Model
claude-sonnet-4-6
Tools
gather_signalscluster_personasbuild_persona_cardvalidate_persona
Integrations
Exa.aiZod
Guardrails
every claim in the persona card must trace to a source. no source = no claim.; use direct quotes wherever possible, lightly cleaned for grammar

The instructions

Every run is governed by this prompt. It is short on purpose: enough to make Buyer Persona Generator reliable, not so much that it can misread itself. Copy it as a starting point for any agent you build.

Buyer Persona Generator
You are a buyer-persona research analyst. You build personas grounded in real signals — never hallucinations or stock-photo archetypes. WORKFLOW: 1. Call gather_signals to ingest interviews, call transcripts, support tickets, and analytics. 2. Call cluster_personas to group signals into 1-3 distinct personas based on shared traits. 3. For each cluster, call build_persona_card with quotes, jobs-to-be-done, objections, channel preferences. 4. Call validate_persona to flag personas built on fewer than 3 distinct sources. RULES: - Every claim in the persona card must trace to a source. No source = no claim. - Use direct quotes wherever possible, lightly cleaned for grammar. - Refuse to invent demographics — leave the field blank if the data isn't there. - Always name 3 buying triggers and 3 disqualifiers per persona.

The source, on disk

Three files carry the whole agent: the definition with its tools, the environment it expects, and the setup. Walk them.

buyer-persona-generator/buyer-persona-generator.ts1.4 KB
1import { agent, tool } from "@agent-sdk"
2import { z } from "zod"
3
4const signalsInput = z.object({
5 sources: z.array(z.object({
6 type: z.enum(["interview", "call", "ticket", "analytics", "review"]),
7 content: z.string(),
8 sourceId: z.string(),
9 })).min(3),
10})
11
12export default agent({
13 model: "claude-sonnet-4-6",
14 permissionMode: "bypassPermissions",
15 maxTurns: 20,
16 systemPrompt: `...`, // see System Prompt section above
17 tools: {
18 gather_signals: tool({
19 description: "Ingest and normalize source material",
20 inputSchema: signalsInput,
21 execute: async ({ sources }) => {
22 // returns normalized signal store
23 },
24 }),
25 cluster_personas: tool({
26 description: "Group signals into 1-3 distinct persona clusters",
27 inputSchema: z.object({ signals: z.any() }),
28 execute: async ({ signals }) => {
29 // returns array of clusters with shared traits
30 },
31 }),
32 build_persona_card: tool({
33 description: "Build full persona card with quotes, JTBD, objections",
34 inputSchema: z.object({ cluster: z.any() }),
35 execute: async ({ cluster }) => {
36 // returns markdown persona card
37 },
38 }),
39 validate_persona: tool({
40 description: "Flag personas with insufficient source diversity",
41 inputSchema: z.object({ persona: z.any() }),
42 execute: async ({ persona }) => {
43 // returns { valid: boolean, warnings: string[] }
44 },
45 }),
46 },
47})

The business case

If you run an agency, Buyer Persona Generator is also a product. It sells into product marketing, gtm teams, ux research, and the numbers work at very small scale.

$2,400

setup you can charge

$400/mo

monthly retainer

4

jobs off your plate

Ship it

The whole install is a handful of commands and the keys from the env file. Run the list, then point Buyer Persona Generator at real work.

Deploy checklist

0 of 5

That is the entire blueprint: one model, 4 tools, and a prompt. Built by hand it costs you an afternoon. Inside Ultron it costs you a sentence, because you can build this exact agent in the workforce and watch it run before you commit to anything.

Build Buyer Persona Generator in Ultron

1
Describe what you want

Start from this blueprint or your own words. Ultron reads the intent and picks the tools.

2
It builds the agent

The model, the tools, the prompt, the console. Assembled in front of you, nothing to wire.

3
Watch it run

Test it live in the chat, then put it to work. You review what it does, it does the rest.

Keep reading