LinkedIn Job Scraper
Shared 11/12/2025
327 views
Visual Workflow
JSON Code
{
"id": "PnbrcV8S3ZTpI9Lm",
"meta": {
"instanceId": "9fb634bb746cbe3fe9f7fa86fdd635510d2f0c24c4ba919fbba1ca6aec3c4e57",
"templateCredsSetupCompleted": true
},
"name": "LinkedIn Job Scraper",
"tags": [],
"nodes": [
{
"id": "5cba6501-e8d7-4bf8-92f0-c92ffc16283b",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
432,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "19fe284a-3f61-4f07-9e85-bd1b0d74c17e",
"name": "BRIGHT_DATA_TOKEN",
"type": "string",
"value": "512e326da4ce13cd3dba56c7eac79f765490b483bdaed39183c54edfec54a591"
},
{
"id": "1ec8fcc8-51b1-4542-a39c-f1341d3165c7",
"name": "ABOUT_ME",
"type": "string",
"value": "I am a software developer with exp of 5 years in pharma and retail tech industry"
},
{
"id": "df199bdc-e748-4db0-8f41-f064651a5be8",
"name": "MY_SKILL",
"type": "string",
"value": "Node.js, JavaScript, TypeScript, React.js, Next.js, Express.js, Flask, AWS (EC2, S3, RDS), MongoDB, SQL, REST APIs, Tailwind, Sequelize, Mongoose, Linux."
},
{
"id": "dab60cfc-74c4-474f-a852-2509c7692320",
"name": "JOB_INPUT",
"type": "array",
"value": "=[\n {\n \"location\": \"New York\",\n \"keyword\": \"NodeJs Developer\",\n \"country\": \"US\",\n \"time_range\": \"Past month\",\n \"job_type\": \"Full-time\",\n \"experience_level\": \"Associate\",\n \"remote\": \"Hybrid\",\n \"company\": \"\",\n \"location_radius\": \"\"\n },\n {\n \"location\": \"New York\",\n \"keyword\": \"ReactJs Developer\",\n \"country\": \"US\",\n \"time_range\": \"Past 24 hours\",\n \"job_type\": \"Full-time\",\n \"experience_level\": \"Associate\",\n \"remote\": \"Hybrid\",\n \"company\": \"\",\n \"location_radius\": \"\"\n }\n]"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6dd06e4a-d20b-4881-a1e1-b0fff7444231",
"name": "HTTP Request- Post API call to Bright Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
624,
-80
],
"parameters": {
"url": "https://api.brightdata.com/datasets/v3/trigger",
"method": "POST",
"options": {},
"sendBody": true,
"sendQuery": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "input",
"value": "={{ $json.JOB_INPUT }}"
}
]
},
"genericAuthType": "httpBearerAuth",
"queryParameters": {
"parameters": [
{
"name": "dataset_id",
"value": "gd_lpfll7v5hcqtkxl6l"
},
{
"name": "notify",
"value": "=true"
},
{
"name": "include_errors",
"value": "true"
},
{
"name": "type",
"value": "discover_new"
},
{
"name": "discover_by",
"value": "keyword"
}
]
}
},
"credentials": {
"httpBearerAuth": {
"id": "f9slfKGysKyjvKOM",
"name": "Brightdata Bearer Token"
}
},
"retryOnFail": true,
"typeVersion": 4.2,
"waitBetweenTries": 5000
},
{
"id": "fa80d748-592b-403f-8fde-240885c423ee",
"name": "Snapshot Progress",
"type": "n8n-nodes-base.httpRequest",
"position": [
1072,
-160
],
"parameters": {
"url": "=https://api.brightdata.com/datasets/v3/progress/{{ $('HTTP Request- Post API call to Bright Data').item.json.snapshot_id }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "f9slfKGysKyjvKOM",
"name": "Brightdata Bearer Token"
}
},
"typeVersion": 4.2
},
{
"id": "f84adc99-8764-4cc2-80dd-64a9e0572479",
"name": "Wait - Polling Bright Data",
"type": "n8n-nodes-base.wait",
"position": [
848,
-80
],
"webhookId": "8005a2b3-2195-479e-badb-d90e4240e699",
"parameters": {
"unit": "minutes",
"amount": 2
},
"executeOnce": false,
"typeVersion": 1.1
},
{
"id": "23455a65-eb54-4750-95cf-253309a3d024",
"name": "If - Checking status of Snapshot - if data is ready or not",
"type": "n8n-nodes-base.if",
"position": [
1296,
-80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7932282b-71bb-4bbb-ab73-4978e554de7e",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "running"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "447f083c-c5e8-4818-9ba8-01631b156777",
"name": "HTTP Request - Getting data from Bright Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
1584,
-32
],
"parameters": {
"url": "=https://api.brightdata.com/datasets/v3/snapshot/{{ $('Snapshot Progress').item.json.snapshot_id }}",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"queryParameters": {
"parameters": [
{
"name": "format",
"value": "json"
}
]
}
},
"credentials": {
"httpBearerAuth": {
"id": "f9slfKGysKyjvKOM",
"name": "Brightdata Bearer Token"
}
},
"typeVersion": 4.2
},
{
"id": "d313e3d4-98db-4c55-ae91-106d7a7412e3",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
448,
544
],
"parameters": {
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "6z6zYFNsqyqFRUEB",
"name": "OpenRouter account"
}
},
"typeVersion": 1
},
{
"id": "1f77b72e-41cc-40a3-b534-116777772830",
"name": "AI Screening",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
448,
304
],
"parameters": {
"text": "=You are a career assistant. \nABOUT ME: {{ $('Edit Fields').item.json.ABOUT_ME }}\nMY SKILLS: {{ $('Edit Fields').item.json.MY_SKILL }}\n\nAnalyze this job posting and respond strictly in JSON format as follows:\n\n{\n \"job_title\": \"Title of the job\",\n \"match\": \"Yes or No\",\n \"reason\": \"A short explanation why this job is a strong match for my profile\",\n \"url\": \"Link to the job posting\",\n \"job_location\": \"City, State/Region, Country\",\n \"job_seniority_level\": \"Internship, Entry, Mid, Senior, etc.\",\n \"job_function\": \"Primary function of the job\",\n \"job_employment_type\": \"Full-time, Part-time, Contract, etc.\",\n \"company_url\": \"Company's website or LinkedIn page\",\n \"job_posted_time\": \"How long ago the job was posted\",\n \"job_num_applicants\": \"Number of applicants if available\"\n}\n\nHere is the job posting text to analyze:\n{{ $json.result.data_str }}\n",
"options": {
"systemMessage": "=System Prompt (Formatted for Use):\n\nYou are a career assistant helping users evaluate job postings against their profile. The user will provide:\n\nTheir About Me description.\n\nTheir Skills list.\n\nA job posting text.\n\nYour task is to analyze the job posting and respond strictly in JSON array format with the following structure:\n {\n \"job_title\": \"Title of the job\",\n \"match\": \"Yes or No\",\n \"reason\": \"A short explanation why this job is a strong match for me\",\n \"url\": \"Link to the job posting\",\n \"job_location\": \"City, State/Region, Country\",\n \"job_seniority_level\": \"Internship, Entry, Mid, Senior, etc.\",\n \"job_function\": \"Primary function of the job\",\n \"job_employment_type\": \"Full-time, Part-time, Contract, etc.\",\n \"company_url\": \"Company's website or LinkedIn page\",\n \"job_posted_time\": \"How long ago the job was posted\",\n \"job_num_applicants\": \"Number of applicants if available\"\n}\nInstructions for completion:\n\nRead the user's About Me and Skills carefully.\n\nCompare them to the job posting text.\n\nDetermine if the user is a strong match for the role.\n\nFill in all JSON fields with accurate or best-estimate information.\n\nRespond only in valid JSON array format, no extra text or explanations.\n\nIf any information is not available in the posting, use \"Not specified\"."
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "f2420f7c-9b8d-4f68-be41-25a6facc764a",
"name": "OpenRouter Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
1232,
544
],
"parameters": {
"options": {}
},
"credentials": {
"openRouterApi": {
"id": "6z6zYFNsqyqFRUEB",
"name": "OpenRouter account"
}
},
"typeVersion": 1
},
{
"id": "e8cd2762-623b-4190-9643-0d807f950197",
"name": "AI Compose Email Body",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1232,
304
],
"parameters": {
"text": "=Job Listings:\n{{ $json.data }}",
"options": {
"systemMessage": "=You are an assistant that summarizes LinkedIn job search data from JSON input. \n\nYour responsibilities:\n1. Accept JSON data containing any number of job postings. Each posting may have keys like: job_title, reason, url, job_location, job_seniority_level, job_posted_time, job_num_applicants, match, job_function, job_employment_type, company_url, or others.\n2. Dynamically handle any keys: include them in the summary table if present, skip them if missing.\n3. Present a **clean, professional HTML summary** of new jobs.\n4. Include at least these details if available: Job Title (bold), Location, Seniority Level, Posted Time, Number of Applicants, Match Status, Employment Type, Company URL (clickable).\n5. Calculate \"days since posted\" from `job_posted_time` if possible, and highlight matches if `match` is \"Yes\".\n6. Structure HTML with a table for easy reading, with headers and alternating row colors.\n7. Include a total count of jobs and today's date at the top.\n8. Only return **direct HTML**, no extra text or explanations.\n9. Ensure the HTML works for any number of jobs and variable JSON keys.\n\nExample HTML structure:\n<div>\n <h2>LinkedIn Job Search Daily Summary</h2>\n <p>Total New Jobs: X</p>\n <p>Start From: TODAY'S DATE</p>\n <table>\n <thead>...</thead>\n <tbody>\n <tr>...</tr>\n </tbody>\n </table>\n</div>\n\nToday is {{ $now.format('cccc') }} the {{ $now.format('yyyy-MM-dd HH:mm') }}."
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "7953c534-af08-4f22-a4c0-67ea520bb392",
"name": "Trigger Daily",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
256,
-80
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"typeVersion": 1.2
},
{
"id": "593df734-2fb8-4908-a721-4d44e118f12d",
"name": "Filter Matching Jobs",
"type": "n8n-nodes-base.code",
"position": [
768,
304
],
"parameters": {
"jsCode": "function tryParseJSON(x) {\n if (typeof x !== 'string') return null;\n try {\n return JSON.parse(x);\n } catch {\n return null;\n }\n}\n\n// Flatten all parsed jobs into one array\nconst allJobs = items\n .map(item => tryParseJSON(item.json.output)) // parse the string in output\n .filter(Boolean) // remove nulls\n .flat(); // flatten arrays\n\n// Filter for match = 'yes' (case-insensitive) and take first 10\nconst matchedJobs = allJobs\n .filter(job => job)\n .slice(0, 10);\n\n// Return in n8n format\nconst result_data = matchedJobs.map(job => ({ json: job }));\nreturn result_data"
},
"typeVersion": 2
},
{
"id": "098b6bf9-ecff-4632-a186-04f09a69e54a",
"name": "Cleaning Up",
"type": "n8n-nodes-base.code",
"position": [
256,
304
],
"parameters": {
"jsCode": "// Helper function to strip HTML tags\nfunction stripHtml(html) {\n return html\n .replace(/<[^>]+>/g, '') // remove all HTML tags\n .replace(/ /g, ' ') // decode HTML entities\n .replace(/&[a-z]+;/g, '') // remove other HTML entities\n .replace(/\\s+/g, ' ') // normalize whitespace\n .trim()\n}\n\nconst items = $('HTTP Request - Getting data from Bright Data').all()\n\nreturn items.map((item) => {\n const data = item.json\n\n // Flatten base_salary\n if (data.base_salary) {\n data.salary_min = data.base_salary.min_amount || ''\n data.salary_max = data.base_salary.max_amount || ''\n data.salary_currency = data.base_salary.currency || ''\n data.salary_period = data.base_salary.payment_period || ''\n data?.base_salary && delete data.base_salary\n }\n\n const result_data = {\n job_title: data.job_title || '',\n url: data.url || '',\n job_location: data.job_location || '',\n job_seniority_level: data.job_seniority_level || '',\n job_function: data.job_function || '',\n job_employment_type: data.job_employment_type || '',\n company_url: data.company_url || '',\n job_posted_time: data.job_posted_time || '',\n job_num_applicants: data.job_num_applicants || '',\n salary_min: data.salary_min || '',\n salary_max: data.salary_max || '',\n salary_currency: data.salary_currency || '',\n salary_period: data.salary_period || '',\n job_description_plain: data.job_description_formatted\n ? stripHtml(data.job_description_formatted)\n : '',\n }\n const result_data_str = JSON.stringify(result_data)\n return {\n json: {\n result: {\n data_str: result_data_str,\n data: result_data,\n },\n },\n }\n})\n"
},
"typeVersion": 2
},
{
"id": "fd35bf62-a4df-446c-9180-083f3eebc7a3",
"name": "Send Mail",
"type": "n8n-nodes-base.httpRequest",
"position": [
1552,
304
],
"parameters": {
"url": "https://api.resend.com/emails",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "from",
"value": "=Jobs Daily <onboarding@resend.dev>"
},
{
"name": "to",
"value": "=your@email.com"
},
{
"name": "subject",
"value": "=LinkedIn Jobs Daily | {{ new Date().toLocaleDateString() }}"
},
{
"name": "html",
"value": "={{ $json.output }}"
}
]
},
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "9yxG8hHGCrFmQQ1K",
"name": "Resend Bearer Token"
}
},
"typeVersion": 4.2
},
{
"id": "236ba680-99ff-47fb-a417-2a72600ff22c",
"name": "Set Listings as String",
"type": "n8n-nodes-base.code",
"position": [
1024,
304
],
"parameters": {
"jsCode": "\nreturn {\n json:{\n data: JSON.stringify(items)\n }\n}"
},
"typeVersion": 2
},
{
"id": "5e130dd1-3652-4c06-9972-05e79d7226d9",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1024,
496
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "job_title",
"type": "string",
"display": true,
"required": false,
"displayName": "job_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reason",
"type": "string",
"display": true,
"required": false,
"displayName": "reason",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "url",
"type": "string",
"display": true,
"required": false,
"displayName": "url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "job_location",
"type": "string",
"display": true,
"required": false,
"displayName": "job_location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "job_seniority_level",
"type": "string",
"display": true,
"required": false,
"displayName": "job_seniority_level",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "job_posted_time",
"type": "string",
"display": true,
"required": false,
"displayName": "job_posted_time",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "job_num_applicants",
"type": "string",
"display": true,
"required": false,
"displayName": "job_num_applicants",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "match",
"type": "string",
"display": true,
"required": false,
"displayName": "match",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "job_function",
"type": "string",
"display": true,
"required": false,
"displayName": "job_function",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "job_employment_type",
"type": "string",
"display": true,
"required": false,
"displayName": "job_employment_type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company_url",
"type": "string",
"display": true,
"required": false,
"displayName": "company_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "listings",
"type": "string",
"display": true,
"required": false,
"displayName": "listings",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1awPFjM8r-fimvwiYznWLMF1KxRx2MRDrqs-fYWnaOs4/edit#gid=0",
"cachedResultName": "Auto Jobs"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1awPFjM8r-fimvwiYznWLMF1KxRx2MRDrqs-fYWnaOs4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1awPFjM8r-fimvwiYznWLMF1KxRx2MRDrqs-fYWnaOs4/edit?usp=drivesdk",
"cachedResultName": "TEST | n8n | Linkedin Jobs"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "TB2tCNqF1GBm2ag8",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "ed2792bc-7255-42a7-a5b2-85c04089f5f8",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
208,
-208
],
"parameters": {
"color": 5,
"width": 1520,
"height": 352,
"content": "## Part 1: Job Data Collection"
},
"typeVersion": 1
},
{
"id": "59982874-0dd0-470e-b661-401c634e31e9",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
208,
176
],
"parameters": {
"color": 5,
"width": 720,
"height": 560,
"content": "## Part 2: AI Screening & Filtering\n"
},
"typeVersion": 1
},
{
"id": "085f7438-09b2-470f-9bea-2f7a085158e1",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
176
],
"parameters": {
"color": 5,
"width": 768,
"height": 560,
"content": "## Part 3: Delivery & Notification"
},
"typeVersion": 1
},
{
"id": "464db3be-890b-4220-950a-1f7909a822c0",
"name": "Sticky Note12",
"type": "n8n-nodes-base.stickyNote",
"position": [
-352,
-208
],
"parameters": {
"width": 528,
"height": 1040,
"content": "# 🛠️ Setup Guide \n\n**Author: [Sohail Jafri](https://link.thesohailjafri.me/web_ai) | [Youtube](https://link.thesohailjafri.me/yt_ai) | [Instagram](https://link.thesohailjafri.me/ig_ai) | [Join Skool](https://link.thesohailjafri.me/join-skool)**\n\nFollow the steps below to get your LinkedIn Job Scraper running:\n\n### ✅ Step 1: Copy the Google Sheet template \nMake a copy of the sheet and connect it to the **[Append row in sheet](https://docs.google.com/spreadsheets/d/1awPFjM8r-fimvwiYznWLMF1KxRx2MRDrqs-fYWnaOs4/copy)** node. \nTemplate: \n\n### ✅ Step 2: Add [Bright Data](https://brightdata.com/) credentials \nAdd your Bright Data Bearer token to the Bright Data HTTP Request nodes. \n\n### ✅ Step 3: Connect your AI models \nAdd your OpenRouter (or preferred LLM) API key to both LM nodes used for screening and email composition. \n- [OpenRouter](https://openrouter.ai/)\n- [OpenAI](https://platform.openai.com/)\n\n### ✅ Step 4: Add [Resend](https://resend.com/) API key \nConfigure the Resend bearer token in the **Send Mail** node to enable daily emails. \n\n\n### ✅ Step 5: Populate Edit Fields \nFill these values in the **Edit Fields** node: \n- **ABOUT_ME** — short resume summary \n- **MY_SKILL** — comma-separated skill list \n- **JOB_INPUT** — array of search queries (location, keyword, time_range, job_type, experience_level, remote)\n\n### ✅ Step 6: Test the flow \nRun the workflow manually with a small JOB_INPUT to confirm end-to-end success.\n\n### 💡 Quick config tips\n- **Poll interval** = 2 minutes (adjust in **Wait - Polling Bright Data** if needed). \n- Ensure the Google Sheet columns match the node schema. \n- Verify the email **to** address in **Send Mail** before enabling production.\n\n### ✅ Final step: Enable workflow \nSwitch the workflow to active after confirming credentials and a successful test run.\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "908ca50e-d29d-4fc8-8824-93bf18b85fb2",
"connections": {
"Cleaning Up": {
"main": [
[
{
"node": "AI Screening",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "HTTP Request- Post API call to Bright Data",
"type": "main",
"index": 0
}
]
]
},
"AI Screening": {
"main": [
[
{
"node": "Filter Matching Jobs",
"type": "main",
"index": 0
}
]
]
},
"Trigger Daily": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Snapshot Progress": {
"main": [
[
{
"node": "If - Checking status of Snapshot - if data is ready or not",
"type": "main",
"index": 0
}
]
]
},
"Filter Matching Jobs": {
"main": [
[
{
"node": "Set Listings as String",
"type": "main",
"index": 0
},
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"AI Compose Email Body": {
"main": [
[
{
"node": "Send Mail",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Screening",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenRouter Chat Model1": {
"ai_languageModel": [
[
{
"node": "AI Compose Email Body",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Set Listings as String": {
"main": [
[
{
"node": "AI Compose Email Body",
"type": "main",
"index": 0
}
]
]
},
"Wait - Polling Bright Data": {
"main": [
[
{
"node": "Snapshot Progress",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request- Post API call to Bright Data": {
"main": [
[
{
"node": "Wait - Polling Bright Data",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request - Getting data from Bright Data": {
"main": [
[
{
"node": "Cleaning Up",
"type": "main",
"index": 0
}
]
]
},
"If - Checking status of Snapshot - if data is ready or not": {
"main": [
[
{
"node": "Wait - Polling Bright Data",
"type": "main",
"index": 0
}
],
[
{
"node": "HTTP Request - Getting data from Bright Data",
"type": "main",
"index": 0
}
]
]
}
}
}