# Plagiarism Checker (`maximedupre/plagiarism-checker`) Actor

Check text against public web sources and your own reference files. Get a score, sentence totals, matched passages, source links, and a clear risk summary.

- **URL**: https://apify.com/maximedupre/plagiarism-checker.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Education, SEO tools, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.15 / 1,000 plagiarism checks

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

### 🔎 Check text for matching sources

Plagiarism Checker helps writers, editors, teachers, and content teams review text. It returns a plagiarism score, sentence totals, matched passages, source links, and a plain risk summary.

- **[Plagiarism Checker](https://apify.com/maximedupre/plagiarism-checker/examples/plagiarism-checker)** — check pasted text for matches in public web sources.
- **[Text Plagiarism Checker](https://apify.com/maximedupre/plagiarism-checker/examples/text-plagiarism-checker)** — review an article, essay, or draft before you publish it.
- **[Website Plagiarism Checker](https://apify.com/maximedupre/plagiarism-checker/examples/website-plagiarism-checker)** — find public pages with passages that match your text.
- **[Plagiarism Report](https://apify.com/maximedupre/plagiarism-checker/examples/plagiarism-report)** — save a score, risk level, sentence totals, and match evidence.
- **[Source Match Checker](https://apify.com/maximedupre/plagiarism-checker/examples/source-match-checker)** — compare input passages with passages from found sources.
- **[Reference Document Comparison](https://apify.com/maximedupre/plagiarism-checker/examples/reference-document-comparison)** — compare your text with files you provide.

#### 📦 What data do you get?

Each successful run saves one report to the Apify dataset. The report can include:

- `plagiarismPercent`: the share of sentences with a found match, from 0 to 100.
- `risk`: a `low`, `medium`, or `high` level with a short explanation.
- `sentenceSummary`: total, matched, and unique sentence counts.
- `sources`: unique found sources with titles, URLs, and matched passages.
- `sources[].matches`: input text, source text, and a similarity percent for each match.
- `referenceComparisons`: the file name and similarity percent for each reference file.
- Source authors, publisher, date, and scholarly IDs when the source provides them.

Repeated matches from the same source are grouped under one source. This keeps copies of the same page from making the report harder to read.

#### ▶️ How do you run the Actor?

1. Choose **Plain text** or **Document file** as the Target.
2. Paste your text or upload one text-bearing file.
3. Optional: upload reference files for a direct comparison.
4. Start the Actor and open the default dataset.

The document fields accept TXT, Markdown, HTML, PDF, and DOCX files. Scanned or image-only files need OCR, which this Actor does not provide.

#### ⚙️ What input can you use?

| Input | What it does |
| --- | --- |
| `target` | Chooses pasted text or one document file. |
| `text` | Holds the pasted text for the `text` Target. |
| `document` | Holds one uploaded file for the `document` Target. |
| `referenceDocuments` | Holds files to compare directly with the main text. |

Only the field for the chosen Target is used. Reference files are optional.

```json
{
  "target": "text",
  "text": "Clear source notes help writers avoid accidental plagiarism. Good notes also make facts easier to check."
}
```

#### 🧾 What does the output look like?

```json
{
  "plagiarismPercent": 50,
  "risk": {
    "level": "medium",
    "explanation": "Some checked sentences match public sources and should be reviewed."
  },
  "sentenceSummary": {
    "total": 2,
    "matched": 1,
    "unique": 1
  },
  "sources": [
    {
      "sourceType": "web",
      "title": "Writing with clear source notes",
      "url": "https://example.org/writing/source-notes",
      "matches": [
        {
          "inputPassage": "Clear source notes help writers avoid accidental plagiarism.",
          "sourcePassage": "Good source notes help authors prevent accidental plagiarism.",
          "similarityPercent": 91.2
        }
      ]
    }
  ],
  "referenceComparisons": []
}
```

No found match means `sources` is empty and the score may be `0`. A score is evidence for review, not a ruling about intent or ownership.

#### 💳 How does pricing work?

This Actor uses pay-per-event pricing. You are charged for each completed plagiarism analysis that is saved as a report. Input checks, failed source access, and runs stopped before a report is saved are not charged as completed checks. Apify platform usage may still apply.

#### 🔌 Which integrations can you use?

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

Use the Apify API, schedules, webhooks, dataset exports, and Apify integrations to add reports to your workflow.

#### ❓ FAQ

**Can I check a scanned PDF?**

No. PDF files must contain text. This Actor does not run OCR on images or scanned pages.

**Can I compare text with my own files?**

Yes. Add TXT, Markdown, HTML, PDF, or DOCX files to `referenceDocuments`. The report gives one similarity percent for each file.

**Does a match prove plagiarism?**

No. The report shows text overlap with found sources. Review the source, quotes, and citations before you decide what the match means.

**Does it check every page on the web?**

No. It checks publicly discoverable sources. It cannot promise every web page, private store, or paywalled database.

**Is this an AI content detector?**

No. It does not guess whether AI or a person wrote the text.

**Is this plagiarism checker free?**

No. A completed report has a pay-per-event charge, and Apify platform usage may also apply. Runs that do not save a completed report are not charged as completed checks.

**How is this different from other plagiarism checker tools?**

It saves structured match evidence in an Apify dataset. You can export the report or use it with the Apify API, schedules, and webhooks.

### 📝 Changelog

- 0.0: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~plagiarism-checker/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Readability Analyzer](https://apify.com/maximedupre/readability-analyzer) — check the same text or document for reading difficulty and hard sentences.
- [Webpage Text Extractor](https://apify.com/maximedupre/webpage-text-extractor) — turn a public web page into clean text before you review it.
- [arXiv Papers Scraper](https://apify.com/maximedupre/arxiv-papers-scraper) — find public paper records and source links for research work.
- [URL to BibTeX Converter](https://apify.com/maximedupre/url-to-bibtex-converter) — turn a found paper or web page URL into a BibTeX citation.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose whether to check pasted text or one document file.

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

Paste the text to check. This is used only for the Plain text Target.

## `document` (type: `string`):

Upload one TXT, Markdown, HTML, PDF, or DOCX file. This is used only for the Document file Target.

## `referenceDocuments` (type: `array`):

Upload reference TXT, Markdown, HTML, PDF, or DOCX files. The Actor also compares your content with each file and reports its similarity.

## Actor input object example

```json
{
  "target": "text",
  "text": "The quick brown fox jumps over the lazy dog. This sentence contains all 26 letters of the English alphabet. It is commonly used for touch-typing practice. It is also used to test typewriters and computer keyboards."
}
```

# Actor output Schema

## `results` (type: `string`):

Reports with a plagiarism score, sentence totals, risk details, source matches, and reference comparisons.

# 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 = {
    "target": "text",
    "text": "The quick brown fox jumps over the lazy dog. This sentence contains all 26 letters of the English alphabet. It is commonly used for touch-typing practice. It is also used to test typewriters and computer keyboards."
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/plagiarism-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 = {
    "target": "text",
    "text": "The quick brown fox jumps over the lazy dog. This sentence contains all 26 letters of the English alphabet. It is commonly used for touch-typing practice. It is also used to test typewriters and computer keyboards.",
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/plagiarism-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 '{
  "target": "text",
  "text": "The quick brown fox jumps over the lazy dog. This sentence contains all 26 letters of the English alphabet. It is commonly used for touch-typing practice. It is also used to test typewriters and computer keyboards."
}' |
apify call maximedupre/plagiarism-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/plagiarism-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/QAJHbKSJsMJksg1Nk/builds/S2z17jg92bYf8eI47/openapi.json
