AutomationFlowsAI & RAG › Automatic Job Listings Extraction and Publishing Template

Automatic Job Listings Extraction and Publishing Template

ByKhairul Muhtadin @khmuhtadin on n8n.io

Automatically extract job listings from any website URL, format them with AI, and publish directly to WordPress. Just send a URL via Telegram, and watch as the workflow scrapes the job details, enhances the content with GPT, and creates a polished post on your site.

Event trigger★★★★★ complexityAI-powered53 nodesGoogle DriveSupabase Vector StoreOpenAI EmbeddingsDocument Default Data LoaderText Splitter Recursive Character Text SplitterGoogle Drive TriggerTelegram TriggerHTTP Request
AI & RAG Trigger: Event Nodes: 53 Complexity: ★★★★★ AI nodes: yes Added:

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

This workflow follows the Documentdefaultdataloader → OpenAI Embeddings 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": "27e265ef-0178-463c-894f-638b05f36ab6",
      "name": "Search File",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1568,
        1328
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "list",
            "value": "1qarDrwjNIrrx2wk8RMzLpyIq_6r0DHLX",
            "cachedResultUrl": "https://drive.google.com/drive/folders/1qarDrwjNIrrx2wk8RMzLpyIq_6r0DHLX",
            "cachedResultName": "GPT"
          }
        },
        "options": {},
        "resource": "fileFolder",
        "returnAll": true
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "40108440-f928-4550-b7f9-7777ccbee4e8",
      "name": "Get Data",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1344,
        1328
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "b47daf1e-f98e-4039-a521-e18117df50cd",
      "name": "Supabase Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        -880,
        1328
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        }
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "6e83958d-7e39-4459-8045-6db75f0d1d61",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        -896,
        1552
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "0ce8cdb8-a132-47bc-ad1b-7bc4e3f0a1df",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        -768,
        1552
      ],
      "parameters": {
        "options": {},
        "dataType": "binary"
      },
      "typeVersion": 1
    },
    {
      "id": "21666edf-7e66-4953-bd0e-1fb5b5882428",
      "name": "Recursive Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        -656,
        1680
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "4d4d3aab-982c-4a68-ba74-a13cd37b946c",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1120,
        1328
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "1ba1fb98-be3f-4fca-b145-920b02609c8b",
      "name": "Supabase Vector Store1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        416,
        2000
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {
          "queryName": "match_documents"
        },
        "toolName": "document",
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        },
        "toolDescription": "use thisto get information about the company"
      },
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "9dabf5f6-2789-4cc3-ad1f-1ae0503f3f90",
      "name": "Embeddings OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        512,
        2208
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "0318eb86-0df5-4552-9ed4-6d3e11b5d346",
      "name": "Google Drive Trigger",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "disabled": true,
      "position": [
        -1792,
        1328
      ],
      "parameters": {
        "event": "fileUpdated",
        "options": {
          "fileType": "all"
        },
        "pollTimes": {
          "item": [
            {
              "hour": 0
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1qarDrwjNIrrx2wk8RMzLpyIq_6r0DHLX",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1qarDrwjNIrrx2wk8RMzLpyIq_6r0DHLX",
          "cachedResultName": "GPT"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "efb7fdfc-6506-481a-9c2c-0ff690416fa1",
      "name": "\ud83d\udce5 New Job Link via Telegram",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        -1824,
        2048
      ],
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "8053e182-b9aa-4273-a82b-cbc9cd2cb415",
      "name": "\ud83d\udd27 Prepare URL for Extraction",
      "type": "n8n-nodes-base.set",
      "position": [
        -1600,
        2032
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "8d5bf5e7-0f91-4012-b180-4bef3f9c93cd",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text ||  $json.message.text }}"
            },
            {
              "id": "1a3739bb-d9c2-449b-929b-a1fb58196458",
              "name": "cleanUrl",
              "type": "string",
              "value": "={{ ($json.message.text && $json.message.text.includes('://')\n    ? $json.message.text.split('/').slice(0,3).join('/')\n    : 'Invalid URL'\n  ).replace(/\\r?\\n$/, '') }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "2f11c954-c6cb-46b3-916d-ddb6df220b9f",
      "name": "\ud83e\uddee Map Job Type & Category IDs",
      "type": "n8n-nodes-base.code",
      "position": [
        816,
        1728
      ],
      "parameters": {
        "jsCode": "// 1. Ambil array kategori dari input\nconst inputCategories = $('\ud83e\udde0 Extract Job Data with GPT').first().json.choices[0].message.content.categories;\n\n// 1b. Ambil job_type sebagai satu string\nconst inputType = $('\ud83e\udde0 Extract Job Data with GPT').first().json.choices[0].message.content.job_type;\n\n// 2. Array mapping antara `category` dan `id`\nconst categoryMap = [\n  { id: 299, category: \"2d\" },\n  { id: 298, category: \"3d\" },\n  { id: 315, category: \"3DFX\" },\n  { id: 284, category: \"Animaci\u00f3n 2d\" },\n  { id: 286, category: \"Animaci\u00f3n 3d\" },\n  { id: 617, category: \"Artista de color\" },\n  { id: 312, category: \"Audio SFX\" },\n  { id: 540, category: \"character artist\" },\n  { id: 445, category: \"Character FX (CFX)\" },\n  { id: 596, category: \"Cinematic Artist\" },\n  { id: 462, category: \"Comic\" },\n  { id: 294, category: \"Compositor 3d\" },\n  { id: 487, category: \"Compositor Digital\" },\n  { id: 463, category: \"Concept Art\" },\n  { id: 300, category: \"Creativo\" },\n  { id: 537, category: \"Crowd Artist\" },\n  { id: 301, category: \"Desarrollo de Software\" },\n  { id: 316, category: \"Desarrollo Visual\" },\n  { id: 302, category: \"Dibujante\" },\n  { id: 612, category: \"Direcci\u00f3n\" },\n  { id: 292, category: \"Director de Arte\" },\n  { id: 317, category: \"Dise\u00f1o de personajes\" },\n  { id: 291, category: \"Dise\u00f1o Gr\u00e1fico\" },\n  { id: 310, category: \"Edici\u00f3n de video\" },\n  { id: 533, category: \"Environment Artist\" },\n  { id: 620, category: \"Escultura Digital\" },\n  { id: 622, category: \"Filmmaker\" },\n  { id: 304, category: \"Fotograf\u00eda\" },\n  { id: 314, category: \"Game Artist\" },\n  { id: 486, category: \"Game Designer\" },\n  { id: 506, category: \"Game developer\" },\n  { id: 482, category: \"Game Producer\" },\n  { id: 576, category: \"Gameplay Animator\" },\n  { id: 290, category: \"Generalista 3d\" },\n  { id: 452, category: \"Grooming Hair/Fur\" },\n  { id: 303, category: \"Guionista\" },\n  { id: 305, category: \"Iluminaci\u00f3n\" },\n  { id: 288, category: \"Ilustraci\u00f3n\" },\n  { id: 616, category: \"Inteligencia Artificial\" },\n  { id: 311, category: \"Layout Artist\" },\n  { id: 619, category: \"Look Development\" },\n  { id: 464, category: \"Matte Painting\" },\n  { id: 287, category: \"Modelador 3d\" },\n  { id: 524, category: \"Motion Designer\" },\n  { id: 289, category: \"Motion Graphics\" },\n  { id: 588, category: \"Pixel Art\" },\n  { id: 307, category: \"Postproducci\u00f3n\" },\n  { id: 594, category: \"Previs\" },\n  { id: 297, category: \"Producci\u00f3n\" },\n  { id: 483, category: \"Programador\" },\n  { id: 592, category: \"Realidad Virtual (VR)\" },\n  { id: 448, category: \"Render Wrangler\" },\n  { id: 313, category: \"Rigger\" },\n  { id: 459, category: \"Shading & Texturing\" },\n  { id: 295, category: \"Storyboard\" },\n  { id: 296, category: \"Storytelling\" },\n  { id: 595, category: \"Technical Artist\" },\n  { id: 485, category: \"Technical Director (TD)\" },\n  { id: 308, category: \"UI / UX\" },\n  { id: 309, category: \"VFX\" },\n  { id: 589, category: \"Videojuegos\" },\n  { id: 593, category: \"Virtual Production\" },\n  { id: 293, category: \"Visualizaci\u00f3n Arquitect\u00f3nica\" },\n  { id: 590, category: \"VR & AR\" }\n];\n\n// 2b. Array mapping antara `type` dan `id`\nconst typeMap = [\n  { \"id\": 282, \"type\": \"Freelance / Remoto / Teletrabajo\" },\n  { \"id\": 318, \"type\": \"Indiferente\" },\n  { \"id\": 283, \"type\": \"Pr\u00e1cticas\" },\n  { \"id\": 281, \"type\": \"Proyecto\" },\n  { \"id\": 279, \"type\": \"Tiempo completo\" },\n  { \"id\": 280, \"type\": \"Tiempo parcial\" }\n];\n\n// 3. Map kategori input \u2192 array ID\nconst fixCategory = Array.isArray(inputCategories)\n  ? inputCategories\n      .map(name => {\n        const match = categoryMap.find(obj => obj.category === name);\n        return match ? match.id : null;\n      })\n      .filter(id => id !== null)\n  : [];\n\n// 4. Cari ID tipe berdasarkan inputType (string), balikan sebagai array\nconst foundType = typeMap.find(obj => obj.type === inputType);\nconst fixType = foundType ? [foundType.id] : [];\n\n// 5. Kembalikan kedua array dalam satu objek JSON\nreturn [\n  {\n    json: {\n      fixCategory,\n      fixType\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "122181aa-b26a-426a-875d-93bb2ff7b05f",
      "name": "\ud83d\udce5 Download Company Logo",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        1472,
        1728
      ],
      "parameters": {
        "url": "={{ $json.processedIconUrl }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "bb8acbf0-9f1b-4866-8771-3ae7c727d693",
      "name": "\u2601\ufe0f Upload Logo to WordPress",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        1712,
        1728
      ],
      "parameters": {
        "url": "https://yourwebsite.es/wp-json/wp/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Disposition",
              "value": "=attachment; filename=\"logo-{{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.company }}.jpeg\""
            },
            {
              "name": "Content-Type",
              "value": "image/jpeg"
            }
          ]
        },
        "inputDataFieldName": "data",
        "nodeCredentialType": "wordpressApi"
      },
      "credentials": {
        "wordpressApi": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "d7704688-f15b-4869-acd8-2067a36f5dfc",
      "name": "\ud83d\udce6 Format Final Job Post Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1936,
        1728
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "title",
              "name": "title",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.title }}"
            },
            {
              "id": "content",
              "name": "content",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.html }}\n"
            },
            {
              "id": "job_listing_type",
              "name": "job_listing_type",
              "type": "array",
              "value": "=[{{ $('\ud83e\uddee Map Job Type & Category IDs').item.json.fixType[0] }}]"
            },
            {
              "id": "job_listing_category",
              "name": "job_listing_category",
              "type": "array",
              "value": "={{ $('\ud83e\uddee Map Job Type & Category IDs').item.json.fixCategory }}"
            },
            {
              "id": "_job_location",
              "name": "_job_location",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.location }}"
            },
            {
              "id": "_company_name",
              "name": "_company_name",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.company }}"
            },
            {
              "id": "_company_logo",
              "name": "_company_logo",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.logo || \"http://www.notodoanimacion.es/wp-content/uploads/2025/06/logo-Sony-Pictures-Animation-1.png\" }}"
            },
            {
              "id": "_application",
              "name": "_application",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.original_link || $('\ud83d\udd27 Prepare URL for Extraction').item.json.text }}"
            },
            {
              "id": "7df4886d-0180-4279-9bff-f8f3ebc2961c",
              "name": "companyLogo",
              "type": "string",
              "value": "={{ $json.guid.raw }}"
            },
            {
              "id": "b9a766da-8bd6-4950-a243-8005c61c3ca9",
              "name": "status",
              "type": "string",
              "value": "publish"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9885c9df-0835-466b-a6af-41806f868ecc",
      "name": "\u2705 All Fields Available?",
      "type": "n8n-nodes-base.if",
      "onError": "continueErrorOutput",
      "position": [
        2160,
        1712
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8f4efbe7-3fc1-4be3-b4c6-f2b7b1f8f00a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": ""
            },
            {
              "id": "8194f924-3ef7-4056-a909-3499d8c116b3",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.job_listing_category }}",
              "rightValue": ""
            },
            {
              "id": "373f2081-f7ac-4313-a472-6d10770dd17a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.job_listing_type }}",
              "rightValue": ""
            },
            {
              "id": "74166a2f-57e8-4fed-8bcf-cd240779543a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json._job_location }}",
              "rightValue": ""
            },
            {
              "id": "bdee50a8-cdff-4570-b88a-8cf560468fa2",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json._application }}",
              "rightValue": ""
            },
            {
              "id": "48ab4287-4b6c-4241-a50f-1ddb40456fb2",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.companyLogo }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "2d4d5a37-785c-488e-9698-95d4c4acc220",
      "name": "if not valid",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2384,
        1408
      ],
      "parameters": {
        "text": "=Failed - Missing required fields. Please check extraction process.\n\nTrying another approach...",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "2b937eed-2ee2-42d6-897b-75d67e865bbb",
      "name": "notify: processing job",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -928,
        1952
      ],
      "parameters": {
        "text": "=hi, {{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.first_name }}\n\nprocessing job...",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "53185894-2a97-45df-ad7f-2295ba60e55f",
      "name": "notify: extracting",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -480,
        1952
      ],
      "parameters": {
        "text": "<i>Extracting web data... </i>",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.id }}",
        "messageId": "={{ $json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b0c5d81e-1524-42f7-a951-e1615674ede6",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -32,
        1872
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "31d50777-6c34-4a2a-b570-8bcd32073824",
              "operator": {
                "type": "boolean",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": ""
            },
            {
              "id": "9ae85f70-c7c3-4a1a-a2c8-64c3ad388c0b",
              "operator": {
                "type": "boolean",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.description }}",
              "rightValue": ""
            },
            {
              "id": "01c42779-16f4-452b-b328-b91f0f5b9a5b",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.url }}",
              "rightValue": ""
            },
            {
              "id": "7c6414cd-9d44-45bb-b999-30a0e1cd1993",
              "operator": {
                "type": "boolean",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.content }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "19eda755-411f-4c05-aaef-1f1bed9bc10a",
      "name": "notify: success extract",
      "type": "n8n-nodes-base.telegram",
      "position": [
        192,
        1776
      ],
      "parameters": {
        "text": "Jobs Extracted! Processing input with openAI...",
        "chatId": "={{ $('notify: extracting').item.json.result.chat.id }}",
        "messageId": "={{ $('notify: extracting').item.json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9b0a33d2-59be-40dd-80a4-60ba3c9cb10a",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1840,
        1216
      ],
      "parameters": {
        "width": 1400,
        "height": 620,
        "content": "## RAG DATA\n**Double click** to edit me. [Guide](https://docs.n8n.io/workflows/sticky-notes/)"
      },
      "typeVersion": 1
    },
    {
      "id": "a9a62b30-7ab6-48da-9ea6-0d0f2026b03b",
      "name": "\ud83d\udcda Load Valid Job Types & Categories",
      "type": "n8n-nodes-base.set",
      "position": [
        -1376,
        2048
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5b365fce-7a88-431b-aee7-4bf5a0171a1f",
              "name": "category",
              "type": "array",
              "value": "=[\n  { \"id\": 299, \"category\": \"2d\" },\n  { \"id\": 298, \"category\": \"3d\" },\n  { \"id\": 315, \"category\": \"3DFX\" },\n  { \"id\": 284, \"category\": \"Animaci\u00f3n 2d\" },\n  { \"id\": 286, \"category\": \"Animaci\u00f3n 3d\" },\n  { \"id\": 617, \"category\": \"Artista de color\" },\n  { \"id\": 312, \"category\": \"Audio SFX\" },\n  { \"id\": 540, \"category\": \"character artist\" },\n  { \"id\": 445, \"category\": \"Character FX (CFX)\" },\n  { \"id\": 596, \"category\": \"Cinematic Artist\" },\n  { \"id\": 462, \"category\": \"Comic\" },\n  { \"id\": 294, \"category\": \"Compositor 3d\" },\n  { \"id\": 487, \"category\": \"Compositor Digital\" },\n  { \"id\": 463, \"category\": \"Concept Art\" },\n  { \"id\": 300, \"category\": \"Creativo\" },\n  { \"id\": 537, \"category\": \"Crowd Artist\" },\n  { \"id\": 301, \"category\": \"Desarrollo de Software\" },\n  { \"id\": 316, \"category\": \"Desarrollo Visual\" },\n  { \"id\": 302, \"category\": \"Dibujante\" },\n  { \"id\": 612, \"category\": \"Direcci\u00f3n\" },\n  { \"id\": 292, \"category\": \"Director de Arte\" },\n  { \"id\": 317, \"category\": \"Dise\u00f1o de personajes\" },\n  { \"id\": 291, \"category\": \"Dise\u00f1o Gr\u00e1fico\" },\n  { \"id\": 310, \"category\": \"Edici\u00f3n de video\" },\n  { \"id\": 533, \"category\": \"Environment Artist\" },\n  { \"id\": 620, \"category\": \"Escultura Digital\" },\n  { \"id\": 622, \"category\": \"Filmmaker\" },\n  { \"id\": 304, \"category\": \"Fotograf\u00eda\" },\n  { \"id\": 314, \"category\": \"Game Artist\" },\n  { \"id\": 486, \"category\": \"Game Designer\" },\n  { \"id\": 506, \"category\": \"Game developer\" },\n  { \"id\": 482, \"category\": \"Game Producer\" },\n  { \"id\": 576, \"category\": \"Gameplay Animator\" },\n  { \"id\": 290, \"category\": \"Generalista 3d\" },\n  { \"id\": 452, \"category\": \"Grooming Hair/Fur\" },\n  { \"id\": 303, \"category\": \"Guionista\" },\n  { \"id\": 305, \"category\": \"Iluminaci\u00f3n\" },\n  { \"id\": 288, \"category\": \"Ilustraci\u00f3n\" },\n  { \"id\": 616, \"category\": \"Inteligencia Artificial\" },\n  { \"id\": 311, \"category\": \"Layout Artist\" },\n  { \"id\": 619, \"category\": \"Look Development\" },\n  { \"id\": 464, \"category\": \"Matte Painting\" },\n  { \"id\": 287, \"category\": \"Modelador 3d\" },\n  { \"id\": 524, \"category\": \"Motion Designer\" },\n  { \"id\": 289, \"category\": \"Motion Graphics\" },\n  { \"id\": 588, \"category\": \"Pixel Art\" },\n  { \"id\": 307, \"category\": \"Postproducci\u00f3n\" },\n  { \"id\": 594, \"category\": \"Previs\" },\n  { \"id\": 297, \"category\": \"Producci\u00f3n\" },\n  { \"id\": 483, \"category\": \"Programador\" },\n  { \"id\": 592, \"category\": \"Realidad Virtual (VR)\" },\n  { \"id\": 448, \"category\": \"Render Wrangler\" },\n  { \"id\": 313, \"category\": \"Rigger\" },\n  { \"id\": 459, \"category\": \"Shading & Texturing\" },\n  { \"id\": 295, \"category\": \"Storyboard\" },\n  { \"id\": 296, \"category\": \"Storytelling\" },\n  { \"id\": 595, \"category\": \"Technical Artist\" },\n  { \"id\": 485, \"category\": \"Technical Director (TD)\" },\n  { \"id\": 308, \"category\": \"UI / UX\" },\n  { \"id\": 309, \"category\": \"VFX\" },\n  { \"id\": 589, \"category\": \"Videojuegos\" },\n  { \"id\": 593, \"category\": \"Virtual Production\" },\n  { \"id\": 293, \"category\": \"Visualizaci\u00f3n Arquitect\u00f3nica\" },\n  { \"id\": 590, \"category\": \"VR & AR\" }\n]\n"
            },
            {
              "id": "9c795618-08e9-4ae1-a1b2-f6e45d6d5bf0",
              "name": "types",
              "type": "array",
              "value": "=[\n  { \"id\": 282, \"type\": \"Freelance / Remoto / Teletrabajo\" },\n  { \"id\": 318, \"type\": \"Indiferente\" },\n  { \"id\": 283, \"type\": \"Pr\u00e1cticas\" },\n  { \"id\": 281, \"type\": \"Proyecto\" },\n  { \"id\": 279, \"type\": \"Tiempo completo\" },\n  { \"id\": 280, \"type\": \"Tiempo parcial\" }\n]\n\n"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c0295bdb-d2d3-4988-9b8f-09ea94f3b772",
      "name": "notify: error",
      "type": "n8n-nodes-base.telegram",
      "position": [
        944,
        1968
      ],
      "parameters": {
        "text": "=Something went wrong \n\n<b>error:</b> <code>{{ $json.error.message }}</code>",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.id }}",
        "messageId": "={{ $('notify: processing job').item.json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d986c7c1-edcb-4b84-a7a5-321b6df8d562",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -704,
        1952
      ],
      "parameters": {
        "amount": 1.25
      },
      "typeVersion": 1.1
    },
    {
      "id": "ea1fbbb2-b0dc-4ab8-b0c9-6d993bb95d81",
      "name": "valid url?",
      "type": "n8n-nodes-base.if",
      "position": [
        -1152,
        2048
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "35deee67-0d08-46f8-a0e2-2f75cda4c08e",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.cleanUrl }}",
              "rightValue": "Invalid URL"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "e8169ac9-8b39-487c-a190-353127378cb7",
      "name": "notify: wrong url",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -928,
        2144
      ],
      "parameters": {
        "text": "=<i> thats not a valid url, please re-check your input...</i>",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.chat.id }}",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e6a7aa5b-6d04-49d4-b920-3895e935baf6",
      "name": "\ud83e\udde0 Extract Job Data with GPT",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "onError": "continueErrorOutput",
      "position": [
        416,
        1776
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini-2025-04-14",
          "cachedResultName": "GPT-4.1-MINI-2025-04-14"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Title: {{ $('Extract').item.json.title }}\nurl: {{ $('Extract').item.json.url }}\ncontent: {{ $('Extract').item.json.content }}\n\nmetadata\nauthor: {{ $('Extract').item.json.metadata.author }}\n\nicon: {{ $('Extract').item.json.external.icon['https://sp-tools-website.s3-eu-west-1.amazonaws.com/media/static/favicon.gif'] }}\n\n"
            },
            {
              "role": "=system",
              "content": "=You are a specialized article regenerator who works exclusively with information and rules stored in the \"document\" knowledge base.\n\nExtract rigorously the following fields from the provided job-offer HTML:\n\t\u2022\ttitle\n\t\u2022\tjob_type\n\t\u2022\tcategories (array)\n\t\u2022\tlocation (search in text of offer (body), or put \"sin definir\")\n\t\u2022\tcompany\n\t\u2022\tlogo\n\t\u2022\toriginal_link ({{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.message.text }})\n\t\u2022\thtml (only the job description)\n\nPrimary Function\nRegenerate articles strictly following the formatting, style, and structure rules defined in the RAG dataset. Do not invent your own rules or formats.\n\nWork Protocol\n1. Mandatory Consultation\nALWAYS use the \"document\" tool to search for:\n- Article formatting and structure rules\n- Writing style guides\n- Examples of correct formatting\n- Relevant information on the requested topic\n\n2. Strict Compliance\n- Follow EXACTLY the formatting rules found in the dataset\n- Respect the style guides defined in the knowledge base\n- Apply the article structure specified in the RAG\n- Maintain the tone and style established in the guidelines\n\n3. Regeneration Process\n- Search for formatting rules in the knowledge base\n- Search for information on the requested topic\n- Apply the rules found to the content\n- Regenerate the article following those specifications exactly\n\nImportant\nDO NOT create your own formatting rules\nDO NOT improvise article structure\nEVERYTHING should be based on what you find in \"document\"\nIf you don't find specific rules, ask the user for more details\n\n**HTML (DESCRIPCI\u00d3N)**\n\n1. Al principio, escribe un resumen de dos l\u00edneas de la oferta de empleo. Menciona la disciplina, el estudio que publica la oferta, y si es remoto o presencial, incluyendo la localizaci\u00f3n. Puedes a\u00f1adir otros elementos relevantes si es necesario. **No a\u00f1adas un t\u00edtulo ni encabezado H2 para este p\u00e1rrafo** y justifica el texto de cada p\u00e1rrafo completo.\n\nIncluye solo un espacio: `<p>&nbsp;</p>`\n\n2. Despu\u00e9s, a\u00f1ade este c\u00f3digo:\n\n```html\n<p style=\"text-align: center; font-size: 14pt;\"><span style=\"font-weight: 400;\">Si quieres m\u00e1s </span><a href=\"https://www.yourwebsite.es/ofertas-de-empleo-para-artistas-digitales/\"><span style=\"font-weight: 400;\">ofertas de empleo de Animaci\u00f3n, 3D, VFX y Arte digital</span></a><span style=\"font-weight: 400;\">\ud83d\udc48 ENTRA AQU\u00cd</span></p>\n```\n\nIncluye solo un espacio: `<p>&nbsp;</p>`\n\n3. Escribe lo siguiente:\n\n```html\n<p>[divider style=\"normal\" top=\"20\" bottom=\"20\"]</p>\n<p>&nbsp;</p>\n<p style=\"text-align: center; font-size: 14pt;\">IMPORTANTE: <a href=\"https://www.documen.es/suscripcion\">Suscr\u00edbete a nuestra p\u00e1gina</a> \ud83d\udc48 Te enviaremos nuestras ofertas de empleo, todas las semanas. \u2764\ufe0f</p>\n<p>&nbsp;</p>\n<p>[divider style=\"normal\" top=\"20\" bottom=\"20\"]</p>\n```\n\nIncluye un espacio: `<p>&nbsp;</p>`\n\n4. AHORA ESCRIBE TODO EL CONTENIDO EN HTML.\n\n**CONTENIDO:**\n\n\u00b7 Escribe SIEMPRE EN TERCERA PERSONA.\n\u00b7 No traduzcas t\u00e9rminos t\u00e9cnicos como Assets, technical director, senior, rigging, VFX, CGI, Motion Graphics, pipeline, etc.\n\u00b7 No traduzcas nombres de programas o herramientas, como After Effects, Photoshop, Shotgun, etc.\n\u00b7 **\u00a1No escribas ning\u00fan tipo de informaci\u00f3n adicional!**\n\n**FORMATO:**\n\n\u00b7 Organiza el contenido utilizando encabezados H2 para cada secci\u00f3n, todos centrados.\n\u00b7 Justifica el texto de cada p\u00e1rrafo completo.\n\u00b7 **SEO**: Usa negrita para los t\u00e9rminos importantes utilizando etiquetas `<strong>` para optimizar la lectura y el SEO, siguiendo estrictamente el orden HTML.\n\u00b7 Utiliza listas con vi\u00f1etas siempre que sea adecuado.\n\u00b7 TODOS los enlaces deben abrir en una nueva ventana.\n\u00b7 Usa negrita con etiquetas `<strong>` para los t\u00e9rminos importantes y palabras clave para optimizar el SEO.\n\u00b7 Despu\u00e9s de cada t\u00edtulo, a\u00f1ade `<p>&nbsp;</p>`\n\n5. Despu\u00e9s del contenido, a\u00f1ade este c\u00f3digo:\n\n```html\n<p style=\"text-align: center; font-size: 14pt;\"><span style=\"font-weight: 400;\">Si quieres m\u00e1s </span><a href=\"https://www.yourwebsite.es/ofertas-de-empleo-para-artistas-digitales/\"><span style=\"font-weight: 400;\">ofertas de empleo de Animaci\u00f3n, 3D, VFX y Arte digital</span></a><span style=\"font-weight: 400;\">\ud83d\udc48 ENTRA AQU\u00cd</span></p>\n```\n\n6. En la \u00faltima l\u00ednea, incluye SIEMPRE un eslogan aleatorio. Usa negrita con `<strong>` y alinea el texto al centro. Elige **UNA** de estas cuatro opciones:\n\n**Bienvenido a yourwebsite.es | Tu web sobre Animaci\u00f3n, VFX y Arte Digital en habla Hispana.**\n**Bienvenidos Artistas Digitales a notodoanimacion.es | El portal de Animaci\u00f3n, 3D, VFX y Videojuegos que trabaja para ti.**\n**Bienvenido a notodoanimacion.es | El portal sobre animaci\u00f3n y arte digital en espa\u00f1ol, m\u00e1s visitado del mundo.**\n\n\n\n-----\n\n\nCategory Selection Rules:\n\t\u2022\tONLY select categories from this EXACT options: {{ $('\ud83d\udcda Load Valid Job Types & Categories').item.json.category.map(item => item.category) }}\n\t\u2022\tMaximum 3 categories allowed\n\t\u2022\tMust be CASE SENSITIVE - match exactly as written in the array\n\t\u2022\tSelect the 3 MOST RELEVANT categories that best match the extracted job\n\t\u2022\tIf fewer than 3 categories are relevant, select only the appropriate ones\n\t\u2022\tDO NOT CREATE or ADD any categories outside the provided array\n\t\u2022\tDO NOT MODIFY the spelling, capitalization, or format of categories\n\nGuidelines:\n\t\u2022\tDO NOT INVENT ANYTHING\n\t\u2022\tWrite everything in Spanish (Castilian)\n\t\u2022\tStructure the job description using H2 headings\n\t\u2022\tUse strategic bolding for SEO and relevance\n\t\u2022\tIf any field is missing, leave it empty (\u201d\u201d or [])\n\t\u2022\tReturn only valid JSON\n\nCategory Selection Process:\n\t1.\tRead the job description carefully\n\t2.\tIdentify the main job functions and requirements\n\t3.\tMatch these against the provided category array\n\t4.\tSelect maximum 3 categories that are MOST APPROPRIATE\n\t5.\tEnsure exact spelling and case matching from the array\n\njob_type Selection Rules:\n  \u2022 THIS Field is a MANDATORY\n  \u2022\tONLY select job_type from this EXACT options:{{ $('\ud83d\udcda Load Valid Job Types & Categories').item.json.types.map(item => item.type) }}\n  \u2022 Maximum 1 Job type allowed\n  \u2022 Must be CASE SENSITIVE\u2014match exactly as written in the array\n  \u2022 DO NOT CREATE or ADD any categories outside the provided array\n  \u2022 DO NOT MODIFY the spelling, capitalization, or format of categories\n  \u2022 IF there's no type directly stated, find on the body, find relevant details and pick the most appropriate\n\n"
            }
          ]
        },
        "simplify": false,
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 1.8
    },
    {
      "id": "00ca2cca-7747-4266-a733-2deb390c86ae",
      "name": "Create Url",
      "type": "n8n-nodes-base.code",
      "position": [
        1264,
        1728
      ],
      "parameters": {
        "jsCode": "const extractData = $('Extract').first().json;\n\n// Ekstrak icon URL dengan error handling\nlet iconUrl = null;\n\ntry {\n  // Periksa apakah external dan icon ada\n  if (extractData?.external?.icon) {\n    const iconObject = extractData.external.icon;\n    \n    // Ambil key pertama (URL) dari object icon\n    const iconKeys = Object.keys(iconObject);\n    \n    if (iconKeys.length > 0) {\n      iconUrl = iconKeys[0];\n    }\n  }\n} catch (error) {\n  console.error('Error extracting icon URL:', error);\n}\n\n// Return hasil\nreturn [\n  {\n    json: {\n      iconUrl: iconUrl || '', // Return empty string jika tidak ada icon\n      // Atau bisa juga return original data + iconUrl\n      ...extractData,\n      processedIconUrl: iconUrl\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "dbade535-86ce-4c7e-a58e-db7f67ad9032",
      "name": "notify: openai success",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1040,
        1728
      ],
      "parameters": {
        "text": "<i>OpenAI Process Success... one sec...</i>",
        "chatId": "={{ $('notify: extracting').item.json.result.chat.id }}",
        "messageId": "={{ $('notify: extracting').item.json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "166012da-838d-4b35-ae9a-4903b5879f20",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        2384,
        2112
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5a72ac2f-e722-4121-91ff-d758520f7fdb",
              "name": "combine trim & false url",
              "type": "string",
              "value": "={{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.cleanUrl }}{{ $json._company_logo }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "492ef5dd-2637-4059-b403-4ac742dcab75",
      "name": "\ud83d\udce5 Download Company Logo - Alt",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        2608,
        2112
      ],
      "parameters": {
        "url": "={{ $json['combine trim & false url'] }}",
        "options": {
          "response": {
            "response": {
              "responseFormat": "file"
            }
          }
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "25c6286c-dd0e-49f2-a544-d11d1121bf1c",
      "name": "\u2601\ufe0f Upload Logo to WordPress - Alt",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        2832,
        2112
      ],
      "parameters": {
        "url": "https://yourweb.es/wp-json/wp/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Disposition",
              "value": "=attachment; filename=\"logo-{{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.company }}.jpeg\""
            },
            {
              "name": "Content-Type",
              "value": "image/jpeg"
            }
          ]
        },
        "inputDataFieldName": "data",
        "nodeCredentialType": "wordpressApi"
      },
      "credentials": {
        "wordpressApi": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "c1a7c69b-fb9f-4026-8984-ffd64349b63f",
      "name": "\ud83d\udce6 Format Final Job Post Data - Alt",
      "type": "n8n-nodes-base.set",
      "position": [
        3056,
        2112
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "title",
              "name": "title",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.title }}"
            },
            {
              "id": "content",
              "name": "content",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.html }}\n"
            },
            {
              "id": "job_listing_type",
              "name": "job_listing_type",
              "type": "array",
              "value": "=[{{ $('\ud83e\uddee Map Job Type & Category IDs').item.json.fixType[0] }}]"
            },
            {
              "id": "job_listing_category",
              "name": "job_listing_category",
              "type": "array",
              "value": "={{ $('\ud83e\uddee Map Job Type & Category IDs').item.json.fixCategory }}"
            },
            {
              "id": "_job_location",
              "name": "_job_location",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.location }}"
            },
            {
              "id": "_company_name",
              "name": "_company_name",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.company }}"
            },
            {
              "id": "_company_logo",
              "name": "_company_logo",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.logo || \"http://www.notodoanimacion.es/wp-content/uploads/2025/06/logo-Sony-Pictures-Animation-1.png\" }}"
            },
            {
              "id": "_application",
              "name": "_application",
              "type": "string",
              "value": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.original_link || $('\ud83d\udd27 Prepare URL for Extraction').item.json.text }}"
            },
            {
              "id": "7df4886d-0180-4279-9bff-f8f3ebc2961c",
              "name": "companyLogo",
              "type": "string",
              "value": "={{ $json.guid.raw }}"
            },
            {
              "id": "b9a766da-8bd6-4950-a243-8005c61c3ca9",
              "name": "status",
              "type": "string",
              "value": "publish"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "da72df6d-de32-401e-94d2-2f29581114c4",
      "name": "\u2705 All Fields Available? - Alt",
      "type": "n8n-nodes-base.if",
      "onError": "continueErrorOutput",
      "position": [
        3280,
        2096
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8f4efbe7-3fc1-4be3-b4c6-f2b7b1f8f00a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.title }}",
              "rightValue": ""
            },
            {
              "id": "8194f924-3ef7-4056-a909-3499d8c116b3",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.job_listing_category }}",
              "rightValue": ""
            },
            {
              "id": "373f2081-f7ac-4313-a472-6d10770dd17a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.job_listing_type }}",
              "rightValue": ""
            },
            {
              "id": "74166a2f-57e8-4fed-8bcf-cd240779543a",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json._job_location }}",
              "rightValue": ""
            },
            {
              "id": "bdee50a8-cdff-4570-b88a-8cf560468fa2",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json._application }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "5796ee20-2946-4897-a014-095c4ca8c41d",
      "name": "\ud83d\udcca Did Publish Succeed?1",
      "type": "n8n-nodes-base.if",
      "position": [
        3728,
        2080
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0e5d1113-a6fe-49bf-bf56-848c852875f6",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": ""
            },
            {
              "id": "d00af776-6323-4c62-84f1-30de39d256d0",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.link }}",
              "rightValue": ""
            },
            {
              "id": "0cd4f4d5-8c1c-4c98-8d7b-1995a56fcf3f",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.categories }}",
              "rightValue": ""
            },
            {
              "id": "2e8ab092-9500-44e9-a32f-99a00dbb7a28",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.date }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "b8067d7e-0647-4394-9662-734547fe6386",
      "name": "\ud83d\udce8 Notify Success - Alt",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3952,
        2112
      ],
      "parameters": {
        "text": "=Hello, {{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.from.first_name }}\nJob successfully extracted and Posted! \nmissing value has fill with default image\n\nOriginal Url: {{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.message.text.replace(/_/g, '\\\\_') }}\n\nTitle: {{ $('\ud83d\ude80 Publish to Yourweb - Alt').item.json.title.raw.replace(/_/g, '\\\\_') }}\nCategory: {{ $('\ud83d\ude80 Publish to Yourweb - Alt').item.json.job_listing_category }}\nJob Type: {{ $('\ud83d\ude80 Publish to Yourweb - Alt').item.json.job_listing_types }}\nLogo: {{ $('\ud83d\ude80 Publish to Yourweb - Alt').item.json.meta._company_logo.replace(/_/g, '\\\\_') }}\n\nPublished Post: {{ $json.guid.rendered.replace(/_/g, '\\\\_') }}",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "bd6a58c8-af17-49e4-b9dc-6a575f07ebe2",
      "name": "\ud83d\udce8 Notify Failed - Alt",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3952,
        2304
      ],
      "parameters": {
        "text": "=Hello, {{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.from.first_name }}\nJob Failed!\n\nPlease Check your workflow or contact khairul https://wa.me/6285155431253",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": true
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3305ba40-106a-4177-b851-17946afe6c64",
      "name": "\ud83d\udcca Did Publish Succeed?2",
      "type": "n8n-nodes-base.if",
      "position": [
        2608,
        1648
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0e5d1113-a6fe-49bf-bf56-848c852875f6",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}",
              "rightValue": ""
            },
            {
              "id": "d00af776-6323-4c62-84f1-30de39d256d0",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.link }}",
              "rightValue": ""
            },
            {
              "id": "0cd4f4d5-8c1c-4c98-8d7b-1995a56fcf3f",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.categories }}",
              "rightValue": ""
            },
            {
              "id": "2e8ab092-9500-44e9-a32f-99a00dbb7a28",
              "operator": {
                "type": "boolean",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.date }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "669df126-b486-401a-9f14-3dd7e4c25d2d",
      "name": "notify: failed extract",
      "type": "n8n-nodes-base.telegram",
      "position": [
        192,
        1968
      ],
      "parameters": {
        "text": "=Failed in extract using Jina... please inform developer",
        "chatId": "={{ $('notify: extracting').item.json.result.chat.id }}",
        "messageId": "={{ $('notify: extracting').item.json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "94f124f9-287e-4ab9-8c85-3c923d862a4b",
      "name": "Error",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2832,
        1824
      ],
      "parameters": {
        "text": "=Hello, {{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.from.first_name }}\nJob Failed!\n\nPlease Check your workflow or contact khairul https://wa.me/6285155431253",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "520bf6db-cfda-42fb-98c0-8293187b4bd7",
      "name": "changing method",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2832,
        1408
      ],
      "parameters": {
        "text": "=Trying Second Attempt!\n<i>Filling empty field with default value...</i>",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json.message.chat.id }}",
        "messageId": "={{ $json.result.message_id }}",
        "operation": "editMessageText",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b42a3aac-3457-477a-b4e0-789ae7f0c4f9",
      "name": "Wait1",
      "type": "n8n-nodes-base.wait",
      "position": [
        3056,
        1408
      ],
      "parameters": {
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "e7fd2055-f045-455f-a348-0ded7bceaa5a",
      "name": "Wait2",
      "type": "n8n-nodes-base.wait",
      "position": [
        2608,
        1408
      ],
      "parameters": {
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "ae89562c-fc6c-46b4-841c-a6d2d2b3d6d7",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        1232
      ],
      "parameters": {
        "color": 7,
        "width": 660,
        "height": 260,
        "content": "## Monitoring - leave as it is"
      },
      "typeVersion": 1
    },
    {
      "id": "fe6b5ed7-6a7f-4b1c-a876-ef79566e8b6f",
      "name": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        -336,
        1328
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "5c6f710e-2901-407b-920c-46d0d9f2a3b9",
      "name": "Kirim ke Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        112,
        1328
      ],
      "parameters": {
        "text": "={{ $json.message }}",
        "chatId": "your-chat-id",
        "additionalFields": {
          "parse_mode": "HTML"
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c732088d-cce6-4e26-b113-bd9249182737",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        -112,
        1328
      ],
      "parameters": {
        "jsCode": "// Perfect error access untuk N8N v1.99.1\nconst errorData = $input.first().json;\nconst execution = errorData.execution;\nconst workflow = errorData.workflow;\nconst error = execution.error;\n\nconst message = `\ud83d\udea8 <b>WORKFLOW ERROR</b>\\n\\n` +\n  `\ud83d\udccb Workflow: <b>${workflow.name}</b>\\n` +\n  `\u2699\ufe0f Node: <code>${error.node.name}</code>\\n` +\n  `\u274c Error: <code>${error.message}</code>\\n` +\n  `\ud83d\udcdd Description: <i>${error.description}</i>\\n` +\n  `\ud83d\udd50 Waktu: ${new Date(error.timestamp).toLocaleString('id-ID')}\\n` +\n  `\ud83d\udd0d Execution: <a href=\"${execution.url}\">${execution.id}</a>\\n` +\n  `\u26a0\ufe0f Level: ${error.level.toUpperCase()}`;\n\nreturn {\n  message: message,\n  parse_mode: 'HTML',\n  chat_id: '<your-api-key-goes-here>'\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "6f7c3c18-e606-44c8-9fe7-1efa43f7bc81",
      "name": "Publiched!",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2832,
        1600
      ],
      "parameters": {
        "text": "=Hello, {{ $('\ud83d\udce5 New Job Link via Telegram').item.json.message.from.first_name }}\nJob successfully extracted and Posted! \n\nOriginal Url: {{ $('\ud83d\udd27 Prepare URL for Extraction').item.json.message.text.replace(/_/g, '\\\\_') }}\n\nTitle: {{ $('\ud83d\ude80 Publish to Your web').item.json.title.rendered }}\nCategory: {{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.categories }}\nJob Type: {{ $('\ud83e\udde0 Extract Job Data with GPT').item.json.choices[0].message.content.job_type }}\nLogo: {{ $('\ud83d\ude80 Publish to Your web').item.json.meta._company_logo }}\n\nPublished Post: {{ $json.guid.rendered.replace(/_/g, '\\\\_') }}",
        "chatId": "={{ $('\ud83d\udce5 New Job Link via Telegram').first().json

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

Automatically extract job listings from any website URL, format them with AI, and publish directly to WordPress. Just send a URL via Telegram, and watch as the workflow scrapes the job details, enhances the content with GPT, and creates a polished post on your site.

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

Your AI workforce is ready. Are you?

Google Sheets Tool, Mcp Trigger, Google Drive +29
AI & RAG

This comprehensive workflow bundle is designed as a powerful starter kit, enabling you to build a multi-functional AI assistant on Telegram. It seamlessly integrates AI-powered voice interactions, an

Telegram Trigger, Telegram, OpenAI +19
AI & RAG

This intelligent chatbot leverages cutting-edge financial APIs and AI-driven analysis to deliver comprehensive stock research reports. Get instant access to professional-grade investment analysis that

Tool Think, Supabase Vector Store, OpenAI Embeddings +15
AI & RAG

RAG_Ingest. Uses httpRequest, vectorStoreSupabase, documentDefaultDataLoader, textSplitterRecursiveCharacterTextSplitter. Event-driven trigger; 73 nodes.

HTTP Request, Supabase Vector Store, Document Default Data Loader +4
AI & RAG

This n8n template automatically classifies incoming emails (Sales, Support, Internal, Finance, Promotions) and routes them to a dedicated OpenAI LLM Agent for processing. Depending on the category, th

OpenAI, Gmail, Text Classifier +16