This workflow corresponds to n8n.io template #9067 — we link there as the canonical source.
This workflow follows the Emailsend → Google Sheets recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "806a295f-8337-4459-bdc7-5e3b9f3634de",
"name": "Trigger - New Row in Google Sheet",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
1120,
288
],
"parameters": {
"event": "rowAdded",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "k",
"cachedResultName": "Plagiarism "
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "a9057c26-4936-48d4-a8d5-23efe3bb528d",
"name": "Send Content to Plagiarism API",
"type": "n8n-nodes-base.httpRequest",
"position": [
1456,
288
],
"parameters": {
"url": "https://plagiarism-checker-ai-powered.p.rapidapi.com/plagiarism.php",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "multipart-form-data",
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "content",
"value": "={{ $('Trigger - New Row in Google Sheet').item.json.Content }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "x-rapidapi-host",
"value": "plagiarism-checker-ai-powered.p.rapidapi.com"
},
{
"name": "x-rapidapi-key",
"value": "Your key"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "0438c692-bd49-455f-a1a9-afb0ef853b0a",
"name": "Check API Response Success",
"type": "n8n-nodes-base.if",
"position": [
1712,
144
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "0ce9b91f-8d33-4ca9-b7bc-67421d0ab1a9",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.success }}",
"rightValue": ""
},
{
"id": "5963f077-ab3a-4658-a55f-57ea89db5901",
"operator": {
"type": "array",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.data.results.results }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ff20ec20-e67d-42bb-a903-7452f0801389",
"name": "Extract Plagiarism Results",
"type": "n8n-nodes-base.code",
"position": [
2000,
64
],
"parameters": {
"jsCode": "return $input.first().json.data.results.results;"
},
"typeVersion": 2
},
{
"id": "0fb5c95c-1182-4f1c-9bb5-a58218518976",
"name": "Generate HTML Plagiarism Report",
"type": "n8n-nodes-base.code",
"position": [
2288,
48
],
"parameters": {
"jsCode": "const results = $input.all();\n\nlet html = `<h2>\ud83d\udcdd Plagiarism Report</h2>`;\nhtml += `<p>The following content has been analyzed. Below is the similarity report:</p>`;\n\nfor (const item of results) {\n const phrase = item.json.phrase;\n const matches = item.json.results;\n\n html += `<hr/>`;\n html += `<p><strong>Original Phrase:</strong><br>\"${phrase}\"</p>`;\n\n if (!matches || matches.length === 0) {\n html += `<p style=\"color:green;\">\u2705 No matches found</p>`;\n continue;\n }\n\n html += `<ul>`;\n for (const match of matches) {\n const title = match.title;\n const link = match.link;\n const score = match.scores?.[0]?.score?.toFixed(2);\n const matchedSentence = match.scores?.[0]?.sentence;\n\n html += `\n <li>\n <p><strong>Matched Source:</strong> <a href=\"${link}\" target=\"_blank\">${title}</a></p>\n <p><strong>Similarity Score:</strong> ${score}</p>\n <p><em>\"${matchedSentence}\"</em></p>\n </li>\n `;\n }\n html += `</ul>`;\n}\n\nreturn [\n {\n json: {\n subject: \"\ud83d\udcc4 Plagiarism Report\",\n body: html\n }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "ef430ff6-e774-4aff-b66d-0b0000aa0d15",
"name": "Send Report to User via Email",
"type": "n8n-nodes-base.emailSend",
"position": [
2592,
112
],
"parameters": {
"html": "={{ $json.body }}",
"options": {},
"subject": "={{ $json.subject }}",
"toEmail": "=user@test.com",
"fromEmail": "user@example.com"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "d70d998c-cbb7-4478-bf41-56f027da2a07",
"name": "Mark Status: Success in Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2992,
288
],
"parameters": {
"columns": {
"value": {
"Status": "Success ",
"Content": "={{ $('Trigger - New Row in Google Sheet').item.json.Content }}"
},
"schema": [
{
"id": "Content",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Content"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": "Plagiarism "
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "61535540-0df7-43d6-afe5-76f2fe0f5b62",
"name": "Send Failure Alert to IT",
"type": "n8n-nodes-base.emailSend",
"position": [
2112,
576
],
"parameters": {
"html": "=<h2>\ud83d\udea8 Plagiarism Check Failure Alert</h2>\n\n<p><strong>System:</strong> Plagiarism Checker AI</p>\n<p><strong>Status:</strong> <span style=\"color:red;\">\u274c Failed to complete the plagiarism check</span></p>\n\n<h3>\ud83d\udd0d Failure Details</h3>\n<ul>\n <li><strong>Timestamp:</strong> {{ $now }}</li>\n <li><strong>User Content:</strong></li>\n</ul>\n<blockquote style=\"background-color:#f9f9f9;padding:10px;border-left:3px solid #ccc;\">\n {{ $json[\"content\"] || \"No content received\" }}\n</blockquote>\n\n<h3>\u26a0\ufe0f Recommended Actions</h3>\n<ul>\n <li>Check API availability and key validity</li>\n <li>Inspect server/network logs</li>\n <li>Ensure correct data formatting from the form submission</li>\n</ul>\n\n<hr>\n<p style=\"color:gray;font-size:12px;\">This message was automatically generated by the n8n workflow: <strong>Plagiarism Checker AI</strong>.</p>\n",
"options": {},
"subject": "ALERT: Plagiarism Check Failed \u2013 Immediate Attention Required",
"toEmail": "user@example.com",
"fromEmail": "user@example.com"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "7784e381-f704-4981-96bc-005c1ce5064a",
"name": "Mark Status: Failed in Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2448,
576
],
"parameters": {
"columns": {
"value": {
"Status": "Failed",
"Content": "={{ $('Trigger - New Row in Google Sheet').item.json.Content }}"
},
"schema": [
{
"id": "Content",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Content"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": "Plagiarism "
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "182d4104-b1ca-4731-8bdb-76ef606b6060",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
1040,
160
],
"parameters": {
"height": 272,
"content": "Watches for a new row added to a specific Google Sheet.\nTriggers the workflow when new content is submitted for plagiarism checking."
},
"typeVersion": 1
},
{
"id": "998ab663-310d-44eb-9b24-230fc52042a7",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1376,
160
],
"parameters": {
"height": 272,
"content": "Sends the submitted content to the external plagiarism-checking API.\nUses a POST request with necessary headers and the content in the body."
},
"typeVersion": 1
},
{
"id": "ba69627c-cfb6-4426-a706-b959c717e033",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1648,
-16
],
"parameters": {
"height": 272,
"content": "Checks if the API returned a successful response and valid results.\nRoutes the flow either to process results or handle the failure."
},
"typeVersion": 1
},
{
"id": "9e964af6-213d-42c6-9e44-57f47ed61ae0",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1936,
-32
],
"parameters": {
"height": 272,
"content": "Extracts the results array from the API response.\nPrepares raw data for formatting in the next step."
},
"typeVersion": 1
},
{
"id": "61e70bcd-4fa6-42ba-9889-ed7f1d55af53",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
2224,
-80
],
"parameters": {
"height": 272,
"content": "Formats the extracted plagiarism data into a readable HTML report.\nBuilds a styled email-friendly structure with links, scores, and matched sentences."
},
"typeVersion": 1
},
{
"id": "4586d451-cc69-4105-976d-387a37232133",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2544,
-32
],
"parameters": {
"height": 304,
"content": "Sends the generated plagiarism report to the user via email.\nUses SMTP credentials to deliver the HTML content."
},
"typeVersion": 1
},
{
"id": "036e05fc-c6c8-4f13-b31d-68573e801af7",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2880,
176
],
"parameters": {
"height": 288,
"content": "Updates the status column of the original row as \"Success\".\nConfirms that the content was checked and report sent."
},
"typeVersion": 1
},
{
"id": "94a0a7ce-8568-4694-967c-6ad29597114b",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2080,
448
],
"parameters": {
"height": 272,
"content": "Sends an alert email to IT when the API check fails.\nIncludes content and troubleshooting suggestions in the email."
},
"typeVersion": 1
},
{
"id": "7a23855d-1487-4da6-8c4a-de1aebef57a1",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
2400,
480
],
"parameters": {
"height": 240,
"content": "Marks the row in the Google Sheet with \"Failed\" status.\nHelps track unsuccessful API checks for follow-up."
},
"typeVersion": 1
},
{
"id": "3f9b076d-a7cc-4e13-adff-7e57d9dedfd6",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
48
],
"parameters": {
"width": 672,
"height": 944,
"content": "\n# \ud83d\ude80 Automated Plagiarism Checker Workflow in n8n\n\n## \u2705 **Short Summary**\n\nAn automated plagiarism detection workflow using n8n, Google Sheets, and a third-party API. It checks submitted text for plagiarism, sends a formatted report via email, and logs results in real-time.\n\n---\n\n## \ud83d\udcbc **Use Case**\n\n* Ideal for educators, content teams, academic institutions, or editors who need to verify originality of text submitted via a Google Sheet form.\n\n\n## \ud83c\udfaf **Key Benefits**\n\n* \ud83d\udd01 **Fully Automated**: No manual checking \u2014 it triggers on new Google Sheet entries.\n* \ud83d\udce9 **Instant Reports**: Sends clean, detailed HTML reports directly to the user's inbox.\n* \ud83d\udcca **Status Tracking**: Logs success or failure directly in your Google Sheet.\n* \ud83d\udea8 **IT Alerts**: Notifies your IT team if API or checks fail.\n\n\n"
},
"typeVersion": 1
}
],
"connections": {
"Send Failure Alert to IT": {
"main": [
[
{
"node": "Mark Status: Failed in Google Sheet",
"type": "main",
"index": 0
}
]
]
},
"Check API Response Success": {
"main": [
[
{
"node": "Extract Plagiarism Results",
"type": "main",
"index": 0
}
],
[
{
"node": "Send Failure Alert to IT",
"type": "main",
"index": 0
}
]
]
},
"Extract Plagiarism Results": {
"main": [
[
{
"node": "Generate HTML Plagiarism Report",
"type": "main",
"index": 0
}
]
]
},
"Send Report to User via Email": {
"main": [
[
{
"node": "Mark Status: Success in Google Sheet",
"type": "main",
"index": 0
}
]
]
},
"Send Content to Plagiarism API": {
"main": [
[
{
"node": "Check API Response Success",
"type": "main",
"index": 0
}
]
]
},
"Generate HTML Plagiarism Report": {
"main": [
[
{
"node": "Send Report to User via Email",
"type": "main",
"index": 0
}
]
]
},
"Trigger - New Row in Google Sheet": {
"main": [
[
{
"node": "Send Content to Plagiarism API",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleApigoogleSheetsTriggerOAuth2Apismtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This powerful no-code workflow automates plagiarism detection using Plagiarism Checker AI Powered. Users submit text through Google Sheets. The system checks for duplication using the API, sends a detailed HTML report via email, and logs the results — all without human…
Source: https://n8n.io/workflows/9067/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Track website traffic and backlinks effortlessly using the Website Traffic Checker - Ahref API. This n8n workflow automates data retrieval and logging into Google Sheets, making it perfect for SEO pro
This n8n workflow automates outbound phone calls to new leads using VAPI, with built-in timezone detection to ensure you're only calling during business hours.
Julia. Uses googleSheetsTrigger, googleSheets, httpRequest. Event-driven trigger; 16 nodes.
Automate HeyGen Video Generation from Google Sheets Effortlessly convert text scripts in Google Sheets into AI-generated videos using HeyGen.
This n8n template automatically enriches IP addresses with geolocation data and performs HTTP port scanning when new IPs are added to a Google Sheets document. Perfect for network monitoring, security