Skip to content

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.

  1. Copy the workflow JSON below.
  2. In your N8N instance, click Import from JSON (or use Ctrl+I).
  3. Paste the JSON and click Import.
  4. Replace the placeholder values (YOUR_PROJECT_ID, credential IDs, URLs, channel names) with your own.
  5. Activate the workflow.

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 }], []] }
}
}

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 }]] }
}
}

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 }]] }
}
}

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 }], []] }
}
}