# AI Fact Checker: Verify Claims & Cite Sources (`raional/ai-fact-checker`) Actor

Checks every factual claim in a draft or published article against live web sources. Returns a verdict, a 0-100 score, and the source URL behind each one.

- **URL**: https://apify.com/raional/ai-fact-checker.md
- **Developed by:** [Raion Al](https://apify.com/raional) (community)
- **Categories:** AI, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## AI Fact Checker: Verify Claims & Cite Sources

Paste a draft or point it at a published article. Every factual claim comes back with a verdict, a 0-100 score, and **the source URL behind it** — not a confidence number with nothing under it.

Built for the moment before you publish, when the text reads fine and you have no idea whether the numbers in it are real.

### What it does

1. **Reads every sentence.** Statistics, quotes, named people, dated events, and legal, medical, or financial claims are pulled out. Opinion, advice, and predictions are skipped, because no public source could settle them.
2. **Searches twice per claim.** Once for the claim as written, and once for what is actually the case, phrased so it can come back negative. Searching only your own wording finds whatever agrees with it.
3. **Weighs the sources.** Encyclopedias, journals, and government records outrank news, which outranks forums and social posts.
4. **Never asserts without a source.** If nothing can be found, it says so. It will not call a claim false because the search failed — those are different answers, and confusing them is how a fact checker loses your trust.

### Example output

| Verdict | Score | Claim | Source |
|---|---|---|---|
| True | 98 | The Berlin Wall fell in 1989. | en.wikipedia.org |
| False | 95 | Microsoft acquired Figma for $22 billion in 2024. | cnbc.com |
| False | 90 | Nvidia was founded in 1993 by Jensen Hwang. | en.wikipedia.org |

That third row is the one that matters. The date is right, the company is right, and the founder's name is misspelled — so the `spellingFix` field says *sources write "Huang", not "Hwang"*. Search silently corrects spelling, which means a spellchecker and an AI reviewer both wave it through.

### Who uses this

**Content and SEO agencies** — audit an article before it ships, or run a client's back catalogue and find the claims that have quietly gone stale.

**Anyone publishing AI-assisted copy** — language models produce fluent, specific, wrong numbers. A plausible statistic with a fabricated source is the failure mode that survives every other review step.

**Newsrooms and researchers** — check a press release or a submitted piece against the record before it runs.

**Developers** — put it in a publishing pipeline. One claim per dataset row, ready to gate a deploy on.

### Input

| Field | What it does |
|---|---|
| `text` | Paste a draft, article, or press release. |
| `startUrls` | Article URLs to fetch and check. The readable body is extracted; navigation and boilerplate are dropped. |
| `maxCharsPerDocument` | Truncates long documents. Lower it to control cost, since billing is per claim. |
| `onlyProblems` | Return only claims that are contradicted, unresolved, or misspelled. You are billed only for rows returned, so this is also the cheapest way to run it. |

### Output

One row per claim:

`claim`, `verdictLabel` (True / Probably true / Unclear / Disputed / Probably false / False), `likelihood` (0-100), `verdictStrength`, `explanation`, `sourceUrl`, `sourceTitle`, `citations`, `needsAttention`, `spellingFix`, `disputed`, `noTrace`, `source`.

`likelihood` is always "how likely this is true". `verdictStrength` restates it as the strength of the verdict, so a claim scored 5 shows as **False 95** rather than True 5.

### Pricing

Pay per event. **$0.005 per run** plus **$0.015 per claim verified** — $15 per 1,000 claims.

You are charged per claim rather than per document because a document with thirty claims costs thirty times what a document with one costs. Claims that fail to check are never charged. With `onlyProblems` enabled you pay only for the claims that need your attention.

A typical 1,000-word article yields 8 to 15 claims, so roughly **$0.12 to $0.23 per article**.

### FAQ

**How do I fact check an article automatically?**
Give the URL in `startUrls`. The readable body is extracted and every factual claim in it is verified against live web sources, one dataset row each.

**Can it fact check AI-generated content?**
That is what it is for. Language models are fluent and specific about things that are not true, and the resulting sentences pass every stylistic check. This verifies them against sources instead.

**Does it detect AI writing?**
No, and deliberately. AI detection guesses at how text was produced; this checks whether what the text says is true. A human can write a false sentence and a model can write a true one.

**What happens when nothing can be found?**
The claim comes back Unclear, with `noTrace` set when the surrounding subject is well documented and the claim itself appears nowhere. That combination is the strongest signal of a fabricated fact, but it is still reported as unverified rather than false.

**What if credible sources disagree?**
The claim is marked Disputed and the `citations` field carries sources on both sides, so you can see who says what and decide with your name on it.

**Why is my true claim marked Unclear?**
Usually because the sources hedge where the claim does not, or because reputable sources genuinely differ. Check the `citations` field — for a contested claim, that disagreement is the answer.

**Does it store my text?**
No. Only a hash, which is what makes re-checking the same text free.

***

Powered by the [Claim Check](https://claim-check.fly.dev) verification API.

# Actor input Schema

## `text` (type: `string`):

Paste a draft, an article, a press release, or AI-generated copy. Every factual claim in it is verified against live web sources. Leave empty if you are using article URLs instead.

## `startUrls` (type: `array`):

Published articles or blog posts to fetch and fact check. The readable body text is extracted and every factual claim in it is verified. Use this to audit content you have already published, or a competitor's.

## `maxCharsPerDocument` (type: `integer`):

Longer documents are truncated to this length before checking. Raise it for long-form articles; lower it to control cost, since you are billed per claim verified.

## `onlyProblems` (type: `boolean`):

Return only claims that are contradicted, unresolved, or carry a misspelled name. Claims that check out cleanly are skipped. You are billed only for the claims returned.

## `apiBaseUrl` (type: `string`):

Advanced. The Claim Check API endpoint. Leave as is unless you are running your own instance.

## `apiKey` (type: `string`):

Advanced. Optional. Supply your own key to run against your own account and quota instead of the shared one.

## Actor input object example

```json
{
  "text": "The Berlin Wall fell in 1989. Microsoft acquired Figma for $22 billion in 2024. Nvidia was founded in 1993 by Jensen Huang.",
  "startUrls": [],
  "maxCharsPerDocument": 20000,
  "onlyProblems": false,
  "apiBaseUrl": "https://claim-check.fly.dev"
}
```

# Actor output Schema

## `claims` (type: `string`):

One row per claim: verdict, score, explanation, and the source URL behind it.

## `summary` (type: `string`):

Documents checked, claims returned, and how many need attention.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "text": "The Berlin Wall fell in 1989. Microsoft acquired Figma for $22 billion in 2024. Nvidia was founded in 1993 by Jensen Huang."
};

// Run the Actor and wait for it to finish
const run = await client.actor("raional/ai-fact-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "text": "The Berlin Wall fell in 1989. Microsoft acquired Figma for $22 billion in 2024. Nvidia was founded in 1993 by Jensen Huang." }

# Run the Actor and wait for it to finish
run = client.actor("raional/ai-fact-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "text": "The Berlin Wall fell in 1989. Microsoft acquired Figma for $22 billion in 2024. Nvidia was founded in 1993 by Jensen Huang."
}' |
apify call raional/ai-fact-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,raional/ai-fact-checker"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/zNrf7B4UyHFkQaVTu/builds/mcwHUs5FgFFW678u7/openapi.json
