Hiring manager review portal for your open Ashby roles

Give hiring managers one screen to see their open roles, review the candidates waiting on them, and advance or reject in a single click.

App
AshbySlack BotHR & PeopleOperationsNotifications & AlertsAI Reports
PromptCreate

Build an app my hiring managers can open instead of logging into Ashby. Most of them do not have an ATS login, and the ones who do are not going to dig through filter menus to get a status update on their own roles. Everything in this app is scoped to the person who is signed in.

Identity and access first, because this is the reason the app exists. On load, resolve the signed-in person's email address to an Ashby user with List Users. Then call List Jobs, which returns each job's status and hiring team, and keep only the open jobs where that user appears on the hiring team. Use List Application Hiring Team Roles to understand the role vocabulary so the app can tell a hiring manager apart from the assigned recruiter on a given application. This scoping must be enforced inside the server handlers, not by filtering in the browser, so a manager can never reach another team's requisitions. If the signed-in email does not match an Ashby user, show a clear empty state explaining that their address is not on any hiring team rather than failing silently.

The home view is a card per open requisition. Each card shows the age of the requisition in days since it opened, the count of active candidates broken down by stage, and a prominent "waiting on you" badge with the number of candidates whose current stage needs this manager's action, for example candidates sitting in a review or feedback stage they own. Order the cards so the roles with the most waiting candidates, and the oldest requisitions, come first. Clicking a card filters the queue to that role.

The queue view pulls every active application across those jobs with List Applications. One row per candidate, showing candidate name, role, current stage, how many days they have been waiting in that stage, and the assigned recruiter. Default the sort to days waiting, longest first, so the oldest stalled decisions surface at the top. Let the manager filter by role and by stage, but always keep days waiting as the default sort when the view loads.

Opening a candidate shows everything needed to make the call on one screen. Pull their interview feedback with List Application Feedback, including who submitted it and their recommendation. Pull the notes already on file with List Candidate Notes, newest first. Pull any upcoming interviews with List Interview Schedules, showing the time and the interviewers. Show the current stage and days waiting at the top so the urgency is visible while reading.

From the candidate view the manager can advance or reject in one click. Both actions open a small confirmation that requires a short written reason, and the submit button stays disabled until something is typed. This forced reason is the quality bar that makes the app better than the ATS itself, so it must never be skippable or optional. On submit, do three things in order: move the candidate with Change Application Stage, write the reason back to Ashby with Create Candidate Note recording the decision, the reason, and who made it, then notify the assigned recruiter with Slack Bot Send a Message.

For the Slack notification, resolve the assigned recruiter's email address to a Slack user with Look Up User by Email, then send them a direct message naming the candidate, the role, the decision, and the manager's reason verbatim. If the recruiter cannot be resolved in Slack, still complete the stage change and the note, and surface a non-blocking warning in the app that the notification did not send. The Ashby record is the source of truth and must never be left half-written because a message failed.

A few details to get right. Ashby list endpoints are cursor paginated, so page through until all results are collected before computing stage counts or the waiting badge, otherwise the numbers will be quietly wrong. Recompute the affected counts and remove the candidate from the queue immediately after a decision so the manager sees progress without a manual refresh. Show relative ages in plain language such as "12 days" rather than raw timestamps. Keep the whole app fast to scan, since the person using it is between meetings and wants to clear their queue in a few minutes.

What does this prompt do?

  • Shows each hiring manager only their own open roles, with how long the role has been open, how many active candidates sit at each stage, and a clear badge when someone is waiting on them
  • Puts every active candidate across those roles into one queue, sorted by how long they have been sitting, so the oldest stalled decisions come to the top
  • Opens a candidate into a single view with their interview feedback, the notes already on file, and any interviews already booked
  • Lets the manager advance or reject from that view, and requires a short reason that gets saved back onto the candidate record so the decision is never a mystery later
  • Sends the assigned recruiter a message in Slack the moment a decision is made, including the reason

What do I need to use this?

  • An Ashby account, and an admin who can create an API key for the connection
  • A Slack workspace so recruiters can be notified when a decision is made
  • Hiring teams filled in on your Ashby jobs, since that is how the app knows which roles belong to which manager
  • Recruiter email addresses that match between Ashby and Slack, so each notification reaches the right person

How can I customize it?

  • Change what counts as waiting on you, for example only candidates who have been sitting more than three days, or only those at a stage you own
  • Send the decision notification to a shared recruiting channel instead of a direct message to the recruiter
  • Adjust the reason box, such as setting a minimum length or offering common reasons to pick from alongside free text
  • Change the default queue sort, though most teams keep days waiting so the oldest decisions surface first

FAQs

Do hiring managers need their own Ashby login?
No, and that is the point of this app. It connects to Ashby once using a key your recruiting team sets up, then each manager signs into the app instead. They get their roles and their candidates without ever opening the applicant tracking system.
Can a manager see roles that are not theirs?
No. The app looks up the signed-in person in Ashby and only ever shows jobs where they are on the hiring team. That filtering happens on the server, so a manager cannot reach another team's requisitions even by fiddling with the page.
Why does it force me to type a reason before advancing or rejecting?
Because the reason is the whole quality bar. A one-click decision with no explanation leaves recruiters guessing and leaves nothing useful in the record. The reason gets saved onto the candidate in Ashby, so anyone who looks later sees why the call was made.
Does a decision here actually change anything in Ashby?
Yes. Advancing or rejecting moves the candidate to the new stage in Ashby, writes your reason onto their record as a note, and messages the assigned recruiter in Slack. Nothing is kept only inside the app.
What happens if the recruiter is not in Slack, or the emails do not match?
The decision and the reason still go into Ashby as normal. The app just flags that it could not deliver the notification, so nothing is silently lost.

Related templates

A brand asset library your marketing team actually searches

Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.

General Input Storage
General Input Database
JigsawStack
+1
App
Turn Mailjet email clicks into ranked HubSpot follow-ups

Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.

Mailjet
HubSpot
Slack Bot
Agentic Task
Clean out the Looker dashboards and Looks nobody opens

One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.

Looker
Slack Bot
App
LiveKit live operations console for room moderation

Watch every live room on one screen, remove disruptive guests, start recordings and end stuck sessions without anyone opening a terminal.

LiveKit
Slack Bot
General Input Database
App
Wake up dormant Keap leads with a researched reason

Every Monday we find leads who never bought, research a real reason to reach out, and send a short personal email instead of another check in.

Keap
Slack Bot
Agentic Task
LiveChat coverage board for planning next week's shifts

See the exact hours your chat queue backs up and customers give up waiting, then plan next week's shifts before it happens again.

LiveChat
Slack Bot
General Input Database
App

Stop making hiring managers log into the ATS.

Give them one screen for their open roles, the candidates waiting on them, and the decision itself.