{ "id": "TTj6BiN7bQKTa6FM", "meta": { "instanceId": "workflow-19006cc6", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:59.368578", "updatedAt": "2025-09-29T07:07:59.368606", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "name": "Indeed Company Data Scraper & Summarization with Airtable, Bright Data and Google Gemini", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "nodes": [ { "id": "390ebd32-6ce4-4894-9b4f-7b376db5b724", "name": "When clicking ‘Test workflow’", "type": "n8n-nodes-base.manualTrigger", "position": [ -220, -545 ], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow." }, { "id": "8ba6b208-b4ad-443c-8b24-c51b3b5ad880", "name": "Google Gemini Chat Model For Summarization", "type": "n8n-nodes-base.noOp", "position": [ 1784, -300 ], "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": "394a7291-618a-42f0-8e1b-18ed7c8496c3", "name": "Webhook HTTP Request", "type": "n8n-nodes-base.noOp", "position": [ 2280, -160 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}", "method": "POST", "sendBody": true, "parametersBody": { "values": [ { "name": "search_summary", "value": "={{ $json.response.text }}", "valueProvider": "fieldValue" }, { "name": "search_result" } ] }, "toolDescription": "Extract the response and format a structured JSON response" }, "typeVersion": 1.1, "notes": "This toolHttpRequest node performs automated tasks as part of the workflow." }, { "id": "4e1352a5-0fa6-4fee-a93d-cc0a0a4fdd6f", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ -240, -1080 ], "parameters": { "width": 400, "height": 320, "content": "## Note\n\nDeals with the Company web scraping by utilizing Bright Data Web Unlocker Product.\n\nThe Basic LLM Chain, Summarization and AI Agent are being used to demonstrate the usage of the n8n AI capabilities.\n\n**Please make sure to connect to Airtable with the Base Table as \"Indeed\" and the default Table1 filled with the indeed links to scrape. \n\nAlso make sure to update the Webhook Notification URL**" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "bf184d27-ed62-44fa-bed2-65a1f703179e", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [ 720, -1080 ], "parameters": { "width": 480, "height": 320, "content": "## LLM Usages\n\nGoogle Gemini Flash Exp model is being used.\n\nBasic LLM Chain Data Extractor.\n\nSummarization Chain is being used for the summarization of search results.\n\nThe AI Agent formats the search result and pushes it to the Webhook via HTTP Request" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "78f32ce2-1e79-4f3e-8561-4a5e07d88696", "name": "Perform Indeed Web Request", "type": "n8n-nodes-base.httpRequest", "position": [ 1100, -670 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "sendBody": true, "sendHeaders": true, "authentication": "{{ $credentials.genericCredentialType }}", "bodyParameters": { "parameters": [ { "name": "zone", "value": "={{ $('Set Bright Data Zone').item.json.zone }}" }, { "name": "url", "value": "={{ $env.WEBHOOK_URL }}{{ encodeURI($('Airtable').item.json.Link) }}?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": "3738e714-59aa-4b0b-876c-c2f15a1d7479", "name": "Indeed Expert AI Agent", "type": "n8n-nodes-base.noOp", "position": [ 2072, -395 ], "parameters": { "text": "=You are an Indeed Expert. You need to format the search result and push it to the Webhook via HTTP Request. Here is the search result - {{ $('Markdown to Textual Data Extractor').item.json.text }}", "options": {}, "promptType": "define" }, "typeVersion": 1.8, "notes": "This agent node performs automated tasks as part of the workflow." }, { "id": "47e96e87-8ac7-43d7-af6f-b52404be4eec", "name": "Google Gemini Chat Model", "type": "n8n-nodes-base.noOp", "position": [ 1408, -300 ], "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": "b2b8f3f6-ef13-47ff-8e6e-4c262b352b2e", "name": "Markdown to Textual Data Extractor", "type": "n8n-nodes-base.noOp", "position": [ 1320, -520 ], "parameters": { "text": "=You need to analyze the below markdown and convert to textual data.\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": "791d5991-0baa-4aff-8dbe-465c1335889f", "name": "Convert Markdown to HTML", "type": "n8n-nodes-base.markdown", "position": [ 1398, -820 ], "parameters": { "mode": "markdownToHtml", "options": {}, "markdown": "={{ $json.data }}" }, "typeVersion": 1, "notes": "This markdown node performs automated tasks as part of the workflow." }, { "id": "844c49a6-edd0-4a63-944e-44310e39ab09", "name": "Initiate a Webhook Notification for Markdown to HTML Response", "type": "n8n-nodes-base.httpRequest", "position": [ 1774, -820 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}", "options": {}, "sendBody": true, "bodyParameters": { "parameters": [ { "name": "html_response", "value": "={{ $json.data }}" } ] } }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "cb7b971d-17a9-4b49-8807-7a9d4f7550d2", "name": "Set Bright Data Zone", "type": "n8n-nodes-base.set", "position": [ 0, -545 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "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": "47702b8b-5722-4fe0-93fc-950470b043c8", "name": "Loop Over Items", "type": "n8n-nodes-base.splitInBatches", "position": [ 440, -545 ], "parameters": { "options": {} }, "typeVersion": 3, "notes": "This splitInBatches node performs automated tasks as part of the workflow." }, { "id": "cb42b109-0950-45cb-ae74-3a87b724f6fc", "name": "Airtable", "type": "n8n-nodes-base.airtable", "position": [ 220, -545 ], "parameters": { "base": { "__rl": true, "mode": "list", "value": "appHnxLQRVHbCzDyj", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Indeed" }, "table": { "__rl": true, "mode": "list", "value": "tblS1f5XWVMfdyjOz", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Table 1" }, "options": {}, "operation": "search" }, "credentials": { "airtableTokenApi": { "id": "yXTVs1Lgka4VUTCB", "name": "Airtable Personal Access Token account" } }, "typeVersion": 2.1, "notes": "This airtable node performs automated tasks as part of the workflow." }, { "id": "faf3d158-e625-4829-8e90-2549d747e674", "name": "If Link field is not empty", "type": "n8n-nodes-base.if", "position": [ 880, -670 ], "parameters": { "options": {}, "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "42eae1de-1d71-4418-862d-9cb9f8fb44e6", "operator": { "type": "string", "operation": "notEmpty", "singleValue": true }, "leftValue": "={{ $json.Link }}", "rightValue": "" } ] } }, "typeVersion": 2.2, "notes": "This if node performs automated tasks as part of the workflow." }, { "id": "d81941a5-b267-4cac-9134-42caac9948ef", "name": "Wait", "type": "n8n-nodes-base.wait", "position": [ 660, -670 ], "webhookId": "f348d66e-ee91-40d4-8e52-83d8d3ca32f2", "parameters": { "amount": 10 }, "typeVersion": 1.1, "notes": "This wait node performs automated tasks as part of the workflow." }, { "id": "6903a767-ab81-4a01-8b98-914afab45c63", "name": "Indeed Summarizer", "type": "n8n-nodes-base.noOp", "position": [ 1696, -520 ], "parameters": { "options": {} }, "typeVersion": 2, "notes": "This chainSummarization node performs automated tasks as part of the workflow." }, { "id": "1cd297e9-30b9-4cb3-b2b4-96bc1e3e9d95", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [ 200, -1080 ], "parameters": { "width": 480, "height": 320, "content": "## Airtable Table Data Sample \n[\n {\n \"id\": \"recCDNhVfdlc97cgf\",\n \"createdTime\": \"2025-04-14T02:55:31.000Z\",\n \"Tab\": \"Starbucks\",\n \"Link\": \"{{ $env.WEBHOOK_URL }}\"\n },\n {\n \"id\": \"recR7VEJrwXX7XjVl\",\n \"createdTime\": \"2025-04-14T02:55:31.000Z\",\n \"Tab\": \"BrightData\",\n \"Link\": \"{{ $env.WEBHOOK_URL }}\"\n }\n]" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "d125e31f-845b-498e-9b3c-e5e8c14ed166", "name": "Google Gemini Chat Model for AI Agent", "type": "n8n-nodes-base.noOp", "position": [ 2080, -160 ], "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." } ], "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": "98d3cc1a-123e-468e-814f-7a96d38b8e36", "connections": { "394a7291-618a-42f0-8e1b-18ed7c8496c3": { "main": [ [ { "node": "error-handler-394a7291-618a-42f0-8e1b-18ed7c8496c3", "type": "main", "index": 0 } ], [ { "node": "error-handler-394a7291-618a-42f0-8e1b-18ed7c8496c3-9c4514b6", "type": "main", "index": 0 } ], [ { "node": "error-handler-394a7291-618a-42f0-8e1b-18ed7c8496c3-db155e5e", "type": "main", "index": 0 } ], [ { "node": "error-handler-394a7291-618a-42f0-8e1b-18ed7c8496c3-eb792514", "type": "main", "index": 0 } ], [ { "node": "error-handler-394a7291-618a-42f0-8e1b-18ed7c8496c3-dc1a7209", "type": "main", "index": 0 } ], [ { "node": "error-handler-394a7291-618a-42f0-8e1b-18ed7c8496c3-50ba8011", "type": "main", "index": 0 } ], [ { "node": "error-handler-394a7291-618a-42f0-8e1b-18ed7c8496c3-da12b0c8", "type": "main", "index": 0 } ], [ { "node": "error-handler-394a7291-618a-42f0-8e1b-18ed7c8496c3-90432055", "type": "main", "index": 0 } ], [ { "node": "error-handler-394a7291-618a-42f0-8e1b-18ed7c8496c3-577ae27b", "type": "main", "index": 0 } ] ] }, "78f32ce2-1e79-4f3e-8561-4a5e07d88696": { "main": [ [ { "node": "error-handler-78f32ce2-1e79-4f3e-8561-4a5e07d88696", "type": "main", "index": 0 } ], [ { "node": "error-handler-78f32ce2-1e79-4f3e-8561-4a5e07d88696-9a7393da", "type": "main", "index": 0 } ], [ { "node": "error-handler-78f32ce2-1e79-4f3e-8561-4a5e07d88696-496b9e6f", "type": "main", "index": 0 } ], [ { "node": "error-handler-78f32ce2-1e79-4f3e-8561-4a5e07d88696-6d38349c", "type": "main", "index": 0 } ], [ { "node": "error-handler-78f32ce2-1e79-4f3e-8561-4a5e07d88696-a8528b42", "type": "main", "index": 0 } ], [ { "node": "error-handler-78f32ce2-1e79-4f3e-8561-4a5e07d88696-78fe6024", "type": "main", "index": 0 } ], [ { "node": "error-handler-78f32ce2-1e79-4f3e-8561-4a5e07d88696-b4dfd151", "type": "main", "index": 0 } ], [ { "node": "error-handler-78f32ce2-1e79-4f3e-8561-4a5e07d88696-b5ea7771", "type": "main", "index": 0 } ], [ { "node": "error-handler-78f32ce2-1e79-4f3e-8561-4a5e07d88696-b76a8e06", "type": "main", "index": 0 } ] ] }, "844c49a6-edd0-4a63-944e-44310e39ab09": { "main": [ [ { "node": "error-handler-844c49a6-edd0-4a63-944e-44310e39ab09", "type": "main", "index": 0 } ], [ { "node": "error-handler-844c49a6-edd0-4a63-944e-44310e39ab09-f1601b6b", "type": "main", "index": 0 } ], [ { "node": "error-handler-844c49a6-edd0-4a63-944e-44310e39ab09-7c37f2e5", "type": "main", "index": 0 } ], [ { "node": "error-handler-844c49a6-edd0-4a63-944e-44310e39ab09-04aa5214", "type": "main", "index": 0 } ], [ { "node": "error-handler-844c49a6-edd0-4a63-944e-44310e39ab09-d4e5f706", "type": "main", "index": 0 } ], [ { "node": "error-handler-844c49a6-edd0-4a63-944e-44310e39ab09-90a9acc4", "type": "main", "index": 0 } ], [ { "node": "error-handler-844c49a6-edd0-4a63-944e-44310e39ab09-88a063ea", "type": "main", "index": 0 } ], [ { "node": "error-handler-844c49a6-edd0-4a63-944e-44310e39ab09-f1e0e522", "type": "main", "index": 0 } ], [ { "node": "error-handler-844c49a6-edd0-4a63-944e-44310e39ab09-59da02b6", "type": "main", "index": 0 } ] ] }, "8ba6b208-b4ad-443c-8b24-c51b3b5ad880": { "main": [ [ { "node": "error-handler-8ba6b208-b4ad-443c-8b24-c51b3b5ad880-8d404608", "type": "main", "index": 0 } ] ] }, "47e96e87-8ac7-43d7-af6f-b52404be4eec": { "main": [ [ { "node": "error-handler-47e96e87-8ac7-43d7-af6f-b52404be4eec-97393cd9", "type": "main", "index": 0 } ] ] }, "d125e31f-845b-498e-9b3c-e5e8c14ed166": { "main": [ [ { "node": "error-handler-d125e31f-845b-498e-9b3c-e5e8c14ed166-c9ead1d9", "type": "main", "index": 0 } ] ] } }, "description": "Automated workflow: Indeed Company Data Scraper & Summarization with Airtable, Bright Data and Google Gemini. This workflow integrates 15 different services: stickyNote, httpRequest, markdown, wait, airtable. It contains 28 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Indeed Company Data Scraper & Summarization with Airtable, Bright Data and Google Gemini. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }