Home › Blog › Stop AI From Hallucinating Your Personalization
One hallucinated 'loved your recent post about X' to someone who never posted about X costs more trust than a hundred generic emails. The fix is architectural: crawl real pages, extract quoted evidence with source URLs, require an insufficient-evidence fallback, and only then let the model write one grounded sentence. Includes the customer-review angle that personalizes from what a company's market actually says about it.

Three stages, hard boundaries: Firecrawl a targeted page set → extraction model outputs facts as {claim, quote, source URL} with a mandatory insufficient-evidence flag → writing model compresses ONE fact into one sentence and may not add anything. Reviews personalize as aggregated themes, never individual quotes. Accept the segment-level fallback on thin-evidence rows; 60-70% grounded beats 100% partly-fabricated in every honest test, because one caught hallucination costs the thread.
1 CRAWL Firecrawl: home, /about, /product,
/blog (index), /pricing
+ reviews source if local/B2B-reviewed
2 EXTRACT LLM, strict JSON:
facts: [{claim, quote, url}]
review_themes: [{theme, count}]
sufficient: true/false
3 BRANCH insufficient → fallback line
(segment-pain template, honest)
4 WRITE input = ONE selected fact/theme ONLY
"restate as one natural observation,
no additions, no flattery"
5 QA LOG line + its evidence stored side by side;
weekly sample: does the quote support
the line? override rate → prompt fixesEvery "just tell it not to make things up" attempt fails eventually because instruction-following degrades exactly when retrieval is thin, the model fills gaps, confidently, at row 4,000 of a quiet batch. Structural separation cannot degrade that way: the writer literally does not possess facts beyond the evidence payload, so its worst output is a clumsy sentence, not a false one. This is the same principle as the classifier's strict output contract and the scoring rubric's justification requirement: at volume, you trust structures, not intentions.
Separate research from writing, and make evidence a hard requirement between them. Stage 1: crawl real sources (Firecrawl-class scraping of the company site, plus reviews or posts) into clean text. Stage 2: an extraction model pulls STRUCTURED evidence, each fact with a direct quote and its source URL, and must output 'insufficient evidence' when the crawl gave nothing usable. Stage 3: the writing model receives ONLY the extracted evidence and is forbidden to add facts, producing one sentence grounded in a quote. Hallucination drops to near zero because the writer never sees an open-ended 'personalize this' instruction, only evidence to compress.
In n8n or Make: (1) input row with company domain; (2) Firecrawl crawls a targeted page set, home, about, product, blog index, pricing, NOT the whole site; (3) LLM extraction call with a strict schema: {facts: [{claim, quote, url}], sufficient: bool}; (4) branch: insufficient → template fallback line, sufficient → writing call that turns ONE fact into one natural sentence; (5) QA sample logged with evidence attached so a human can spot-check any line against its quote in seconds. Cost per lead lands in fractions of a cent with a fast model, and the crawl is the expensive part, so cache it per domain.
Because it converts personalization from generation to compression. A model asked to 'write something personal about Acme' will invent when retrieval is thin, that is what generative models do with gaps. A model asked to 'restate this quoted sentence from this URL as one observation' has nothing to invent; the failure mode collapses from confident fiction to occasional awkward phrasing, which QA catches and nobody screenshots. The quote requirement also makes every line auditable after the fact, which is what lets you run this at volume without reading every email.
Reviews (Google Maps, G2, Capterra) are gold because they say what a company's market repeatedly praises or complains about, which maps directly to pains you can serve. The non-creepy pattern: aggregate, never quote an individual reviewer. 'Noticed your customers keep mentioning response time in reviews' reads as market awareness; quoting Karen's 2-star review reads as surveillance. Extract THEMES across 10+ reviews (the same extraction-with-evidence pipeline works, quotes stay internal for QA), reference the theme, and connect it to your offer in the same sentence.
Whenever evidence is thin, and it fires more than people expect: minimal websites, stale blogs, companies with no review footprint. The fallback is a segment-relevant line ('Most [niche] teams we talk to are fighting [known segment pain]') that is honest and safe rather than fake-specific. Accepting the fallback on 30-40% of rows is the discipline that keeps the other 60-70% trustworthy, and campaigns run this way outperform 100%-personalized-with-hallucinations every time we have measured it, because one caught fabrication poisons the whole thread.
Prewarmed Inboxes So You Can Send Cold Emails Today
Get Prewarmed & Fresh InboxesGoogle, Microsoft 365 and Azure inboxes with free prewarmed domains and DNS configured before you log in. Prewarmed inboxes send the day they land; every order is delivered within 48 to 72 hours.
Get Prewarmed & Fresh Inboxes