A QA layer your AI sales agent runs before it sends.
ChatGPT rewrites. Sales Message QA judges. One message in — a structured verdict out: score, confidence, failure modes, risk flags, a rewrite, and a machine-readable send / no-send decision.
1 credit = 1 successful audit · from $2.25 per audit · down to $0.19 per audit at Scale volume · Enterprise: Custom pricing
Paste the URL into Claude Code and say: "Read this spec and use it to audit my outbound before sending."
The problem
Agents write outbound faster than anyone can review it.
The failures that kill replies aren't typos. They're sales-logic defects — no trigger, fake personalization, a CTA that doesn't fit the relationship. A grammar pass never catches them.
What it checks
Ten dimensions of message quality
Every submission is scored across the things that actually determine whether a buyer replies.
Does the message map to this persona's real priorities?
Is there a timely reason to reach out — or none?
Is the problem concrete, or vague 'efficiency' filler?
Is the outcome quantified, or a restated feature?
Is there a proof point, or an unbacked claim?
Is the ask sized to the relationship and easy to act on?
Real signal, or surface-level name-dropping?
Does the register match the channel and the buyer?
Does every sentence earn its place?
Any phrasing that creates exposure?
Input & output
One message in. Structured QA out.
Agents need to know exactly what they submit and exactly what they get back. No prose blob — a typed object your code can branch on.
Example input
{
"message_text": "Hi Jordan — saw you're scaling the SDR team at Northwind. We help RevOps teams cut manual list-building. Open to a 15-min call Thursday?",
"channel": "email",
"target_persona": "VP of Sales / RevOps lead",
"product_context": "Outbound data enrichment for B2B sales teams",
"desired_outcome": "book_meeting"
}Example output
{
"score": 74,
"confidence_score": 0.86,
"verdict": "revise_before_sending",
"failure_modes": [
{
"type": "fake_personalization",
"severity": "medium",
"detail": "Opening references a public fact ('scaling the SDR team') with no specific trigger or insight."
},
{
"type": "weak_value_clarity",
"severity": "low",
"detail": "'Cut manual list-building' is a feature, not a quantified outcome."
}
],
"risk_flags": [
{
"type": "unverified_claim",
"severity": "low",
"detail": "No proof point backs the implied efficiency gain."
}
],
"rewrite": "Hi Jordan — Northwind posted 4 new SDR roles this month. Teams scaling outbound that fast usually lose hours to manual list-building. We cut that to near-zero for RevOps leads like you. Worth 15 minutes Thursday to see if it fits?",
"agent_instruction": "Do not send as-is. Apply the rewrite or strengthen the trigger and add one quantified proof point, then re-run QA.",
"agent_next_action": "revise_message_before_sending"
}Differentiation
Why not just ask ChatGPT?
Because a rewrite is not a decision. A general model hands you new copy and no way to know if it's better. This service returns a judgment your agent can act on automatically.
Returns new copy, every time.
No score, no verdict, no confidence.
No way to gate a send programmatically.
You still don't know if it's good enough.
Judges: score + confidence + verdict.
Names failure modes and risk flags separately.
Returns a rewrite and an agent instruction.
Emits agent_next_action for send / no-send.
What it catches
The failure modes behind dead outbound
Reads fine, says nothing, gives no reason to reply.
No event or insight justifies the message today.
A scraped fact dressed up as research.
The ask is too big, too vague, or wrong for the stage.
A generic pain reworded to sound specific.
Bold claims with nothing to back them up.
Patterns and phrasing that read as machine-generated.
Tone or claims that create exposure for the sender.
Pricing
Credits, not seats.
One credit is consumed per successful audit — a failed audit costs nothing. The more messages your agent puts through QA, the lower the price per audit: $2.25 per audit at the entry point, down to $0.19 per audit on Scale. Enterprise is custom pricing — talk to us.
$2.25 per audit
No commitment and no API key — buy one credit and audit one message through the one-time token path.
Request access$0.19 per audit
Automation that personalises every message and wants the QA layer to review all of them.
Request access- ·A credit is consumed only by a successful audit. Failed audits (AI or schema failure) do not consume a credit.
- ·Prepaid pack credits do not expire monthly; unused credits persist until the pack expires 12 months from purchase.
- ·Enterprise annual contracts may define their own rollover terms as part of the custom agreement.
- ·Overage bills at the next published tier's per-credit rate, never at a penalty rate; beyond the top published tier (Scale, $0.19 per audit) overage is handled under a custom Enterprise agreement.
- ·Buying more credits at any time re-rates the account to the best tier its cumulative 30-day volume qualifies for.
- ·A per-key monthly spend cap is supported; exceeding it returns 402 with agent_next_action "spend_cap_reached".
Scope
What this is not
Honest boundaries so agents and evaluators can route correctly.
- ×Not a legal or compliance review
- ×Not deliverability or spam-placement testing
- ×No guaranteed reply, open, or conversion rate
- ×Not suitable for regulated claims requiring formal sign-off
For machines
Built to be read by agents, not just people
The full service definition — schemas, limitations, purchase flow — is published as structured data.
Give your sales agent a QA layer before it touches pipeline.
We're onboarding a small set of beta users. Request access and we'll evaluate your messages manually while the service is in static beta preview — no instant delivery yet.
spec_version 0.3.0 · private_beta · beta@salesmessageqa.dev