Workflow Templates
Ready-to-import N8N workflow templates for common automation patterns. Copy the JSON, go to your N8N instance, and select Import from JSON to get started instantly.
How to Import
Section titled “How to Import”- Copy the workflow JSON below.
- In your N8N instance, click ⋮ → Import from JSON (or use
Ctrl+I). - Paste the JSON and click Import.
- Replace the placeholder values (
YOUR_PROJECT_ID, credential IDs, URLs, channel names) with your own. - Activate the workflow.
Slack: New Conversation Alert
Section titled “Slack: New Conversation Alert”Sends a Slack message whenever a live user message is received. Uses a Webhook trigger (subscribe to the message event in Dashboard → Webhooks) and filters for live sessions only.
{ "name": "Ragtime → Slack: New Conversation Alert", "nodes": [ { "parameters": { "httpMethod": "POST", "path": "ragtime-conversations", "options": {} }, "name": "Webhook", "type": "n8n-nodes-base.webhook", "typeVersion": 2, "position": [250, 300] }, { "parameters": { "conditions": { "options": { "caseSensitive": true }, "combinator": "and", "conditions": [ { "leftValue": "={{ $json.body.event }}", "rightValue": "message", "operator": { "type": "string", "operation": "equals" } }, { "leftValue": "={{ $json.body.isLive }}", "rightValue": true, "operator": { "type": "boolean", "operation": "equals" } } ] } }, "name": "Only Live Messages", "type": "n8n-nodes-base.if", "typeVersion": 2, "position": [470, 300] }, { "parameters": { "resource": "message", "channel": { "__rl": true, "mode": "name", "value": "#customer-conversations" }, "text": "=💬 *New conversation*\\n>*User:* {{ $json.body.data.userMessage }}\\n>*Assistant:* {{ $json.body.data.response }}\\n>*Emotion:* {{ $json.body.data.emotion ?? 'n/a' }} · *KB:* {{ $json.body.data.usedKnowledgeBase }}" }, "name": "Slack", "type": "n8n-nodes-base.slack", "typeVersion": 2.2, "position": [690, 200], "credentials": { "slackApi": { "id": "YOUR_SLACK_CREDENTIAL_ID", "name": "Slack" } } } ], "connections": { "Webhook": { "main": [[{ "node": "Only Live Messages", "type": "main", "index": 0 }]] }, "Only Live Messages": { "main": [[{ "node": "Slack", "type": "main", "index": 0 }], []] } }}Scheduled Doc Sync
Section titled “Scheduled Doc Sync”Periodically re-ingests a document from an external URL into your Ragtime knowledge base using the Ingest API. Useful for keeping docs in sync with an upstream source — runs every 6 hours by default.
{ "name": "Ragtime ← Scheduled Doc Sync", "nodes": [ { "parameters": { "rule": { "interval": [{ "field": "hours", "hoursInterval": 6 }] } }, "name": "Every 6 Hours", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.2, "position": [250, 300] }, { "parameters": { "method": "POST", "url": "=https://your-ragtime-instance.com/api/v1/projects/YOUR_PROJECT_ID/libraries/YOUR_LIBRARY_ID/ingest", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendBody": true, "bodyParameters": { "parameters": [ { "name": "url", "value": "https://your-docs-site.com/api/export/guide.pdf" }, { "name": "externalId", "value": "guide-latest" } ] }, "options": {} }, "name": "Ingest to Ragtime", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [470, 300], "credentials": { "httpHeaderAuth": { "id": "YOUR_CREDENTIAL_ID", "name": "Ragtime API Key" } } }, { "parameters": { "conditions": { "options": { "caseSensitive": true }, "combinator": "and", "conditions": [ { "leftValue": "={{ $json.statusCode }}", "rightValue": 201, "operator": { "type": "number", "operation": "equals" } } ] } }, "name": "Success?", "type": "n8n-nodes-base.if", "typeVersion": 2, "position": [690, 300] } ], "connections": { "Every 6 Hours": { "main": [[{ "node": "Ingest to Ragtime", "type": "main", "index": 0 }]] }, "Ingest to Ragtime": { "main": [[{ "node": "Success?", "type": "main", "index": 0 }]] } }}Daily Analytics to Google Sheets
Section titled “Daily Analytics to Google Sheets”Fetches yesterday’s analytics from the Analytics API every morning and appends a row to a Google Sheet. Great for building lightweight reporting dashboards without custom code.
{ "name": "Ragtime → Google Sheets: Daily Analytics", "nodes": [ { "parameters": { "rule": { "interval": [{ "field": "days", "daysInterval": 1, "triggerAtHour": 8 }] } }, "name": "Every Morning at 8AM", "type": "n8n-nodes-base.scheduleTrigger", "typeVersion": 1.2, "position": [250, 300] }, { "parameters": { "method": "GET", "url": "=https://your-ragtime-instance.com/api/v1/projects/YOUR_PROJECT_ID/analytics?from={{ $now.minus(1, 'day').format('yyyy-MM-dd') }}&to={{ $now.minus(1, 'day').format('yyyy-MM-dd') }}&category=usage&category=rag&category=conversation", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "options": {} }, "name": "Fetch Analytics", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [470, 300], "credentials": { "httpHeaderAuth": { "id": "YOUR_CREDENTIAL_ID", "name": "Ragtime API Key" } } }, { "parameters": { "operation": "append", "documentId": { "__rl": true, "mode": "id", "value": "YOUR_SPREADSHEET_ID" }, "sheetName": { "__rl": true, "mode": "name", "value": "Daily Stats" }, "columns": { "mappingMode": "defineBelow", "value": { "Date": "={{ $now.minus(1, 'day').format('yyyy-MM-dd') }}", "Total Messages": "={{ $json.usage?.[0]?.total_messages ?? 0 }}", "Unique Users": "={{ $json.usage?.[0]?.unique_users ?? 0 }}", "KB Hit Rate": "={{ $json.rag?.[0]?.rag_hit_rate ?? 0 }}" } } }, "name": "Google Sheets", "type": "n8n-nodes-base.googleSheets", "typeVersion": 4.5, "position": [690, 300], "credentials": { "googleSheetsOAuth2Api": { "id": "YOUR_SHEETS_CREDENTIAL_ID", "name": "Google Sheets" } } } ], "connections": { "Every Morning at 8AM": { "main": [[{ "node": "Fetch Analytics", "type": "main", "index": 0 }]] }, "Fetch Analytics": { "main": [[{ "node": "Google Sheets", "type": "main", "index": 0 }]] } }}Knowledge Source Tracker
Section titled “Knowledge Source Tracker”Posts a Slack notification whenever the assistant cites knowledge sources in a conversation. Subscribe to the knowledge_used webhook event to track which sources are most frequently referenced.
{ "name": "Ragtime → Slack: Knowledge Source Tracker", "nodes": [ { "parameters": { "httpMethod": "POST", "path": "ragtime-knowledge", "options": {} }, "name": "Webhook", "type": "n8n-nodes-base.webhook", "typeVersion": 2, "position": [250, 300] }, { "parameters": { "conditions": { "combinator": "and", "conditions": [ { "leftValue": "={{ $json.body.event }}", "rightValue": "knowledge_used", "operator": { "type": "string", "operation": "equals" } } ] } }, "name": "Is Knowledge Used?", "type": "n8n-nodes-base.if", "typeVersion": 2, "position": [470, 300] }, { "parameters": { "resource": "message", "channel": { "__rl": true, "mode": "name", "value": "#knowledge-tracking" }, "text": "=📚 *Knowledge cited* ({{ $json.body.data.count }} source{{ $json.body.data.count > 1 ? 's' : '' }})\\nSource IDs: {{ $json.body.data.sourceIds.join(', ') }}" }, "name": "Slack", "type": "n8n-nodes-base.slack", "typeVersion": 2.2, "position": [690, 200], "credentials": { "slackApi": { "id": "YOUR_SLACK_CREDENTIAL_ID", "name": "Slack" } } } ], "connections": { "Webhook": { "main": [[{ "node": "Is Knowledge Used?", "type": "main", "index": 0 }]] }, "Is Knowledge Used?": { "main": [[{ "node": "Slack", "type": "main", "index": 0 }], []] } }}