This workflow corresponds to n8n.io template #5771 — we link there as the canonical source.
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 →
{
"id": "dnQK7NOQfUrMALiF",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "JuraAPI",
"tags": [],
"nodes": [
{
"id": "6da4081c-4a31-4e74-9fa4-ee162388dcbd",
"name": "Receive Coffee Count (POST)",
"type": "n8n-nodes-base.webhook",
"position": [
1840,
1100
],
"parameters": {
"path": "{{WEBHOOK_POST_PATH}}",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "bd07e72e-03b1-46f9-baa0-afe37e789359",
"name": "Generate Timestamp",
"type": "n8n-nodes-base.dateTime",
"position": [
2020,
1100
],
"parameters": {
"options": {}
},
"typeVersion": 2
},
{
"id": "f860254c-445f-4301-9539-1c88e77128ed",
"name": "Prepare Row Data",
"type": "n8n-nodes-base.set",
"position": [
2200,
1100
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "acd0418e-301f-4f4b-b717-f70c434643ac",
"name": "data",
"type": "string",
"value": "={{ $json.currentDate.split('T')[0] }}"
},
{
"id": "eb338e38-4f67-45ba-bff8-394d929d74b2",
"name": "time",
"type": "string",
"value": "={{ $json.currentDate.split('T')[1].split('.')[0] }}"
},
{
"id": "aac80554-6e32-466b-9c34-e94be08fc7bd",
"name": "coffee counter",
"type": "number",
"value": "={{ $('Webhook').item.json.body.total_coffees }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "50a045a3-c96c-4fd2-a3b0-230d899bd817",
"name": "Fetch Sheet Rows",
"type": "n8n-nodes-base.googleSheets",
"position": [
2020,
1340
],
"parameters": {
"options": {},
"sheetName": {
"mode": "list",
"value": "{{SHEET_NAME}}",
"cachedResultUrl": "",
"cachedResultName": "Sheet1"
},
"documentId": {
"mode": "url",
"value": "{{SHEET_ID}}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "1afa84f1-3f21-4f19-a35f-8cda564c8f6b",
"name": "Respond with Sheet Data",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
2380,
1340
],
"parameters": {
"options": {},
"respondWith": "allIncomingItems"
},
"typeVersion": 1.4
},
{
"id": "00d765ab-8008-4168-adef-006f62b01071",
"name": "Append to Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2380,
1100
],
"parameters": {
"columns": {
"schema": [
{
"id": "currentDate",
"type": "string",
"displayName": "currentDate",
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData"
},
"options": {},
"operation": "append",
"sheetName": {
"mode": "list",
"value": "{{SHEET_NAME}}",
"cachedResultUrl": "",
"cachedResultName": "Sheet1"
},
"documentId": {
"mode": "url",
"value": "{{SHEET_ID}}"
}
},
"typeVersion": 4.6
},
{
"id": "890d82ca-f2e8-4999-be60-54667c86562b",
"name": "Limit to Last Row",
"type": "n8n-nodes-base.limit",
"position": [
2200,
1340
],
"parameters": {
"keep": "lastItems"
},
"typeVersion": 1
},
{
"id": "37e0199e-18db-4647-a655-8d8890d19071",
"name": "Sticky Note - Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
2120,
800
],
"parameters": {
"color": 3,
"width": 560,
"height": 200,
"content": "# Setup Instructions\n\n1. Configure your Jura-compatible device to send BLE coffee data.\n2. Set up Google Sheet and replace placeholder values:\n - `{{SHEET_ID}}`, `{{SHEET_NAME}}`, and credentials\n3. Use `{{WEBHOOK_POST_PATH}}` and `{{WEBHOOK_GET_PATH}}` for endpoints.\n"
},
"typeVersion": 1
},
{
"id": "dd104f9e-332a-4c19-8626-3ce710df703c",
"name": "Sticky Note - Webhooks",
"type": "n8n-nodes-base.stickyNote",
"position": [
1960,
1720
],
"parameters": {
"color": 6,
"width": 420,
"height": 80,
"content": "\ud83e\udde9 POST webhook: receives data from Jura ESP\n\ud83e\udde9 GET webhook: provides last rows for live views"
},
"typeVersion": 1
},
{
"id": "cd8a9aa7-576c-4e8f-83ab-eb810dc0bfbb",
"name": "Sticky Note - Input Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
1540,
740
],
"parameters": {
"color": 7,
"width": 1180,
"height": 300,
"content": "# \u2615 Coffee Input Workflow\n\n- POST Webhook receives `total_coffees` from BLE device (ESP32/ESP8266)\n- Adds current `date` and `time` via the `Date & Time` node\n- Maps fields to prepare a row: \n `date` \u2192 split from currentDate \n `time` \u2192 split from currentDate \n `coffee counter` \u2192 value from incoming JSON (`total_coffees`)\n- Appends the row to Google Sheets\n\n\ud83d\udca1 Make sure your Google Sheet includes columns: \n`date`, `time`, `coffee counter`\n\n\ud83e\uddea You can test this endpoint with Postman: \nPOST `/{{WEBHOOK_POST_PATH}}` \nBody:\n```json\n{\n \"total_coffees\": 123\n}\n```"
},
"typeVersion": 1
},
{
"id": "cefd8aba-3af9-4942-a630-4218f2e1d8db",
"name": "Sticky Note - Output Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
1880,
1540
],
"parameters": {
"color": 6,
"width": 580,
"height": 280,
"content": "# \ud83d\udcca Dashboard Data Endpoint\n\n- GET Webhook returns rows from Google Sheet\n- You can use it in a web dashboard to display real-time stats\n- Limits output to latest entries only\n"
},
"typeVersion": 1
},
{
"id": "1e2347d3-ac50-4a21-ba7c-3d5720ed5498",
"name": "Webhook2",
"type": "n8n-nodes-base.webhook",
"position": [
1840,
1340
],
"parameters": {
"path": "{{WEBHOOK_GET_PATH}}",
"options": {},
"responseMode": "responseNode"
},
"typeVersion": 2
}
],
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "ba9c1c00-cf3b-4c95-add3-353468ff857c",
"connections": {}
}
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.
googleSheetsOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Track how many coffees your Jura E8 espresso machine makes — fully automated via webhook and Google Sheets.
Source: https://n8n.io/workflows/5771/ — 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.
This workflow is a fully automated AI video production pipeline. It accepts a raw script or topic via webhook, uses Claude AI to break the script into optimized video scenes, generates AI images for e
This n8n template helps you automatically analyze URLs for phishing and malicious activity using VirusTotal’s multi-engine threat intelligence platform. It validates incoming URLs, submits them for sc
This workflow automatically saves files received via LINE Messaging API into Google Drive and logs the file details into a Google Sheet. It checks the file type against allowed types, organizes files
This workflow turns your n8n instance into a portfolio management API using a webhook and Google Sheets. You can add, update or delete assets via a simple POST request and it automatically calculates
This workflow is a fully automated AI-powered business intelligence agent. It accepts a research topic or company name via webhook, autonomously collects data from multiple live sources (web search, n