Workflow: spy tool
Integrations: code, formTrigger, gmailTool, httpRequest, noOp, stickyNote, wait

{"id": "aOP0D1cAqzGv7Xa8", "meta": {"instanceId": "workflow-3c303a2b", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:59.592250", "updatedAt": "2025-09-29T07:07:59.592264", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "spy tool", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "5690844d-5322-4c62-8c83-eb4d4dc9c481", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [1400, 340], "parameters": {"model": "gpt-4o", "options": {}}, "credentials": {"openAiApi": {"id": "ZOKbogCxHnP2W0H5", "name": "OpenAi account"}}, "typeVersion": 1, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "3b1c034f-501b-423c-844f-9cb607fa91e6", "name": "Gmail", "type": "n8n-nodes-base.gmailTool", "position": [1580, 340], "webhookId": "6a510528-22e0-4140-b987-770bb7a138de", "parameters": {"sendTo": "tom@sleak.chat", "message": "={{ $fromAI(\"change\", \"What relevant part has changed on the website?\") }}", "options": {"appendAttribution": false}, "subject": "=Relevant changes on {{ $('parse results').item.json.website_url }}", "emailType": "text", "descriptionType": "manual", "toolDescription": "=Use this tool if you need to send an email, but only if the terms in the instructions mentioned explicitly state so\n"}, "credentials": {"gmailOAuth2": {"id": "jtANm6k92Kl6ent1", "name": "Gmail account"}}, "typeVersion": 2.1, "notes": "This gmailTool node performs automated tasks as part of the workflow."}, {"id": "4d448a02-4569-451e-8be5-59bfc48f36d8", "name": "parse results", "type": "n8n-nodes-base.code", "position": [1180, -160], "parameters": {"jsCode": "const parsedObject = JSON.parse($('convert message to website url & instruction').first().json.choices[0].message.content);\n\nreturn parsedObject"}, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "238298c4-5bba-4ac1-b3cc-ab5a28888560", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [1420, -120], "parameters": {"width": 260, "height": 180, "content": "## Note: almost never works right away\nAdjust the prompts in the 'Tools agent' and 'Gmail' node as desired to steer the agent's behavior in the right direction"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "0d519c06-aa30-4a33-895f-9185936d27cf", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [480, 100], "parameters": {"width": 150, "height": 80, "content": "Connect your Firecrawl account"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "9e327bbe-0096-4a4d-aec2-2e4cae7d91bd", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [1740, 80], "parameters": {"width": 150, "height": 80, "content": "Connect your own OpenAI account\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "30ce0e22-f536-462f-8f94-f3fd92ae036f", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [1660, 300], "parameters": {"width": 150, "height": 80, "content": "Connect your own Gmail account\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "bc003781-3d91-49b6-b6bb-b2970b39256a", "name": "convert message to website url & instruction", "type": "n8n-nodes-base.httpRequest", "position": [940, -160], "parameters": {"url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={\n  \"model\": \"gpt-4o-2024-08-06\",\n  \"messages\": [\n              {\n        \"role\": \"user\",\n        \"content\": \"convert the following message to a website url (just the plain text url, NOT formatted or in markdown) and prompt to AI. Make the prompt as verbose as possible. Message: {{ $('New espionage assignment').first().json.assignment_instructions }}\"\n    }\n  ],\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"name\": \"variable_extraction\",\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"website_url\": { \"type\": \"string\" },\n          \"prompt\": { \"type\": \"string\" }\n        },\n        \"required\": [\"website_url\", \"prompt\"],\n        \"additionalProperties\": false\n      },\n      \"strict\": true\n    }\n  }\n}\n", "sendBody": true, "specifyBody": "json", "authentication": "{{ $credentials.predefinedCredentialType }}", "nodeCredentialType": "YOUR_CREDENTIAL_HERE"}, "credentials": {"openAiApi": {"id": "ZOKbogCxHnP2W0H5", "name": "OpenAi account"}}, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "6a8c172d-ac39-4cb0-b601-39fc770695ed", "name": "New espionage assignment", "type": "n8n-nodes-base.formTrigger", "position": [700, -160], "webhookId": "7470334f-93e1-47af-9521-d3a232c38b13", "parameters": {"options": {}, "formTitle": "New espionage assignment", "formFields": {"values": [{"fieldLabel": "assignment_instructions"}]}}, "notesInFlow": false, "typeVersion": 2.2, "notes": "This formTrigger node performs automated tasks as part of the workflow."}, {"id": "c5c64e5c-88de-45e3-bb9b-4096e74a6e83", "name": "wait 1 day", "type": "n8n-nodes-base.wait", "position": [940, 80], "webhookId": "22e689e4-b93d-4c59-81e5-43c070833454", "parameters": {"unit": "days", "amount": 1}, "typeVersion": 1.1, "notes": "This wait node performs automated tasks as part of the workflow."}, {"id": "62a278ff-ed00-4e54-a608-001237551113", "name": "scrape page - 1", "type": "n8n-nodes-base.httpRequest", "position": [700, 80], "parameters": {"url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={\n  \"url\": \"{{ $('parse results').item.json.website_url }}\",\n  \"formats\": [\n    \"markdown\"\n  ],\n  \"onlyMainContent\": true,\n  \"waitFor\": 5000\n}", "sendBody": true, "specifyBody": "json", "authentication": "{{ $credentials.genericCredentialType }}", "genericAuthType": "httpHeaderAuth"}, "credentials": {"httpBasicAuth": {"id": "h2XRcXzLcEfvDVKb", "name": "Unnamed credential"}, "httpHeaderAuth": {"id": "FoyIka0WgFG4FPxA", "name": "Header Auth account 2"}}, "retryOnFail": true, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "89c15d8f-7f8e-4391-b24a-07579964ca5c", "name": "scrape page - 2", "type": "n8n-nodes-base.httpRequest", "position": [1180, 80], "parameters": {"url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={\n  \"url\": \"{{ $('parse results').item.json.website_url }}\",\n  \"formats\": [\n    \"markdown\"\n  ],\n  \"onlyMainContent\": true,\n  \"waitFor\": 5000\n}", "sendBody": true, "specifyBody": "json", "authentication": "{{ $credentials.genericCredentialType }}", "genericAuthType": "httpHeaderAuth"}, "credentials": {"httpHeaderAuth": {"id": "FoyIka0WgFG4FPxA", "name": "Header Auth account 2"}}, "retryOnFail": true, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow."}, {"id": "7b148c5b-d4ae-498a-b7ef-2ed4ecc0a665", "name": "send e-mail?", "type": "n8n-nodes-base.noOp", "position": [1420, 80], "parameters": {"text": "={{ $('parse results').item.json.prompt }}\n\nNOTE: ONLY send an email if the situation meets the above condition. Otherwise, do NOT use the tool\n\nNOTE: this concerns differences between the \"old version page\" (scrape from yesterday) and \"new version page\" (scrape from now)", "options": {"systemMessage": "=old version page: \\n\\n {{ JSON.stringify($('scrape page - 1').item.json[\"data\"][\"markdown\"]) }} \\n\\n /// \\n\\n new version page: \\n\\n {{ JSON.stringify($('scrape page - 1').item.json[\"data\"][\"markdown\"]) }}"}, "promptType": "define", "hasOutputParser": true}, "typeVersion": 1.7, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "7897d707-2c27-43bf-9ea0-90ab7996bf4a", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [920, -260], "parameters": {"width": 150, "height": 80, "content": "Connect your own OpenAI account\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}], "active": true, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "dec23eea-1590-4418-ab2b-1cb4a6ccfdc6", "connections": {"bc003781-3d91-49b6-b6bb-b2970b39256a": {"main": [[{"node": "error-handler-bc003781-3d91-49b6-b6bb-b2970b39256a", "type": "main", "index": 0}], [{"node": "error-handler-bc003781-3d91-49b6-b6bb-b2970b39256a-afe9eb96", "type": "main", "index": 0}], [{"node": "error-handler-bc003781-3d91-49b6-b6bb-b2970b39256a-39a008b8", "type": "main", "index": 0}], [{"node": "error-handler-bc003781-3d91-49b6-b6bb-b2970b39256a-7c33e8db", "type": "main", "index": 0}], [{"node": "error-handler-bc003781-3d91-49b6-b6bb-b2970b39256a-83463f60", "type": "main", "index": 0}], [{"node": "error-handler-bc003781-3d91-49b6-b6bb-b2970b39256a-409c417f", "type": "main", "index": 0}], [{"node": "error-handler-bc003781-3d91-49b6-b6bb-b2970b39256a-c154cd80", "type": "main", "index": 0}], [{"node": "error-handler-bc003781-3d91-49b6-b6bb-b2970b39256a-061403af", "type": "main", "index": 0}], [{"node": "error-handler-bc003781-3d91-49b6-b6bb-b2970b39256a-01b56745", "type": "main", "index": 0}]]}, "62a278ff-ed00-4e54-a608-001237551113": {"main": [[{"node": "error-handler-62a278ff-ed00-4e54-a608-001237551113", "type": "main", "index": 0}], [{"node": "error-handler-62a278ff-ed00-4e54-a608-001237551113-c2d83c0c", "type": "main", "index": 0}], [{"node": "error-handler-62a278ff-ed00-4e54-a608-001237551113-b1a51b8c", "type": "main", "index": 0}], [{"node": "error-handler-62a278ff-ed00-4e54-a608-001237551113-040e47b5", "type": "main", "index": 0}], [{"node": "error-handler-62a278ff-ed00-4e54-a608-001237551113-519296ae", "type": "main", "index": 0}], [{"node": "error-handler-62a278ff-ed00-4e54-a608-001237551113-82fd111f", "type": "main", "index": 0}], [{"node": "error-handler-62a278ff-ed00-4e54-a608-001237551113-ee4d3ddc", "type": "main", "index": 0}], [{"node": "error-handler-62a278ff-ed00-4e54-a608-001237551113-f4a330f1", "type": "main", "index": 0}], [{"node": "error-handler-62a278ff-ed00-4e54-a608-001237551113-2762ebbc", "type": "main", "index": 0}]]}, "89c15d8f-7f8e-4391-b24a-07579964ca5c": {"main": [[{"node": "error-handler-89c15d8f-7f8e-4391-b24a-07579964ca5c", "type": "main", "index": 0}], [{"node": "error-handler-89c15d8f-7f8e-4391-b24a-07579964ca5c-d6df499e", "type": "main", "index": 0}], [{"node": "error-handler-89c15d8f-7f8e-4391-b24a-07579964ca5c-501cc5bd", "type": "main", "index": 0}], [{"node": "error-handler-89c15d8f-7f8e-4391-b24a-07579964ca5c-b338a60c", "type": "main", "index": 0}], [{"node": "error-handler-89c15d8f-7f8e-4391-b24a-07579964ca5c-0a5d8c31", "type": "main", "index": 0}], [{"node": "error-handler-89c15d8f-7f8e-4391-b24a-07579964ca5c-43fbaec2", "type": "main", "index": 0}], [{"node": "error-handler-89c15d8f-7f8e-4391-b24a-07579964ca5c-98e4a31d", "type": "main", "index": 0}], [{"node": "error-handler-89c15d8f-7f8e-4391-b24a-07579964ca5c-cacee123", "type": "main", "index": 0}], [{"node": "error-handler-89c15d8f-7f8e-4391-b24a-07579964ca5c-7ef86503", "type": "main", "index": 0}]]}, "5690844d-5322-4c62-8c83-eb4d4dc9c481": {"main": [[{"node": "error-handler-5690844d-5322-4c62-8c83-eb4d4dc9c481-43b7c1c9", "type": "main", "index": 0}]]}}, "description": "Automated workflow: spy tool. This workflow integrates 9 different services: stickyNote, httpRequest, formTrigger, wait, code. It contains 21 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: spy tool. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}