---
ref: workflow:ad-persona-panel
title: Test ad drafts against your buyer personas before you spend
author: thedogwiththedataonit
tools: [tool:typesafe/answer-typed-questions, tool:notion/create-page]
tags: [capability:classify-signals, capability:manage-docs, has:api, motion:content]
updated: 2026-09-29
---

# 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" claims
- `channel`: where the ads will run, e.g. LinkedIn feed
- `min_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 it
- `report_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.

```json
{ "mcpServers": { "notion": { "url": "https://mcp.notion.com/mcp" } } }
```

Call the MCP tool `notion-create-pages`.

#### CLI (official)

Install the command, then confirm it runs.

```sh
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

1. **Ask the panel** with Answer typed questions (TypeSafe AI). For each pair of a draft and a persona, send the persona's description, `channel` and the draft as the state, with a noul `stops` (this person would stop scrolling for it), a noul `understands_offer` (after one read they could say what is offered), a noul `believes_claim` (they would believe the main claim) and a noul `feels_like_them` (it speaks to their situation). Keep the four probabilities for every pair.
2. **Rank the drafts** yourself. Show the user the pairs whose `stops` or `understands_offer` is unsure, and keep what the user decides. For each persona, rank the drafts by `stops`, breaking ties by `understands_offer`. Mark the drafts whose `stops` is no for every persona to cut, and the ones whose `stops` is yes while `understands_offer` is no to rewrite.
3. **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.
