Industry guide · HR

Recruiting Agency Software: What Bullhorn Cannot Fix at Scale

The short answer

Build if you are placing more than roughly 40 contractors a week or running three or more desks with different fee models. A focused first release that fixes the two worst leaks, submission workflow and timesheet-to-invoice, runs $60k to $130k and ships in 12 to 16 weeks; a full platform replacing Bullhorn as the operational system of record runs $150k to $400k phased over 6 to 12 months. Below that volume, keep Bullhorn and fix your process. Above it, the spreadsheet tax and the margin leakage on contract placements will pay for the build inside a year.

Why recruiting agency software makes or breaks a staffing operator

Walk into any 40-recruiter agency on a Thursday afternoon and you will find the same scene. A recruiter has Bullhorn open in one tab, a Google Sheet called "Q3 Submissions Master v4 FINAL" in another, LinkedIn Recruiter in a third, and Outlook underneath all of it. The client just emailed asking why they got three resumes for the same role from two different recruiters at your agency. Nobody has an answer, because the ownership rules live in a Slack thread from eight months ago and in the head of a delivery manager who is on PTO.

That is not a Bullhorn failure exactly. Bullhorn does what it says: it stores candidates, jobs, submissions and placements. The failure is that your business does not run on those four objects. It runs on things Bullhorn has no native concept of: the difference between a submitted candidate and a client-acknowledged submission, the MSP portal that has its own submission deadlines and its own resume format, the pay-rate floor for a specific skill in a specific state, the fact that this client requires a background check before the interview and this one requires it after offer. So the agency papers over the gap with custom fields, a Bullhorn Automation workflow, a Sense or Herefish sequence, two Zapier zaps and a spreadsheet. Then it hires an ops person whose entire job is reconciling those.

Here is the number that matters. At the agencies we have worked with, a recruiter placing contract talent spends 9 to 14 hours a week on work that is not sourcing, screening or selling: reformatting resumes into client templates, re-keying submission data into a VMS like Fieldglass or Beeline, chasing timesheet approvals, correcting invoices, and updating the pipeline sheet that the Monday meeting actually runs off. Run your own loaded hourly cost through that. At $65 an hour across 40 recruiters it is roughly $1.4 million a year of capacity spent on data entry. That is the size of the hole you are deciding whether to fix.

Problem 1: Submission state is a lie, and the pipeline meeting runs on the lie

In Bullhorn, a submission has a status. Someone sets it. That is the entire mechanism. So "Client Submitted" means the recruiter clicked a dropdown, not that a human at the client opened the resume. Your delivery manager pulls a submission report on Monday, sees 62 active submissions, and reports a healthy pipeline to the leadership team. In reality, 19 of those went into an MSP portal where the requisition was closed four days ago, 11 were never acknowledged by the hiring manager, and 6 are duplicates of each other because two recruiters worked the same req off different job boards.

The scene that costs you money: a client calls, annoyed, saying they never received the candidate you have been forecasting as a placement for three weeks. The recruiter swears they sent it. They did. It went to a hiring manager who left the company in June and whose mailbox auto-forwards to nowhere.

Why the incumbent cannot fix this. Bullhorn's status field is self-reported by design, and its email tracking tells you an email was sent, not that a submission was received into a client's workflow. Bullhorn Automation can nag the recruiter to update the status; it cannot independently verify anything. VMS Access and the various portal integrations cover some MSPs and not the ones your specific clients use. And once a client requires their own portal, the state of your most important object lives on someone else's server.

What a custom build does. You model submission as an event stream, not a status field. Every submission carries a tracked delivery artifact: a unique link to a branded candidate profile page rather than an emailed PDF attachment. You now know the exact minute the hiring manager opened it, how long they spent on the work history section, and whether they forwarded it internally. Where the client uses a VMS, you build a headless submission agent per portal (Fieldglass, Beeline, SAP Ariba and the two or three regional ones your clients actually use) that pushes the submission and pulls back requisition state on a schedule, so a closed req kills the forecast automatically instead of surviving until someone notices. Ownership and duplicate detection run at submission time on a fuzzy match across email, phone and a normalized work-history hash, not on exact-match candidate ID, which is why Bullhorn's dedupe misses the same person who applied twice with two email addresses.

The forecast then stops being a recruiter's opinion. It becomes: 62 submissions, 41 verified opened, 18 with client-side activity in the last 72 hours, 9 with a scheduled interview. That is the number you take to your board.

Problem 2: Timesheets and margin, where the actual money leaks

Perm placements are simple. Contract placements are where we consistently find 2 to 5 points of gross margin gone, and nobody in the building can point at where. The chain is long: contractor submits hours, client manager approves, agency invoices client, agency pays contractor or their corp-to-corp entity, and somewhere in there a bill rate, a pay rate, a burden percentage, overtime rules, per diem and a state-specific tax treatment all have to be right.

In practice: a contractor at a client in California works 46 hours. The client-approved timesheet says 46. Your bill rate is $92, your pay rate is $61. But California overtime rules mean hours over 40 pay at 1.5x, your MSP contract says overtime bills at 1.5x only up to 48 and then straight time, and this particular contractor is W-2 through your back office so burden applies to the overtime too. Somebody in accounting works this out in Excel. Multiply by 380 active contractors and four weeks a month.

Why the incumbent cannot fix this. Bullhorn Time and Expense (formerly Peoplenet) handles the collection and approval mechanics reasonably. What it does not do is encode your contract-specific commercial rules as first-class logic. Every agency ends up with a rate card that is really a set of 200 exceptions, and those exceptions live in contract PDFs in SharePoint. Bullhorn cannot read your MSP agreement. Nor can your accounting stack, whether that is a NetSuite or a Sage Intacct instance connected by a nightly file drop that nobody has audited since implementation.

What a custom build does, and where AI is worth the money. Two pieces. First, a rules engine where each client contract becomes a versioned, testable rate agreement object: bill rate by role and location, OT thresholds and multipliers, holiday treatment, expense caps, invoice cadence, PO reference requirements, and the effective dates. Every timesheet runs through it and produces an invoice line with a full audit trail showing which rule fired. Reconciliation stops being an Excel job.

Second, document extraction, which is the one place AI in this category is not a gimmick. Point a document model at your executed MSA and SOW PDFs and have it propose the rate agreement object: rates, OT terms, notice periods, rebate clauses, insurance minimums. Do not let it write to production. Have it produce a draft with page-level citations that a contracts person confirms in about four minutes instead of the 40 it takes to read the agreement cold. We have run this pattern across a few hundred contracts on client projects; the model gets the structured terms right the large majority of the time and, more importantly, flags the clause it is unsure about instead of guessing silently. The same extraction runs on inbound client-signed timesheets and PO documents.

The second AI use that pays: an agent that chases timesheet approvals. Contractor submits Sunday night, client manager has not approved by Tuesday noon, the system sends a contextual, human-sounding nudge with the exact hours and a one-click approve link, escalates to the secondary approver Wednesday, and flags the account manager Thursday. Days sales outstanding on contract invoicing is the metric this moves, and it moves it a lot.

Problem 3: Every client wants a different resume, a different process, a different portal

Your enterprise client wants candidates in their branded template with the personal identifying information stripped for the first round. Your healthcare client wants credential verification attached. Your MSP client wants a specific field mapping and a 24-hour submission SLA. Your one-off direct client just wants a PDF.

The recruiter's actual workflow for this: download the candidate's Word doc, open the client template, copy sections across, remove the phone number and last name, save as PDF, attach to email, then update Bullhorn. Fifteen to 25 minutes per submission. At 40 recruiters and 8 submissions a week each, that is north of 4,000 hours a year of formatting.

Why the incumbent cannot fix this. Bullhorn has resume formatting through partners like Daxtra or Sovren, and those do a decent job of parsing into one house template. They do not model per-client submission profiles with their own redaction rules, compliance attachments and delivery channels. You can buy your way to one template. You cannot buy your way to 30 client-specific submission contracts.

What a custom build does. A submission profile per client: template, required fields, redaction rules, required attachments (right-to-work, licenses, certifications with expiry dates), delivery channel (email, portal push, API), and SLA clock. The recruiter clicks Submit; the system renders the correct artifact, checks that the required compliance documents are present and unexpired, blocks the submission if a nursing license expires in 11 days, and delivers through whichever channel that client uses. Twenty minutes becomes twenty seconds, and the compliance check is enforced rather than remembered.

Problem 4: Multi-location, multi-desk, and the reporting that never reconciles

You have a perm desk in Chicago, a contract IT desk in Dallas, a healthcare travel desk in Phoenix, and an acquisition you bought last year that is still on its own JobDiva instance. Leadership wants one number: gross profit by desk, by recruiter, by client, this month versus last, with a forecast. What they get is four exports, a merge, and a two-day argument about whether a placement counts in the month of start or the month of invoice.

Why the incumbent cannot fix this. Bullhorn Analytics and Canvas can report on Bullhorn. They cannot reconcile a second ATS, and they cannot see your payroll or accounting system. Every agency of scale ends up with a BI (Business Intelligence) layer stitched on top, and that layer inherits whatever garbage the source data has. If submission status is self-reported, the dashboard is a beautifully rendered lie.

What a custom build does. A canonical placement and margin model with explicit revenue recognition rules that you define once, fed by verified events rather than manual statuses, with the second ATS integrated as a source rather than migrated on day one. Forecasting becomes tractable because you have real conversion rates by stage, by client, by recruiter, from verified events: submissions that were actually opened converted to interview at whatever rate your data shows, which is a number you have never had before. That is where predictive forecasting stops being a demo feature and starts being useful.

Problem 5: After-hours candidate response, especially in high-volume and healthcare

If you are placing nurses, drivers, warehouse or light industrial, the candidate who responds to your text at 9pm and gets a reply at 9:04pm is your placement. The candidate who waits until 8am the next day is working for the agency down the street. Your recruiters are not answering texts at 9pm.

Why the incumbent cannot fix this. Sense and Herefish do scheduled campaigns well. A campaign is not a conversation. When the candidate replies "I can do the Tuesday shift but not Thursday, and I need to know if it's the north campus," a drip sequence has nothing.

What a custom build does. A conversational agent over SMS with real constraints: it holds your live requisition data, the candidate's compliance status and stated availability, and it can genuinely book an interview slot on a recruiter's calendar or confirm a shift. Hard boundaries: it never negotiates rate, never makes an offer, hands off to a human on any signal it is out of scope, and every conversation is logged against the candidate record. The honest framing is that this is not replacing recruiters. It is capturing the 14-hour window every day when nobody is at the desk.

What this costs and how long it takes

These are Digital Heroes bands from delivery across 2,000+ projects, not a market survey.

A focused first release, the one that fixes the two worst leaks rather than replacing everything: $60k to $130k, shipping in 12 to 16 weeks. For a staffing agency that is usually the submission engine with per-client profiles and verified delivery, plus the rate rules engine and timesheet-to-invoice chain, running alongside Bullhorn with Bullhorn still holding candidate records. A full platform that becomes your operational system of record, with the ATS replaced or reduced to a data store, VMS integrations, payroll and accounting sync, portals for clients and contractors, and the analytics layer: $150k to $400k, phased over 6 to 12 months.

What drives price up in this category specifically, in rough order of impact:

VMS and portal integrations. Each one is its own project. Fieldglass has an API and a partner process. Some regional MSP portals have neither, which means a maintained headless agent and a support burden when they redesign their login page. Budget $12k to $30k per portal and be honest about how many you actually need on day one, which is usually two, not nine.

Payroll and back office. If you run W-2 contractors through a back-office provider, integrating with them is straightforward. If you are running multi-state W-2 payroll with your own burden calculations, per diem and reciprocity rules, that is real money and needs a tax advisor in the room, not just developers.

Compliance depth. Healthcare staffing with Joint Commission requirements, credential expiry tracking and audit trails is materially more expensive than IT contract staffing. Same with anything touching government contracts and E-Verify.

Data migration from Bullhorn. Ten years of candidate records with inconsistent custom field usage, a duplicate rate nobody has wanted to measure, and resumes in six formats. The extraction is easy. Deciding what a field means when three offices used it three ways is what takes the weeks.

Build versus buy: an honest position

Keep Bullhorn if you are under about 25 recruiters, running mostly perm, mostly direct clients, without heavy VMS exposure. At that scale the $200 or so per user per month for a Bullhorn seat plus Automation is cheap relative to a build, and your problems are process problems, not software problems. Building will not fix a desk that does not do BD.

Also keep it if you are growing through acquisition and the target agencies are all on different systems. Standardize on one commercial ATS first, get clean, then build on top. Building a custom platform while your data model is still an argument is how projects die.

Build when these signals show up together, and they usually do:

More than 150 active contractors and someone whose full-time job is timesheet and invoice reconciliation. That role is a bug report with a salary.

Three or more VMS portals in your delivery mix, with recruiters double-keying into them. The double-keying is not just cost, it is where the errors that cost you placements come from.

The Monday pipeline meeting spends more time arguing about what the numbers mean than about what to do. That is a signal that your system of record is not one.

You have a differentiated delivery model, a specific vertical, a specific speed promise, a specific compliance advantage, and Bullhorn's data model actively fights it. If your edge is operational and your software cannot express your operations, you are paying a subscription to be average.

The strongest case is the boring one: contract staffing at volume, where a 2-point margin recovery on $30 million of contract revenue is $600,000 a year against a $200,000 build. That math does not need a strategy deck.

How to choose a developer for recruiting agency software

Ask them to whiteboard the data model before you talk price. Candidate, job order, submission, placement, timesheet, invoice, rate agreement. If they draw submission as a status on a job order rather than as its own object with a lifecycle, they have never built this and they will discover the problem in month four on your budget. Specifically probe how they model the same candidate submitted to two clients for two roles at two different pay rates, and what happens when one converts to perm.

Make them name the VMS platforms they have actually integrated with, and ask what broke. Anyone who has done Fieldglass or Beeline in anger has scars and a story about a field mapping that silently changed. Anyone who says "we'll just use their API" has read the marketing page. Ask specifically what their approach is when a portal has no API, because at least one of yours will not.

Ask what they do with your Bullhorn data on day one. The right answer is not "migrate everything." It is a phased position: Bullhorn stays as the candidate store while the new system owns submission and money, with a defined sync, and a migration decision made later with real usage data. If they open with a big-bang cutover, they are optimizing for their invoice schedule, not your risk.

Confirm you own the code and the infrastructure, in writing, before kickoff. Repository in your organization, cloud accounts in your name, no runtime license on the thing you paid to build. In a category where your operational data is the asset, a vendor who holds the keys holds your agency. Also ask what happens if you stop working with them in month seven, and listen for whether the answer involves them handing over documentation or handing over leverage.

Last one, and it filters hard: ask them what they would refuse to build. A firm that has shipped in staffing will tell you not to build a resume parser, because Daxtra and Sovren already do it well and integrating is a fraction of the cost. A firm that says yes to everything is quoting, not consulting.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. An earlier SHRM benchmarking report (reflecting fiscal year 2015, published 2016) established a widely cited baseline average cost-per-hire of $4,129, illustrating how recruiting costs have climbed over time (SHRM's separate 2025 Benchmarking Report shows $5,475 for nonexecutive roles). Note: the $5,475 figure is not on this linked page; it comes from SHRM's 2025 report. Source: SHRM (Society for Human Resource Management) (2016) →
  2. Organizations that scaled intelligent automation report an average cost reduction of 32% (up from 24% in 2020), and respondents expect an average 31% cost reduction over the next three years. Source: Deloitte (2022) →
  3. Only 22% of firms are 'future ready' having significantly transformed digitally; these companies show average revenue growth 17.3 percentage points and net margins 14.0 percentage points above their industry average. Source: MIT Center for Information Systems Research (MIT Sloan) (2022) →
  4. In an RCT, text-message reminders (11.7% missed) were non-inferior to telephone reminders (10.2% missed; difference not significant, within the 2% non-inferiority margin) but far cheaper - total cost EUR 230 for SMS versus EUR 8,910 for telephone over 6 months - making SMS more cost-effective. Source: BMC Health Services Research / PubMed Central (Junod Perron et al.) (2013) →
Rohan Malhotra · Enterprise Software Consultant

Rohan advises mid-market and enterprise teams on ERP, CRM and custom software, and has led delivery on dozens of business-software builds.

Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

How much does custom recruiting agency software cost for a 40-recruiter staffing firm?
A focused first release typically runs $60k to $130k and ships in 12 to 16 weeks, which at 40 recruiters usually means the submission engine and the timesheet-to-invoice chain running alongside Bullhorn. A full platform that becomes your operational system of record runs $150k to $400k phased over 6 to 12 months. The biggest cost drivers are VMS portal integrations at roughly $12k to $30k each, payroll complexity if you run multi-state W-2 contractors, and compliance depth in verticals like healthcare. These are Digital Heroes delivery bands across 2,000+ projects.
Should we build custom software or just stay on Bullhorn?
Stay on Bullhorn if you are under roughly 25 recruiters, mostly perm, mostly direct clients, without heavy VMS exposure, because your problems at that scale are process problems and software will not fix them. Build when you have more than 150 active contractors, three or more VMS portals your recruiters are double-keying into, and a full-time person reconciling timesheets and invoices. The clearest case is contract staffing at volume, where recovering 2 margin points on $30 million of contract revenue is $600,000 a year against a build in the low hundreds of thousands.
Can we keep Bullhorn as our ATS and build custom software on top of it?
Yes, and for most agencies that is the right first phase. Bullhorn stays as the candidate and job order store while the new system owns submission workflow, per-client formatting, rate rules and invoicing, with a defined sync between them. This lets you fix the expensive leaks in 12 to 16 weeks without a risky big-bang migration, and you make the full migration decision later with real usage data instead of a guess.
How long does it take to migrate our data off Bullhorn?
The technical extraction takes days; the hard part is data interpretation, which typically runs 4 to 8 weeks in parallel with development. Agencies at scale usually have a high duplicate rate and custom fields that different offices used to mean different things, so someone has to make decisions about what each field actually represents. Budget for a data owner on your side to answer those questions, because a developer cannot decide what your Chicago office meant by 'Status 4' in 2019.
Will custom software integrate with Fieldglass, Beeline and our MSP portals?
Yes, but treat each portal as its own project rather than a checkbox. Fieldglass and Beeline have APIs and partner processes, while smaller regional MSP portals often have neither, which means a maintained headless integration and an ongoing support burden when they change their interface. Budget $12k to $30k per portal and start with the two that carry the most volume rather than trying to cover all of them in phase one.
Do we own the code if we pay an agency to build our recruiting platform?
You should own the repository, the infrastructure and the intellectual property outright, with no runtime license on software you paid to build, and this should be in the contract before kickoff. Get the cloud accounts in your organization's name from day one, not migrated later. Ask any prospective developer what happens if you part ways in month seven; the answer should involve handing over documentation, not negotiating leverage.
Where does AI actually help a recruiting agency versus being a gimmick?
Three places pay for themselves: extracting rate terms and clauses from executed MSA and SOW PDFs into structured, reviewable data with page-level citations; chasing timesheet approvals with contextual escalation, which directly moves your days sales outstanding; and after-hours SMS conversations that can genuinely book an interview slot or confirm a shift against live requisition data. The failure mode is letting a model write to production without human confirmation on anything commercial. Resume screening scores and AI-written outreach are where most agencies waste money.
How do we handle compliance and credential tracking for healthcare staffing?
You model each credential as its own record with issuing body, expiry date and verification source, then block submission automatically when something is missing or expiring inside the assignment window. This is materially more expensive to build than IT staffing because of audit trail requirements and Joint Commission expectations, so factor it into the upper end of the cost band. The payoff is that compliance becomes enforced by the system rather than remembered by a coordinator.
Why can't Bullhorn Automation or Sense solve our submission tracking problem?
Both work on self-reported status changes, so they can nag a recruiter to update a field but cannot independently verify that a client ever received or opened a submission. That means your pipeline report reflects what recruiters clicked, not what happened, and closed requisitions in an MSP portal can survive in your forecast for days. A custom build tracks submission as verified events, using tracked delivery artifacts and scheduled requisition state pulls from the portals themselves.
How long does it take to build a custom web or mobile app from scratch?
Plan on 8 to 16 weeks for a focused first version and 4 to 9 months for a larger platform, which is the typical spread across Digital Heroes builds. The first 2 to 3 weeks go to discovery and design before any production code ships. The two things that stretch timelines most are integrations with legacy systems and slow feedback from your side, not developer speed.
How long does it take to build a custom HR system?
A working first version takes 12 to 16 weeks in Digital Heroes projects: employee records and onboarding first, then time off and reporting. A full platform with applicant tracking, performance reviews, and payroll integration is a 6 to 9 month effort. Anyone quoting a complete HR suite in 4 weeks is describing a template, not custom software.
Can I build my product on a no-code tool like Bubble instead of hiring developers?
For testing whether anyone wants the product, yes, and Bubble's paid plans start at $29 a month, which is the cheapest validation you will ever buy. The ceiling arrives with complex data relationships, heavy integrations, performance at a few thousand users, and the fact that you cannot export a Bubble app to servers you control. A path many Digital Heroes clients take: prove demand on no-code, then rebuild custom once revenue justifies it, treating the no-code version as a paid prototype rather than a foundation.
When does Gusto's per-person pricing stop making sense?
Gusto's Plus plan lists at $80 per month plus $12 per person, so a 250-employee company pays roughly $37,000 a year for workflows it cannot change. The common fix is keeping Gusto for payroll, which it does well, and building custom software for onboarding, scheduling, and PTO around it through Gusto's API. That caps the subscription at payroll only while the workflows finally match how you operate.
What would it cost to build just one HR module, like leave management or onboarding?
A single well-scoped module such as leave management, onboarding checklists, or a review cycle tool usually costs $8,000 to $25,000 and ships in 4 to 8 weeks in Digital Heroes projects. This is the cheapest way to fix the one workflow BambooHR or Gusto handles badly without replacing the whole system. The module reads and writes through your existing platform's API, so nothing gets migrated.
Can we migrate years of data out of our current system into new custom software?
Almost always yes, through CSV exports or the vendor's API, and migration should be scoped as its own workstream with field mapping, a dry run, and a planned cutover window rather than an afterthought. The real time sink is rarely moving the data; it is cleaning it, since years of duplicates, free-text fields, and inconsistent formats surface all at once. Pull a full export from your current vendor before committing to anything new, because some SaaS plans restrict exports on lower tiers.
Who owns the code if an agency builds our HR software?
You should own it outright, with the contract assigning full intellectual property to you on final payment and the code living in a repository you control from week one. Watch for agencies that license you their platform, because that recreates the vendor lock-in you left BambooHR to escape. Digital Heroes assigns 100 percent of custom code to the client; the only carve-outs should be standard open source libraries.
What does it cost to keep custom software running after launch?
Budget 15-20% of the original build cost per year, which on a $100,000 system means $15,000 to $20,000 for security patches, dependency updates, bug fixes, and small improvements as real usage reveals what the spec missed. Cloud hosting for a typical business application adds $50 to $300 a month on top. Skipping maintenance does not save the money; in Digital Heroes rescue work, unmaintained systems typically need a far more expensive rebuild within about three years.
Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?