👥 Send weekly hiring manager reports with BreezyHR data to email

⚡ 18 views · 👥 HR & Recruitment

Description

Weekly hiring‑manager snapshot from Breezy HR to email (pipeline, next‑week interviews, stuck)

This workflow sends each hiring manager a single weekly email with an overview of their open roles: pipeline totals, a per‑position summary, interviews scheduled next week and stuck candidates (no movement ≥ 7 days). It queries Breezy HR using your API token, detects the HM via each position’s team (falling back to a simple map when unavailable), aggregates results and emails one digest per HM. The job runs Mondays at 07:30 Asia/Kolkata, includes a DRY_RUN preview and rate‑limits sends.

Who’s it for

How it works

  1. Cron (Mon 07:30 IST) triggers weekly.
  2. Breezy → Positions: Fetch open positions (configurable).
  3. Find HM: For each position, read the position team and look for a member with a “hiring manager” role; if none, use the fallback map.
  4. Candidates per position: Fetch candidates, compute stage counts and mark stuck where last activity ≥ STUCK_AFTER_DAYS.
  5. Events per position: Fetch events and keep those that look like interviews scheduled next calendar week.
  6. Aggregate per position → Group by hiring manager → Build one HTML digest per HM.
  7. DRY_RUN? If true, output a preview only; otherwise send emails with a small delay between each.

How to set up

  1. Credentials in n8n
    • HTTP Header Auth for Breezy HR: set Authorization: Bearer <YOUR_TOKEN> in a credential (don’t hardcode in the node).
    • SMTP (Gmail) to send digests.
  2. Open “Set: Config” (single place to edit)
    • BREEZY_API_BASE = https://api.breezy.hr/v3
    • COMPANY_ID = your Breezy company ID
    • TIMEZONE = Asia/Kolkata
    • INCLUDE_ONLY_OPEN = true (use STATE_FILTER = open)
    • USE_BREEZY_HM_DETECTION = true
    • HM_FALLBACK_MAP_JSON = e.g., { "Default": "hm@example.com", "Java TL": "javatl@company.com" }
    • STUCK_AFTER_DAYS = 7
    • INTERVIEW_EVENT_KEYWORDS_CSV = interview
    • SMTP_FROM = sender address
    • SUBJECT_TEMPLATE = Weekly HM snapshot {{range}} — {{positions_count}} roles, {{candidates_count}} candidates
    • INTRO_TEMPLATE / OUTRO_TEMPLATE
    • DRY_RUN = false (set true to preview)
    • RATE_LIMIT_EMAIL_SECONDS = 5
  3. Activate the workflow.

Requirements

How to customize

Add‑ons

Use Case Examples

Common troubleshooting

IssuePossible CauseSolution
No emails sentDRY_RUN=trueSet DRY_RUN=false to send.
Missing HM recipientsTeam endpoint returned no “hiring manager” and fallback map not configuredAdd position→email in HM_FALLBACK_MAP_JSON (or set a better default).
Interviews list is emptyDifferent event label in your Breezy accountAdd your labels to INTERVIEW_EVENT_KEYWORDS_CSV (comma‑separated).
Stuck candidates not flaggedThreshold too high or activity timestamps missingLower STUCK_AFTER_DAYS or verify candidate activity data.
API errorsBad token or insufficient scopesRecreate the Breezy credential with a valid Bearer token.
Emails fail to sendSMTP auth/quota issuesCheck SMTP credentials/from‑address permissions and provider limits.

Need Help?

If you’d like help tuning the interview filters, changing the grouping logic, or adding Slack/CSV writebacks, feel free to reach out our n8n experts at WeblineIndia. We’ll be happy to help you tailor this to your stack.

đź”— Nodes Used

Cron, Send Email, Function, HTTP Request

📥 Import

Download workflow.json and import into n8n: Workflow menu → Import from File

📖 Importing guide · 🔑 Credential setup