ooligo
n8n-flow

n8nによるヘッドカウントプランの照合

Difficulty
中級
Setup time
90min
For
recruiter · talent-acquisition · finance-business-partner
Recruiting & TA

Stack

会社のヘッドカウントプラン(チームごと、レベルごと、開始日付付きの承認済み採用計画)をATSのオープン求人とHRISに記録された実際の採用に照らして照合し、行ごとの差異を含む週次ドリフトレポートをSlackに投稿するn8nフローです。採用担当者リーダーの金曜日の「ギャップは何か?」スプレッドシートを、財務が承認できる構造化されたダイジェストに置き換えます。四半期を静かに台無しにする失敗モードを検出します — プランですでに達成しているチームに対して開かれた求人、間違ったチームで予約された採用、新規採用としてカウントされたコントラクターの転換。

使う場面

  • 会社にチーム/レベル/開始日の粒度を持つ書面のヘッドカウントプランがある場合(「Q3に50人採用する」ではなく「エンジニアリングで12人、うちシニアIC 4人、ミッドIC 2人、6週目までに6人が開始」)。
  • 構造化されたソース(Carta、BambooHRプランモジュール、財務スプレッドシート)のヘッドカウントプラン、Ashbyまたは別のATSのオープン求人、HRISに記録された採用のうち少なくとも2つがある場合。
  • 四半期を締め、ボードミーティングの前日ではなく早い段階で予測差異を確認する必要がある場合。
  • プランにATSのチームラベルと一致するチームラベルがあるか、メンテナンスできるマッピングテーブルがある場合。

使わない場面

  • 構造化されたプランがない場合。 スライドデッキやミーティングノートに存在するプランは照合できません。まずプランを構造化されたソースに入れてください;フローはPowerPointを読みません。
  • 採用マネージャーが信頼できる情報源の場合。 採用が非公式なマネージャーごとのスプレッドシートに記録されている場合、照合は意味がありません。なぜなら「実際」は各マネージャーが言うものだからです。フローの価値はHRISが実際であることに依存します。
  • 年間採用30人未満のシリーズB以前の会社。 照合のオーバーヘッドは小規模では価値を上回ります;採用担当者リーダーとCEOはプランを頭の中で保持できます。
  • プランが週次で変わる場合。 プランが四半期の途中で常に改訂されている場合、差異シグナルはプラン改訂のノイズに支配されます。まずプラン変更のカデンスを安定させてください。

セットアップ

  1. フローをインポートする。 apps/web/public/artifacts/headcount-plan-reconciliation-n8n/headcount-plan-reconciliation-n8n.json をn8nインスタンスにドロップします。各ノードには notesInFlow: true があるため、キャンバス内のノートが照合ロジックを説明します。
  2. 認証情報を接続する。 3件必須:PLACEHOLDER_PLAN_DB_CRED_ID(プランが存在する場所への読み取りアクセス — Postgres、Snowflake、またはSheetsコネクタ)、PLACEHOLDER_ASHBY_CRED_ID(Ashby読み取りスコープ)、PLACEHOLDER_HRIS_CRED_ID(HRIS読み取りスコープ;BambooHR/Workday/Ripplingは事前に形成されており、その他はコネクタが必要)。
  3. チームマッピングを作成する。 n8n/data/team_mapping.yml 下のYAMLファイルがプランチームラベルをATSチームラベルとHRISチームラベルにマッピングします。これなしにはフローがクロスシステムの照合ができません。マッピングの作成が一度きりのコストです;継続メンテナンスは低い(チームが作成またはマージされた時のみ)。
  4. Slackの宛先を設定する。 チームチャンネルごとのチームごとの差異レポート、プラス採用リーダーシップチャンネルへの集計レポート。フローの Compose Variance Report ノードがメッセージをテンプレート化します;チームの簡潔対詳細の好みに応じて調整します。
  5. スケジュールを設定する。 デフォルトは毎週月曜日の午前8時ローカル時間です。Cronノードに timezone が明示的に設定されています — オフィスのタイムゾーンに調整します。
  6. 先四半期でドライラン。 先四半期のプランと実績に対して再生します。フローの差異数値が財務パートナーが四半期末に持っていたものとマッチすることを確認します。マッチしない場合、チームマッピングまたはコントラクター対FTEの分類がずれています。

フローが行うこと

8ノード。照合ロジックは決定論的です;LLMは差異ナラティブのステップ(5)のみに入り、決定論的な所見の人間が読めるサマリーを作成するためだけです。

  1. Cronトリガー — 毎週月曜日午前8時オフィスタイムゾーン(タイムゾーンはノード設定で明示的に設定)。
  2. プランを取得 — プランソースから現在の四半期のヘッドカウントプランを引き出します。スキーマ:teamlevelcounttarget_start_datereq_statusapproved/pending)。
  3. オープン求人を取得(Ashby) — Ashbyからすべてのオープン求人を引き出します。スキーマ:req_idteamlevelopened_attarget_start_date
  4. 採用を取得(HRIS) — 今四半期HRISから行われた採用を引き出します。スキーマ:hire_idteamlevelstart_dateemployment_typefte/contractor/intern)。
  5. 照合 — コードノード。プラン+求人+採用をteam/levelで結合します。各(team, level)セルについて:
    • プランに対するオープン — オープン求人数対プランターゲット。
    • プランに対する採用 — FTE採用数対プランターゲット。コントラクターとインターンはカウントされません(フローのコントラクター転換バケットは別々)。
    • 差異(plan - hires - open_reqs)。負値 = プランを超過。正値 = ギャップ。
    • ドリフトシグナル — 先回の実行以降に差異が3以上変化したセルにフラグ。未計画の承認または見落とされた採用を示唆します。
    • 異常セル:プランエントリーのない求人(不正な求人?)、プランにないチームへの採用(誤分類?)、新規採用として報告されたコントラクターの転換(ダブルカウント?)。
  6. Claude ナラティブの作成 — 構造化された照合出力を受け取り、チームチャンネルごとに200ワードの差異サマリー、リーダーシップに対して400ワードの集計サマリーを書きます。LLMは差異を計算しません;決定論的な所見をナレーションします。プロンプトはモデルが原因を推測することを明示的に禁止します(「チームが遅れているのは…だから」)。それは読者の仕事だからです。
  7. チームごとに投稿 — チームチャンネルへのSlackメッセージにそのチームの差異のみ。プライバシーポスチャー:各チームは自分の数値のみを見ます。
  8. 集計を投稿 — クロスチームテーブルを含む採用リーダーシップチャンネルへのSlackメッセージ。ソースレコードへのリンク付きで異常セルを含みます。

コストの実態

Claude Sonnet 4.6での週次実行ごとのコスト:

  • LLMトークン — ナラティブの作成が唯一のLLMステップ。通常2〜4k入力(構造化された照合テーブル+スキル指示)と1〜2k出力(チームごとのサマリー+集計)。週次カデンスで実行ごとに約0.02〜0.04ドル。無視できるレベルです。
  • プランソース/ATS/HRISのAPIコスト — 読み取り呼び出しのみ。AshbyとほとんどのHRISプロバイダーの無料クォータ内。
  • 採用担当者リーダーの時間 — 本当の勝ち。徹底的に行う場合の金曜日午後のスプレッドシート再構築は週60〜120分;月曜日のダイジェストを読むのは5〜10分。より大きな時間の節約は異常セルで、手動照合では四半期末まで気づかれないことが多いです。
  • セットアップ時間 — チームマッピングの作成を含む90分。チームマッピングがバインドするセットアップコストです。

成功指標

月次で3つのことを追跡します:

  • 四半期末のプラン精度 — 四半期末に、四半期の第8週時点での予測採用と実際の採用(第13週)の差は何ですか?会社の歴史的なドリフトから5%以内に落とすべきです。早期警告が差異をアクション可能にするものです。
  • 異常解決時間 — 「異常セルがフラグされた」から「異常が解決された」(正しく分類された、プランが更新された、または採用が再帰属された)まで。「四半期末に発見」から5日未満に落とすべきです。
  • プラン改訂頻度 — プラン自体が四半期途中でどのくらいの頻度で変わるか。フローはこれを表面化します;改訂が週次であれば、プランの安定性自体が問題であり、差異シグナルはノイズです。

代替手段との比較

  • ATSネイティブのダッシュボード(Ashby Hiring Plan、Greenhouse Headcount Planning)対比。 ATSがプランソースと実績ソースの両方であればATSネイティブのダッシュボードが機能します。統合できる場合はそれらを選びます。プランが財務のシステムにあり、求人がATSにあり、採用がHRISにある — 単一のATSダッシュボードが見えない3つのシステムを結合する必要がある — 場合はフローを選びます。
  • Carta / Pave / Latticeのヘッドカウント計画モジュール対比。 上記と同様;プラットフォームが単一のソースであればそれを使います。フローはマルチシステムのケース向けです。
  • 財務が構築したダッシュボード対比。 財務が構築したBIダッシュボード(Looker、Mode、Hex)はJoinを問題なく処理します。アナリストのキャパシティがある場合はBIを選びます。ない場合、または差異をダッシュボードプル型ではなくSlackプッシュ型にしたい場合はフローを選びます。
  • 手動金曜日スプレッドシート対比。 デフォルト。予測可能な失敗モード:スプレッドシートの作成者が去り、方法論がドリフトし、四半期末の差異がボードを驚かせます。フローは軽量な修正です。

注意点

  • チームマッピングのドリフト。 ガード: フローの最初の照合ステップは、すべてのプランチームとすべてのATSチームとすべてのHRISチームがマッピングファイルに表示されることを確認します。マッピングされていないエンティティは異常セルとして表面化されます;レポートは静かに削除するのではなく明示的にフラグします。
  • コントラクターの転換のダブルカウント。 ガード: HRISクエリは employment_type = 'fte' でフィルタリングします。既存コントラクターのFTEへの転換は「今四半期の転換」の別のセクションに表示され、新規採用カウントには含まれません。
  • 差異を洗い流す四半期途中のプラン改訂。 ガード: レポートは現在のプラン数値と元の四半期開始プラン数値の両方を、デルタが表面化された状態で表示します。読者は両方のシグナルを見ます。
  • オフサイクルの採用(取得チーム、インターンのFTE転換)。 ガード: フローは start_date が四半期開始より前の採用を「オフサイクル」としてフラグし、別に表面化します。これらは一般的(アクワイアハイア、レイトクローズ)で、通常のプラン採用とは異なる読み方が必要です。
  • プライバシー:他のチームの数値を見るチームチャンネル。 ガード: チームごとのSlack投稿テンプレートはそのチームの差異行のみを参照します。集計投稿(クロスチーム)は採用リーダーシップチャンネルのみに送信され、チームごとのチャンネルには送信されません。
  • 古くなったプランソース。 ガード: フローはプランソースの last_updated_at を確認します。14日以上古い場合、レポートに警告ヘッダーを出力します(「プランが14日以上前に更新されました — 差異はプランの陳腐化を反映している可能性があり、実際のギャップではない可能性があります」)。

スタック

アーティファクトバンドルは apps/web/public/artifacts/headcount-plan-reconciliation-n8n/ にあり、以下を含みます:

  • headcount-plan-reconciliation-n8n.json — すべてのノードが設定されたn8nフローエクスポート
  • _README.md — 認証情報セットアップ、チームマッピングフォーマット、ドライラン手順
  • team-mapping-template.yml — コピーして記入するチームマッピングYAML

ワークフローが使用を前提とするツール:n8n(オーケストレーション)、Ashby(ATS — Greenhouseに切り替えるには取得求人ノードを置き換える)、Claude(ナラティブの作成)、Slack(レポートの宛先)。HRISコネクタは会社ごとに異なります。

関連コンセプト:ワークフォースプランニング採用ファネルメトリクス採用コスト

Files in this artifact

Download all (.zip)