Test ad drafts against your buyer personas before you spend
Asks Jev whether each buyer persona would stop for, understand and believe each ad draft, ranks the drafts, and saves the grid in Notion.
Outcome
A grid of every ad draft against every persona, with the probability that the persona stops, understands the offer and believes the claim.
The drafts ranked for each persona, with the ones no persona would stop for marked to cut and the ones that stop people without making the offer clear marked to rewrite.
A Notion page with the grid and the ranking.
How it works
- 1
Ask the panel
TypeSafe AIFor each pair of a draft and a persona, send the persona's description,
channeland the draft as the state, with a noulstops(this person would stop scrolling for it), a noulunderstands_offer(after one read they could say what is offered), a noulbelieves_claim(they would believe the main claim) and a noulfeels_like_them(it speaks to their situation). Keep the four probabilities for every pair. - 2
Rank the drafts
Your agentShow the user the pairs whose
stopsorunderstands_offeris unsure, and keep what the user decides. For each persona, rank the drafts bystops, breaking ties byunderstands_offer. Mark the drafts whosestopsis no for every persona to cut, and the ones whosestopsis yes whileunderstands_offeris no to rewrite. - 3
Save the report
NotionAfter the user approves, create a page under
report_parent, found with a read-only Notion search, with the grid, the ranking for each persona and the drafts to cut.
You'll be asked for
The ads to test, each with a short name, its headline and its body
e.g. speed: "Launch campaigns in minutes"; proof: "How Globex cut churn 18%"
Your buyer personas, each a few lines on who they are, what they care about and what they are tired of hearing
e.g. ops_lead: runs sales operations at a 200-person company, measured on forecast accuracy, ignores "AI-powered" claims
Where the ads will run
e.g. LinkedIn feed
How sure Jev must be before its answer is used without you
e.g. 0.8; a yes-or-no answer counts as yes at or above it and as no at or below 1 minus it
The Notion page the report goes under, by name
e.g. Ad tests
The file your agent runs
ad-persona-panel.md
Test ad drafts against your buyer personas before you spend
Asks Jev whether each buyer persona would stop for, understand and believe each ad draft, ranks the drafts, and saves the grid in Notion.
Set up the tools below, then run the steps in order for the user, carrying each step's results into the next. The run is done when the user has the outcome below.
Outcome
- A grid of every ad draft against every persona, with the probability that the persona stops, understands the offer and believes the claim.
- The drafts ranked for each persona, with the ones no persona would stop for marked to cut and the ones that stop people without making the offer clear marked to rewrite.
- A Notion page with the grid and the ranking.
Inputs
Ask the user for these before you start.
ad_drafts: the ads to test, each with a short name, its headline and its body, e.g. speed: "Launch campaigns in minutes"; proof: "How Globex cut churn 18%"personas: your buyer personas, each a few lines on who they are, what they care about and what they are tired of hearing, e.g. ops_lead: runs sales operations at a 200-person company, measured on forecast accuracy, ignores "AI-powered" claimschannel: where the ads will run, e.g. LinkedIn feedmin_confidence: how sure Jev must be before its answer is used without you, e.g. 0.8; a yes-or-no answer counts as yes at or above it and as no at or below 1 minus itreport_parent: the Notion page the report goes under, by name, e.g. Ad tests
Set up
Answer typed questions (TypeSafe AI, tool:typesafe/answer-typed-questions)
Use the API.
- Base URL: https://api.typesafe.ai
- Endpoint:
POST /v1/systemone - Auth: send the header
Authorization: Bearer $TYPESAFE_API_KEY - Get a key: https://console.typesafe.ai
Note: Put every question about one record in one request. GET /v1/models lists the models and is the cheapest check of a key; a request over the rate limit gets a 429 with a Retry-After header.
Note: Send state, model (jev-latest) and named questions, each with type, instructions and criteria: a choice maps labels to descriptions, a score lists its levels in order, a noul's is optional. Read a score by its most likely level; send unsure answers to a person.
Create a page (Notion, tool:notion/create-page)
Use the first option your agent supports.
Note: To add a row to a database, set the parent to its data source and match that data source's property schema.
MCP (official, remote)
Add this server to your agent's MCP settings, then sign in when asked.
{ "mcpServers": { "notion": { "url": "https://mcp.notion.com/mcp" } } }
Call the MCP tool notion-create-pages.
CLI (official)
Install the command, then confirm it runs.
npm install --global ntn
ntn --version
Run ntn api v1/pages.
Set $NOTION_API_TOKEN in your environment first (get a key: https://www.notion.so/developers/tokens).
Before step 1, confirm access to each service with its cheapest read-only call, like a list or a search. Never send or change anything to test access.
Steps
- Ask the panel with Answer typed questions (TypeSafe AI). For each pair of a draft and a persona, send the persona's description,
channeland the draft as the state, with a noulstops(this person would stop scrolling for it), a noulunderstands_offer(after one read they could say what is offered), a noulbelieves_claim(they would believe the main claim) and a noulfeels_like_them(it speaks to their situation). Keep the four probabilities for every pair. - Rank the drafts yourself. Show the user the pairs whose
stopsorunderstands_offeris unsure, and keep what the user decides. For each persona, rank the drafts bystops, breaking ties byunderstands_offer. Mark the drafts whosestopsis no for every persona to cut, and the ones whosestopsis yes whileunderstands_offeris no to rewrite. - Save the report with Create a page (Notion). After the user approves, create a page under
report_parent, found with a read-only Notion search, with the grid, the ranking for each persona and the drafts to cut.
Notes
The panel narrows the drafts before you spend on them; it does not replace a live test. Spend on the drafts that rank well for the persona you are buying, and use the live results to rewrite the persona descriptions, since those descriptions are what Jev judges against.
Each draft-and-persona pair is one request with four questions, so a grid of 20 drafts and 5 personas is 100 requests.
Rules
- Use only the services set up above. The read-only calls they need, like listing ids or polling for results, are fine.
- Ask the user before anything that sends messages, costs money, or changes data, and say how many records it touches. One approval covers a batch the user has seen.
- Never print API keys.
