Recruiting Module
The Recruiting module provides a complete Applicant Tracking System (ATS) with AI-powered features for attracting, screening, and hiring top talent.
Overview
Key capabilities:
- Job posting creation and management
- AI-generated job descriptions
- Candidate pipeline management (list + kanban toggle)
- Interview scheduling and feedback (List and Timeline views)
- Offer generation, revision, and lifecycle tracking
- Hiring plans with departmental rollups and status badges
- A public careers page at
{tenant}.sparko.app/careers: three templates, a builder with a live preview, Sparko AI drafting, your own application questions, a job page with a four-step apply form, and an application status page
Job Postings
Creating a Job Posting
Navigate to Recruiting > Jobs > Create Job.
Create Job Posting
Job Title *<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 15px;">
<div>
<label style="display: block; font-size: 14px; color: #374151; margin-bottom: 5px;">Department *</label>
<select style="width: 100%; padding: 10px; border: 1px solid #d1d5db; border-radius: 6px;">
<option>Engineering</option>
</select>
</div>
<div>
<label style="display: block; font-size: 14px; color: #374151; margin-bottom: 5px;">Location *</label>
<select style="width: 100%; padding: 10px; border: 1px solid #d1d5db; border-radius: 6px;">
<option>San Francisco, CA</option>
</select>
</div>
</div>
<div style="background: #eff6ff; padding: 15px; border-radius: 8px; border: 1px solid #bfdbfe;">
<div style="display: flex; align-items: center; gap: 10px; margin-bottom: 10px;">
<span style="font-size: 20px;">🤖</span>
<span style="font-weight: 500; color: #1e40af;">AI Job Description Generator</span>
</div>
<p style="font-size: 13px; color: #3b82f6; margin: 0 0 10px 0;">Let AI create a compelling job description based on the role requirements.</p>
<button style="background: #3b82f6; color: white; border: none; padding: 8px 16px; border-radius: 6px; cursor: pointer;">✨ Generate with AI</button>
</div>
<div>
<label style="display: block; font-size: 14px; color: #374151; margin-bottom: 5px;">Job Description</label>
<textarea style="width: 100%; padding: 10px; border: 1px solid #d1d5db; border-radius: 6px; min-height: 150px; box-sizing: border-box;" placeholder="Enter job description or use AI to generate..."></textarea>
</div>
No career path yet? On any plan, press Create the path and level. Give the family, the track and the level, then press Create, and the job's selects pick them. If you cannot manage the career framework, the form says "Ask an admin to add a career path."
Openings is optional, on the create form and on Edit job. Leave it blank for an always-open role, such as a general application: it never fills and stays on your careers page however many people you hire. Enter a number and the role fills at that many hires; a filled role comes off the careers page and can be republished.
AI Job Description Generator
Click "Generate with AI" to draft the posting:
- Enter basic job details (title, department, location)
- Pick a career path and role level if the role has one
- Sparko fills the Requirements field from the competencies that level asks for: required skills with the proficiency the framework expects, preferred skills, experience indicators, and any extra requirements set on the path
- The same competency profile is passed to the description draft, so the Description and Responsibilities read against the level you picked rather than against the job title alone
Requirements written from the framework are kept. The description draft does not overwrite them.
Without a career path and level, step 3 is skipped and you get the generic draft from the job title, department, and location. Edit anything before you save.
If the draft comes back unreadable, Sparko says so and nothing is put into the fields. Press Try again.
Suggest salary band needs a career path and level too, because the range is read from the salary band behind them. Pick both first, or set the range by hand.
When no band covers the level and you manage pay on the Business plan, a card under the salary range row offers to save your range as the band: Create band or Not now.
The Jobs list
Recruiting > Jobs lists every job. The line under Job Postings counts how many are open, filled, paused, pending approval and closed. The tabs are All, Active, Filled, Paused, Pending Approval, Drafts and Closed, each with a count. Click Filter to filter by department, location or posted date, or search by title, department or recruiter.
A job is filled when its hires reach its number of openings; a job with no openings set is always open and never fills, and your careers page lists it as "Always open". A job that fills moves from Active to Filled on its own, and the hire that fills the last opening takes it off your careers page, so it stops taking applications. Its page says "Every opening is filled, so it came off your careers page. Publish it again to take more applications." Press Publish again if you want more applicants. A candidate who opens the apply link of a filled job is told the role has been filled. A filled job no longer offers Schedule interview.
Each row has six columns: Job, Pipeline, Offer, Hiring manager, Status and Posted. Pipeline shows how many applied and a bar: the longest bar is the job with the most applicants in view, and the others are measured against it. Hover the bar to see what share of applicants reached an interview. Job, Pipeline, Offer and Posted sort when you click the heading. Click a row to open the job.
n need attention at the top is a pill that opens a drawer of what is waiting on you: jobs and offers awaiting approval, locations with no salary band, and departments with no career framework. View calendar opens the interview calendar. Create job starts a new job.
Job Posting Status
| Status | Description |
|---|---|
| Draft | Not yet published |
| Pending Approval | Awaiting manager/executive approval |
| Open | Actively accepting applications |
| Paused | Temporarily not accepting applications |
| Closed | No longer accepting applications |
| Filled | As many hires as openings; taken off your careers page until you publish it again |
A job is live on your careers page only when it is open and approved. When it is not, the job page says why.
Publishing a job
A new job is a draft. It goes on your careers page when you publish it.
- Open the job. The Careers page card on the Overview tab shows where the job stands, for example "Live on your careers page since 2 Oct." or "Waiting for approval. Approvers see it in My Hub."
- Press Publish to careers page. If your company approves jobs first, the button reads Send for approval and says how many approvers it goes to.
Right after you create a job, the job page opens with this button ready.
- Unpublish takes a live job off your careers page. Publish again puts it back.
- Withdraw takes back a job you sent for approval.
- If something is missing, the card lists it with a button to fix it, such as Write it with AI for an empty description or Use band range for a salary range your location requires.
- A salary range is required where the law asks for one: the jurisdictions you tag, and also the places your job's locations are in (for example a Berlin location counts as Germany even without a tag). A live job that would lose its range there cannot be saved.
- Use band range copies the salary band of the job's first level onto the job. Sparko reads the band on the server, so the range is always the band's own. The same button appears on the job's Edit page when saving is refused for a missing range.
- If approval is on and nobody is set to approve, an admin presses Choose approvers, ticks the people and presses Save and send. Everyone else sees "Ask an admin to choose job approvers in Recruiting settings."
- While you are the only person in your workspace, for example a founder setting up alone, the button reads Publish to careers page and the job goes live straight away. The job history says "Approved by the only person in this workspace". Once anyone else is added to the workspace, approval works as usual again.
Hiring Plan & Approvals
Annual Hiring Plan
The Hiring Plan feature helps you plan and manage your company-wide hiring needs for the year.
Benefits:
- Budget control and headcount planning
- Quarterly hiring goals tracking
- Position prioritization
- Streamlined approval process for planned positions
Creating a Hiring Plan
Navigate to Recruiting > Hiring Plans and click New plan (typically done in October-November for the following year):
2025 Annual Hiring Plan
Total Budget $2,500,000 Total Headcount 15 positions Status Active| Position | Department | Salary Range | Quarter | Status |
|---|---|---|---|---|
| Senior Software Engineer | Engineering | $140K - $180K | Q1 | Open |
| Product Manager | Product | $130K - $170K | Q2 | Planned |
Position Details
Each position in the hiring plan includes:
- Job Title & Department: What role and which team
- Salary Range: Min/max compensation with currency
- Location: Office location or remote
- Headcount: Number of positions (1 or more)
- Target Quarter: When to fill (Q1, Q2, Q3, Q4)
- Priority: High, Medium, or Low urgency
- Career Path Link: Tied to role level in career framework
Multi-Approver Workflow
Available in: Business and Custom. Hiring plans, including the multi-approver workflow with up to 5 approvers, are part of the Business plan and above.
Configuring Approvers
Navigate to Admin Settings > Recruiting > Jobs:
Job Approval Workflow
Require Job Approval All new job postings must be approved before posting Default Approvers Ella Brown (CEO) × James Wilson (CHRO) × Sarah Johnson (CFO) × Auto-Post After Approval Automatically publish jobs once all approvals are receivedApproval Process
When you send a job for approval:
- You press Send for approval on the job. When approval is on and nobody is set to approve, an admin chooses approvers right there.
- Approval Requests Created: System generates individual approval requests for each approver
- Parallel Review: All approvers see the request simultaneously in their Approvals dashboard. Each approver who can approve jobs also gets a notification and an email with a link to My Hub > Approvals. The notification clears once they decide, when any approver rejects the job, or when you withdraw, close or delete the job. If an approver cannot be reached, you get a notification on the job asking you to check their access or change the approvers.
- Approval Context: Each approver sees:
- Job title, department, location
- Salary range (internal only)
- Employment type (full-time, contract, etc.)
- Hiring plan status (in-plan, backfill, ad-hoc)
- Their approval role (dept_head, chro, cfo, etc.)
- Decision: Each approver can:
- ✅ Approve - Move to next step
- ❌ Reject - Request is denied (must provide reason)
- 💬 Request Changes - Ask for revisions
- Auto-Post: Once all approvers approve, job automatically posts if auto-post is enabled
Unified Approvals Dashboard
Navigate to Approvals in the main menu to see all pending items:
Approvals Dashboard
⏳ 7 Total Pending 💼 3 Job Postings 🏖️ 2 Time Off 💼 Senior Software Engineer Engineering • $140K - $180K Review →Tabs:
- All: See everything pending
- Job Postings: Filter by job approvals
- Time Off: PTO requests
- Reviews: Performance reviews
Backfill Detection
Ask the AI assistant something like "is this a backfill for anyone who's left recently?" when creating a job outside the hiring plan, and it can look up employees who are leaving in the next 90 days or left in the last 30 days with a similar title, then suggest using their salary and location as a template. Each one comes back with why the seat is opening, read from the offboarding case someone actually recorded: resigned, terminated, retired, or contract ended. A departure recorded without one of those reads "Left the company", and where there is no offboarding case at all you get the plain fact (terminated, scheduled to leave, or recently left) rather than a reason nobody chose. This is a lookup you ask for via the assistant: it does not run automatically when you create a job posting.
Ad-Hoc Hiring
For unplanned positions not in the hiring plan:
- Salary band lookup: The assistant quotes the salary band for the role's career path and level, with whatever market benchmarks are stored on that band. Where a band's figures were proposed by AI during setup, they are quoted as your band, never as a market benchmark. If no band covers the role, it says so instead of estimating a range
- Manual Entry: Or enter salary range manually
- Justification Required: Additional approval needed with business case
- Budget Impact: Tracked against overall hiring budget
Candidate Pipeline
Referring someone
Anyone can refer a candidate from Recruiting > Refer a candidate. Alongside their details you can record:
- How you know them. Former colleague, friend, met at an event, and so on.
- Why you're recommending them. A short note for the recruiter.
Both are optional and both reach the recruiter on the candidate's profile, so a referral arrives with the context that makes it worth acting on rather than as a bare name. The note is visible to recruiters reviewing the candidate, so write it as something you'd be comfortable having on the record.
The job's Pipeline tab
Open a job and choose Pipeline to see its applicants in a table: Match, Candidate, Stage, Feedback and Last activity. Click a heading to sort. Filter and the search box are on the tab row; filter by stage, source or match percentage.
The ⋯ at the end of a row has the moves that fit the stage, such as Move to Screening, Schedule interview, Move to Offer, Prepare offer letter, Mark as hired and Reject. Click a row to open the candidate in a drawer. Its footer has a Move stage select and Reject, for people who may move or reject applicants.
Tick rows to see the bulk bar: n selected, Bulk move, Bulk reject and Clear.
The match score
The Match percentage on Recruiting > Candidates, on a job's Pipeline tab and on each kanban card compares the candidate with the job on four things:
| Factor | Points | What it looks at |
|---|---|---|
| Skills | 45 | The job's required and preferred skills against the candidate's skills. A required skill counts twice as much as a preferred one. |
| Role | 30 | Whether the candidate's current title is in the same line of work as the job, and how far apart the levels are. |
| Experience | 15 | The candidate's years of experience against the years the job's requirements ask for, such as "5+ years". |
| Location | 10 | Whether the job is remote, the candidate is in the job's city or region, or is open to relocating. |
In the candidates list and on the Pipeline tab, hover the percentage to see the reason behind each factor and its points, for example "Sales Rep is a different function from HR Business Partner (0/30)". Click an applicant on the Pipeline tab to open their drawer: its Match section shows the same percentage with each factor's reason and points listed. In the candidates list, the line under the score shows how many of the job's required skills the candidate has, such as 2/4 mandatory.
When Sparko has nothing to go on for a factor, such as no years of experience on the candidate or no years asked in the job, that factor is left out and the score comes from the others. A candidate whose résumé has no skills read from it yet is not marked down for skills: the line under the score says Skills not parsed, and so does the hover. If skills are the only factor and they are not parsed, the column shows a dot instead of a score; hover it to see why. If there is nothing to compare at all, the column shows the screening result when there is one.
Pipeline View
Open Recruiting > Candidates and pick Kanban in the view switch at the top right of the header.
Recruiting Pipeline
Applied 12 Alex Rivera Senior Engineer @ Google AI: 92% match Jordan Kim Engineer II @ Meta AI: 78% match<!-- Screen Column -->
<div style="min-width: 250px; background: white; border-radius: 8px; padding: 15px; border: 1px solid #e5e7eb;">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;">
<span style="font-weight: 500; color: #374151;">Screen</span>
<span style="background: #e5e7eb; padding: 2px 8px; border-radius: 10px; font-size: 12px;">5</span>
</div>
<div style="display: flex; flex-direction: column; gap: 10px;">
<div style="background: #f9fafb; padding: 12px; border-radius: 6px; border-left: 3px solid #6366f1;">
<div style="font-weight: 500; font-size: 14px; color: #1a1a2e;">Taylor Chen</div>
<div style="font-size: 12px; color: #6b7280;">Staff Engineer @ Stripe</div>
<div style="font-size: 11px; color: #4f46e5; margin-top: 5px;">📞 Call scheduled: Tomorrow</div>
</div>
</div>
</div>
<!-- Interview Column -->
<div style="min-width: 250px; background: white; border-radius: 8px; padding: 15px; border: 1px solid #e5e7eb;">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;">
<span style="font-weight: 500; color: #374151;">Interview</span>
<span style="background: #e5e7eb; padding: 2px 8px; border-radius: 10px; font-size: 12px;">3</span>
</div>
<div style="font-size: 13px; color: #6b7280; text-align: center; padding: 20px 0;">Drag candidates here</div>
</div>
<!-- Offer Column -->
<div style="min-width: 250px; background: white; border-radius: 8px; padding: 15px; border: 1px solid #e5e7eb;">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px;">
<span style="font-weight: 500; color: #374151;">Offer</span>
<span style="background: #e5e7eb; padding: 2px 8px; border-radius: 10px; font-size: 12px;">1</span>
</div>
</div>
Pipeline Stages
| Stage | Description |
|---|---|
| Applied | New applications, not yet reviewed |
| Screen | Initial phone/video screening |
| Interview | Full interview process |
| Offer | Offer extended |
| Hired | Offer accepted, preparing onboarding |
| Rejected | Not moving forward |
Moving Candidates
- Drag and drop between stages
- Click candidate → "Move to" dropdown
- Bulk select and move multiple candidates
Moving a candidate to Hired, from the board, the list, the candidate's profile or the job page, opens a "Mark as hired?" dialog. It creates their employee record and starts onboarding, and it cannot be undone from the board. Hired follows the accepted offer: the dialog shows "Starts , from the accepted offer." and the start date always comes from the offer. A candidate without an accepted offer can't be moved to Hired. The move shows "Accept the offer first. Hired follows the accepted offer." Let the candidate accept in their portal, or record the acceptance on the Offers page, then move them. Every other column moves with no extra step.
Two moves have side effects worth knowing about, and Sparko tells you when they happen:
- Offer: a draft offer letter is created for you to review before sending. If Sparko could not draft one, it says why.
- Hired: the employee record is created, and onboarding starts if a plan could be matched. The toast links straight to the new employee.
Pipeline benchmarks
The job's Overview tab carries a benchmarks card comparing this job with your own other jobs at the same career path, level and employment type:
- Apply → screen rate
- Time to fill
- Offer accept rate
Each metric shows two bars, this job and your company median, plus a plain reading of the gap ("14 days faster than the company median"). A cohort of fewer than three comparable jobs is too thin for a median, so the card shows this job's own figures and says there is no company median yet. If the job has no career path or level set, there is no cohort to compare against and the card says that too.
Needs recruiting.benchmarks.view (HR Admin and Super Admin).
AI Candidate Screening
Automatic Screening
When candidates apply, AI automatically:
- Parses resume for key information
- Matches skills to job requirements
- Calculates fit score (0-100%)
- Prioritizes candidates
When the score arrives depends on your plan. The rule checks (location, work authorisation, experience, skills match) run instantly on every plan, so a candidate is placed in the queue right away. On paid Growth and above the AI fit score arrives with them. On Core the fit score is added overnight, and the queue says so until it lands. Trials include the Business feature set but still use the overnight lane, with at most 125 applications screened per workspace each night.
AI fit score breakdown
The AI fit score comes from the screen and is separate from the Match column's score (see The match score).
AI Match Analysis
92% Excellent Match Strong fit for Senior Engineer Required Skills 95% Experience Level 90% Education 88% Key Highlights:- 8 years experience (requires 5+)
- Python, Go, Kubernetes expertise
- Previous team lead experience
Rejection Mode & Human Review
A person decides every rejection. Screening produces a recommendation and the ground for it; the rejection itself is written only when a recruiter confirms it. This is on by default for every workspace, including one that has never opened the setting, and it is controlled in Admin → Settings → Recruiting as Require human review before rejection.
Candidates screening recommends rejecting appear in Waiting on your review at the top of the job's Pipeline tab, each with:
- who they are and what they applied for;
- the ground: Location outside hiring markets, Missing required skills, and so on;
- whether that ground is a Rule (deterministic: location, work authorisation, years of experience) or AI (a model judgement). A rule is arithmetic and quick to confirm; an AI ground deserves a longer look.
- Confirm rejection or Keep in pipeline.
Confirming writes the rejection against your name, carrying the recommendation's own reason, so the audit trail shows a person made the decision and on what basis (NYC Local Law 144, EU AI Act human oversight, GDPR Art. 22, UAE PDPL 45/2021).
Each job's screening policy in Job → Settings now controls how strongly a candidate is flagged, not whether they are rejected:
- Flag for review (default): screens and prioritises, no rejection recommended.
- Recommend rejection on skill gap / on any gap: the candidate is ranked to the top of your review queue as a recommended rejection. Enabling either is recorded in the audit trail with your name and time.
One caveat worth knowing: on the careers-page apply path, the attributes the deterministic rules compare (skills, years of experience, country) are extracted from the résumé by AI. The rule itself is arithmetic; the data it reads may not be. That is part of why the confirmation step exists.
Referred candidates are screened the same way as public applicants, so no one enters the pipeline unscored.
Applicant Notice & Voluntary Self-Identification
On the public careers page, when AI screening is in use, applicants see a plain-language notice that an automated tool may help review their application, that AI does not make the final decision, and that a human can review any automated result. Applicants may opt out of AI screening and may voluntarily self-identify gender, race/ethnicity, veteran, and disability status. Self-identification is optional, encrypted at rest, kept separate from the hiring decision, and used only for aggregate fairness monitoring.
Résumé storage and retention
Résumés uploaded through the careers page are stored encrypted at rest and are readable only by people with access to that candidate in your workspace.
How long they are kept. Every résumé carries a retention tag derived from its application. An application that never progresses past screening is tagged to expire 365 days after upload; once an application reaches interviewing, offer, or hired, the résumé is tagged to keep and is retained indefinitely as part of the hiring record. The storage rule that acts on the expire tag is live, so a résumé tagged to expire is deleted once it reaches 365 days.
The flip to "keep" is one-way: a candidate who interviews and is later rejected keeps their résumé on file, because the record of a real hiring decision outlives the decision. A nightly reconciler re-derives every candidate's status from their application history, so a résumé is never deleted because a single tagging call failed at the moment someone advanced.
Screening Fairness Report
Analytics > Recruiting > Screening fairness (HR Admin / Super Admin only) shows two sections. Screening oversight is on every plan; adverse impact needs Growth or above.
- Screening oversight: applications screened, recommended-rejection rate, how often a recruiter kept a recommended rejection in the pipeline, flag rate, AI score distribution, and any referrals that slipped through unscreened. No demographic data required.
- Adverse impact (four-fifths rule): for each disclosed demographic dimension, the selection rate per group (advanced past AI screening) and the impact ratio versus the most-selected group. A ratio below 0.80 is flagged as a potential adverse-impact indicator. Groups with fewer than 5 disclosed applicants are withheld, and a group under 30 is shown but marked provisional. The report is diagnostic, not a determination.
Interviews
Scheduling Interviews
- Select candidate → "Schedule Interview"
- Choose interview type and interviewers
- Select available times
- Candidate receives scheduling link
Everyone gets an email with a calendar invite attached (an .ics file that Gmail, Outlook and Apple Calendar open as an event). The candidate reads the time in your company's time zone; each interviewer reads it in their own, as set on their profile, and the zone is written next to the time. A reschedule sends an update for the same event, so calendars move it rather than adding a second one.
Rescheduling an Interview
Open the interview and choose Reschedule. Pick the new date and time, and add a reason if you want the candidate and the panel to know why.
Everyone on the interview gets an email with the old time and the new one, unless you untick the notification. The interview keeps the time it moved from, so the record shows it was moved rather than simply appearing at a different time. Its status becomes Rescheduled, which you can filter on in the Interviews list.
If an email cannot be delivered, the move still stands and Sparko tells you how many people it reached. Recipients are contacted independently, so one bad address does not stop the rest of the panel being told. Contact anyone it could not reach yourself.
An interview that is already completed, cancelled, or marked no-show cannot be moved. Schedule a new one instead.
Reusing an interview loop
A job's Settings tab holds its interview stages. Once you have the loop the
way you want it, Save as template in the stage editor adds it to the company
template library, so the next job can load it in one step instead of rebuilding
the stages. Needs recruiting.settings.manage.
The library itself lives at Admin Settings > Recruiting > Jobs.
Interview Types
- Phone Screen (30 min)
- Technical Interview (60 min)
- System Design (60 min)
- Behavioral (45 min)
- Hiring Manager (45 min)
- Team Fit (30 min)
AI Interview Brief
When you open your interview, an AI Interview Brief appears above the scorecard, tailored to your focus area for that round. It summarizes the candidate, the focus areas to cover, strengths to validate, areas to probe, suggested questions mapped to scoring dimensions, and what earlier panelists already found: so you walk in prepared and the panel doesn't repeat itself. The brief is visible only to panelists on that interview.
Interview Feedback
After interviews, submit structured feedback:
- Overall recommendation (Hire/No Hire)
- Competency ratings
- Strengths and concerns
- Detailed notes
AI Interview Synthesis & Finalist Comparison
The Decisions tab on a job has two views:
AI Summary: a recommendation roll-up (strong hire / hire / needs discussion / no hire) plus a ranked card per finalist showing the cross-panel synthesis: aggregate scores, consensus strengths and concerns, conflicting signals, any potential bias flags, and a confidence level. Finalists are candidates at Interviewing or Offer; candidates still at Screening are not listed. Where finalists have no synthesis yet, click Generate synthesis for all (n) in the header. A finalist with no completed interview, or no submitted feedback yet, is skipped and their card says why, for example Skipped: No completed interviews yet; the rest are still generated. Compare top finalists builds a side-by-side comparison matrix with a recommended candidate and rationale. Finalists are ranked the same way everywhere on the tab: recommendation first, then confidence, then average interview rating, then screening score, then the comparison's weighted score. The recommended candidate is always the top-ranked finalist and leads the matrix with ★ Recommended under their name; when the top two share a recommendation and confidence, the rationale ends with one sentence saying what puts the first ahead. The tab names finalists if you can view candidates (
recruiting.candidates.view); otherwise every card, the matrix and the rationale call them Finalist 1, Finalist 2 by rank, and the applications list shows Candidate with a short reference instead of the name and contact details. Scores read as they do on the page: ratings out of 5 with one decimal, screening score and confidence as percentages.A synthesis reads only that candidate's own submitted interview feedback. Each interviewer's submitted decision on an interview is one verdict, and an interview counts only if it produced a verdict, so a panel interview with two interviewers gives two verdicts. The header reads, for example, 3 verdicts from 2 interviews · 3 yes · 0 maybe · 0 no, and the yes, maybe and no counts always add up to the verdicts. Bias flags and conflicting signals name the interviewer if you can see interview feedback for everyone (
recruiting.interviews.view_all); otherwise they say "an interviewer".Activity log: the full stage-move, interview, offer, and rejection history for the job, filterable by type and actor.
The button at the right of the header switches between the two views. It is labelled with the view you are on, AI Summary or Activity log.
Choosing interviewers
Each interview stage shows suggested interviewers first. To add anyone else who works at your company, use Search people and pick a name. People who have left, or who have not started yet, cannot be added.
Offers
Creating an Offer
Navigate to candidate → "Create Offer"
Create Offer
Base Salary $ /year Sign-on Bonus $<div>
<label style="display: block; font-size: 13px; color: #6b7280; margin-bottom: 4px;">Equity</label>
<input type="text" value="10,000 options vesting over 4 years" style="width: 100%; padding: 8px; border: 1px solid #d1d5db; border-radius: 6px; box-sizing: border-box;">
</div>
<div>
<label style="display: block; font-size: 13px; color: #6b7280; margin-bottom: 4px;">Start Date</label>
<input type="date" value="2025-01-15" style="width: 100%; padding: 8px; border: 1px solid #d1d5db; border-radius: 6px; box-sizing: border-box;">
</div>
Offer Workflow
- Draft: offer created, not sent
- Pending Approval: waiting on the approvers in the offer's approval chain
- Approved: ready to send
- Sent: sent to the candidate, who opens it from the link in their email
- Accepted/Declined: the candidate accepts, declines, or requests changes in their portal. Someone with the Send Offers permission can also record the outcome on their behalf.
Every offer shows and stores its own currency. A new offer takes the job's currency, or your company's base currency when the job has none, and you can change it on the offer form. Base salary also has a Salary period (per year or per month), and the letter, PDF and candidate portal say which.
Approvals and notifications. When you submit an offer, or revise one, every approver in its chain gets an "An offer needs your approval" notification in Sparko and by email, and the offer waits in their My Hub approvals. When the last approver approves, the person who submitted it hears "Your offer was approved". When an approver sends it back, the submitter hears "Your offer was sent back", with the reason when one was given. If your company posts to a chat channel, the channel gets a short note with no names or salary. A hiring manager in the chain approves from My Hub. Only people in the chain can approve or send back: anyone else gets "You aren't an approver on this offer." Nobody approves or sends back an offer they created or submitted: "You can't approve your own offer." and "You can't reject your own offer." When you submit, Sparko leaves the offer's creator and submitter out of its approvers, so an offer needs at least one approver other than them. If nobody else is left, the submit stops with "Add an approver other than the person who created or submitted this offer."
While an offer waits for approval, and once it is approved, its terms and its letter can't be changed, including with Sparko AI: "Revise this offer to change its terms."
Writing the letter yourself. The letter comes from your company's offer letter template, and Sparko AI can polish or modify it while the offer is a draft. To add details the template does not cover, press Edit draft and fill in Letter text: whatever you write there replaces the generated letter in the PDF. The compensation and conditions paragraphs must stay as the template writes them for the offer's current terms, so a stored letter never quotes a different salary than the offer. A save that drops them, or changes the salary without updating a stored letter, is refused with "The compensation and conditions paragraphs must stay as the template writes them. Update the letter text to the current terms, or clear it to use the template."
When an offer is accepted, Sparko marks the matching application as hired, creates the employee record with the offer's start date and currency, and starts an onboarding plan. If the employee record cannot be created (for example the candidate's email domain belongs to another workspace), the acceptance is still saved and the person who created the offer gets a notification explaining what to fix.
An accepted offer shows Hire with Sparko AI beside Draft employment contract. It opens the hire plan (see People, Hire with Sparko AI). On Core it shows a Growth badge.
When an offer is declined, the person who created the offer gets a notification. The application stays open so you can decide the next step.
Editing a sent or accepted offer
Once an offer is Sent, it changes only through Revise, which creates a new version for approval and turns off the candidate's old portal links. Editing it in place, or regenerating its letter with Sparko AI, shows "This offer has been sent. Revise it to change the terms." An Accepted offer cannot be changed at all: "This offer has been accepted and can't be changed."
The offer drawer
Click an offer on the Offers page to open it in a drawer. At the top are its status, when it was sent and when it expires. Compensation shows the base salary and the other pay terms. View letter opens the letter in a window. Details folds out the job title, department, location, start date, approver and candidate email, the approval chain, the acceptance record once accepted, and the revision timeline once the offer has more than one version.
The footer has the buttons for the offer's status, such as Edit draft, Submit for approval, Approve, Send to candidate and Mark accepted. On a sent offer a ⋯ menu holds Download PDF, Resend link, Revoke link and Mark declined. On an accepted offer, Download PDF is a button in the footer.
Portal links
On a Sent offer, people with the Send Offers permission see Revoke link in the ⋯ menu of the offer drawer, next to Resend link. It turns off every portal link the candidate has been emailed. Sending or revising the offer emails a new one. If that email doesn't go out, the new link still replaces the old ones and you see "The link was replaced but the email didn't go out. Resend it." If no new link can be made, nothing changes, the old link keeps working and you see "We couldn't make a portal link, so nothing was sent. Try again in a minute." An offer expires at the end of the day you chose, up to 180 days out. If you leave the date empty, sending sets it to seven days from that day. An expired offer's link can't be resent. Links also stop working on their own when the candidate accepts, when they are moved to hired, when their last open application closes, or when their data is erased.
After the hire, the portal comes back for the new hire's employment contract, in whichever country they will work. A new link is emailed when HR asks for their contract details or sends the contract. It stops working when the contract is declined or voided. A signed or expired contract keeps its link until the link itself expires, so the new hire can download their signed copy or ask for a new signing link.
The candidate's Offer tab
From the offer stage on, the candidate's page has an Offer tab between Interviews and Activity. You need the View Offers permission to see it.
- Offer. One block per offer, latest version first: the job title and version, when it was approved and sent, and its status. It shows the base salary, the start date, when it was sent, and when it expires or was accepted. An offer accepted in the portal says "Accepted in the candidate portal" and offers Download signed letter; one a recruiter recorded says "Acceptance recorded". Earlier versions show on one line each, marked Superseded.
- Hired. Once the candidate is hired, a green strip at the top reads "Hired . Employee record created, starts ." with Open employee profile. People who can manage employment contracts also see Draft employment contract, or Open employment contract once one exists. A contract can be drafted for any country, from a template your team generated, uploaded or started for that country.
- No offer yet. At the offer stage with no offer, the tab shows Prepare offer.
At the offer stage without an accepted offer, the page's Move to Hired button is turned off and reads "Hired follows the accepted offer. Accept or record acceptance first."
Downloading the offer letter (PDF)
Once an offer is Sent or Accepted, you can download the letter as a PDF from the offer drawer (the ⋯ menu on a sent offer, the Download PDF button on an accepted one) or the row's "⋯" menu (Download PDF). Anyone with the View Offers permission can download it.
The letterhead names the paying entity's legal name when the offer carries an entity, otherwise your company's name, and the letter is signed by the job's hiring manager by name. An accepted letter ends with the candidate's typed signature in a script face, the date, how the acceptance was recorded, the sentence they agreed to, and the consent terms ("Offer acceptance terms, version 1") next to their stored version id.
- For a Sent offer, the PDF is generated when you download it.
- For an Accepted offer, the PDF was made once, at the moment of acceptance, and stored. Every download gives you that same file. It carries an Acceptance block: who accepted, when, the name they typed and, for a portal acceptance, the sentence they agreed to. The candidate is emailed the same file, and it is filed in the new employee's Documents as their offer letter.
Acceptance record
An accepted offer's drawer shows an Acceptance record under Details: when it was accepted, whether the candidate accepted in the portal or a recruiter recorded it on their behalf, the name typed, the network address and browser, the consent sentence and its version, and the SHA-256 hash of the stored PDF. Each time you open it, Sparko reads the stored PDF again and checks it against that hash, and tells you whether it still matches. A recruiter-recorded acceptance has no consent record, because the candidate did not tick the box themselves.
Offer Revision History
When you revise an offer (e.g. counter-proposed by the candidate, comp re-approved by VP), Sparko keeps every prior version on a tamper-evident chain. The original offer is marked superseded; the new offer carries a previous_offer_id pointer back to it and bumps offer_version by 1.
Where to find it. Open an offer that has been revised and unfold Details in its drawer: a tab for each version shows its version number, status, date, and the reason recorded at revision time. The revision timeline has no separate routed page and no copy-link yet; view it from the drawer. (The offer letter itself can be downloaded as a PDF: see "Downloading the offer letter" above.)
Who can see it. Anyone with the recruiting.offers.view permission: typically HR Admin, Super Admin, and recruiters with explicit grants. To make a new revision, use Revise offer in the offer row's ⋯ menu.
Use cases.
- Counter-offer history: "Why did we end at $150k? Because v2 was $145k and the candidate countered with $5k more: recorded May 21 by Daisy."
- Internal review: comparing what was sent vs what was accepted when reconciling against the signed offer.
Hiring for one entity
When your company has more than one entity, an offer names the entity that will employ the hire, in Entity under Department and Location. If your role covers one entity, pick one of yours: an offer without one shows "Pick an entity." The contract that follows uses the offer's entity, and the hire joins that entity when they sign.
Recruiting Analytics
Key Metrics
| Metric | Description |
|---|---|
| Time to Hire | Days from job post to offer acceptance |
| Time to Fill | Days from job post to start date |
| Offer Acceptance Rate | % of offers accepted |
| Source Effectiveness | Applications by source |
| Pipeline Velocity | Candidates moving through stages |
Integration with People Module
When a candidate accepts an offer:
- Employee record created automatically
- Onboarding plan generated
- Manager notified
- Skills transferred from application
- The signed offer letter PDF filed in the employee's Documents
Once the candidate is hired, Draft employment contract on the accepted offer in the Offers drawer, or on the hired strip of the candidate's Offer tab, starts their employment contract with the terms filled in from the offer. The button reads Open employment contract once one exists. You need the Manage Employment Contracts permission. See Employment Contracts.
Careers Page
Your careers page is where candidates meet your company, browse your open roles and apply.
Candidates see it at: https://{your-company}.sparko.app/careers
Navigate to: Admin Settings > Recruiting, then the Careers Page tab. You need View Careers Page Builder to open it and Edit and Publish the Careers Page to change it. HR Admins and Super Admins have both.
The builder
The builder has your controls on the left and a live preview of the real page on the right. The preview is the same page candidates get, so what you see is what they will see.
LiveStory first template · 8 open roles · 2 unpublished changes Preview full pageSave draftPublish changes Template Story first Brand Style Sections 8 of 8 shown Photos 5 photos Page details acme-corp.sparko.app/careers?preview=1 Build the HR system small teams actually like using. About · Open roles · Value cards · Perks · From the team · Where we work · Photo galleryThe controls on the left, from top to bottom:
- Template. Three layouts of the same content: Editorial (serif type, roles as a list), Cards and colour (a colour hero and role cards) and Story first (photos and culture first). Switching never deletes anything.
- Brand. Your brand colour and an accent colour.
- Style. Corner radius (Square, Soft, Round), type scale (Small, Standard, Large) and density (Comfortable, Compact).
- Sections. Use the arrows to reorder sections and the switch to hide one. The hero is always first and Open roles is always shown. The photo gallery appears in Story first only. Click a section here, or on the preview, to edit what is in it: headline and intro, about, value cards, perks, team quotes and offices.
- Photos. Up to 12 JPG or PNG photos, 5 MB each. Story first shows them as a mosaic. The caption is the description screen readers read out, so write what is in the photo.
- Page details. Company name, logo, application instructions, your application questions, careers email, social links and the title and description search engines show. Leave the logo empty to use the one from your company settings.
The preview has a Desktop / Phone switch so you can check the page at phone width.
Saving and publishing
Your edits are a draft. Save draft keeps them without changing what candidates see. Publish changes puts the saved draft live as a new version, and the bar shows how many changes are waiting to be published. Preview full page opens the draft through the real careers page with a banner saying it is a preview.
To take the page down, open Page details and choose Take page offline. Until you publish again, visitors see a plain page with your company name and open roles, and the apply form asks none of your questions. Your draft and past versions are kept.
Writing the page with Sparko AI
Press Sparko AI above the preview to swap the controls for the AI panel. Press Back to controls to return.
- Draft the page. Describe your company in a few sentences: what you make, who for, how big the team is and what it is like to work there. Tick what Sparko AI may change: the template, the copy for each section, and the colours and style. If you have uploaded a logo, Sparko AI suggests its colour as your brand colour.
- Improve one section. Pick Hero, About, Value cards, Perks or Where we work and choose Rewrite, Shorter or Warmer. Team quotes are never rewritten: they are your people's own words.
On a plan that meters AI, each request uses 1 AI action, and the line under the button says so. If your workspace has used this month's AI actions, Sparko tells you and offers the upgrade instead.
What Sparko AI suggests arrives as a proposal, never as a change to your page. Each proposal lists its changes with the reason for each, and shows text as before and after with the changed words marked. Untick any change you do not want, then press Apply to write the rest into your draft, or Discard to drop the proposal. Sections with a proposal waiting are outlined in the preview, and With proposals shows the page as it would look with them. A change whose section you edited since it was proposed is not applied, and says so. Undo takes an applied proposal back out of the draft.
Applying only changes your draft. Nothing goes live until you publish.
Application questions
Add questions in Page details under Application questions. They are asked on every job's apply form.
- Answer types: short text, long text, link, email, number, or a choice from a list you write.
- Required or optional. Candidates must answer required questions to continue.
- Help text appears under the question.
- Format pattern (optional) checks the answer's format as the candidate types, with your own Message when the format is wrong. For example, a pattern that only accepts links starting with
https://.
Questions go live when you publish. A candidate who applies is asked the questions that were live at that moment.
What candidates see
The job page. Each role opens on its own page with the job details and a Start application button. Once the candidate starts, the job folds into a short summary at the top with a Job details button to open it again, so the form has the full width, including on a phone.
The application. Four short steps:
- Resume. Upload a PDF or Word file. Sparko reads it and fills in the next step.
- About you. Name, email and the other details, then your application questions under Questions from {your company}. Answers are checked before the candidate can continue, and each problem is named next to its question.
- Equal opp. Voluntary self-identification. Every answer defaults to "Decline to answer".
- Review. The candidate checks their details and answers, gives consent, and can opt out of AI review before submitting.
After submitting, the candidate sees a confirmation with a link to Check your application status.
Application status. At /careers/application-status a candidate enters the email they applied with. If there is an application for that address, Sparko emails a fresh link; opening it sends a 6-digit code to the same address, and entering the code shows where they stand. The page says the same thing whether or not the address has applied, so it never reveals who has.
Reading the answers
Open a candidate from a job's pipeline. When they answered your application questions, the drawer has an Application answers tab beside Overview. It shows each question as the candidate saw it with their answer, and the line Asked on with the date and page version. Links open in a new tab.
If you have changed the questions since the candidate applied, a note says so, for example that a question was added after they applied and so was not asked.
Answers are stored encrypted. Anyone who can view applications for the job can read them.
Changing your logo or company name
These come from your company record. Change them in Admin Settings > Company Settings > General and the careers page follows. To show a different logo on the careers page only, set it in Page details.
Common Questions
How do I post a job externally?
Open the job and press Publish to careers page. It goes on your own careers page, at your workspace address followed by /careers. Once the job is open and approved, a Copy link button on the job page copies its public application link straight to your clipboard, ready to paste into a job board post, an email, or a referral message. The button only appears while the job is actually listed, so you can never share a link to a job nobody can apply to. There's no direct posting integration to external job boards (LinkedIn, Indeed, Glassdoor) yet: those sources only appear as inbound-application labels today, so you'd post to them manually and let candidates apply through your careers page link.
Can candidates apply without an account?
Yes, candidates can apply directly from your careers page.
How do I bulk reject candidates?
Select multiple candidates → "Bulk Actions" → "Reject" → Add reason.
More AI-Assisted Recruiting
- Candidate AI-screening opt-out: candidates can decline automated AI evaluation of their application at apply time.
- Job attention flags: job postings missing key structural info (e.g. an unassigned department or missing approver chain) are flagged so recruiters can fix incomplete postings before they go live.
- Salary band suggestion for offers: when drafting an offer, Sparko suggests a salary informed by the role's compensation band, falling back through career-path band and then AI market estimate if no band is set.
- Candidate duplicate detection: a background health check identifies and reports likely duplicate/merged candidate records across applications.
Known Limitations
- Offer signatures are typed, not sealed. A candidate accepts by typing their name after an emailed code, and Sparko keeps a consent record and a hash-checked PDF of what they accepted. This is a typed electronic signature with an evidence record, not an advanced or qualified electronic signature.
- No bulk candidate import. The only ways candidates enter the pipeline are the public apply form and the single-candidate referral form: there's no CSV/ATS import for moving an existing pipeline into Sparko.
Related Features
- People Module - Employee onboarding
- AI Features - AI-powered recruiting
- Performance - New hire goals
Still need help? Reach us at [email protected].
← Back to Help Center