{ "id": "wTI77cpLkbxsRQat", "meta": { "instanceId": "workflow-a23548dd", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:50.743067", "updatedAt": "2025-09-29T07:07:50.743108", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "name": "Brand Content Extract, Summarize & Sentiment Analysis with Bright Data", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "nodes": [ { "id": "646ef542-c601-4103-87e6-6fa9616d8c52", "name": "When clicking ‘Test workflow’", "type": "n8n-nodes-base.manualTrigger", "position": [ 120, -560 ], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow." }, { "id": "00b4ce90-c4f2-41c4-8943-7db3d0c3f81a", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ 100, -320 ], "parameters": { "width": 400, "height": 300, "content": "## Note\n\nThis workflow deals with the brand content extraction by utilizing the Bright Data Web Unlocker Product.\n\nThe Basic LLM Chain, Information Extraction, Summarization Chain are being used to demonstrate the usage of the N8N AI capabilities.\n\n**Please make sure to set the web URL of your interest within the \"Set URL and Bright Data Zone\" node and update the Webhook Notification URL**" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "5cc35b9b-7483-404e-96a3-1688f7b9078b", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [ 540, -320 ], "parameters": { "width": 480, "height": 300, "content": "## LLM Usages\n\nGoogle Gemini Flash Exp model is being used.\n\nBasic LLM Chain Data Extractor.\n\nInformation Extraction is being used for the handling the custom sentiment analysis with the structured response.\n\nSummarization Chain is being used for the creation of a concise summary of the extracted brand content." }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "e15f32de-58d9-4ea6-9d5c-f63975d1090d", "name": "Markdown to Textual Data Extractor", "type": "n8n-nodes-base.noOp", "position": [ 1240, -440 ], "parameters": { "text": "=You need to analyze the below markdown and convert to textual data. Please do not output with your own thoughts. Make sure to output with textual data only with no links, scripts, css etc.\n\n{{ $json.data }}", "messages": { "messageValues": [ { "message": "You are a markdown expert" } ] }, "promptType": "define" }, "typeVersion": 1.6, "notes": "This chainLlm node performs automated tasks as part of the workflow." }, { "id": "1462cd3b-b1d5-4ddf-9f1e-2b8f20faa19c", "name": "Set URL and Bright Data Zone", "type": "n8n-nodes-base.set", "position": [ 340, -560 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "3aedba66-f447-4d7a-93c0-8158c5e795f9", "name": "url", "type": "string", "value": "{{ $env.WEBHOOK_URL }}" }, { "id": "4e7ee31d-da89-422f-8079-2ff2d357a0ba", "name": "zone", "type": "string", "value": "web_unlocker1" } ] } }, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "9783e878-e864-4632-9b89-d78567204053", "name": "AI Sentiment Analyzer with the structured response", "type": "n8n-nodes-base.noOp", "position": [ 1740, 100 ], "parameters": { "text": "=Perform the sentiment analysis on the below content and output with the structured information.\n\nHere's the content:\n\n{{ $('Perform Bright Data Web Request').item.json.data }}", "options": { "systemPromptTemplate": "You are an expert sentiment analyzer." }, "schemaType": "manual", "inputSchema": "{\n \"$schema\": \"{{ $env.WEBHOOK_URL }}\",\n \"title\": \"SentimentAnalysisResponseArray\",\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"sentiment\": {\n \"type\": \"string\",\n \"enum\": [\"Positive\", \"Neutral\", \"Negative\"],\n \"description\": \"The overall sentiment of the content.\"\n },\n \"confidence_score\": {\n \"type\": \"number\",\n \"minimum\": 0,\n \"maximum\": 1,\n \"description\": \"Confidence score of the sentiment classification.\"\n },\n \"sentence\": {\n \"type\": \"string\",\n \"description\": \"A natural language statement explaining the sentiment.\"\n }\n },\n \"required\": [\"sentiment\", \"confidence_score\", \"sentence\"],\n \"additionalProperties\": false\n }\n}\n" }, "typeVersion": 1, "notes": "This informationExtractor node performs automated tasks as part of the workflow." }, { "id": "41352a53-7821-4247-905e-7995e1e6e382", "name": "Initiate a Webhook Notification for Markdown to Textual Data Extraction", "type": "n8n-nodes-base.httpRequest", "position": [ 1720, -460 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}", "options": {}, "sendBody": true, "bodyParameters": { "parameters": [ { "name": "summary", "value": "={{ $json.text }}" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "9717b5df-f148-4c8c-95d4-cb7c54837228", "name": "Initiate a Webhook Notification for AI Sentiment Analyzer", "type": "n8n-nodes-base.httpRequest", "position": [ 2120, 100 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}", "options": {}, "sendBody": true, "bodyParameters": { "parameters": [ { "name": "summary", "value": "={{ $json.output }}" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "88733b5f-cbb0-42a6-898c-7a1ccc94bef7", "name": "Google Gemini Chat Model for Summary", "type": "n8n-nodes-base.noOp", "position": [ 1260, -780 ], "parameters": { "options": {}, "modelName": "models/gemini-2.0-flash-exp" }, "credentials": { "googlePalmApi": { "id": "YeO7dHZnuGBVQKVZ", "name": "Google Gemini(PaLM) Api account" } }, "typeVersion": 1, "notes": "This lmChatGoogleGemini node performs automated tasks as part of the workflow." }, { "id": "560e3d33-61d8-4db6-b1df-89f4e915f3f1", "name": "Google Gemini Chat Model for Data Extract", "type": "n8n-nodes-base.noOp", "position": [ 1320, -220 ], "parameters": { "options": {}, "modelName": "models/gemini-2.0-flash-exp" }, "credentials": { "googlePalmApi": { "id": "YeO7dHZnuGBVQKVZ", "name": "Google Gemini(PaLM) Api account" } }, "typeVersion": 1, "notes": "This lmChatGoogleGemini node performs automated tasks as part of the workflow." }, { "id": "1b07608f-7174-46e8-af27-3abf100d9e3a", "name": "Google Gemini Chat Model for Sentiment Analyzer", "type": "n8n-nodes-base.noOp", "position": [ 1820, 320 ], "parameters": { "options": {}, "modelName": "models/gemini-2.0-flash-exp" }, "credentials": { "googlePalmApi": { "id": "YeO7dHZnuGBVQKVZ", "name": "Google Gemini(PaLM) Api account" } }, "typeVersion": 1, "notes": "This lmChatGoogleGemini node performs automated tasks as part of the workflow." }, { "id": "b6b6df94-d3fc-45ee-a339-5a368ea000eb", "name": "Initiate a Webhook Notification for Summarization", "type": "n8n-nodes-base.httpRequest", "position": [ 1660, -820 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}", "options": {}, "sendBody": true, "bodyParameters": { "parameters": [ { "name": "summary", "value": "={{ $json.response.text }}" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "f3e60ecd-5d07-4df0-a413-327b24db23ab", "name": "Perform Bright Data Web Request", "type": "n8n-nodes-base.httpRequest", "position": [ 560, -560 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "sendBody": true, "sendHeaders": true, "authentication": "{{ $credentials.genericCredentialType }}", "bodyParameters": { "parameters": [ { "name": "zone", "value": "={{ $json.zone }}" }, { "name": "url", "value": "={{ $json.url }}?product=unlocker&method=api" }, { "name": "format", "value": "raw" }, { "name": "data_format", "value": "markdown" } ] }, "genericAuthType": "httpHeaderAuth", "headerParameters": { "parameters": [ {} ] } }, "credentials": { "httpHeaderAuth": { "id": "kdbqXuxIR8qIxF7y", "name": "Header Auth account" } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "9030085f-5b05-41d9-94ee-668ee29df815", "name": "Summarize Content", "type": "n8n-nodes-base.noOp", "position": [ 1240, -980 ], "parameters": { "options": { "summarizationMethodAndPrompts": { "values": { "prompt": "Write a concise summary of the following:\n\n\n\"{text}\"\n\n" } } }, "chunkingMode": "advanced" }, "typeVersion": 2, "notes": "This chainSummarization node performs automated tasks as part of the workflow." }, { "id": "fe93c4a6-de3b-481d-ba6c-5f315f5279c4", "name": "Create a binary data for textual data", "type": "n8n-nodes-base.function", "position": [ 1720, -220 ], "parameters": { "functionCode": "items[0].binary = {\n data: {\n data: new Buffer(JSON.stringify(items[0].json, null, 2)).toString('base64')\n }\n};\nreturn items;" }, "typeVersion": 1, "notes": "This function node performs automated tasks as part of the workflow." }, { "id": "0811c300-1302-49b5-a334-ac8f960a5b8c", "name": "Create a binary data for sentiment analysis", "type": "n8n-nodes-base.function", "position": [ 2120, 320 ], "parameters": { "functionCode": "items[0].binary = {\n data: {\n data: new Buffer(JSON.stringify(items[0].json, null, 2)).toString('base64')\n }\n};\nreturn items;" }, "typeVersion": 1, "notes": "This function node performs automated tasks as part of the workflow." }, { "id": "01d798b7-7c62-4240-9d5e-f2e67ca047ae", "name": "Write the AI Sentiment analysis file to disk", "type": "n8n-nodes-base.readWriteFile", "position": [ 2520, 320 ], "parameters": { "options": {}, "fileName": "d:\\Brand-Content-Sentiment-Analysis.json", "operation": "write" }, "typeVersion": 1, "notes": "This readWriteFile node performs automated tasks as part of the workflow." }, { "id": "f9faf283-ba8d-48e1-860e-2bb660cb9c1e", "name": "Write the textual file to disk", "type": "n8n-nodes-base.readWriteFile", "position": [ 2100, -220 ], "parameters": { "options": {}, "fileName": "d:\\Brand-Content-Textual.json", "operation": "write" }, "typeVersion": 1, "notes": "This readWriteFile node performs automated tasks as part of the workflow." }, { "id": "2c47c271-4456-4fc4-9a54-20784365a4af", "name": "Create a binary data for summary", "type": "n8n-nodes-base.function", "position": [ 1660, -1060 ], "parameters": { "functionCode": "items[0].binary = {\n data: {\n data: new Buffer(JSON.stringify(items[0].json, null, 2)).toString('base64')\n }\n};\nreturn items;" }, "typeVersion": 1, "notes": "This function node performs automated tasks as part of the workflow." }, { "id": "c5f33f8d-93eb-47ac-a42f-717b39f4d7c2", "name": "Write the summary file to disk", "type": "n8n-nodes-base.readWriteFile", "position": [ 1880, -1060 ], "parameters": { "options": {}, "fileName": "d:\\Brand-Content-Summary.json", "operation": "write" }, "typeVersion": 1, "notes": "This readWriteFile node performs automated tasks as part of the workflow." }, { "id": "72938f7b-20c1-45d3-9348-878d6e0b8d60", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [ 1200, -1080 ], "parameters": { "color": 4, "width": 1100, "height": 460, "content": "## Summarization" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "fcf1d1ad-d516-41bc-bf76-73ebb920ecba", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [ 1720, 40 ], "parameters": { "color": 6, "width": 1000, "height": 480, "content": "## Sentiment Analysis" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "9c44d01f-e30b-4597-ad74-09fa54b4ec84", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [ 1200, -520 ], "parameters": { "color": 3, "width": 1100, "height": 480, "content": "## Textual Data Extract" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." } ], "active": false, "pinData": {}, "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "versionId": "317a5d48-95c6-4425-a14a-6b2fec9e0802", "connections": { "41352a53-7821-4247-905e-7995e1e6e382": { "main": [ [ { "node": "error-handler-41352a53-7821-4247-905e-7995e1e6e382", "type": "main", "index": 0 } ], [ { "node": "error-handler-41352a53-7821-4247-905e-7995e1e6e382-b21c2e28", "type": "main", "index": 0 } ], [ { "node": "error-handler-41352a53-7821-4247-905e-7995e1e6e382-86c9ecb0", "type": "main", "index": 0 } ], [ { "node": "error-handler-41352a53-7821-4247-905e-7995e1e6e382-1c100fef", "type": "main", "index": 0 } ], [ { "node": "error-handler-41352a53-7821-4247-905e-7995e1e6e382-7c1be4f3", "type": "main", "index": 0 } ], [ { "node": "error-handler-41352a53-7821-4247-905e-7995e1e6e382-4f0c0ff4", "type": "main", "index": 0 } ], [ { "node": "error-handler-41352a53-7821-4247-905e-7995e1e6e382-2c9103f4", "type": "main", "index": 0 } ], [ { "node": "error-handler-41352a53-7821-4247-905e-7995e1e6e382-6f3045b3", "type": "main", "index": 0 } ], [ { "node": "error-handler-41352a53-7821-4247-905e-7995e1e6e382-28d8024d", "type": "main", "index": 0 } ] ] }, "9717b5df-f148-4c8c-95d4-cb7c54837228": { "main": [ [ { "node": "error-handler-9717b5df-f148-4c8c-95d4-cb7c54837228", "type": "main", "index": 0 } ], [ { "node": "error-handler-9717b5df-f148-4c8c-95d4-cb7c54837228-33008699", "type": "main", "index": 0 } ], [ { "node": "error-handler-9717b5df-f148-4c8c-95d4-cb7c54837228-166cf996", "type": "main", "index": 0 } ], [ { "node": "error-handler-9717b5df-f148-4c8c-95d4-cb7c54837228-35698092", "type": "main", "index": 0 } ], [ { "node": "error-handler-9717b5df-f148-4c8c-95d4-cb7c54837228-418b4ee4", "type": "main", "index": 0 } ], [ { "node": "error-handler-9717b5df-f148-4c8c-95d4-cb7c54837228-6b188f7c", "type": "main", "index": 0 } ], [ { "node": "error-handler-9717b5df-f148-4c8c-95d4-cb7c54837228-2fce0add", "type": "main", "index": 0 } ], [ { "node": "error-handler-9717b5df-f148-4c8c-95d4-cb7c54837228-8d3f610c", "type": "main", "index": 0 } ], [ { "node": "error-handler-9717b5df-f148-4c8c-95d4-cb7c54837228-ff4dbf1d", "type": "main", "index": 0 } ] ] }, "b6b6df94-d3fc-45ee-a339-5a368ea000eb": { "main": [ [ { "node": "error-handler-b6b6df94-d3fc-45ee-a339-5a368ea000eb", "type": "main", "index": 0 } ], [ { "node": "error-handler-b6b6df94-d3fc-45ee-a339-5a368ea000eb-86d41aa3", "type": "main", "index": 0 } ], [ { "node": "error-handler-b6b6df94-d3fc-45ee-a339-5a368ea000eb-0f60545a", "type": "main", "index": 0 } ], [ { "node": "error-handler-b6b6df94-d3fc-45ee-a339-5a368ea000eb-af764b71", "type": "main", "index": 0 } ], [ { "node": "error-handler-b6b6df94-d3fc-45ee-a339-5a368ea000eb-dd1bbb51", "type": "main", "index": 0 } ], [ { "node": "error-handler-b6b6df94-d3fc-45ee-a339-5a368ea000eb-7232b515", "type": "main", "index": 0 } ], [ { "node": "error-handler-b6b6df94-d3fc-45ee-a339-5a368ea000eb-b802c2e2", "type": "main", "index": 0 } ], [ { "node": "error-handler-b6b6df94-d3fc-45ee-a339-5a368ea000eb-1703e74b", "type": "main", "index": 0 } ], [ { "node": "error-handler-b6b6df94-d3fc-45ee-a339-5a368ea000eb-06a4d514", "type": "main", "index": 0 } ] ] }, "f3e60ecd-5d07-4df0-a413-327b24db23ab": { "main": [ [ { "node": "error-handler-f3e60ecd-5d07-4df0-a413-327b24db23ab", "type": "main", "index": 0 } ], [ { "node": "error-handler-f3e60ecd-5d07-4df0-a413-327b24db23ab-e4b6cfda", "type": "main", "index": 0 } ], [ { "node": "error-handler-f3e60ecd-5d07-4df0-a413-327b24db23ab-0979f45f", "type": "main", "index": 0 } ], [ { "node": "error-handler-f3e60ecd-5d07-4df0-a413-327b24db23ab-c0114727", "type": "main", "index": 0 } ], [ { "node": "error-handler-f3e60ecd-5d07-4df0-a413-327b24db23ab-3cd21f1b", "type": "main", "index": 0 } ], [ { "node": "error-handler-f3e60ecd-5d07-4df0-a413-327b24db23ab-049b417f", "type": "main", "index": 0 } ], [ { "node": "error-handler-f3e60ecd-5d07-4df0-a413-327b24db23ab-d1160f52", "type": "main", "index": 0 } ], [ { "node": "error-handler-f3e60ecd-5d07-4df0-a413-327b24db23ab-49857732", "type": "main", "index": 0 } ], [ { "node": "error-handler-f3e60ecd-5d07-4df0-a413-327b24db23ab-ddf27929", "type": "main", "index": 0 } ] ] }, "88733b5f-cbb0-42a6-898c-7a1ccc94bef7": { "main": [ [ { "node": "error-handler-88733b5f-cbb0-42a6-898c-7a1ccc94bef7-bf9cfc51", "type": "main", "index": 0 } ] ] }, "560e3d33-61d8-4db6-b1df-89f4e915f3f1": { "main": [ [ { "node": "error-handler-560e3d33-61d8-4db6-b1df-89f4e915f3f1-6462c32b", "type": "main", "index": 0 } ] ] }, "1b07608f-7174-46e8-af27-3abf100d9e3a": { "main": [ [ { "node": "error-handler-1b07608f-7174-46e8-af27-3abf100d9e3a-783ddf1a", "type": "main", "index": 0 } ] ] }, "01d798b7-7c62-4240-9d5e-f2e67ca047ae": { "main": [ [ { "node": "error-handler-01d798b7-7c62-4240-9d5e-f2e67ca047ae-51b83070", "type": "main", "index": 0 } ] ] }, "f9faf283-ba8d-48e1-860e-2bb660cb9c1e": { "main": [ [ { "node": "error-handler-f9faf283-ba8d-48e1-860e-2bb660cb9c1e-7d2ae71d", "type": "main", "index": 0 } ] ] }, "c5f33f8d-93eb-47ac-a42f-717b39f4d7c2": { "main": [ [ { "node": "error-handler-c5f33f8d-93eb-47ac-a42f-717b39f4d7c2-7783821a", "type": "main", "index": 0 } ] ] } }, "description": "Automated workflow: Brand Content Extract, Summarize & Sentiment Analysis with Bright Data. This workflow integrates 11 different services: stickyNote, httpRequest, lmChatGoogleGemini, readWriteFile, chainLlm. It contains 37 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Brand Content Extract, Summarize & Sentiment Analysis with Bright Data. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }