Executive search / Recruiting · Captivate Talent
Almost a year fighting HubSpot. Rebuilt on Attio in two weeks.
Captivate Talent is a US executive search firm placing GTM and RevOps leaders. They had spent close to a year, and a lot of money, trying to make HubSpot model a business where the sale ends at signature and the real work starts there. We rebuilt it on Attio in two weeks: five objects, two independent pipelines on one deal, six integrations, nightly rollups, and six AI agents that can each write one thing and nothing else.
Full rebuild
Engagement
2 weeks
Build time
1,142
Searches modelled
$14.3M
Fees reconstructed
387
Placements recovered
6
Integrations live
6
AI agents
The problem.
HubSpot had been fought for almost a year, and the mismatch was structural rather than a configuration problem. In HubSpot the deal is the sale, and it ends when the money is agreed. In executive search the sale ends at signature, and the work that earns the fee, sourcing, shortlist, offer, start date, the guarantee period, all happens afterwards on the same record.
So one search has to carry two independent states at once. No amount of pipeline configuration made that clean. Nor did the second rule of the business: a client who hires you three times is three deals under one company, not one account with a bigger number on it.
The money had the same problem. Three different figures were all being called revenue: the fee actually earned, the contract value on paper, and the estimate on unsigned work. Added together they produce $31.6M for a business that has booked $14.3M.
And the history lived in the ATS, not the CRM. A search is only created in the ATS once a contract is signed, so 51 of 58 live searches had no CRM record at all. Signed clients were sitting in the pipeline looking like prospects.
Objectives.
- Model one search as one deal, so a repeat client stacks deals under one company instead of overwriting an account.
- Run the sales ladder and the delivery ladder on the same record without either overwriting the other.
- Name one field as the real revenue number, and make every report use it.
- Pull the ATS, the e-signature tool, the website form and the event platform into Attio, so nothing is retyped.
- Reconstruct the history that never made it out of HubSpot: placements, fees, referrers, regions.
- Put AI to work with hard write limits, so no agent can ever overwrite a number a human chose.
The data model.
Five objects. That is the whole model, and the discipline is as much in what is deliberately kept out of it.
Deals
One search: one role, for one client, at one time. Carries both ladders, the three money fields kept strictly apart, the guarantee clock, and a Replaces Deal link so a free replacement search points back at the original without booking the same fee twice.
Companies
Client, prospect, investor or fractional partner, with ICP fit and the recurring friction that makes an account hard to work. Lifetime fees, placements, searches won and open searches are calculated nightly, never typed.
People
Hiring managers, VC partners, event guests, and the 314 people the firm has actually placed. Candidate names never cross from the ATS. Someone placed years ago who is now a hiring manager is the warmest lead in the business, and is now a filter rather than a memory.
Referral Partners
The 81 sources that send business, with referrals sent, revenue influenced and last referral date rolled up from the deals they touched.
Events
46 dinners, conferences and happy hours, with guest lists split into registered, checked in and declined, and a flag for whether Captivate hosted or simply attended.
The two ladders.
The idea the whole model turns on. A deal moves along both at once, and Closed Won does not mean finished. It means sold.
Deal Stage — are they going to pay us
Interest Expressed, Discovery Call, Proposal and Fee Agreed, Contract Sent, then Closed Won or Closed Lost. This ladder stops the moment the contract is signed.
Delivery Status — how is the work going
Search live, Shortlist out, Offer out, Placed, In guarantee, Complete, plus Replacement in progress, Failed to place and On hold. This ladder only starts once the deal is Closed Won.
What feeds the workspace.
Six systems write into Attio. Attio writes back to none of them, and the ATS in particular is never touched.
Stardex (the ATS)
A candidate marked Hired fires a webhook that writes the placement start date, the real fee and the guarantee end onto the matching deal. A nightly pull creates deals for live searches that had none, which is how 51 signed clients stopped looking like prospects.
HelloSign
Polled nightly rather than webhooked, deliberately, so nothing had to be authorised on anyone else's side to turn it on. A contract out for signature moves the deal to Contract Sent, and creates the deal when the client is known but the role has none.
Typeform
A website enquiry creates the company, the person and a deal at Interest Expressed. The answers are stored as raw text first; classifying them into fields is a separate step that can be rerun without ever losing what the person actually wrote.
Luma
Event guest lists sync onto Event records: registered, checked in, declined.
Gmail and Google Calendar
Attio's native sync gives every record a real last-contact date, which is what turns "this account has gone quiet" from a feeling into a filter.
Metaview
After a discovery call, the transcript fills role title, target salary, fee percentage, practice area, search type and the referrer, and attaches the summary as a note.
Six agents, each with a hard limit.
Every agent may write one defined thing and nothing else. An agent that can edit anything will eventually edit something wrong, and then nobody can tell which field a human chose and which one a robot guessed.
Discovery-call fill
Fills what the call agreed, and never overwrites a field that already holds a value. If the call contradicts the record, it says so in the note and leaves the record alone. A human who typed a number had a reason; a transcript is a rough draft.
Search summary
Turns ATS pipeline state into one client-readable line on the deal: "1 at offer, 3 interviewing and 30 sourced." No candidate name crosses over. If it cannot verify a count it writes "over 30" rather than asserting a number, because a missing summary reads as a quiet pipeline.
Weekly report
Monday 7am New York into Slack: fees booked, placements, forecast, which referral partners drove them, what is stuck. It never invents a number, never posts twice, and still posts on a quiet week, because silence looks like a broken job.
Client prep brief
On a new enquiry it reads the account, its whole history and the web, then writes one note with 6 to 8 discovery questions. Every claim carries its source, anything it could not establish is written as "unknown", and it changes no field.
Salary feasibility
Flags compensation below market when the target salary is materially under the median for the role's own location, not the company's head office. Never on a single source, and only when the field is empty.
Nightly rollups
Recalculates every derived number in the workspace, and refuses to write if it reads suspiciously few records, so a half-loaded night looks broken instead of looking like a bad week.
The three money words.
Fees booked all time is $14.3M. Deal value on paper is $17.3M. The pipeline estimate is a guess on unsigned work. All three describe the same business, so a report showing $31.6M is wrong. Naming them and forbidding their addition removed the single most common cause of a wrong number in front of a client. Replacement searches are excluded from every fee total, because the money stayed on the original deal, but they still count in open searches, since that work is real and eats capacity while earning nothing.
Results.
- One search, one deal. A repeat client stacks searches under one company instead of overwriting a single account.
- Two independent pipelines on one record, sales to signature and delivery from signature, so Closed Won can never be mistaken for finished.
- $14.3M of historical fees, 387 placements and 314 placement alumni reconstructed from the ATS and the HubSpot export.
- Region rebuilt from country across 1,026 companies, and coverage moved onto the deal where the decision actually belongs.
- Six integrations live, with candidate data deliberately kept out of the CRM. What lands on a deal is something a client could read over your shoulder.
- Nightly rollups that refuse to run on a partial read, and scripts that are dry-run by default, because more than one definition was wrong the first time and only the dry run caught it.
- A full runbook handed over: field glossary, report definitions, workflow catalogue, integration map, and a practical guide written so a new joiner can use the system on day one.
“George is an absolute GEM - I am so glad we found him. We'd been struggling for almost a year, trying to get HubSpot set up to do what we wanted it to do (and spending way too much money in the process). George set it all up within two weeks beyond what we could have dreamt. He's an incredible data architect and will think through your unique business use case and the best way Attio can bring that to life. I couldn't recommend him more!!”
Danielle Parker
Captivate Talent
Ready when you are.
Two ways in. Pick the friction that fits.