This workflow follows the Chainllm → Chat Trigger 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 →
{
"name": "pfe-hunter-sophistique",
"nodes": [
{
"parameters": {
"operation": "pdf",
"binaryPropertyName": "data0",
"options": {}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1.1,
"position": [
-1152,
-384
],
"id": "c67b5a37-14a0-4598-b10e-3e52311f5667",
"name": "Extract from File"
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
-880,
-160
],
"id": "75dbd89b-8a4d-4525-a6c0-4ee1d7af6b35",
"name": "Groq Chat Model",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "e95c1d4a-3b8b-4b94-a97b-b6256736fa32",
"leftValue": "={{ $json.github_link }}",
"rightValue": "NON",
"operator": {
"type": "string",
"operation": "notEquals"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
192,
-144
],
"id": "e61d9322-ea57-49b6-883c-6424ae08a1cb",
"name": "If"
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
1344,
16
],
"id": "6f0441ce-2632-4c40-ba0f-67c5f57f90e9",
"name": "Groq Chat Model1",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"mode": "raw",
"jsonOutput": "={{ JSON.parse($json.text) }}",
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-464,
-384
],
"id": "cbcd2981-8475-4869-b9a5-e7974747039f",
"name": "Edit Fields"
},
{
"parameters": {
"options": {
"allowFileUploads": true
}
},
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"typeVersion": 1.4,
"position": [
-1360,
-384
],
"id": "43f3e436-030c-4e52-b75b-819cc303475a",
"name": "Upload CV"
},
{
"parameters": {
"promptType": "define",
"text": "=Tu es un expert en analyse de carri\u00e8re Tech.\nVoici le contenu brut du CV d'un candidat :\n\n{{ $json[\"text\"] }}\n\nTA MISSION :\nAnalyse ce texte et extrais un \"Profil JSON\" structur\u00e9.\nNe cherche pas de stage pour l'instant. Contente-toi d'extraire les faits avec une grande pr\u00e9cision.\n\nDIRECTIVES D'ANALYSE :\n1. Pour les COMP\u00c9TENCES : Ne te limite pas \u00e0 la liste \u00e0 puces \"Skills\". Tu dois scanner les descriptions des projets et des exp\u00e9riences pour d\u00e9duire les technologies r\u00e9ellement manipul\u00e9es (ex: si un projet cite \"d\u00e9veloppement d'une API REST\", ajoute \"API REST\" ou le langage utilis\u00e9).\n2. Pour le R\u00c9SUM\u00c9 : Il doit \u00eatre \"solide\". Il doit fusionner le background acad\u00e9mique, les projets phares et la stack technique principale.\n\nJe veux une r\u00e9ponse au format JSON strict avec ces champs :\n- \"resume\": \"Une synth\u00e8se professionnelle compl\u00e8te et dense (3-4 phrases). Elle doit mentionner le niveau d'\u00e9tudes, la sp\u00e9cialit\u00e9, et mettre en avant la coh\u00e9rence entre les projets r\u00e9alis\u00e9s et les comp\u00e9tences techniques.\",\n- \"top_skills\": [\"Liste d\u00e9duite et consolid\u00e9e des comp\u00e9tences techniques (Langages, Frameworks, Outils) trouv\u00e9es dans les projets ET la section comp\u00e9tences\"],\n- \"github_link\": \"L'URL du profil GitHub si elle existe, sinon 'NON'\",\n- \"experience_level\": \"D\u00e9butant\", \"Interm\u00e9diaire\" ou \"Avanc\u00e9\"\n\nIMPORTANT : R\u00e9ponds UNIQUEMENT avec le JSON brut. Pas de phrase d'introduction. Pas de balises markdown (```json). Juste le JSON.",
"batching": {}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.7,
"position": [
-880,
-384
],
"id": "12541bed-dfd6-4e09-b762-693869837d0e",
"name": "Summary About CV"
},
{
"parameters": {
"url": "=https://api.github.com/users/{{ $json.github_link.split('/').pop() }}/repos?sort=updated&per_page=5",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "n8n-pfe-agent"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
512,
-160
],
"id": "7e572a73-7d68-42d0-b292-9e1c3b793251",
"name": "Scraping Github"
},
{
"parameters": {
"url": "=https://api.github.com/repos/{{ $json.full_name }}/readme",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Accept",
"value": "application/vnd.github.raw"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "n8n-agent"
}
]
},
"options": {
"response": {
"response": {
"responseFormat": "text",
"outputPropertyName": "readme_content"
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
800,
-160
],
"id": "af980df6-18e8-4c17-8930-2249708e514f",
"name": "Extracting Readme",
"onError": "continueRegularOutput"
},
{
"parameters": {
"jsCode": "// 1. R\u00e9cup\u00e9rer la liste des projets (M\u00e9tadonn\u00e9es)\nconst repoMetadata = $('Scraping Github').all(); \n\n// 2. R\u00e9cup\u00e9rer le contenu des Readme (Donn\u00e9es actuelles)\nconst readmeData = $('Extracting Readme').all();\n\n// 3. Fusionner les deux\nconst summary = repoMetadata.map((repo, index) => {\n const meta = repo.json;\n \n // Par d\u00e9faut : Pas de readme\n let content = \"Pas de README disponible.\";\n \n // CORRECTION ICI : On v\u00e9rifie simplement si la donn\u00e9e 'readme_content' existe.\n // Plus besoin de v\u00e9rifier .error explicitement, ce qui supprime le soulignement rouge.\n if (readmeData[index] && readmeData[index].json && readmeData[index].json.readme_content) {\n \n // On prend 1000 caract\u00e8res pour avoir la stack technique\n content = readmeData[index].json.readme_content.substring(0, 1000) + \"...\"; \n }\n\n return {\n name: meta.name,\n // On ajoute la description GitHub (tr\u00e8s utile pour l'IA)\n description: meta.description || \"Pas de description\",\n language: meta.language || \"Non sp\u00e9cifi\u00e9\",\n updated_at: meta.updated_at.split('T')[0], // Date propre (YYYY-MM-DD)\n readme_excerpt: content // L'extrait du readme\n };\n});\n\n// 4. Renvoyer le paquet propre\nreturn {\n json: {\n github_summary: summary\n }\n};"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1072,
-160
],
"id": "3e936eba-9e58-41a0-bfc3-da28a9585bd7",
"name": "Code.js Formatting Github Infos"
},
{
"parameters": {
"promptType": "define",
"text": "=Tu es un Directeur Technique (CTO) charg\u00e9 de l'audit approfondi des candidats.\nTon objectif n'est pas de lister ce que le candidat a fait, mais d'\u00e9valuer **comment** il le fait et **quel est son potentiel r\u00e9el**.\n\nDONN\u00c9ES D'ENTR\u00c9E (Portfolio GitHub Brut) :\n{{ JSON.stringify($json.github_summary) }}\n\nM\u00c9THODOLOGIE D'AUDIT (Rigueur stricte) :\n\n1. **Analyse de la \"Stack Profonde\" :**\n * Ne regarde pas seulement les langages. Cherche les \"Frameworks d'Entreprise\" dans les textes (ex: Spring Boot, Angular, React, .NET Core).\n * Cherche les \"Outils de Production\" (Docker, CI/CD, Tests Unitaires, Swagger, JWT). Leur pr\u00e9sence est un marqueur fort de professionnalisme.\n\n2. **\u00c9valuation de la Complexit\u00e9 Architecturale :**\n * Le candidat construit-il des \"Hello World\" ou des syst\u00e8mes ? (Indices : mention de \"Base de donn\u00e9es\", \"API REST\", \"Microservices\", \"Authentification\", \"Dashboard Admin\").\n * Discerne les projets \"Tutoriels\" des projets \"Personnels/Acad\u00e9miques complets\".\n\n3. **Dynamique de D\u00e9veloppement :**\n * Analyse les dates (`updated_at`). Est-ce un profil en apprentissage continu ? Est-il actif r\u00e9cemment ?\n\nFORMAT DE SORTIE (Synth\u00e8se Executive - Ton professionnel et impartial) :\n\nR\u00e9dige une note de synth\u00e8se dense (5-6 lignes) structur\u00e9e ainsi :\n* **Identit\u00e9 Technique :** D\u00e9finis le profil (ex: \"Ing\u00e9nieur Logiciel Backend\", \"Fullstack Polyvalent\", \"Sp\u00e9cialiste Mobile\").\n* **Expertise Valid\u00e9e :** Liste les comp\u00e9tences *prouv\u00e9es par le code* (Stack majeure + Outils).\n* **Indice de Maturit\u00e9 :** Mentionne explicitement si des pratiques avanc\u00e9es (Architecture, DevOps, Documentation soign\u00e9e) sont d\u00e9tect\u00e9es. C'est le point cl\u00e9.\n* **Verdict Op\u00e9rationnel :** Conclus sur sa capacit\u00e9 \u00e0 int\u00e9grer une \u00e9quipe technique (ex: \"Profil op\u00e9rationnel sur des stacks modernes\", \"Profil acad\u00e9mique prometteur\").\n\nCONTRAINTES ABSOLUES :\n* Interdiction de citer des noms de projets sp\u00e9cifiques.\n* Interdiction d'inventer des comp\u00e9tences non pr\u00e9sentes dans les donn\u00e9es.\n* R\u00e9ponds uniquement par l'analyse.",
"batching": {}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.7,
"position": [
1344,
-160
],
"id": "35610086-791a-4981-95b7-139bb2db6cf7",
"name": "Summary About Github"
},
{
"parameters": {
"mode": "combine",
"combineBy": "combineByPosition",
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
1872,
-400
],
"id": "022e6514-c52d-4fcc-b147-f055939cde7b",
"name": "Merge CV + Github"
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
2192,
-208
],
"id": "825e1c50-8046-4b41-bd18-4af5202bff6e",
"name": "Groq Chat Model3",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://google.serper.dev/search",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "q",
"value": "={{ $json.text }}"
},
{
"name": "num",
"value": "20"
},
{
"name": "gl",
"value": "tn"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
2640,
-400
],
"id": "0bd36856-2572-44ad-aac3-db5bc8c153d1",
"name": "The Offers",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
2880,
-208
],
"id": "d22fb923-e671-4b62-977b-6626899e4913",
"name": "Groq Chat Model2",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=R\u00f4le : Tu es un Mentor Carri\u00e8re Senior qui aide un futur ing\u00e9nieur \u00e0 choisir son PFE.\n\nCONTEXTE :\nUne recherche Google tr\u00e8s cibl\u00e9e a d\u00e9j\u00e0 \u00e9t\u00e9 faite sur la base des comp\u00e9tences du candidat.\nLes r\u00e9sultats ci-dessous sont donc d\u00e9j\u00e0 techniquement pertinents (bonne stack).\n\nDONN\u00c9ES D'ENTR\u00c9E (R\u00e9sultats Google) :\n{{ JSON.stringify($json[\"organic\"]) }}\n\nTA MISSION (LE FILTRE QUALIT\u00c9) :\nAnalyse cette liste et extrais les opportunit\u00e9s \"Premium\".\nNe te limite pas \u00e0 un nombre fixe : garde toutes les offres excellentes (entre 2 et 5 g\u00e9n\u00e9ralement).\n\nCRIT\u00c8RES DE S\u00c9LECTION (HI\u00c9RARCHIE DE VALEUR) :\n1. **Priorit\u00e9 Absolue aux \"PFE Books\" :** Si un r\u00e9sultat est un PDF ou un catalogue officiel (\"Book PFE 2026\", \"Catalogue\"), c'est le Graal. Mets-le en premier.\n2. **Analyse du Sujet :** Privil\u00e9gie les descriptions qui \u00e9voquent des d\u00e9fis d'ing\u00e9nierie (Architecture, Scalabilit\u00e9, Refonte, DevOps, Innovation). \u00c9limine les descriptions vagues ou \"t\u00e2ches r\u00e9p\u00e9titives\".\n3. **R\u00e9putation de la Source :** Privil\u00e9gie les sites carri\u00e8res directs des entreprises ou LinkedIn. M\u00e9fie-toi des agr\u00e9gateurs g\u00e9n\u00e9riques (Tanitjobs, Keejob) sauf si l'offre est tr\u00e8s d\u00e9taill\u00e9e.\n\nFORMAT DE SORTIE (Markdown Professionnel) :\nPour chaque offre s\u00e9lectionn\u00e9e :\n\n### \ud83c\udf1f [Titre du Sujet/Poste] chez [Nom de l'Entreprise]\n- **Type :** [Indique si c'est un \"Catalogue PDF\", \"Offre Directe\" ou \"Via Agr\u00e9gateur\"]\n- **Lien :** [URL]\n- **Pourquoi cette offre est int\u00e9ressante :** Analyse la qualit\u00e9 du sujet ou de l'entreprise. (Ex: \"C'est un PFE Book officiel, ce qui garantit un encadrement structur\u00e9\" ou \"Le sujet mentionne une architecture Microservices, excellent pour monter en comp\u00e9tence\").",
"batching": {}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.7,
"position": [
2880,
-400
],
"id": "73f569bb-ccfc-4f7c-b998-a568c059cd4e",
"name": "The Best Pfe"
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
512,
384
],
"id": "4a3f847c-d026-456a-9547-fa27a1c82efd",
"name": "Groq Chat Model4",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"method": "POST",
"url": "https://google.serper.dev/search",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "q",
"value": "={{ $json.text }}"
},
{
"name": "num",
"value": "20"
},
{
"name": "gl",
"value": "tn"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.3,
"position": [
800,
176
],
"id": "a739960e-ce4b-4652-a019-ccdc7c747836",
"name": "The Offers2",
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=Tu es un Expert en Sourcing.\nLe candidat n'a pas de GitHub, nous basons la recherche sur son CV.\n\nDONN\u00c9ES DU CANDIDAT :\n- R\u00e9sum\u00e9 : {{ $json.resume }}\n- Skills : {{ $json.top_skills }}\n\nTA MISSION :\nConstruis une requ\u00eate Google EFFICACE pour trouver des offres de stage.\n\nR\u00c8GLES D'ASSOUPLISSEMENT (POUR \u00c9VITER 0 R\u00c9SULTATS) :\n1. **Date :** Cherche \"PFE 2025\" (plus courant que \"2025-2026\").\n2. **Mots-cl\u00e9s :** Utilise l'op\u00e9rateur OR entre les technos. Ne cherche pas TOUT en m\u00eame temps. (ex: \"Spring\" OR \"Java\" plut\u00f4t que \"Spring\" AND \"Java\").\n3. **Localisation :** Utilise \"Tunisie\" (plus large que Sfax uniquement).\n4. **Format :** Ne force pas le \"filetype:pdf\" si cela risque de tuer la recherche.\n\nEXEMPLE DE REQU\u00caTE \u00c9QUILIBR\u00c9E :\n(\"PFE 2025\" OR \"Stage pr\u00e9-embauche\") AND (\"Spring Boot\" OR \"Java\") AND \"Tunisie\" -linkedin\n\nR\u00e9ponds UNIQUEMENT par la cha\u00eene de recherche.",
"batching": {}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.7,
"position": [
512,
176
],
"id": "33671adc-3926-42b2-aeb5-1feed4290ba4",
"name": "The Request For Google 2"
},
{
"parameters": {
"promptType": "define",
"text": "=R\u00f4le : Mentor Carri\u00e8re pour \u00e9tudiants ing\u00e9nieurs.\n\nCONTEXTE :\nLe candidat postule sur la base de son CV (pas de GitHub disponible pour preuve).\nNous avons cherch\u00e9 des offres correspondant \u00e0 son profil d\u00e9claratif.\n\nDONN\u00c9ES D'ENTR\u00c9E :\n1. Profil du candidat (CV) : {{ $('If').item.json.resume }}\n2. R\u00e9sultats de recherche (March\u00e9) : {{ JSON.stringify($json[\"organic\"]) }}\n\nTA MISSION :\nS\u00e9lectionne les 3 meilleures opportunit\u00e9s de stage PFE.\n\nCRIT\u00c8RES DE S\u00c9LECTION (QUALIT\u00c9 AVANT TOUT) :\n1. **Pertinence Acad\u00e9mique :** L'offre correspond-elle au niveau (Ing\u00e9nieur/PFE) ? \u00c9limine les stages \"Technicien\" ou \"Ouvrier\" si le candidat est ing\u00e9nieur.\n2. **Stack Technique :** L'offre demande-t-elle les technos que le candidat a list\u00e9es dans son CV ?\n3. **Le \"Graal\" :** Si tu vois un PDF \"PFE Book\" ou \"Catalogue\", c'est la priorit\u00e9 n\u00b01.\n\nFORMAT DE SORTIE (Markdown) :\nPour chaque offre retenue :\n\n### \ud83d\udcc4 [Poste/Sujet] chez [Entreprise]\n- **Type :** [Catalogue PDF / Offre Web]\n- **Lien :** [URL]\n- **Pourquoi c'est pertinent :** [Explique le lien avec le CV. Ex: \"Cette offre demande du Angular, qui est list\u00e9 comme ta comp\u00e9tence principale.\"]",
"batching": {}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.7,
"position": [
1072,
176
],
"id": "36217bf3-3231-44a4-81e5-d0761562366c",
"name": "Basic LLM Chain"
},
{
"parameters": {
"model": "llama-3.3-70b-versatile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatGroq",
"typeVersion": 1,
"position": [
1072,
368
],
"id": "ddadd5d9-87cc-42c5-b083-43a8f3f71d8e",
"name": "Groq Chat Model5",
"credentials": {
"groqApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"promptType": "define",
"text": "=Tu es un Expert en Sourcing IT et \"Google Dorking\".\n\nANALYSE DU PROFIL (Fusion CV + GitHub) :\n1. D\u00c9CLARATIF (CV) : {{ $json.resume }}\n2. PREUVE TECHNIQUE (GitHub) :\n {{ $json.text }}\n (Concentre-toi sur les technos cit\u00e9es dans \"Expertise Valid\u00e9e\").\n\nCONTEXTE DE LA RECHERCHE :\nLe candidat cherche un \"Stage PFE\" pour la saison universitaire **2025-2026**.\nIl faut absolument \u00e9viter les offres p\u00e9rim\u00e9es de l'an dernier.\n\nTA MISSION :\nConstruis UNE SEULE cha\u00eene de recherche Google complexe et ultra-cibl\u00e9e.\n\nR\u00c8GLES DE CONSTRUCTION :\n1. **Le Filtre Temporel (CRITIQUE) :** Utilise des mots-cl\u00e9s stricts : \"PFE Book 2025-2026\", \"Catalogue 2026\", \"Sujets PFE 2026\", \"Campagne PFE 2026\".\n2. **La Techno (Preuve) :** Utilise UNIQUEMENT les stacks valid\u00e9es par l'audit GitHub (ex: si GitHub dit \"Expert Spring Boot\", mets \"Spring Boot\").\n3. **La G\u00e9ographie :** Tunisie (Sfax, Tunis, Sousse...).\n4. **Le Format :** Privil\u00e9gie les fichiers PDF (`filetype:pdf`) souvent utilis\u00e9s pour les catalogues officiels, ou les sites carri\u00e8res.\n\nEXEMPLE DE SORTIE ATTENDUE :\n(\"PFE Book 2025-2026\" OR \"Catalogue PFE 2026\" OR \"Sujets PFE 2026\") AND (\"Spring Boot\" OR \"Dotnet\") AND (\"Tunisie\" OR \"Sfax\") -linkedin\n\nR\u00e9ponds UNIQUEMENT par la cha\u00eene de recherche brute.",
"batching": {}
},
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1.7,
"position": [
2192,
-400
],
"id": "83d575b9-538c-42af-b726-aea9bd5e53b3",
"name": "The Requet (CV + Github)"
},
{
"parameters": {
"content": "Only CV",
"height": 80,
"width": 150
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
208,
64
],
"id": "141a5cdc-ae55-45d7-aec0-031900705b6b",
"name": "Sticky Note"
},
{
"parameters": {
"content": "CV + Github",
"height": 80,
"width": 150
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
336,
-224
],
"id": "1947bccb-a216-4911-bbfe-768901ab6bc1",
"name": "Sticky Note1"
}
],
"connections": {
"Extract from File": {
"main": [
[
{
"node": "Summary About CV",
"type": "main",
"index": 0
}
]
]
},
"Groq Chat Model": {
"ai_languageModel": [
[
{
"node": "Summary About CV",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "Scraping Github",
"type": "main",
"index": 0
}
],
[
{
"node": "The Request For Google 2",
"type": "main",
"index": 0
}
]
]
},
"Groq Chat Model1": {
"ai_languageModel": [
[
{
"node": "Summary About Github",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
},
{
"node": "Merge CV + Github",
"type": "main",
"index": 1
}
]
]
},
"Upload CV": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"Summary About CV": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Scraping Github": {
"main": [
[
{
"node": "Extracting Readme",
"type": "main",
"index": 0
}
]
]
},
"Extracting Readme": {
"main": [
[
{
"node": "Code.js Formatting Github Infos",
"type": "main",
"index": 0
}
]
]
},
"Code.js Formatting Github Infos": {
"main": [
[
{
"node": "Summary About Github",
"type": "main",
"index": 0
}
]
]
},
"Summary About Github": {
"main": [
[
{
"node": "Merge CV + Github",
"type": "main",
"index": 0
}
]
]
},
"Merge CV + Github": {
"main": [
[
{
"node": "The Requet (CV + Github)",
"type": "main",
"index": 0
}
]
]
},
"Groq Chat Model3": {
"ai_languageModel": [
[
{
"node": "The Requet (CV + Github)",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"The Offers": {
"main": [
[
{
"node": "The Best Pfe",
"type": "main",
"index": 0
}
]
]
},
"Groq Chat Model2": {
"ai_languageModel": [
[
{
"node": "The Best Pfe",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Groq Chat Model4": {
"ai_languageModel": [
[
{
"node": "The Request For Google 2",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"The Request For Google 2": {
"main": [
[
{
"node": "The Offers2",
"type": "main",
"index": 0
}
]
]
},
"The Offers2": {
"main": [
[
{
"node": "Basic LLM Chain",
"type": "main",
"index": 0
}
]
]
},
"Groq Chat Model5": {
"ai_languageModel": [
[
{
"node": "Basic LLM Chain",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"The Requet (CV + Github)": {
"main": [
[
{
"node": "The Offers",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "92544cc9-08a0-4557-af01-bc0bfca1a9c7",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "wzDvTQGkUgy9flsP",
"tags": []
}
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.
groqApihttpHeaderAuth
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
pfe-hunter-sophistique. Uses lmChatGroq, chatTrigger, chainLlm, httpRequest. Chat trigger; 24 nodes.
Source: https://github.com/MahdiBoughariou/n8n-ai-pfe-hunter/blob/3bf23b3e3a5188e2794fdb6cee0dce30e3e1b2ae/workflow.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Scraping Articles Dev.to Prod. Uses itemLists, stickyNote, nocoDb, scheduleTrigger. Scheduled trigger; 44 nodes.
Use cases are many: Compare costs across different models, plan your AI budget, optimize prompts for cost efficiency, or track expenses for client billing! OpenRouter charges a platform fee on top of
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Unlock the power of automation with the Automatically Generate Content and Post to Bluesky with LLM Workflow, an n8n-powered solution that uses Large Language Model (LLM) APIs to create engaging conte
Generate Videos from Chat with Google Vertex AI (Veo3) - Beginner Friendly