Ask HQ an analytics question and the answer comes back as a chart or a table, drawn right in the chat. Distribution of skills, the funnel for an open role, a side-by-side compare of three candidates — all rendered inline with PNG and CSV export. You're not pasted into a separate dashboard; the chart shows up next to the answer.
When HQ draws a chart vs. a table
HQ picks the shape based on the question. The split is roughly:
- Distributions, breakdowns, histograms, funnels become charts. "Show me skill distribution," "how are match scores spread," "chart the pipeline" all land on a bar, line, or pie.
- Comparisons, rankings, lists with several columns become tables. "Compare these three candidates," "rank sources by hire rate," "list each department with its avg match score" all land on a sortable table.
You can also nudge it. "Chart the pipeline as a bar" gets you a bar; "rank departments as a table" forces the table view.
What HQ can chart or rank
HQ shares the same dimension language as the custom query builder — anything you can group by in the dashboard, you can ask HQ for in the chat:
- Built-in dimensions: source, stage, department, location, job type, location type, experience level, and applied or created month.
- Candidate custom fields: anything your org has added. Ask "what can I chart?" and HQ will list the fields it sees.
- Metrics: count, average match score, average feedback, average experience, and hire rate.
- Time series: new candidates, emails sent or received, interview feedback, and stage changes — the last 90 days, bucketed by day, week, or month.
Pie and donut charts are kept honest by the tool: they only run with count. An average doesn't sum to a whole, so picturing one as a slice would mislead.
Novel charts on demand
The dimensions in the list above all answer one specific question — "X by Y" for a small set of pre-defined Xs and Ys. But recruiters ask a lot of questions that don't fit the mould, and the most common one — "what's the average match score by skill?" — used to come back with "I can't render that." HQ now composes the chart on the fly.
The way this works under the hood: HQ picks one of five sources — candidates, applications, skill_assignments, feedback, or stage_transitions — and asks for any combination of a row dimension, optional column dimension (for cross-tabs), and metric the source declares. The skill_assignments source is the one that solves the canonical example — it treats every (candidate × skill) pair as a row, which is what unlocks "avg match score by skill," "candidates by skill broken down by stage," and the like.
Chart kinds available beyond the standard bar / line / pie:
- Stacked bar / grouped bar for cross-tabs ("applications by stage broken down by source").
- Area / stacked area for time series with multiple sub-series ("candidates added per week, stacked by source").
- Scatter for two-numeric-axis correlations ("plot match score against years of experience").
- Heatmap for cross-tab counts and rates ("stage by source heatmap"). Heatmaps are capped at 30 × 30 cells — if you ask for too many, HQ shows a "narrow your question" banner instead of a wall of color.
If you're not sure what's available on a given source, the list_compose_sources tool answers that — HQ will call it itself when you ask "what cross-tabs can you do?" or similar.
Comparing candidates side-by-side
table_candidate_comparison is the tool for "compare A and B." Name two to ten candidates and HQ lays them out as columns — email, position, current company, location, years of experience, parsed skill count, best match score across their applications, and the skills they all have in common. The row order is fixed because each row means something specific, so the column headers aren't sortable; clicking them does nothing on purpose.
The match-score row pulls from application data, so HQ needs applications:read in addition to candidates:read. A role without it gets a clear "you don't have permission" envelope rather than a silently empty row.
Exporting
Every chart and table card has a download button in its top corner.
- PNG captures the rendered card as an image. Good for sharing in Slack or pasting into a doc.
- CSV dumps the underlying rows. Good for spreadsheets, mailmerges, or anything else you'd open in Excel.
Cells starting with =, +, -, or @ are escaped on export — Excel and Sheets treat those as formulas, and an unescaped candidate name like =cmd|… would execute when the recruiter opens the file. It's a real attack vector when the data is user-supplied, and we'd rather over-prefix than ship a vulnerability.
When it doesn't work
A few things make a chart or table come back empty or odd:
- Unparsed resumes don't contribute to skill charts. If half your candidates have raw PDFs that haven't been parsed, the skills distribution undersells what's actually in the pile.
- Custom-field charts need data behind them. A new custom field with three filled-in values produces a near-empty chart. Wait for the field to populate.
- Aggressively narrow filters produce precise-looking charts that mean nothing. The honesty caveat from the analytics page applies in chat too — three candidates spread across five buckets is a chart, not a finding.
- The activity timeline is fixed at 90 days. A longer view isn't reachable from chat today; use the activity report for the full window.
The card itself is rendered in your browser, so a flaky chart degrades gracefully: if rendering crashes, you still see the text summary HQ wrote — you don't lose the answer.
A few prompts that work
- "Show me the distribution of skills across all candidates."
- "Histogram of match scores for the Backend Engineer role."
- "Chart the pipeline funnel for the Staff Designer role."
- "Rank sources by hire rate as a table."
- "Candidates added per week."
- "Compare Alice Chen, Bob Park, and Charlie Diaz."
- "What can I chart?" (HQ will list the dimensions and custom fields it sees.)
- "Avg match score by skill." (composed; no built-in tool covers this.)
- "Candidates by skill broken down by stage as a stacked bar."
- "Heatmap of stage by source."
For more on phrasing, see writing good prompts.