Fact-Checking AI: A Practical System for Catching Hallucinations Before Publishing
Ivaylo
February 27, 2026
Key Takeaways:
- Define risk ratings and a blunt stop-ship publish threshold.
- Split drafts into atomic, one-sentence claims before verifying.
- Validate citations in three stages: existence, identifier, read-to-confirm.
- Use deterministic guardrails for rules, not real-world truth.
We stopped trusting “looks right” years ago. If you publish AI-written content, you need an AI fact checking system that treats every output like an unverified tip from a stranger, not a draft from a colleague.
This is the practical system we use when we want fewer AI hallucinations, fewer AI mistakes, and fewer late-night “why is Twitter dunking on us?” moments. It is not glamorous. It works.
Define your risk rating and publish threshold (the gate, not a vibe)
Most teams fail here because they treat fact-checking like a general aspiration. Then deadline pressure hits, and “we’ll verify later” becomes “ship it.”
Start by writing down three things and treating them like production rules:
First: what counts as a claim. In our system, a claim is any statement that a reasonable reader could interpret as factual, testable, and attributable. Numbers. Dates. “Studies show.” Quotes. “X is required by law.” Even soft claims like “commonly used” count if they imply prevalence.
Second: what must be verified. We don’t try to verify everything equally. We verify based on risk and novelty. High-risk content (legal, medical, financial, safety) is strict. If we cannot verify, we block release. Medium-risk content (product capabilities, security guidance, anything that could materially change behavior) gets verified or rewritten into clearly framed uncertainty. Low-risk background claims still get checked when they are specific, but we will delete fluff before spending an hour validating it.
Third: your publish threshold. Ours is blunt:
If a high-risk claim cannot be confirmed in a primary source (statute, regulation, case text, official documentation, peer-reviewed paper), it does not ship. Period. If a claim is medium-risk and we only have weak sources, we either add a clear qualifier and link the best available evidence, or we remove it.
Common failure mode: teams “verify” by finding one blog post that repeats the claim. That is not verification. That is vibes with citations.
Completion criteria
You are done with this step when every person involved can answer, without debating:
- What we block from release
- What we allow with qualifiers
- What we allow as opinion
Prerequisites for an AI fact checking system that survives production
You do not need a huge stack, but you do need the basics and you need them before you start.
We consider this the minimum viable setup:
- A grounded search tool you actually trust to show sources (and dates). If it cannot point to a link, it cannot be your verifier.
- Primary-source access: legal databases, official agency sites, standards bodies, peer-reviewed indexes, or at least a library portal.
- A citation manager or at minimum a shared doc where every claim gets a source URL, title, publisher, and access date.
- A screenshot or archiving tool (PDF print, web archive, or internal capture). Links rot. Policies change.
- A tracking sheet for claim status (unverified, verified, rewritten, removed, blocked). Keep it ugly. Keep it honest.
Time budgeting: for a 1,200 to 2,000 word commercial piece with statistics and “studies show” claims, we usually plan 60 to 180 minutes of verification time depending on density. If you plan 15 minutes, you will skip the hard parts. Every time.
Build the claim inventory (this is where content fact checking either happens or doesn’t)
This is the messy middle. If you cannot isolate atomic claims, you cannot verify AI content reliably. You will think you verified a paragraph when you only verified the easiest noun phrase.
We do it like this.
First, we copy the draft into a working doc and rewrite it into one sentence per line. No exceptions. If a sentence contains “and,” “or,” “because,” “which,” or multiple commas, we assume it hides multiple claims.
Then we split compound sentences into atomic claims. Atomic means: one subject, one predicate, one check. “GPT-4 is more accurate than GPT-3.5 and is better at math” becomes two claims. It sounds tedious. It saves your week.
Next, we tag each claim by type. We use a claim taxonomy because otherwise reviewers get sloppy and start mixing standards. Here is the taxonomy that actually maps to verification work:
- Numbers and rates: percentages, time claims, “millions,” “in seconds,” “up to 99%.”
- Quotes: anything in quotation marks, anything framed as “X said.”
- Timelines and recency: “as of August 2025,” “in April 2024,” “recently.”
- Causality: “leads to,” “results in,” “causes.” These are harder than they look.
- Definitions and categorization: “X is,” “X means,” “X qualifies as.”
- Legal and compliance claims: statutes, case law, filing requirements, jurisdiction rules. High stakes.
- “Studies show” claims: research findings, comparisons, model evaluations.
Now we separate “needs evidence” from “cannot be verified.” This is where teams waste time. Some things are not verifiable in the way they are written. “Most experts agree” without naming experts is not a claim you can check. “AI often hallucinates” is broadly true, but the exact frequency depends on task, model, and evaluation method. If the draft pretends it is universal, it is lying.
Rewrite those into verifiable forms or delete them.
We also prioritize using a simple heuristic: high-risk, high-novelty, high-virality first. “High-virality” means it is the kind of line people screenshot. If it is screenshot bait, verify it early or kill it.
Honestly, we messed this up the first time we tried to operationalize it. We left long sentences intact because we were tired, then the verifier “confirmed” one clause and assumed the rest was supported. The rest was not.
Completion criteria
The article is ready for verification only when every sentence is one of these:
1) An atomic, checkable claim with a clear evidence plan
2) A clearly labeled opinion or interpretation
3) Removed
If you cannot get to that state, you do not have a fact-checking workflow. You have anxiety.
Citation and source validation workflow (how we catch fake references and distorted support)
Fake citations are a top-tier hallucination mode. Legal is especially brutal here: models can invent case names, plausible reporters, and imaginary holdings. This is why “never trust, always verify” shows up in security guidance and academic librarianship, not just AI discourse.
We use a strict three-stage workflow with hard completion criteria.
Stage 1: Existence check
First, confirm the source exists. Not “something similar exists.” The source.
We search the exact title in a library catalog or a trusted index, then cross-check with Google or the publisher site. If the AI provided a case citation, we try to pull the case from an official reporter, a reputable legal database, or the court’s own records.
What trips people up: finding a blog post that mentions the same topic and calling it the source. That is not existence. That is coincidence.
Completion criteria: you can open the source record and it matches the cited title, authors, venue, and date.
Stage 2: Identifier check (when anything feels off)
If we see weirdness, we ask for unique identifiers and we re-check. For papers: DOI. For books: ISBN. For journals: ISSN. For legal materials: docket number, court, filing date, reporter citation, or official URL.
This is where fabricated references die. Real sources have identifiers or at least stable catalog records. Hallucinations wobble when you demand specifics.
Completion criteria: identifiers resolve to the same source, not to a different paper with a similar title.
Stage 3: Read-to-confirm (the part people skip, the part that matters)
If the source exists, we open it and confirm the exact claim, quote, and context.
We check:
- Does the source actually say the quoted text, word for word?
- If it is a paraphrase, is the paraphrase faithful, or did the model shift meaning?
- If it is a statistic, does the source define the denominator, time range, and methodology?
- If it is a legal holding, are we mixing jurisdictions or procedural posture?
A common mistake is “verifying” that a paper exists, then trusting the AI summary. That is how you end up citing a real journal for a claim it never made.
Recovery path when a source can’t be validated
If we cannot validate the citation, we do not play citation roulette.
We downgrade the claim to “unsupported” in the tracking sheet, then choose one:
Rewrite it into something we can support with available evidence, remove it entirely, or replace it with a primary source we can actually open and quote.
If this is legal or compliance content, we stop the draft until the claim is either proven from primary authority or removed. No exceptions.
Anyway, side note: we keep a folder called “Sounds Real, Isn’t.” It is mostly citations.
Lateral reading and corroboration (repetition is not confirmation)
Once a claim has a plausible source, we triangulate. We do not trust a single webpage, and we do not trust “ten webpages” that all echo the same original.
We use lateral reading: open new tabs, check who is making the claim, and trace backward to the primary record. If a statistic is cited across multiple articles, we look for the earliest citation chain until we hit the actual study, dataset, or official report.
The annoying part is when the web is a hall of mirrors. AI-generated content can flood search results, and syndicated press can spread the same error fast. If you cannot identify an independent second source, treat the claim as fragile.
Completion criteria: you have at least two independent sources, or one primary source that directly supports the claim without interpretation.
Handle the currency trap and model limits (recency is a live-fire test)
If a fact depends on recent events, policy changes, product updates, or new research, the model’s training cutoff becomes a trap. You can get a confident answer that is simply old.
We force a live-source check when a claim includes:
- “As of” language
- A year in the last 24 months
- A product feature that changes frequently
- Regulations, enforcement actions, or court decisions
Grounded tools and RAG-style workflows help, but they do not remove the baseline error rate. AI can still misread a page, pull the wrong snippet, or miss a date. We always verify dates, versions, and jurisdiction in the source itself.
Completion criteria: time-sensitive claims include an access date and a link to an authoritative source, not just a secondary summary.
Create a human-in-the-loop review loop (so deadlines don’t silently win)
We treat this like a production control problem, not a writing preference.
One person writes. A different person verifies. A third person, if the topic is high-stakes, does a final approval pass. If you assign verification to the same person who drafted the content, confirmation bias shows up immediately. We have watched it happen in our own team when we were understaffed.
We also define stop-ship authority. Someone has the explicit power to say “this does not publish today” if high-risk claims are unsupported or citations are unvalidated.
Where this falls apart: no one wants to be the bad guy. If leadership treats fact-checking as optional, the workflow becomes performative. Then the first public correction becomes your training program.
Completion criteria: roles are assigned in writing for the piece, and the stop-ship rule is acknowledged before verification starts.
Tooling strategy without magical thinking (what tools reduce, and what they don’t)
We like grounded generation because it forces the model to show its work. Links make it possible to verify AI content quickly, and they reduce the “confident fiction” problem. They do not eliminate it.
We also sometimes cross-check with a second model or a second search tool when claims are high-risk or oddly specific. Multi-tool agreement is not proof, but disagreement is a bright red flag.
If a vendor promises “no hallucinations,” we assume they are selling to someone who has never had to issue a correction.
Formal constraints as a backstop (automated reasoning and guardrails for deterministic rules)
If you publish at scale, manual checking is not enough. You need cheap, repeatable checks that catch entire classes of errors before a human sees the draft.
Automated reasoning is useful when your content includes deterministic constraints: dates must be in order, totals must sum, jurisdiction labels must match, required disclaimers must appear, numerical ranges must stay within allowed bounds. This is not about proving truth in the world. It is about preventing self-contradiction and out-of-policy outputs.
AWS Bedrock Guardrails’ Automated Reasoning checks are a concrete example of this approach. You can attach up to two automated reasoning policies to a guardrail and run validations on assistant responses, with AWS claiming up to 99% verification accuracy for those checks. The hidden string is obvious when you test it: the accuracy is only as good as the rules you encode, and the rules only cover what you thought to specify. It will happily “verify” something logically consistent that is still factually wrong because your policy does not have real-world ground truth.
We implement formal constraints with a mini-framework that keeps us honest.
First, write the rule in plain language. If you cannot explain it in one sentence, you are not ready to encode it.
Second, define your variables and allowed ranges. Example: PublicationYear must be between 1990 and the current year. Jurisdiction must be one of a fixed set. Percentages must be 0 to 100.
Third, create known-good and known-bad test cases. We keep a small set of “gotcha” outputs that used to slip through. Then we test the policy until it flags the bad ones and passes the good ones.
Fourth, attach the policy to your guardrail and treat failures as blockers, not suggestions.
Fifth, accept the constraint: you only get up to two policies per guardrail in AWS’s setup, so you have to choose what you care about most. Teams try to cram everything into one policy and end up with something brittle that blocks valid content and still misses edge cases.
Decision guide: use automated reasoning for deterministic constraints and compliance rules. Do not use it to validate open-ended factual claims like “46% of Americans use AI tools for information seeking.” That requires real evidence, not logic.
Recovery path if the guardrail blocks correct content: log the failure, capture the exact input and output, then update the rule or variable definition. Do not “just bypass it for this one.” That is how exceptions become policy.
Completion criteria: you can demonstrate the guardrail catching at least three previously observed error types in your own drafts, without blocking a reasonable amount of valid content.
What to do when it goes wrong (incident response for AI mistakes)
Stuff will ship. Even with a system. The goal is to reduce frequency and reduce blast radius.
When we detect an AI mistake post-publish, we follow a simple incident path.
First, preserve evidence. Save the published page, the sources used, and the version history. Quiet edits without a trail make root-cause analysis impossible and can damage credibility if readers notice changes.
Second, assess severity. If it is legal, medical, financial, or safety related, treat it as urgent. Pull or correct immediately. If it involves a fabricated citation, treat it as high severity even if the underlying claim might be true. Fake sourcing is its own harm.
Third, correct with disclosure when appropriate. For commercial content, we usually add a correction note when the change affects a reader’s understanding or decision-making. Silent edits are tempting. They backfire.
Fourth, notify stakeholders. If this involves legal filings or anything court-adjacent, the standard is harsher: correct immediately and notify the relevant parties. Do not argue with reality.
Fifth, patch the workflow. Add the failure mode to your claim taxonomy examples or your guardrail tests. If the same type of mistake happens twice, your process is not learning.
Completion criteria: you can point to a logged incident record with what changed, why it changed, and which checklist item now prevents recurrence.
Success criteria and final verification (how we know we can hit publish)
We do not publish because the draft “reads well.” We publish because the verification sheet is clean where it matters.
Pre-publish: every high-risk claim has a primary source link and a read-to-confirm note. Every citation has passed existence and identifier checks where needed. Every unsupported claim is rewritten with appropriate uncertainty or removed.
Post-publish: we monitor for challenges. If a reader flags an issue, we treat it as a test of the system, not an annoyance. We also periodically re-check time-sensitive claims because the web changes under your feet.
If you do all of this, you will still find errors sometimes. You will just find them before your audience does. That is the whole point of an AI fact checking system.
FAQ
The “one blog post” trap: is that enough to verify a claim?
No. That is vibes with citations.
We have watched teams “verify” a claim by finding one post that repeats it, then ship. Later you realize every other page was just copying the same original mistake. We only count it when we can trace back to a primary source (statute, official doc, dataset, peer-reviewed paper) or at least corroborate with independent sources that are not in the same citation chain.
What counts as a “claim” in an AI fact checking system?
Anything a reasonable reader could take as factual and testable. Numbers, dates, quotes, “studies show,” “X is required by law,” even “commonly used” if it implies prevalence.
If someone could screenshot it and call you wrong, treat it like a claim.
Do we really have to read the source, or is “source exists” good enough?
We tried the shortcut. It bit us.
A source existing only proves the source exists. It does not prove it supports your exact stat, quote, or takeaway. The model will happily cite a real journal, then hallucinate what the journal “concluded.” The fix is boring: open it, find the exact line, and check context (denominator, dates, methodology, jurisdiction).
Can automated reasoning or guardrails “verify” facts for us?
They can verify rules you encode, not truth in the world.
Great use cases: percentages must be 0 to 100, dates must be in order, required disclaimers must appear, jurisdiction labels must match your allowed list.
Bad use case: “46% of Americans do X.” Logic cannot prove that. You still need an actual source you can open and read.