This workflow corresponds to n8n.io template #4829 — we link there as the canonical source.
This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.
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": "LTw3TlYxQXEMSTi3",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Real-time Extract of Job, Company, Salary Details via Bright Data MCP & OpenAI 4o mini",
"tags": [
{
"id": "ZOwtAMLepQaGW76t",
"name": "Building Blocks",
"createdAt": "2025-04-13T15:23:40.462Z",
"updatedAt": "2025-04-13T15:23:40.462Z"
},
{
"id": "ddPkw7Hg5dZhQu2w",
"name": "AI",
"createdAt": "2025-04-13T05:38:08.053Z",
"updatedAt": "2025-04-13T05:38:08.053Z"
},
{
"id": "rKOa98eAi3IETrLu",
"name": "HR",
"createdAt": "2025-04-13T04:59:30.580Z",
"updatedAt": "2025-04-13T04:59:30.580Z"
}
],
"nodes": [
{
"id": "c3aaad9e-db7d-4761-9e34-99483f302562",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-660,
-180
],
"parameters": {},
"typeVersion": 1
},
{
"id": "3bf2f1f2-5303-45ce-9c12-76597b4e82fa",
"name": "Bright Data MCP Client List Tools",
"type": "n8n-nodes-mcp.mcpClient",
"position": [
-440,
-180
],
"parameters": {},
"credentials": {
"mcpClientApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "6489766a-b657-4a2f-8a3d-fc4aea3b11d2",
"name": "Set input fields",
"type": "n8n-nodes-base.set",
"position": [
-220,
-180
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "0ac91db2-9848-40d4-b942-cd7288597ded",
"name": "job_search_url",
"type": "string",
"value": "https://www.indeed.com/viewjob?jk=075f6b95d1ae92ae"
},
{
"id": "f4977b47-49d8-413e-88b5-efd6c49f8bb1",
"name": "company_info",
"type": "string",
"value": "https://www.indeed.com/cmp/Deloitte"
},
{
"id": "f5b7e10d-bcd8-439c-8e84-ba4af11f2cd2",
"name": "job_role",
"type": "string",
"value": "Lead Backend .Net Developer Dallas, TX Hybrid work"
},
{
"id": "e601ea9e-20ab-40ed-82ec-89b895b07f85",
"name": "webhook_notification_url",
"type": "string",
"value": "https://webhook.site/c9118da2-1c54-460f-a83a-e5131b7098db"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f6a345dd-40a3-4a94-ba65-18698694a8bc",
"name": "MCP Client for Job Data Extract with Markdown",
"type": "n8n-nodes-mcp.mcpClient",
"position": [
20,
-180
],
"parameters": {
"toolName": "scrape_as_markdown",
"operation": "executeTool",
"toolParameters": "={\n \"url\": \"{{ $json.job_search_url }}\"\n} "
},
"credentials": {
"mcpClientApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "53495c35-ca3a-4874-a0a3-2cd9965a9638",
"name": "MCP Client for Salary Data Extraction",
"type": "n8n-nodes-mcp.mcpClient",
"position": [
20,
-540
],
"parameters": {
"toolName": "search_engine",
"operation": "executeTool",
"toolParameters": "={\n \"query\": \"{{ $json.job_role }}\",\n \"engine\": \"google\"\n} "
},
"credentials": {
"mcpClientApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "25668caa-6981-4f57-9eae-ba5c29374e56",
"name": "Salary Information Extractor",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
240,
-540
],
"parameters": {
"text": "=Extract the salary information from the following content {{ $json.result.content[0].text }}",
"options": {},
"schemaType": "manual",
"inputSchema": "{\n \"$schema\": \"http://json-schema.org/schema#\",\n \"title\": \"Salary Information\",\n \"type\": \"object\",\n \"properties\": {\n \"job_title\": {\n \"type\": \"string\",\n \"description\": \"The official title of the job (e.g., Software Engineer, DevOps Engineer)\"\n },\n \"job_level\": {\n \"type\": \"string\",\n \"description\": \"The seniority level (e.g., Junior, Mid, Senior, Lead, Principal)\",\n \"enum\": [\"Intern\", \"Junior\", \"Mid\", \"Senior\", \"Lead\", \"Principal\", \"Director\", \"VP\", \"C-Level\"]\n },\n \"company_name\": {\n \"type\": \"string\",\n \"description\": \"The name of the company offering the position\"\n },\n \"location\": {\n \"type\": \"string\",\n \"description\": \"City and state/country of the job\"\n },\n \"employment_type\": {\n \"type\": \"string\",\n \"description\": \"Full-time, Part-time, Contract, Freelance, Internship\",\n \"enum\": [\"Full-time\", \"Part-time\", \"Contract\", \"Freelance\", \"Internship\"]\n },\n \"remote_option\": {\n \"type\": \"string\",\n \"description\": \"Remote status of the job\",\n \"enum\": [\"On-site\", \"Hybrid\", \"Remote\"]\n },\n \"currency\": {\n \"type\": \"string\",\n \"description\": \"Currency code (e.g., USD, EUR, INR)\"\n },\n \"salary_min\": {\n \"type\": \"number\",\n \"description\": \"Minimum base salary offered\"\n },\n \"salary_max\": {\n \"type\": \"number\",\n \"description\": \"Maximum base salary offered\"\n },\n \"salary_period\": {\n \"type\": \"string\",\n \"description\": \"Salary frequency\",\n \"enum\": [\"hour\", \"day\", \"week\", \"month\", \"year\"]\n },\n \"equity\": {\n \"type\": \"string\",\n \"description\": \"Equity component of the compensation (e.g., '0.1%', '$5,000 in stock')\",\n \"nullable\": true\n },\n \"bonus\": {\n \"type\": \"string\",\n \"description\": \"Bonus component (e.g., '10% performance bonus', '$5000 sign-on')\",\n \"nullable\": true\n },\n \"skills_required\": {\n \"type\": \"array\",\n \"description\": \"Key technical or soft skills expected\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"experience_required\": {\n \"type\": \"string\",\n \"description\": \"Experience required in years or description (e.g., '3-5 years', 'Entry level')\"\n },\n \"posting_source\": {\n \"type\": \"string\",\n \"description\": \"Source of the job posting (e.g., LinkedIn, Glassdoor, Indeed)\"\n },\n \"posting_date\": {\n \"type\": \"string\",\n \"format\": \"date\",\n \"description\": \"Date when the job was posted\"\n },\n \"summary_insight\": {\n \"type\": \"string\",\n \"description\": \"Optional Gemini-generated summary or insight (e.g., 'This role offers 15% higher pay than average for the region.')\"\n }\n }\n}\n"
},
"typeVersion": 1.1
},
{
"id": "f58be851-947b-4ac7-9afe-b7cefb7a753a",
"name": "Job Description Extractor",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
240,
-180
],
"parameters": {
"text": "=Extract markdown to textual data. {{ $json.result.content[0].text }}",
"options": {},
"attributes": {
"attributes": [
{
"name": "job_description",
"description": "Detailed Job Description in Textual Format"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "9102e1b1-34c8-439d-90c6-6c9d5f8c94b0",
"name": "Merge the response",
"type": "n8n-nodes-base.merge",
"position": [
720,
-360
],
"parameters": {
"numberInputs": 3
},
"typeVersion": 3.1
},
{
"id": "434f22dc-99d1-465f-8c41-c08060a94137",
"name": "Create a binary data",
"type": "n8n-nodes-base.function",
"position": [
1460,
-460
],
"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
},
{
"id": "8a9bf6a0-e32d-43de-bb5d-2da34633838f",
"name": "Webhook Notification for Job Info",
"type": "n8n-nodes-base.httpRequest",
"position": [
1460,
-260
],
"parameters": {
"url": "={{ $('Set input fields').item.json.webhook_notification_url }}",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "response",
"value": "={{ $json.output.search_response }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "bb2ead5d-4188-4b94-af5b-875faf06312d",
"name": "Write the salary info to disk",
"type": "n8n-nodes-base.readWriteFile",
"position": [
1700,
-460
],
"parameters": {
"options": {},
"fileName": "=d:\\JobDesc-SalaryInfo-{{Date.now()}}.json",
"operation": "write"
},
"typeVersion": 1
},
{
"id": "eeb6d735-7de2-490d-9a3b-1ab3a93990fb",
"name": "Update Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1460,
-40
],
"parameters": {
"columns": {
"value": {
"salary_max": "={{ $json.output[0].salary_max }}",
"salary_min": "={{ $json.output[0].salary_min }}",
"company_info": "={{ $json.output[2].company_info }}",
"salary_period": "={{ $json.output[0].salary_period }}",
"job_description": "={{ $json.output[1].job_description }}"
},
"schema": [
{
"id": "job_description",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "job_description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "salary_min",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "salary_min",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "salary_max",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "salary_max",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "salary_period",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "salary_period",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company_info",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "company_info",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"job_description"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/10gAihQMT8-h8Mpehe9j-xxN4oTTpg8qwToI-I-Eauew/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "10gAihQMT8-h8Mpehe9j-xxN4oTTpg8qwToI-I-Eauew",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/10gAihQMT8-h8Mpehe9j-xxN4oTTpg8qwToI-I-Eauew/edit?usp=drivesdk",
"cachedResultName": "Salary Info"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "aa10d68c-8a90-45e5-867d-cac07f9bd749",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
160,
-720
],
"parameters": {
"color": 3,
"width": 440,
"height": 120,
"content": "## Disclaimer\nThis template is only available on n8n self-hosted as it's making use of the community node for MCP Client."
},
"typeVersion": 1
},
{
"id": "1e8d629b-7a62-40e5-b4ed-357daf33b93e",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-300,
-820
],
"parameters": {
"color": 5,
"width": 440,
"height": 220,
"content": "## LLM Usages\n\nOpenAI 4o mini LLM is being utilized for the structured data extraction handling."
},
"typeVersion": 1
},
{
"id": "f5b35754-1cd2-41f2-8827-043000f634d0",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-760,
-1220
],
"parameters": {
"color": 7,
"width": 440,
"height": 360,
"content": "## Logo\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "6471bf0f-4c6d-446c-ab68-75d0d8783f0f",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-760,
-820
],
"parameters": {
"width": 440,
"height": 220,
"content": "## Note\n\nDeals with the extraction of Job Description and Salary information by leveraging the Bright Data MCP Client.\n\n**Please make sure to set the input fields**"
},
"typeVersion": 1
},
{
"id": "af070520-b6fc-4a76-bef3-32ec82d7132f",
"name": "OpenAI Chat Model for Salary Info Extract",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
300,
-340
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "10fa3ded-6401-45d7-97ad-1455d41b6794",
"name": "OpenAI Chat Model for Job Desc Extract",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
340,
40
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "01ddb4ab-73ae-4eef-9f30-4f3438a42823",
"name": "Aggregate",
"type": "n8n-nodes-base.aggregate",
"position": [
1020,
-360
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "output"
}
]
}
},
"typeVersion": 1
},
{
"id": "e0c331b0-8706-46c1-b2c0-d9a3eac15cea",
"name": "MCP Client for Company Data Extract with Markdown",
"type": "n8n-nodes-mcp.mcpClient",
"position": [
20,
240
],
"parameters": {
"toolName": "scrape_as_markdown",
"operation": "executeTool",
"toolParameters": "={\n \"url\": \"{{ $json.company_info }}\"\n} "
},
"credentials": {
"mcpClientApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "7afffc33-1bd3-4bd2-ae59-80bc1c219b84",
"name": "Company Data Extractor",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
240,
240
],
"parameters": {
"text": "=Extract markdown to textual data. {{ $json.result.content[0].text }}",
"options": {},
"attributes": {
"attributes": [
{
"name": "company_info",
"description": "Detailed Company Info in Textual Format"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "5ae8cd63-ca7f-41a4-bc9f-e87670a80ee3",
"name": "OpenAI Chat Model for Company Data Extract",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
260,
440
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "690a92a7-fc6f-45c1-ab45-aed7b2380254",
"connections": {
"Aggregate": {
"main": [
[
{
"node": "Create a binary data",
"type": "main",
"index": 0
},
{
"node": "Webhook Notification for Job Info",
"type": "main",
"index": 0
},
{
"node": "Update Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Set input fields": {
"main": [
[
{
"node": "MCP Client for Job Data Extract with Markdown",
"type": "main",
"index": 0
},
{
"node": "MCP Client for Salary Data Extraction",
"type": "main",
"index": 0
},
{
"node": "MCP Client for Company Data Extract with Markdown",
"type": "main",
"index": 0
}
]
]
},
"Merge the response": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Create a binary data": {
"main": [
[
{
"node": "Write the salary info to disk",
"type": "main",
"index": 0
}
]
]
},
"Company Data Extractor": {
"main": [
[
{
"node": "Merge the response",
"type": "main",
"index": 2
}
]
]
},
"Job Description Extractor": {
"main": [
[
{
"node": "Merge the response",
"type": "main",
"index": 1
}
]
]
},
"Salary Information Extractor": {
"main": [
[
{
"node": "Merge the response",
"type": "main",
"index": 0
}
]
]
},
"Bright Data MCP Client List Tools": {
"main": [
[
{
"node": "Set input fields",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Bright Data MCP Client List Tools",
"type": "main",
"index": 0
}
]
]
},
"MCP Client for Salary Data Extraction": {
"main": [
[
{
"node": "Salary Information Extractor",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model for Job Desc Extract": {
"ai_languageModel": [
[
{
"node": "Job Description Extractor",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model for Salary Info Extract": {
"ai_languageModel": [
[
{
"node": "Salary Information Extractor",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI Chat Model for Company Data Extract": {
"ai_languageModel": [
[
{
"node": "Company Data Extractor",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"MCP Client for Job Data Extract with Markdown": {
"main": [
[
{
"node": "Job Description Extractor",
"type": "main",
"index": 0
}
]
]
},
"MCP Client for Company Data Extract with Markdown": {
"main": [
[
{
"node": "Company Data Extractor",
"type": "main",
"index": 0
}
]
]
}
}
}
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.
googleSheetsOAuth2ApimcpClientApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Community nodes can only be installed on self-hosted instances of n8n.
Source: https://n8n.io/workflows/4829/ — 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 designed for: Recruiters, Talent Intelligence Teams, and HR tech builders automating resume ingestion. Developers and data engineers building ATS (Applicant Tracking Systems) or CRM d
Transform your Gmail sent folder into a comprehensive, enriched contact database automatically. This workflow processes hundreds or thousands of sent emails, extracting and enriching contact informati
Author: CSChin Example Source: https://www.ncl.ac.uk/singapore/staff/profile/chengchin.html#publications
This comprehensive workflow automates the entire invoice processing pipeline by monitoring a Google Drive folder for new invoice uploads, intelligently processing both PDF and image formats, extractin
This workflow automates the discovery and structuring of FAQs from real AI search behavior using SE Ranking and OpenAI. It fetches domain-specific AI search prompts and answers, then extracts relevant