Veröffentlichung von Stellen auf mehreren Jobbörsen aus Google Sheets mit BrowserAct
Dies ist ein HR-Bereich Automatisierungsworkflow mit 20 Nodes. Hauptsächlich werden If, Code, Slack, GoogleSheets, ManualTrigger und andere Nodes verwendet. Automatisierung der Mehrplattform-Stellenveröffentlichung mit Google Sheets und BrowserAct
- •Slack Bot Token oder Webhook URL
- •Google Sheets API-Anmeldedaten
Verwendete Nodes (20)
Kategorie
{
"id": "qMwMfHxAAddl6h5v",
"meta": {
"instanceId": "88804d8e264d231c18413147cc92e4245b20ae7b97d774bad847556f645c8192",
"templateCredsSetupCompleted": true
},
"name": "Post Jobs to Multiple Boards from Google Sheets using BrowerAct",
"tags": [],
"nodes": [
{
"id": "5f1b282a-3d24-47ba-975e-8b665bd685cb",
"name": "Bei Klick auf 'Workflow ausführen'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-592,
-48
],
"parameters": {},
"typeVersion": 1
},
{
"id": "6e59bf13-7e4a-49c1-9fc5-7ef9bd9d7793",
"name": "Zeile(n) in Sheet abrufen",
"type": "n8n-nodes-base.googleSheets",
"position": [
-400,
-48
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1104319058,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit#gid=1104319058",
"cachedResultName": "Job Example"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit?usp=drivesdk",
"cachedResultName": "Test For BrowserAct"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "wAMAqU43zjVjlpuA",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "13fc2a7b-0c28-4f0c-b226-648bceca7536",
"name": "Workflow-Aufgabe ausführen",
"type": "n8n-nodes-browseract-workflows.browserAct",
"position": [
48,
-64
],
"parameters": {
"workflowId": "56841107053416567",
"inputParameters": {
"parameters": [
{
"name": "Target_Site",
"value": "={{ $json[\" Job_Board_URL\"] }}"
},
{
"name": "Job_Title",
"value": "={{ $json.Job_Title }}"
},
{
"name": "Job_Description",
"value": "={{ $json.Job_Description }}"
},
{
"name": "Phone_Number",
"value": "={{ $json.Phone_Number }}"
},
{
"name": "Address",
"value": "={{ $json.Address }}"
},
{
"name": "tags",
"value": "={{ $json.tags }}"
},
{
"name": "Company",
"value": "={{ $json.Company }}"
},
{
"name": "Login_Username",
"value": "={{ $json.Login_Username }}"
},
{
"name": "Login_Password",
"value": "={{ $json.Login_Password }}"
}
]
},
"additionalFields": {
"saveBrowserData": false
}
},
"credentials": {
"browserActApi": {
"id": "AzKMhR2eAlOjzDiJ",
"name": "BrowserAct account"
}
},
"typeVersion": 1
},
{
"id": "3741a23f-a304-445b-895d-4dd7dfcc7ccc",
"name": "Details einer Workflow-Aufgabe abrufen",
"type": "n8n-nodes-browseract-workflows.browserAct",
"onError": "continueErrorOutput",
"position": [
240,
-64
],
"parameters": {
"taskId": "={{ $json.id }}",
"operation": "getTask",
"waitForFinish": true
},
"credentials": {
"browserActApi": {
"id": "AzKMhR2eAlOjzDiJ",
"name": "BrowserAct account"
}
},
"typeVersion": 1
},
{
"id": "1d84240b-6345-4186-bf93-c31023b0bc13",
"name": "Zeile in Sheet aktualisieren",
"type": "n8n-nodes-base.googleSheets",
"position": [
912,
-64
],
"parameters": {
"columns": {
"value": {
"Job_ID": "={{ $('Get row(s) in sheet').item.json.Job_ID }}",
"Status": "={{ $json.Status }}",
"Live_URL": "={{ $json.Url }}"
},
"schema": [
{
"id": "Job_ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Job_ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Posting_Status",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Posting_Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job_Title",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Job_Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job_Description",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Job_Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": " Job_Board_URL",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": " Job_Board_URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Login_Username",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Login_Username",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Login_Password",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Login_Password",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone_Number",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Phone_Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Address",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Live_URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Live_URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tags",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "tags",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Job_ID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1104319058,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit#gid=1104319058",
"cachedResultName": "Job Example"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit?usp=drivesdk",
"cachedResultName": "Test For BrowserAct"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "wAMAqU43zjVjlpuA",
"name": "Google Sheets account"
}
},
"typeVersion": 4.7
},
{
"id": "bcf633ed-6dd3-406b-9943-896fe11b0683",
"name": "Code in JavaScript",
"type": "n8n-nodes-base.code",
"position": [
704,
-64
],
"parameters": {
"jsCode": "// Get the JSON string using the exact path provided by the user.\nconst jsonString = $input.first().json.output.string;\n\nlet parsedData;\n\n// Check if the string exists before attempting to parse\nif (!jsonString) {\n // Return an empty array or throw an error if no string is found\n // Throwing an error is usually better to stop the workflow if data is missing.\n throw new Error(\"Input string is empty or missing at the specified path: $input.first().json.output.string\");\n}\n\ntry {\n // 1. Parse the JSON string into a JavaScript array of objects\n parsedData = JSON.parse(jsonString);\n} catch (error) {\n // Handle JSON parsing errors (e.g., if the string is malformed)\n throw new Error(`Failed to parse JSON string: ${error.message}`);\n}\n\n// 2. Ensure the parsed data is an array\nif (!Array.isArray(parsedData)) {\n throw new Error('Parsed data is not an array. It cannot be split into multiple items.');\n}\n\n// 3. Map the array of objects into the n8n item format { json: object }\n// Each element in this array will be treated as a new item by n8n, achieving the split.\nconst outputItems = parsedData.map(item => ({\n json: item,\n}));\n\n// 4. Return the new array of items\nreturn outputItems;"
},
"typeVersion": 2
},
{
"id": "2b987dff-8293-4723-9ea8-455727441cd2",
"name": "Wenn",
"type": "n8n-nodes-base.if",
"position": [
-224,
-48
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a33df146-1505-417b-ba35-fc3c7823e244",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.Posting_Status }}",
"rightValue": "Ready to Post"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "34fccf50-7241-4f56-ac8c-8df73c017618",
"name": "Google Sheets Trigger",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
-400,
96
],
"parameters": {
"event": "rowUpdate",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1104319058,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit#gid=1104319058",
"cachedResultName": "Job Example"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit?usp=drivesdk",
"cachedResultName": "Test For BrowserAct"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"id": "r1f3Ap74oZQWWxYy",
"name": "Google Sheets Trigger account"
}
},
"typeVersion": 1
},
{
"id": "91723f53-45d3-45a8-b97c-1506acfb87ef",
"name": "Haftnotiz - Einführung",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
-384
],
"parameters": {
"width": 528,
"height": 450,
"content": "## Try It Out!\n### This powerful n8n template turns a Google Sheet into a control panel for automating job postings across multiple job boards.\n\n### How it works\n* The workflow can be triggered **manually** to post all pending jobs, or it runs **automatically** whenever you update a row in Google Sheets.\n* It reads job data directly from your Google Sheet.\n* An **If** node checks for a specific status, like 'Ready to Post', before proceeding.\n* A **BrowserAct** node then logs into the specified job board and automatically fills out and submits the job posting with the data from the sheet.\n* After the posting is successful, a **Code** node processes the result.\n* Finally, the workflow updates the original row in your Google Sheet with the live URL of the job post and a 'Posted' status.\n\n### Requirements\n* **BrowserAct** API account for automated posting.\n* **BrowserAct** n8n Community Node -> ([n8n Nodes BrowserAct](https://www.npmjs.com/package/n8n-nodes-browseract-workflows))\n* **Google Sheets** credentials.\n* A BrowserAct template named **“Automated Job Posting to Niche Job Site (Custom Site)”**.\n\n### Need Help?\nJoin the [Discord](https://discord.com/invite/UpnCKd7GaU) or Visit Our [Blog](https://www.browseract.com/blog)!\n"
},
"typeVersion": 1
},
{
"id": "a884ca62-a5b7-4115-9ef3-d04253d42862",
"name": "Haftnotiz - Verwendung",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
80
],
"parameters": {
"width": 528,
"height": 228,
"content": "## How to use\n\n1. **Set up Credentials:** Add your credentials for **BrowserAct** and **Google Sheets** to the workflow.\n2. **Set up BrowserAct Template:** Ensure you Use the **“Automated Job Posting to Niche Job Site (Custom Site)”** template in your BrowserAct account.\n3. **Prepare Your Google Sheet:** Your sheet must contain columns for all the job data, like `Job_ID`, `Job_Title`, `Job_Description`, `Job_Board_URL`, `Login_Username`, `Login_Password`, and a `Posting_Status` column.\n4. **Trigger a Post:** To post a job, simply change the value in its `Posting_Status` column to **'Ready to Post'**. The Google Sheets Trigger will pick it up automatically.\n5. **Activate Workflow:** For full automation, activate the workflow. The Google Sheets trigger will then listen for changes."
},
"typeVersion": 1
},
{
"id": "5088b29a-d8e1-4b8d-9bdc-dfb676bb7c39",
"name": "Haftnotiz - Hilfe benötigt",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1136,
320
],
"parameters": {
"width": 528,
"height": 104,
"content": "### Need Help?\n* #### [How to Find Your BrowseAct API Key & Workflow ID](https://www.youtube.com/watch?v=pDjoZWEsZlE)\n* #### [How to Connect n8n to Browseract](https://www.youtube.com/watch?v=RoYMdJaRdcQ)\n* #### [How to Use & Customize BrowserAct Templates](https://www.youtube.com/watch?v=CPZHFUASncY)\n* #### [How to Use the BrowserAct N8N Community Node](https://youtu.be/j0Nlba2pRLU)\n"
},
"typeVersion": 1
},
{
"id": "b106ec53-560b-43ff-8b9e-8cfa9a8de7e9",
"name": "Haftnotiz - Eingabe & Trigger",
"type": "n8n-nodes-base.stickyNote",
"position": [
-464,
-288
],
"parameters": {
"color": 6,
"width": 416,
"height": 208,
"content": "### 🕹️ 1. Input & Trigger Control\n\nThis workflow has two ways to start:\n\n* **Google Sheets Trigger:** This is the primary method for real-time automation. It watches for row updates and will trigger the workflow for that specific row.\n* **Manual Trigger:** This path gets **all** rows from the sheet, and the `If` node then filters for any jobs that are 'Ready to Post'. This is useful for batch-posting multiple jobs at once.\n\nThe **If** node is the gatekeeper, ensuring only jobs you've approved get posted."
},
"typeVersion": 1
},
{
"id": "7303bb7d-d6b8-4348-959c-39879435b4df",
"name": "Haftnotiz - Automatisierungskern",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
-288
],
"parameters": {
"color": 5,
"width": 400,
"height": 200,
"content": "### 🤖 2. The Automation Engine\n\nThese **BrowserAct** nodes are where the magic happens.\n\n* **Run a workflow task:** This node takes all the data from the filtered Google Sheet row (login details, job title, description, etc.) and sends it to your BrowserAct workflow to perform the automated posting.\n\n* **Get details...:** This node simply waits for the browser automation to complete before moving on."
},
"typeVersion": 1
},
{
"id": "73af619d-f874-4e1b-94e0-c0bf9177c434",
"name": "Haftnotiz - Feedback-Schleife",
"type": "n8n-nodes-base.stickyNote",
"position": [
416,
-288
],
"parameters": {
"color": 3,
"width": 816,
"height": 200,
"content": "### 🔄 3. Feedback & Update & Send Alert\n\nThis final stage creates a critical feedback loop.\n\n* **Code Node:** This parses the results from the BrowserAct task to extract the final status and the URL of the live job posting.\n\n* **Update row in sheet:** This node updates the original Google Sheet row. It sets the `Status` to 'Posted' and adds the `Live_URL`. This prevents the workflow from accidentally re-posting the same job again.\n\n* **Slack Nodes:** Send Slack message, providing clear, actionable alerts to your team."
},
"typeVersion": 1
},
{
"id": "d6f5713e-e7e1-483c-b4cb-e00875706ce3",
"name": "Haftnotiz",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
-80
],
"parameters": {
"color": 5,
"width": 400,
"height": 176,
"content": ""
},
"typeVersion": 1
},
{
"id": "add8711a-864b-4b96-a0d1-97e4eb4af534",
"name": "Haftnotiz1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-464,
-64
],
"parameters": {
"color": 6,
"width": 416,
"height": 304,
"content": ""
},
"typeVersion": 1
},
{
"id": "cd88ea7e-ce56-48ab-833d-8d8a67495b77",
"name": "Haftnotiz2",
"type": "n8n-nodes-base.stickyNote",
"position": [
416,
-80
],
"parameters": {
"color": 3,
"width": 816,
"height": 288,
"content": ""
},
"typeVersion": 1
},
{
"id": "5bf223b4-2ce4-44a2-9125-cf64c2bbea7f",
"name": "Nachricht senden",
"type": "n8n-nodes-base.slack",
"position": [
1104,
-64
],
"webhookId": "01fb8ea5-9534-45f8-a069-7745ee2b8ec7",
"parameters": {
"text": "={{ $('Get row(s) in sheet').item.json.Job_ID }} added to Job List\nStatus : {{ $json.Status }}\n",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KLV9DJSX",
"cachedResultName": "all-browseract-workflow-test"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "5rQCkyObBqbHIbZA",
"name": "Slack account"
}
},
"typeVersion": 2.3
},
{
"id": "9ee840f8-ac5f-4183-8a69-4acfd98cb2af",
"name": "Wenn1",
"type": "n8n-nodes-base.if",
"position": [
512,
-64
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "e2eb7caa-21f4-4095-8c78-19438adc085d",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.output.string }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "b6fe8efd-74b1-4f33-84a6-0e79062bdb23",
"name": "Nachricht senden1",
"type": "n8n-nodes-base.slack",
"position": [
704,
64
],
"webhookId": "01fb8ea5-9534-45f8-a069-7745ee2b8ec7",
"parameters": {
"text": "=Processing for Job ID {{ $('Get row(s) in sheet').item.json.Job_ID }} was skipped because an error occurred.\nStatus: Error. Please check the provided URL or data or Workflow for issues.",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KLV9DJSX",
"cachedResultName": "all-browseract-workflow-test"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "5rQCkyObBqbHIbZA",
"name": "Slack account"
}
},
"typeVersion": 2.3
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "f5e47078-51b9-494f-92d3-5216436e01c0",
"connections": {
"2b987dff-8293-4723-9ea8-455727441cd2": {
"main": [
[
{
"node": "13fc2a7b-0c28-4f0c-b226-648bceca7536",
"type": "main",
"index": 0
}
]
]
},
"9ee840f8-ac5f-4183-8a69-4acfd98cb2af": {
"main": [
[
{
"node": "bcf633ed-6dd3-406b-9943-896fe11b0683",
"type": "main",
"index": 0
}
],
[
{
"node": "b6fe8efd-74b1-4f33-84a6-0e79062bdb23",
"type": "main",
"index": 0
}
]
]
},
"bcf633ed-6dd3-406b-9943-896fe11b0683": {
"main": [
[
{
"node": "1d84240b-6345-4186-bf93-c31023b0bc13",
"type": "main",
"index": 0
}
]
]
},
"6e59bf13-7e4a-49c1-9fc5-7ef9bd9d7793": {
"main": [
[
{
"node": "2b987dff-8293-4723-9ea8-455727441cd2",
"type": "main",
"index": 0
}
]
]
},
"13fc2a7b-0c28-4f0c-b226-648bceca7536": {
"main": [
[
{
"node": "3741a23f-a304-445b-895d-4dd7dfcc7ccc",
"type": "main",
"index": 0
}
]
]
},
"1d84240b-6345-4186-bf93-c31023b0bc13": {
"main": [
[
{
"node": "5bf223b4-2ce4-44a2-9125-cf64c2bbea7f",
"type": "main",
"index": 0
}
]
]
},
"3741a23f-a304-445b-895d-4dd7dfcc7ccc": {
"main": [
[
{
"node": "9ee840f8-ac5f-4183-8a69-4acfd98cb2af",
"type": "main",
"index": 0
}
],
[
{
"node": "b6fe8efd-74b1-4f33-84a6-0e79062bdb23",
"type": "main",
"index": 0
}
]
]
},
"5f1b282a-3d24-47ba-975e-8b665bd685cb": {
"main": [
[
{
"node": "6e59bf13-7e4a-49c1-9fc5-7ef9bd9d7793",
"type": "main",
"index": 0
}
]
]
}
}
}Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Experte - Personalwesen
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
Madame AI Team | Kai
@madame-aiI’m a PhD in Physics turned AI enthusiast, passionate about uncovering how AI is transforming content creation, business, and daily life.
Diesen Workflow teilen