Writing Research Prompts
Outcome: a research prompt that returns a valid, consistent value on every row, tested against a labelled set you built yourself.
- Surface
- Sync GTM app and MCP server
- Level
- Beginner
- Uses
- AI research agent
- Credits
- ~10 across several test iterations
- Prerequisite
- Lesson 05
The six parts
Every reliable research prompt has these, in this order. Missing any one produces a specific, predictable failure.
Context
What the row is. Company name, domain, anything relevant you already hold.
Missing it: the agent researches the wrong company.
The question — exactly one
If the word “and” appears in your question, it is two columns.
Missing it: answers that address one part and ignore the other, inconsistently.
The source instruction
Where to look. “Using their website at {{domain}}” or “Using their careers page”.
Missing it: answers from the model’s memory, which may be years old.
The output format
The allowed values, listed explicitly, or a word limit.
Missing it: prose you cannot filter on.
The abstain instruction
“If you cannot determine this from the source, answer Unknown.”
Missing it: confident guesses indistinguishable from findings. This is the most important line in the prompt.
The suppression instruction
“Return the value only. No explanation, no preamble.”
Missing it: “Based on my analysis of their website, it appears that…” in every cell.
A template
Company: {{company_name}}
Website: {{domain}}
Using the company's website, determine whether they sell primarily to
businesses or to consumers.
Answer with exactly one of: B2B, B2C, Both, Unknown.
Use Unknown if the website does not make this clear.
Return the value only, with no explanation.Six parts, ten lines, and it will outperform a paragraph of instructions almost every time.
Constrained beats open, always
| Open | Constrained |
|---|---|
| ”What does this company do?" | "What is their primary product category? Answer in three words or fewer." |
| "Who are their customers?" | "Which segment do their case studies target? Answer: SMB, Mid-market, Enterprise, Mixed, Unknown." |
| "Are they growing?" | "Do they list more than 10 open roles? Answer: Yes, No, Unknown.” |
Constrained answers can be filtered, sorted, scored and counted. Open answers can only be read by a person, which defeats the purpose of running them 5,000 times.
If you genuinely need colour for a message, take two columns: a constrained value you filter on, and a one-sentence evidence field you quote from. Do not try to get both out of one column — you will get neither reliably.
The abstain instruction
The single highest-leverage line in any research prompt, and the one people leave out.
Without it, a model asked an unanswerable question produces an answer, because that is what it does. With it, you get a value that means “no evidence” — and a rate you can watch.
Read the Unknown rate on every run:
| Unknown rate | Reading |
|---|---|
| 0% | Broken. The abstain path is not firing. |
| Under 10% | Either an easy question or a suspiciously confident model — spot-check |
| 10–30% | Healthy for a real question |
| Over 40% | The source cannot answer it. Change the source or the question. |
Testing properly
Build a labelled set
Twenty rows where you know the answer. Include hard cases and at least three where the answer genuinely is not available.
Run and score
Correct, incorrect, unknown. Score the unavailable rows as correct only if they returned Unknown.
Change one thing
One prompt element per iteration, against the same twenty rows. Changing three things tells you nothing about which helped.
Stop at 90%
Above 90% correct with a plausible unknown rate is usable. Chasing 99% on a research column is not worth the iterations.
Five rewrites that fix most failures
| Symptom | Rewrite |
|---|---|
| Wrong company | Add the domain to the context block |
| Verbose answers | Add “Return the value only” and a word limit |
| Inconsistent values | List the allowed values explicitly; the model is inventing categories |
| Never says Unknown | Move the abstain line directly after the question, and give an example of when to use it |
| Right answer, wrong format | Show the exact output shape rather than describing it |
Do this now
- Take the question from lesson 05 and rewrite it into the six-part structure.
- Build a 20-row labelled set, including three unanswerable cases.
- Run and score. Note the unknown rate.
- Change one element. Re-run the same twenty. Compare.
- Repeat until above 90% correct with a sane unknown rate.
- Save the final prompt somewhere reusable — a prompt that works is an asset, and it will be needed again next quarter.
Check your work
- Your prompt has all six parts
- You tested against rows you labelled yourself
- Unknown appears in the output at a plausible rate
- Every answer is one of the allowed values
- The prompt is saved somewhere you will find it
Where this breaks
Tuning a prompt against rows you have not labelled is self-deception. Output that looks reasonable is not evidence of accuracy — a fluent wrong answer looks exactly like a fluent right one, and you cannot tell them apart by reading. The labelled set is the whole test. Twenty rows takes twenty minutes and it is the only thing standing between you and a column of confident fiction.
Further automation
Keep a prompt library with each prompt’s tested accuracy and unknown rate beside it. When you reuse one on a new segment, re-run the twenty-row test — accuracy is a property of the prompt and the data, and a prompt validated on enterprise SaaS can fail badly on local business.
Next lesson
07 — Structuring the output, turning validated answers into fields the rest of your pipeline can use.
Reference for this lesson: AI agents, Research, AI integrations, Anthropic.