HiringGenie
Interview every applicant. Hire the best.

One plan. Every feature.
No confusing tiers.

Talking AI Video Avatars, AI Voice interviews, candidate scoring and resume screening. No complicated tiers, no per-seat fees. Just one clear price.

Unlimited team seats Unlimited active jobs Video Avatar & Voice All core features included
All Access Our only standard plan

Everything you need to hire.

One monthly subscription. All your hiring tools.

$99 / month
50interview credits / month Just $1.98 per included credit · 1 credit = up to 30 min refreshes monthly
Need more interviews? $1.99 per extra credit
All included — no feature add-ons
AI Video Avatar interviewsAI Voice interviewsResume screeningAI scoring and reportsRecordings and transcripts
Get started for $99/month Monthly billing · 50 included credits refresh each month · Taxes may apply
Enterprise

Built for bigger hiring teams.

Custom volume, integrations and dedicated support.

Let's talk.

Running hundreds or thousands of interviews? We'll put together a plan that matches your hiring volume, workflows and security requirements.

Everything in All Access, plus Custom credit volumes and pricing Dedicated onboarding and support Enterprise integration options SSO and advanced security options Tailored contracts and service terms
Contact sales Request a custom proposal. No fixed public price.
tap to see every feature.

FAQ

Frequently
asked questions

tap any card to open it.
AI interviewer Emma Still have questions?Our team replies within a day. Talk to our Expert

Every feature: AI avatar interviews, candidate reports, resume screening, interview transcripts, AI assist with questions and unlimited job posts. The plan includes 50 interview credits a month. One credit covers an interview of up to 30 minutes; a 60-minute interview uses 2 credits.

Each credit beyond the 50 included is $1.99, billed at the end of the month.

No. Candidate reports, resume screening and unlimited job posts are part of the plan.

No. Your 50 credits refresh at the start of each billing month.

Yes. All Access is billed monthly with no long-term commitment.

Contact us about Enterprise for custom volume, advanced security and dedicated support.

HiringGenie Pricing | AI Interview Software Plans
HiringGenie
Sign In Book a demo
Interview every applicant. Hire the best.

One plan. Every feature.
No confusing tiers.

Talking AI Video Avatars, AI Voice interviews, candidate scoring and resume screening. No complicated tiers, no per-seat fees. Just one clear price.

Unlimited team seats Unlimited active jobs Video Avatar & Voice All core features included
All Access Our only standard plan

Everything you need to hire.

One monthly subscription. All your hiring tools.

{{ aaPrice }} {{ aaPer }}
50interview credits / month Just $1.98 per included credit · 1 credit = up to 30 min refreshes monthly
Need more interviews? $1.99 per extra credit
All included — no feature add-ons
AI Video Avatar interviewsAI Voice interviewsResume screeningAI scoring and reportsRecordings and transcripts
{{ aaCta }} {{ aaNote }}
Enterprise

Built for bigger hiring teams.

Custom volume, integrations and dedicated support.

Let's talk.

Running hundreds or thousands of interviews? We'll put together a plan that matches your hiring volume, workflows and security requirements.

Everything in All Access, plus Custom credit volumes and pricing Dedicated onboarding and support Enterprise integration options SSO and advanced security options Tailored contracts and service terms
Contact sales Request a custom proposal. No fixed public price.
tap to see every feature.
Compare plansAll Access{{ price }} / monthEnterpriseCustom
{{ r.label }}
{{ r.label }}{{ r.sub }}IncludedNot included{{ r.aTxt }}IncludedNot included{{ r.bTxt }}

FAQ

Frequently
asked questions

tap any card to open it.
AI interviewer Emma Still have questions?Our team replies within a day. Talk to our Expert

{{ it.a }}

} }; const IC = { avatar: 'M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8ZM4.5 20a7.5 7.5 0 0 1 15 0', report: 'M7 3h7l4 4v14H7zM14 3v4h4M10 12h5M10 16h5', resume: 'M6 3h9l3 3v15H6zM9 9h6M9 13h6M9 17h3', transcript: 'M4 5h16v11H9l-5 4zM8 9h8M8 12h5', assist: 'M12 3l1.8 4.7L18.5 9.5l-4.7 1.8L12 16l-1.8-4.7L5.5 9.5l4.7-1.8zM18 15l.8 2.2L21 18l-2.2.8L18 21l-.8-2.2L15 18l2.2-.8z', jobs: 'M4 8h16v11H4zM9 8V5h6v3M4 13h16' }; const FEATS = [['AI avatar interviews', 'avatar'], ['Candidate reports', 'report'], ['Resume screening', 'resume'], ['Interview transcripts', 'transcript'], ['AI assist with questions', 'assist'], ['Unlimited job posts', 'jobs']].map(([t, k], i) => ({ key: i, t, ic: IC[k] })); const I = { inc: true }, N = { no: true }, T = (t) => ({ txt: t }); const groups = (x) => [ ['Usage & workspace', [['Credits each month', T('50 included'), T('Custom')], ['Extra credits', T(x + ' each'), T('Custom')], ['Active job posts', T('Unlimited'), T('Unlimited')], ['Team users', T('Unlimited'), T('Unlimited')]]], ['AI interviews', [['AI avatar interviews', I, I], ['AI voice interviews', I, I], ['AI-generated questions', T('Unlimited'), T('Unlimited')], ['Custom interview questions', T('Unlimited'), T('Unlimited')], ['Candidate email invites', I, I]]], ['Screening & evaluation', [['Resume screening', T('Unlimited'), T('Unlimited')], ['AI candidate scoring and ranking', I, I], ['Candidate reports', T('Unlimited'), T('Unlimited')], ['Interview recordings and transcripts', T('Unlimited'), T('Unlimited')], ['Cheat detection', I, I]]], ['Support', [['Onboarding and support', I, T('Dedicated support')], ['Tailored contracts', N, I]]] ]; class Component extends DCLogic { state = { bill: 'm', faqOpen: null, cur: 'USD', cmp: null, opt: null, n: 150, more: false }; renderVals() { const open = this.state.faqOpen ?? ((this.props.openFirst ?? true) ? { 0: true } : {}); const OPTS = ['A · Product stage', 'B · Annotated', 'C · Hiring flow', 'D · Bento']; const opt = this.state.opt ?? this.props.option ?? OPTS[0]; const cur = CUR[this.state.cur]; const fmt2 = (v) => cur.pre + (Math.round(v * 100) / 100).toLocaleString(cur.loc, { minimumFractionDigits: v % 1 ? 2 : 0, maximumFractionDigits: 2 }); const rows = []; groups(fmt2(cur.ex)).forEach(([g, items]) => { rows.push({ group: true, item: false, label: g }); items.forEach(([l, a, b, sub]) => rows.push({ group: false, item: true, label: l, sub: sub || '', aInc: !!a.inc, aNo: !!a.no, aTxt: a.txt || '', bInc: !!b.inc, bNo: !!b.no, bTxt: b.txt || '' })); }); rows.forEach((r, i) => r.key = i); const n = this.state.n, extraN = Math.max(0, n - 50), extraAmt = extraN * cur.ex; const cmp = this.state.cmp ?? this.props.compareOpen ?? false; const more = this.state.more; const bill = this.state.bill; const ann = bill === 'a'; const billVals = { aaPrice: ann ? '$90' : '$99', aaPer: ann ? '/ month, billed annually' : '/ month', aaCta: ann ? 'Get started for $1,080/year' : 'Get started for $99/month', aaNote: ann ? 'Billed $1,080 yearly · 50 included credits refresh each month · Taxes may apply' : 'Monthly billing · 50 included credits refresh each month · Taxes may apply', billOpts: [['m', 'Monthly', ''], ['a', 'Annual', 'Save 9%']].map(([k, l, sv]) => { const on = k === bill; return { key: k, label: l, save: sv, saveInk: on ? '#FFFFFF' : '#5344E8', saveBg: on ? '#5344E8' : '#E4E0FF', sh: on ? '0 1px 3px rgba(14,11,39,.12)' : 'none', bg: on ? '#FFFFFF' : 'transparent', ink: on ? '#1D1D1F' : '#6E6E73', pick: () => this.setState({ bill: k }) }; }) }; return { ...billVals, optA: opt === OPTS[0], optB: opt === OPTS[1], optC: opt === OPTS[2], optD: opt === OPTS[3], optOpts: OPTS.map(v => ({ key: v, label: v, bg: v === opt ? '#FFFFFF' : 'transparent', ink: v === opt ? '#1D1D1F' : '#FFFFFF', pick: () => this.setState({ opt: v }) })), curOpts: Object.keys(CUR).map(k => { const on = k === this.state.cur; return { key: k, label: k, bg: on ? '#FFFFFF' : 'transparent', ink: on ? '#1D1D1F' : '#6E6E73', sh: on ? '0 1px 3px rgba(14,11,39,.12)' : 'none', pick: () => this.setState({ cur: k }) }; }), curCode: this.state.cur, price: cur.p, extra: fmt2(cur.ex), rows, featsAll: FEATS, featsTop: FEATS.slice(0, 3), featsMore: FEATS.slice(3), featsEnt: [{ key: 0, t: 'Everything in All Access' }, { key: 1, t: 'Advanced security' }, { key: 2, t: 'Dedicated onboarding and support' }], more, moreLabel: more ? 'Show fewer features' : 'See all features', moreRot: more ? '180deg' : '0deg', toggleMore: () => this.setState({ more: !more }), presets: [50, 100, 250, 500].map(v => { const on = v === n; return { key: v, label: String(v), bg: on ? '#5344E8' : '#FFFFFF', ink: on ? '#FFFFFF' : '#1D1D1F', bd: on ? '#5344E8' : '#DCDAF0', pick: () => this.setState({ n: v }) }; }), c: { n, setN: (e) => this.setState({ n: Number(e.target.value) }), extraN, extraAmt: fmt2(extraAmt), total: fmt2(cur.base + extraAmt) }, cmpOpen: cmp, cmpDisplay: cmp ? 'block' : 'none', cmpAria: cmp ? 'true' : 'false', cmpLabel: cmp ? 'Hide comparison' : 'Compare all features', cmpRot: cmp ? '180deg' : '0deg', toggleCmp: () => this.setState({ cmp: !cmp }), items: FAQ.map((r, i) => ({ key: i, q: r[0], a: r[1], num: String(i + 1).padStart(2, '0'), plusRot: open[i] ? '45deg' : '0deg', gridBd: open[i] ? '#1D1D1F' : '#E8E8ED', gridShadow: 'none', gridNumBg: open[i] ? '#1D1D1F' : '#F5F5F7', gridNumInk: open[i] ? '#FFFFFF' : '#1D1D1F', mh: open[i] ? '240px' : '0px', op: open[i] ? 1 : 0, toggle: () => this.setState({ faqOpen: Object.assign({}, open, { [i]: !open[i] }) }) })) }; } }