Алерти Glassdoor — не спам. Це справжня пошта про вакансії, просто її забагато. Кожен непрочитаний лист звалює купу ролей: одну, на яку я міг би відгукнутися, плюс GTM, COBOL, DevOps, музику чи Node.js, який мені не підходить. Мені не потрібен повніший інбокс. Мені потрібно ці листи опрацювати: відфільтрувати й стиснути до того, з чим можна працювати.

Проблема. Стос легітимних непрочитаних листів, які все одно доводиться читати вручну.

Непрочитані алерти Glassdoor в інбоксі

Рішення. Один короткий лист. Лишаються лише заголовки Backend / AI / ML; backend + Node.js відсікається. Кожен збіг — картка: назва, компанія, локація, чому лишили, кнопка Open listing.

Дайджест apply-list із п’ятьма відфільтрованими вакансіями

Цей воркфлоу n8n дивиться на непрочитану пошту Glassdoor, фільтрує її в тілі листа і надсилає HTML-дайджест. Сторінки вакансій на Glassdoor не відкриває (там часто стоїть заглушка «тільки для людей»).

Файл воркфлоу без облікових даних (плейсхолдер для пошти отримувача):

n8n-gmail-glassdoor-shortlist.json

Імпортуйте в n8n, підключіть свої credentials Gmail і Gemini, вкажіть отримувача й опублікуйте.

Вузли Gmail apply-list у n8n

Той самий граф у редакторі n8n:

Воркфлоу Glassdoor Gmail apply-list у n8n

Навіщо це

Мені потрібен короткий список, на який реально відгукнутися, а не всі посилання з алерту. Потік:

  • спрацьовує лише на непрочитані листи від noreply@glassdoor.com
  • витягує вакансії з тіла листа (назва, компанія, локація, посилання, снипет)
  • залишає заголовки з backend, AI або ML
  • відкидає заголовки з backend і Node.js / nodejs
  • дедуплікує за jobListingId, щоб та сама вакансія не прилітала двічі
  • надсилає HTML-підсумок у стилі Google; якщо збігів немає — лист «0 jobs»
  • позначає прочитаними лише оброблені листи Glassdoor

Результат

Після кожного запуску в інбоксі один лист: картки збігів Backend або AI/ML (назва, компанія, локація, коротка причина, кнопка Open listing) або короткий лист «немає збігів» зі списком переглянутих заголовків. Оброблений алерт зникає з непрочитаних, тож тригер не крутиться по тому самому повідомленню.

Крок за кроком

1. Gmail Trigger

Gmail Trigger

Опитує непрочитані листи від Glassdoor. Це єдина точка входу apply-list. HTTP до URL вакансії немає.

2. Set content

Set content

Зберігає тіло, thread id і id повідомлення Gmail. Далі вузли беруть цей пейлоад після відповідей Gemini.

3. Extract jobs

Extract jobs

Gemini (gemini-2.5-flash-lite) повертає JSON-масив вакансій лише з листа. Футер на кшталт «create job alert for Node.js» ігнорується.

4. Parse vacancy JSON

Parse vacancy JSON

Нормалізує відповідь моделі: один елемент на вакансію й jobListingId з URL Glassdoor.

5. Title gate

Title gate

Дешевий фільтр лише по title: лишаємо backend / AI / ML; відкидаємо backend + Node.js. GTM, music producer і «software engineer» без цих слів до класифікатора не доходять.

6. Classify stack

Classify stack

Якщо після гейту щось лишилось, Gemini ставить мітку backend, ai_engineer або reject. apply = true лише для перших двох. Якщо гейт порожній, цей виклик пропускається і збирається дайджест без збігів.

7. Дайджест і відправка

Digest and send

Дедуп за вже надісланими id, HTML у палітрі Material / Google, відправка вузлом Gmail (emailType: html). Порожній список усе одно йде листом із переглянутими назвами.

8. Позначити прочитаним

Mark as read

Позначає прочитаними id повідомлень цього запуску. Інша непрочитана пошта Glassdoor чекає наступного опитування.

Як імпортувати

  1. Імпортуйте JSON у n8n.
  2. Прив’яжіть OAuth Gmail і Google Gemini (PaLM) до відповідних вузлів.
  3. Замініть you@example.com у Send apply list.
  4. Опублікуйте воркфлоу, щоб Gmail Trigger почав опитування.

Це публічна копія Gmail apply-list без секретів; локально той самий граф крутиться в Docker.