{"nodes":[{"id":"70a44436-4b51-458a-ae93-60edeed170de","name":"On clicking 'execute'","type":"n8n-nodes-base.manualTrigger","position":[240,300],"parameters":{},"typeVersion":1,"notes":"This manualTrigger node performs automated tasks as part of the workflow."},{"id":"d4c2dfa2-30bb-4f06-96c2-5811472302d2","name":"Cron","type":"n8n-nodes-base.cron","position":[240,100],"parameters":{"triggerTimes":{"item":[{"mode":"custom","cronExpression":"15 7 * * 1-6"}]}},"typeVersion":1,"notes":"This cron node performs automated tasks as part of the workflow."},{"id":"86924546-e4f2-4795-8e80-9e49626d2c42","name":"Baserow","type":"n8n-nodes-base.baserow","position":[460,200],"parameters":{"tableId":680,"databaseId":146,"additionalOptions":{}},"credentials":{"baserowApi":{"id":"{{ $credentials.baserowApi.id }}","name":"Baserow account"}},"typeVersion":1,"notes":"This baserow node performs automated tasks as part of the workflow."},{"id":"36f2947b-67cf-47eb-891f-e7e3b5ba9eac","name":"Fetch tradegate stock page","type":"n8n-nodes-base.httpRequest","position":[680,200],"parameters":{"url":"{{ $env.WEBHOOK_URL }}","options":{},"responseFormat":"string","queryParametersUi":{"parameter":[{"name":"isin","value":"={{$json[\"ISIN\"]}}"}]}},"typeVersion":1,"notes":"This httpRequest node performs automated tasks as part of the workflow."},{"id":"b516e751-d1d1-43a0-8f19-6787a5c56ddc","name":"Parse tradegate stock page","type":"n8n-nodes-base.htmlExtract","position":[900,200],"parameters":{"options":{},"extractionValues":{"values":[{"key":"YOUR_CREDENTIAL_HERE","cssSelector":"#col1_content > table > tbody > tr:nth-child(2) > td:nth-child(1)"},{"key":"YOUR_CREDENTIAL_HERE","cssSelector":"#col1_content > table > tbody > tr:nth-child(2) > td:nth-child(3)"},{"key":"YOUR_CREDENTIAL_HERE","cssSelector":"#col1_content > table > tbody > tr:nth-child(2) > td:nth-child(4)"},{"key":"YOUR_CREDENTIAL_HERE","cssSelector":"#col1_content > h2"},{"key":"YOUR_CREDENTIAL_HERE","cssSelector":"#bid"},{"key":"YOUR_CREDENTIAL_HERE","cssSelector":"#ask"}]}},"typeVersion":1,"notes":"This htmlExtract node performs automated tasks as part of the workflow."},{"id":"e51556c7-3f3a-4e4d-96e9-942f436422af","name":"Build HTML","type":"n8n-nodes-base.function","position":[1560,200],"parameters":{"functionCode":"const columns = Object.keys(items[0].json);\n\n// Define the basic table structure\nlet table_header = `<table style=\"border: 1px solid black; border-collapse: collapse;\"><tr>${columns.map(e => '<th style=\"border: 1px solid black; border-collapse: collapse;\">' + e + '</th>').join('')}</tr>`;\nlet table_content = \"\";\nlet table_footer = '</table>';\n\n// Add content to our table\nfor (item of items) {\n    table_content += '<tr>'\n    for (column of columns) {\n        table_content += `<td style=\\\"border: 1px solid black; border-collapse: collapse;\\\">${item.json[column]}</td>`\n    }\n    table_content += '</tr>'\n}\n\n// Prepare HTML email body\nconst email_html = `<body style=\"font-family: Sans-Serif;\">\n<p>Investments as of ${$now.setZone(\"Europe/Dublin\").setLocale('ie').toFormat('fff')}:</p>\n${table_header}\n${table_content}\n${table_footer}\n<p>Total: ${items.map(e => parseFloat(e.json['Current Value'])).reduce((a, b) => a + b, 0).toFixed(2)}</p>\n<p><small>Workflow #${$workflow.id}</small></p>\n</body>`\n\n\nreturn [{\n    json: {\n        html: email_html\n    }\n}];"},"typeVersion":1,"notes":"This function node performs automated tasks as part of the workflow."},{"id":"361bf8f2-298c-4b96-9f21-4f4620f1e9a9","name":"Format result","type":"n8n-nodes-base.set","position":[1120,200],"parameters":{"values":{"string":[{"name":"Name","value":"={{ $node[\"Baserow\"].json[\"Name\"] }}"},{"name":"ISIN","value":"={{ $node[\"Baserow\"].json[\"ISIN\"] }}"},{"name":"Count","value":"={{ $node[\"Baserow\"].json[\"Count\"] }}"},{"name":"Purchase Price","value":"={{ $node[\"Baserow\"].json[\"Purchase Price\"] }}"},{"name":"Current Value","value":"={{ (parseFloat($json[\"Bid\"].replace(',', '.')) * parseFloat($node[\"Baserow\"].json[\"Count\"])).toFixed(2) }}"}]},"options":{},"keepOnlySet":true},"typeVersion":1,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"c2f329dc-3b97-402a-9d63-ed863c2aee84","name":"Calculate change","type":"n8n-nodes-base.set","position":[1340,200],"parameters":{"values":{"string":[{"name":"Change","value":"={{ ( parseFloat($json[\"Current Value\"]) - parseFloat($json[\"Purchase Price\"]) ).toFixed(2) }}"},{"name":"Change (%)","value":"={{ ( ( ( parseFloat($json[\"Current Value\"]) - parseFloat($json[\"Purchase Price\"]) ) / parseFloat($json[\"Purchase Price\"]) ) * 100).toFixed(2) }}"}]},"options":{}},"typeVersion":1,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"e0876374-c9f3-4253-8764-9aa78faa2193","name":"SendGrid","type":"n8n-nodes-base.sendGrid","position":[1780,200],"parameters":{"subject":"Investment report","toEmail":"mutedjam@n8n.io","resource":"mail","fromEmail":"mutedjam@n8n.io","contentType":"text/html","contentValue":"={{ $json[\"html\"] }}","additionalFields":{}},"credentials":{"sendGridApi":{"id":"{{ $credentials.sendGridApi.id }}","name":"SendGrid account"}},"typeVersion":1,"notes":"This sendGrid node performs automated tasks as part of the workflow."}],"connections":{"Fetch tradegate stock page":{"main":[[],[],[],[],[],[],[],[],[]]}},"name":"Manualtrigger Workflow","description":"Automated workflow: Manualtrigger Workflow. This workflow processes data and performs automated tasks.","settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"meta":{"instanceId":"workflow-139ac8f3","versionId":"1.0.0","createdAt":"2025-09-29T07:07:48.757584","updatedAt":"2025-09-29T07:07:48.757601","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"notes":"Excellent quality workflow: Manualtrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}