AutomationFlowsData & Sheets › Automate Job Searches with Job Search Global API & Google Sheets

Automate Job Searches with Job Search Global API & Google Sheets

ByEvoort Solutions @evoortsolutions on n8n.io

Description: Automate your job search process by querying the Job Search Global API via RapidAPI every 6 hours for a specified keyword like “Web Developer.” This workflow extracts job listings and saves them directly to Google Sheets, with alerts sent for any API failures.…

Cron / scheduled trigger★★★★☆ complexity15 nodesHTTP RequestEmail SendGoogle Sheets
Data & Sheets Trigger: Cron / scheduled Nodes: 15 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #8820 — we link there as the canonical source.

This workflow follows the Emailsend → Google Sheets 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 →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "1f0a7b3a-a6ab-4fb9-b1ef-4f4d5bc48a01",
      "name": "Set Search Term",
      "type": "n8n-nodes-base.set",
      "position": [
        272,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "bb36d63f-a074-40b1-9d83-dd573566f6af",
              "name": "Search Term",
              "type": "string",
              "value": "Web Developer"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0a66e398-1de3-4dd3-8b5f-6fd8c6b6358c",
      "name": "Fetch Job Listings",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        496,
        0
      ],
      "parameters": {
        "url": "https://job-search-global.p.rapidapi.com/search.php",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "sendHeaders": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "pageNumber",
              "value": "1"
            },
            {
              "name": "pageSize",
              "value": "10"
            },
            {
              "name": "searchQuery",
              "value": "={{ $json[\"Search Term\"] }}"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "x-rapidapi-host",
              "value": "job-search-global.p.rapidapi.com"
            },
            {
              "name": "x-rapidapi-key",
              "value": "your key"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "16e842c1-fd91-4082-b015-387632eff19f",
      "name": "Check API Response",
      "type": "n8n-nodes-base.if",
      "position": [
        784,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "ef7b71fa-c726-4e08-8fdb-55c215227bb0",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "={{ $json.status }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ec64192d-9865-45f0-b4be-e3ee18ebbe5c",
      "name": "Send Failure Notification Email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1072,
        224
      ],
      "parameters": {
        "html": "Hello,\n\nThe job search automation workflow encountered a failure while attempting to fetch job listings from the API.\n\nPlease review the API request and ensure the following:\n- API key and host are valid and not expired.\n- The request payload is correctly formatted.\n- The API endpoint is available.\n\nYou may also want to inspect the response for further debugging.\n\nRegards,  \nn8n Workflow Bot\n",
        "options": {},
        "subject": "\ud83d\udea8 Job Search API Failure Notification",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "96a773ee-a81b-4aca-8ad1-9d982bd0a2cd",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 6
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "294c8010-0792-4396-89ec-03ae8c60fe30",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        -112
      ],
      "parameters": {
        "height": 240,
        "content": "Triggers the workflow automatically every 6 hours.\nEnsures regular job search updates without manual execution."
      },
      "typeVersion": 1
    },
    {
      "id": "9765dd80-dc0b-407f-a8b9-1746aaf44161",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        192,
        -112
      ],
      "parameters": {
        "height": 240,
        "content": "Defines the job search keyword (e.g., \u201cWeb Developer\u201d).\nThis value is dynamically inserted into the API request body."
      },
      "typeVersion": 1
    },
    {
      "id": "b1607d91-4603-4df8-b35d-7b7bb12ded61",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        448,
        -112
      ],
      "parameters": {
        "height": 240,
        "content": "Sends a POST request to the Job Search Global API.\nFetches job data based on the search term, limited to 10 results per request."
      },
      "typeVersion": 1
    },
    {
      "id": "5ca49f7d-2598-4403-ba55-7311e4208d6e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        704,
        -112
      ],
      "parameters": {
        "height": 240,
        "content": "Evaluates whether the API returned a successful response.\nBranches the workflow into success (data processing) or failure (email alert)."
      },
      "typeVersion": 1
    },
    {
      "id": "c70bdcd3-313b-4f95-8dc0-4287982f41ae",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1056,
        -256
      ],
      "parameters": {
        "height": 256,
        "content": "Extracts the job listings array from the API response.\nTransforms it into individual records for Google Sheets."
      },
      "typeVersion": 1
    },
    {
      "id": "785dd467-f560-4430-af77-3c935a5c6ccb",
      "name": "Save to Google Sheet1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1392,
        -128
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "title",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "postDate",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "postDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "jobSource",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "jobSource",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "slug",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "slug",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sentiment",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "dateAdded",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "dateAdded",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "tags",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "tags",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "viewCount",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "viewCount",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "title"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "url",
          "value": ""
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "e8456e00-4912-4d6c-a962-717cecf5ef38",
      "name": "Extract Job Data",
      "type": "n8n-nodes-base.code",
      "position": [
        1120,
        -144
      ],
      "parameters": {
        "jsCode": "return $input.first().json.data.data;"
      },
      "typeVersion": 2
    },
    {
      "id": "58681808-71b7-4041-b88a-70149c74fbf4",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        -256
      ],
      "parameters": {
        "height": 256,
        "content": "Appends or updates job listings in a specific Google Sheet.\nUses \"title\" as the matching column to prevent duplicates."
      },
      "typeVersion": 1
    },
    {
      "id": "4bad0177-fc01-4169-a022-882c1c313d92",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1024,
        112
      ],
      "parameters": {
        "height": 288,
        "content": "Sends an email to notify of API failure or bad response.\nHelps in quickly identifying issues with the API call or authentication."
      },
      "typeVersion": 1
    },
    {
      "id": "b0de1b25-f4b1-47dd-8a1b-1c8e47faba4d",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        -368
      ],
      "parameters": {
        "width": 576,
        "height": 880,
        "content": "#  Job Search Automation Workflow \n\n**Description:**  \nThis workflow automates job searches by querying the Job Search Global API every 6 hours for the keyword \"Web Developer\". It processes the API response, extracts job listings, and appends or updates the results in a Google Sheet. If the API response indicates failure, it sends an email notification alerting the admin.\n\n\n### Workflow Steps:\n\n1. **Schedule Trigger**  \n   Runs the workflow automatically every 6 hours.\n\n2. **Set Search Term**  \n   Defines the job search keyword dynamically used in the API request (`\"Web Developer\"`).\n\n3. **Fetch Job Listings**  \n   Sends a POST request to the Job Search Global API with pagination parameters.\n\n4. **Check API Response**  \n   Validates if the API response status is successful.\n\n5. **Extract Job Data**  \n   Parses the job listings array from the API response for further processing.\n\n6. **Save to Google Sheet1**  \n   Appends or updates the extracted job listings in a specified Google Sheet, using the job title to avoid duplicates.\n\n7. **Send Failure Notification Email** (Conditional)  \n   Sends an alert email if the API response fails or returns an error.\n\n---\n\n### Notes:  \n- Uses environment variables for API keys and authentication.  \n- Prevents duplicate job entries by matching on the job title.  \n- Includes helpful sticky notes explaining each node's purpose.\n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Set Search Term": {
      "main": [
        [
          {
            "node": "Fetch Job Listings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Job Data": {
      "main": [
        [
          {
            "node": "Save to Google Sheet1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Set Search Term",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check API Response": {
      "main": [
        [
          {
            "node": "Extract Job Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Send Failure Notification Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Job Listings": {
      "main": [
        [
          {
            "node": "Check API Response",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Description: Automate your job search process by querying the Job Search Global API via RapidAPI every 6 hours for a specified keyword like “Web Developer.” This workflow extracts job listings and saves them directly to Google Sheets, with alerts sent for any API failures.…

Source: https://n8n.io/workflows/8820/ — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

Security teams, DevOps engineers, vulnerability analysts, and automation builders who want to eliminate repetitive Nessus scan parsing, AI-based risk triage, and manual reporting. Designed for orgs fo

Email Send, HTTP Request, Google Sheets +1
Data & Sheets

This n8n workflow automatically finds apartments for rent in Germany, filters them by your city, rent budget, and number of rooms, and applies to them via email. Each application includes: A personali

HTTP Request, Google Drive, Email Send +1
Data & Sheets

👤 Who it’s for Blue Team leads, CISOs, and SOC managers who want automated visibility into threat metrics, endpoint alerts, and response actions — without needing a full SIEM or BI platform.

HTTP Request, Email Send, Google Sheets
Data & Sheets

Workflow Overview Zoom Attendance Evaluator with Follow-up is an n8n automation workflow that automatically evaluates Zoom meeting attendance and sends follow-up emails to no-shows and early leavers w

Zoom, Item Lists, HTTP Request +3
Data & Sheets

This workflow automatically monitors Amazon product prices, tracks price changes, and sends alerts when significant price fluctuations occur. Built with ScrapeOps' structured data API, it provides a r

Google Sheets, HTTP Request, Email Send