Automatisation de la recherche d'emploi avec Job Search Global API et Google Sheets

Intermédiaire

Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 15 nœuds.Utilise principalement des nœuds comme If, Set, Code, EmailSend, HttpRequest. Automatisation de la recherche d'offres d'emploi avec Job Search Global API et Google Sheets

Prérequis
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Informations d'identification Google Sheets API
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "meta": {
    "instanceId": "60c025075753afcab9f803964b4caaca9402f435deb4efafbb8e3b93b54d8752",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "1f0a7b3a-a6ab-4fb9-b1ef-4f4d5bc48a01",
      "name": "Définir le terme de recherche",
      "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": "Récupérer les offres d'emploi",
      "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": "Vérifier la réponse API",
      "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": "Envoyer un email de notification d'échec",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1072,
        224
      ],
      "webhookId": "f1359f08-e267-44d2-9fca-505f66b5feb6",
      "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": "🚨 Job Search API Failure Notification",
        "toEmail": "dev@gmail.com",
        "fromEmail": "itadmin@gmail.com"
      },
      "credentials": {
        "smtp": {
          "id": "nPwKPPgVavimTJX4",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "96a773ee-a81b-4aca-8ad1-9d982bd0a2cd",
      "name": "Déclencheur planifié",
      "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": "Note adhésive",
      "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": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        192,
        -112
      ],
      "parameters": {
        "height": 240,
        "content": "Defines the job search keyword (e.g., “Web Developer”).\nThis value is dynamically inserted into the API request body."
      },
      "typeVersion": 1
    },
    {
      "id": "b1607d91-4603-4df8-b35d-7b7bb12ded61",
      "name": "Note adhésive2",
      "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": "Note adhésive3",
      "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": "Note adhésive4",
      "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": "Sauvegarder dans 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": {
          "id": "Rt0RWApx8PL9t0RF",
          "name": "Google Docs account"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "e8456e00-4912-4d6c-a962-717cecf5ef38",
      "name": "Extraire les données d'emploi",
      "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": "Note adhésive5",
      "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": "Note adhésive6",
      "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": "Note adhésive7",
      "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
    }
  ],
  "pinData": {},
  "connections": {
    "1f0a7b3a-a6ab-4fb9-b1ef-4f4d5bc48a01": {
      "main": [
        [
          {
            "node": "0a66e398-1de3-4dd3-8b5f-6fd8c6b6358c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e8456e00-4912-4d6c-a962-717cecf5ef38": {
      "main": [
        [
          {
            "node": "785dd467-f560-4430-af77-3c935a5c6ccb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "96a773ee-a81b-4aca-8ad1-9d982bd0a2cd": {
      "main": [
        [
          {
            "node": "1f0a7b3a-a6ab-4fb9-b1ef-4f4d5bc48a01",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "16e842c1-fd91-4082-b015-387632eff19f": {
      "main": [
        [
          {
            "node": "e8456e00-4912-4d6c-a962-717cecf5ef38",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "ec64192d-9865-45f0-b4be-e3ee18ebbe5c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0a66e398-1de3-4dd3-8b5f-6fd8c6b6358c": {
      "main": [
        [
          {
            "node": "16e842c1-fd91-4082-b015-387632eff19f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Création de contenu, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds15
Catégorie2
Types de nœuds8
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34