Ashby Recruiting Workflows
Comprehensive guidance for managing recruiting workflows in Ashby ATS. This skill covers candidate pipeline management, interview scheduling, application tracking, and hiring team coordination.
Core Workflow: Candidate Pipeline
The standard recruiting pipeline flows through these stages:
Sourced → Applied → Phone Screen → Interview → Offer → Hired
↓ ↓ ↓
Archived Archived Archived
Moving Candidates Through Stages
To advance a candidate:
- Get the application ID using
application_listorapplication_info - Get available stages using
interview_stage_listwith the job ID - Use
application_change_stagewith the target stage ID
# Example workflow
# 1. Find candidate's application
applications = application_list(candidateId="...")
app_id = applications[0]["id"]
# 2. Get available stages
stages = interview_stage_list(jobId=job_id)
next_stage = stages["Lead"] # or "Phone Screen", "Onsite", etc.
# 3. Move to next stage
application_change_stage(applicationId=app_id, interviewStageId=next_stage["id"])
Archiving (Rejecting) Candidates
When archiving an application, always provide an archive reason:
- Get archive reasons using
archive_reason_list - Use
application_change_stagewith an archived stage andarchiveReasonId
Common archive reasons include:
- Not qualified
- Position filled
- Candidate withdrew
- No response
- Failed assessment
Interview Scheduling Workflow
Scheduling a New Interview
- Identify the application using
application_list - Find available interviewers using
user_listoruser_search - Create the schedule using
interview_schedule_create
Required information:
- Application ID
- Interviewer user IDs (array)
- Start and end times (ISO 8601 format)
- Interview stage ID (optional but recommended)
interview_schedule_create(
applicationId="app-123",
interviewerUserIds=["user-1", "user-2"],
startTime="2024-01-15T14:00:00Z",
endTime="2024-01-15T15:00:00Z",
interviewStageId="stage-id"
)
Rescheduling Interviews
Use interview_schedule_update with the schedule ID:
interview_schedule_update(
interviewScheduleId="schedule-123",
startTime="2024-01-16T10:00:00Z",
endTime="2024-01-16T11:00:00Z"
)
Canceling Interviews
Always provide a reason when canceling:
interview_schedule_cancel(
interviewScheduleId="schedule-123",
reason="Candidate requested reschedule"
)
Candidate Management Best Practices
Adding Candidates
When creating candidates, include as much information as possible:
candidate_create(
name="Jane Smith",
email="jane@example.com",
phoneNumber="+1-555-0123",
linkedInUrl="https://linkedin.com/in/janesmith",
location="San Francisco, CA",
sourceId="referral-source-id"
)
Tracking Candidate Sources
Always attribute candidates properly:
- Get available sources using
source_list - Set source when creating candidates or applications
- Update source using
application_change_sourceif needed
Using Tags for Organization
Tags help filter and organize candidates:
# Get available tags
tags = candidate_tag_list()
# Add tag to candidate
candidate_add_tag(candidateId="...", tagId="senior-engineer-tag")
Common tag strategies:
- Skill-based: "python", "react", "data-science"
- Status-based: "high-priority", "passive", "referral"
- Source-based: "conference-2024", "hackathon"
Adding Notes
Document all candidate interactions:
candidate_add_note(
candidateId="...",
note="Initial phone screen completed. Strong technical background, moving to onsite.",
sendNotifications=False
)
Application Workflow Patterns
Sourcing New Candidates
- Create candidate with
candidate_create - Create application with
application_create - Add to appropriate initial stage
# Create and consider for job
candidate = candidate_create(name="...", email="...")
application_create(
candidateId=candidate["id"],
jobId="target-job-id",
sourceId="linkedin-sourcing"
)
Bulk Pipeline Review
To review current pipeline status:
# Get all active applications for a job
apps = application_list(jobId="...", status="Active")
# Group by stage for reporting
for app in apps:
stage = app["currentInterviewStage"]["name"]
candidate = app["candidate"]["name"]
# Process...
Transferring Applications Between Jobs
Use application_create to consider a candidate for additional jobs without losing existing application history.
Job Management
Job Status Workflow
Draft → Open → Closed/Archived
- Draft: Job visible internally, not on careers page
- Open: Actively recruiting, visible on careers page
- Closed: Position filled
- Archived: No longer relevant
Updating Job Status
# Close job when position is filled
job_set_status(jobId="...", status="Closed")
# Reopen if needed
job_set_status(jobId="...", status="Open")
Offer Workflow
Creating Offers
After interview rounds complete:
offer_create(
applicationId="app-123",
startDate="2024-02-01",
offerDetails="Senior Engineer role, $150k base + equity"
)
Tracking Offers
List and monitor offer status:
offers = offer_list(applicationId="app-123")
# Check offer status, pending approvals, etc.
Common Workflow Scenarios
Scenario: Phone Screen Completed
- Review notes from screening call
- Add note with
candidate_add_note - Move to next stage with
application_change_stage - Schedule onsite with
interview_schedule_create
Scenario: Candidate Withdrawal
- Get archive reasons with
archive_reason_list - Find "Candidate Withdrew" reason
- Archive with
application_change_stageincluding archive reason
Scenario: Internal Referral
- Create candidate with
candidate_create - Get referral source with
source_list - Create application with source attribution
- Add note crediting referring employee
Pipeline Analytics
Getting Pipeline Metrics
List applications by status to understand funnel:
# Active candidates
active = application_list(jobId="...", status="Active")
# Hired
hired = application_list(jobId="...", status="Hired")
# Archived (rejected)
archived = application_list(jobId="...", status="Archived")
Interview Load Analysis
Review upcoming interviews:
from datetime import datetime, timedelta
schedules = interview_schedule_list(
startTimeAfter=datetime.now().isoformat(),
startTimeBefore=(datetime.now() + timedelta(days=7)).isoformat()
)
Additional Resources
Reference Files
For detailed Ashby API patterns, consult:
references/api-patterns.md- Common API usage patterns and error handling
Tools Reference
Core tools for workflows:
candidate_*- Candidate managementapplication_*- Application lifecycleinterview_schedule_*- Schedulingjob_*- Job managementoffer_*- Offers