Your reply rate dropped. You read another best-practices post. You still do not know which exact phrases in your last campaign tripped the filter. Here is a 35-line Python linter that flags every one of them before send, with the actual list we use on every cold email that goes out of our own sales agent.
The banned set: delve, hone, garner, leverage, unlock, unleash, dive in, paradigm, plus an em-dash check, plus a passive "we should / we need" scan, plus a sign-off check, plus a word-count cap. Run it on every draft. Anything that fails, rewrite.
How it works (60-second demo)
import re
BANNED_WORDS = [
"delve", "hone", "garner", "leverage",
"unlock", "unleash", "dive in", "paradigm",
"robust", "synergy", "seamless", "transformative",
"best practices",
]
PASSIVE_PATTERNS = [r"\bwe should\b", r"\bwe need to\b", r"\bit would be\b"]
WORD_CAP = 150
REQUIRED_SIGNOFF = "cheers, christine"
def lint(text: str) -> dict:
issues = []
lower = text.lower()
for word in BANNED_WORDS:
if word in lower:
issues.append(f"C1: banned word: {word!r}")
if "—" in text or " -- " in text:
issues.append("C2: em-dash detected")
for pat in PASSIVE_PATTERNS:
if re.search(pat, lower):
issues.append(f"C3: passive frame: {pat!r}")
if "50%" in text or "fifty percent" in lower or "rev share" in lower or "revenue share" in lower:
issues.append("C4: rev-share mention triggers spam scoring")
wc = len(re.findall(r"\b\w+\b", text))
if wc > WORD_CAP:
issues.append(f"C5: {wc} words exceeds {WORD_CAP}-word cap")
if REQUIRED_SIGNOFF not in lower:
issues.append(f"C6: missing sign-off {REQUIRED_SIGNOFF!r}")
return {"ok": len(issues) == 0, "issues": issues, "word_count": wc}
if __name__ == "__main__":
draft = """Hey Sam,
Saw your post on warehouse robotics. We should leverage AI to unlock margin.
Worth 20 minutes to explore?
Cheers, Christine"""
print(lint(draft))
What is inside
- Banned-words list (C1): the 13 phrases that show up in 80% of AI-drafted cold email and instantly read as boilerplate. Replace each with a concrete verb.
- Em-dash check (C2): AI drafts em-dashes constantly. Human writers rarely do. Flag and rewrite as a comma, semicolon, or period.
- Passive frame check (C3): "we should / we need to / it would be" reads as committee writing. Rewrite in the second person, naming a specific action.
- Rev-share trigger (C4): any mention of 50%, "rev share", or "revenue share" tanks spam scores on cold outreach. Move the offer into the body, not the subject or opener.
- Word cap (C5): 150 words for a cold email. Christine's own sent-folder average is 54 words to clients, 66 to cold prospects. Long emails do not convert.
- Sign-off check (C6): every outbound email closes with "Cheers, Christine" (or your own consistent sign-off). Missing sign-off reads as a templated blast.
- Return shape:
{"ok": bool, "issues": [strings], "word_count": int}. Wireok=Falseto block the send in your outreach pipeline.
See how it composes
This is the linter that runs pre-send on every email out of the OperatorIQ outreach agent. Compose it with L2_create_landing_page ($147) to lint the on-page copy too, or wire it into the Outreach Closer setup ($497) which gives you the linter plus the full per-prospect personalization chain plus the inbox watcher that flags replies in real time.
Or if you want the agent running autonomously (sourcing leads, drafting personalized emails, linting, sending, watching for replies, handing warm conversations back to you) for $1,997, see the Concierge tier.
Cheers,
Christine