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

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

Цей воркфлоу n8n дивиться на непрочитану пошту Glassdoor, фільтрує її в тілі листа і надсилає HTML-дайджест. Сторінки вакансій на Glassdoor не відкриває (там часто стоїть заглушка «тільки для людей»).
Файл воркфлоу без облікових даних (плейсхолдер для пошти отримувача):
n8n-gmail-glassdoor-shortlist.json
Імпортуйте в n8n, підключіть свої credentials Gmail і Gemini, вкажіть отримувача й опублікуйте.

Той самий граф у редакторі 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

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

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

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

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

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

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

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

Позначає прочитаними id повідомлень цього запуску. Інша непрочитана пошта Glassdoor чекає наступного опитування.
Як імпортувати
- Імпортуйте JSON у n8n.
- Прив’яжіть OAuth Gmail і Google Gemini (PaLM) до відповідних вузлів.
- Замініть
you@example.comу Send apply list. - Опублікуйте воркфлоу, щоб Gmail Trigger почав опитування.
Це публічна копія Gmail apply-list без секретів; локально той самий граф крутиться в Docker.