OpenAI read each tender against the knowledge base of past bids and the specification of the work the company wanted, then estimated the typical bid. The aim sits a little under it, to raise the odds of winning. The estimator still set the price.
BProcess mapThree lanes, drawn before anything was automated
The tender process, as mapped before anything was automatedredrawn from the client’s own map · anonymised
Drag to move around · + to zoom
AutomatedBy handA decisionRework: work travelling backwards
Three lanes: admin, the department head and the estimator. The two bottlenecks the map exposed were the outsourced-estimator rework loop and the 24-hour wait with a manual chase.
CTender engineA call and a tender pack, turned into the brief the estimator prices from
From a call and a tender pack to the estimator’s briefillustrative · fictional tender
The call, transcribedWhisper
ClientIt’s the science block. Three floors, and the boilers are the originals.
UsAnything else on the heating side?
ClientTwo of the labs have no extract at all. That’s the priority.
UsAnd the electrical side?
ClientNew distribution boards, and LED lighting with controls throughout.
UsWill the building be in use?
ClientIn term time, yes. Anything noisy has to happen in the holidays.
ClientWe need the return by the 14th, with a programme.
▸
Structured requirementsOpenAI
Project
Science block refurbishment, three floors
Mechanical
Replace the original boilers · New extract to two labs, the priority
Electrical
New distribution boards · LED lighting with controls
Constraints
In use during term · Noisy works in the holidays only
Return
The 14th, with a programme
To clarify
Is there an asbestos survey? · Out-of-hours access?
Scope brief, from the tender packDrawings readMechanical specificationElectrical specificationExclusions listedProgramme required
The estimator prices from this brief. The number, and the acid test, stay with people.
Hands-on timestated
Hands-on time per tender18–24h → 2–3h6–8 hours each across three people → 2–3 hours in total
Parallel runstated
Tested before go-live5 live tendersrun through each build beside the manual process
DCRM + automationsEvery automation on one canvas, read from the live account
The system: where data starts, what moves it, where it landsread from the live account · anonymised
Hover a family to light up its connections and list its automations.
Every step of all 25, as they runread from the live account · anonymised
Drag to move around · + to zoom
Each card is one automation, its trigger at the top. Green steps start a conditional path: one path per line of a timesheet, an expense claim or a variation, so every line lands on the right job.
Tender sites
The sites where tenders are posted, checked automatically for new ones.
Before, the only tenders anyone saw were the ones that reached the inbox.
Scrape
Each new tender is collected with:
Title and scope
Buyer and location
Value band
Return date
The tender documents
Match past bids
OpenAI compares each tender with an internal knowledge base of the bids the company had already made.
So the team sees how close a new tender is to work it has priced before.
Check the spec
It then checks the tender against the specification of the jobs the company wanted to win.
Worth bidding?
Tenders that fit go forward to the team. The rest are set aside, with the reason recorded.
Estimate bid
OpenAI estimates the typical bid for a job like this, from the knowledge base of past bids.
The team could then aim a little under the typical figure, to raise the odds of winning.
The estimator still set the price.
Tenders pipeline
Tenders worth bidding for go into Pipedrive's tenders pipeline, one deal each.
Return date added to the shared calendar
Logged on the tenders register
Tender email
A tender arrives by email.
Set up in CRM
Admin sets up the tender in Pipedrive, filling in 4 of 5 key fields.
Accept?
The department head accepts or rejects the tender.
Rejected: an automated decline email, and the job ID archived
Accepted: a confirmation email to the client
In-house?
Price the job in-house, or send it to an outsourced estimator.
Estimator prices
An outsourced estimator prices the job and sends it back.
If the estimator declines, a different one has to be found.
Acid test
The department head reviews the estimate against an acid test.
Two people described this process differently and both were right. They owned different lanes, and neither could see the handover where the time went.
Assemble + send
The pricing document is assembled by hand, reviewed by leadership and sent.
Wait + chase
Admin waits 24 hours, then chases for confirmation that it arrived.
The second bottleneck: a person's attention held on a timer.
Job scheduled
Confirmed by the client, and the job scheduled.
Red rework loop
A failed estimate went back to find a different estimator, and the job restarted from the brief.
The long pole in the process, and the first bottleneck the map exposed.
Call + tender pack
The client call is recorded, and the tender documents come in.
Transcribe
Whisper transcribes the call recording.
Requirements
OpenAI turns the transcript into structured tender requirements.
Replaced a person typing up a call, then a second person interpreting the write-up.
Scope brief
OpenAI extracts the scope from the tender documents into a brief the estimator prices from.
Replaced reading a tender pack cover to cover to write the same brief by hand.
Estimator prices
The number itself stays with the estimator.
Pricing judgement was left manual on purpose, and it was decided up front.
Acid test?
The department head keeps the acid-test review.
Automate the assembly and leave the judgement where the consequences land.
Pricing document
Drafted from the brief and the returned price.
Assembly by hand was where the department head's hours had gone.
Send + chase
Sent, then the receipt chase runs itself on the 24-hour timer.
Pipedrive automationsZapier
~25 a month
Tenders applied to a month rose from an average of 8 to about 25, at 12 to 15% conversion throughout.
Hands-on time per tender fell from 6 to 8 hours each across three people to 2 to 3 hours in total.
measured, the client's own CRM · hours statedSite + accounts
Where the data starts:
Timesheets, expenses and variations, on forms from site
Bills, invoices and payments in Xero
Supplier bills in the accounts inbox
25 automations
Zapier moves each item to where it belongs.
251 steps
30 conditional paths
8 apps connected
Tag the job
Formatter steps pull the job ID out of every reference, form and file name, so each cost lands on the right job.
100 of the 251 steps are clean-up like this.
Job costing
A workbook of money in and money out, by job:
Bills received and paid
Invoices sent and paid
Staff expenses
Timesheets
Variations
Plus registers of tenders, jobs, clients, suppliers and the team, kept in step with the CRM.
Back to the deal
When the workbook's calculations update, the job's deal in Pipedrive is updated to match.
One record a job
The Pipedrive deal holds:
The pipeline, tender and job record
Bills, receipts, timesheets and variations, attached
Calls and meetings transcribed onto the record
Tender return dates on the calendar
Simple dashboards
Dashboards kept deliberately simple: each person sees what they need for their own job.
Each person could see their own contribution, and that is what drove the volume.
Clarity
Everyone looked at the same record, and a second person could pick up a live job and see the whole thread.
observedSupplier bills
7 automations, 57 steps.
Bill arrives in the accounts inbox: saved to Drive
Bill filed in Drive: attached to the job, sent to Hubdoc
Materials bill in Xero, to the money-out sheet
Specialised labour bill in Xero, to the money-out sheet
Plant hire bill in Xero, to the money-out sheet
Bill paid in Xero, to the money-out sheet
Invoice email parsed: attached to the job's deal
Client invoices
2 automations, 18 steps.
Invoice sent in Xero, to the money-in sheet
Invoice paid in Xero, to the money-in sheet
Staff expenses
3 automations, 39 steps, 10 conditional paths.
Expense form, lines 1 to 5, to the money-out sheet
Expense form submitted: receipts to the job, Drive and Hubdoc
Receipt filed in Drive: sent to Hubdoc, split
Timesheets
4 automations, 66 steps, 10 conditional paths.
Timesheet, lines 1 to 5, to the timesheet sheet
Timesheet, lines 6 to 10, to the timesheet sheet
Supervisor's line, to the timesheet sheet
Timesheet submitted: attached to the job, Slack alert
Variations
2 automations, 33 steps, 5 conditional paths.
Variation form, lines 1 to 5, to the money-in sheet
Variation submitted: attached to the job, Slack alert
CRM registers
5 automations, 32 steps, 5 conditional paths.
Open tender deal, to the tenders register
Won job deal, to the jobs register
Client organisation, to the clients register
Supplier organisation, to the suppliers register
Team member, by role, to the team register
Tender return dates
1 automation, 3 steps.
Tender return date set: calendar event
Costs to the deal
1 automation, 3 steps.
Job costs recalculated: the job's deal updated
5 live tenders
Five live tenders were run through each build beside the manual process, and the outputs compared before anything replaced it.
Issues found in that window were fixed before go-live.
Founder first
The founder learns it first.
Laptops open
Then the team, in a room, with laptops open.
Setup done before the session
A guide sent out in advance
Demonstrate
Peter does it while they watch.
Duplicate
They do it while he watches.
Delegate
They do it, and he is out of the room.
Champion
One champion inside the business becomes the first line for everybody else.
A year on
Still running unchanged a year later.
observedDrop back a layer
If growing pains appear, drop back a layer.
The return path is the whole method, and it is why people keep going instead of quietly going back to email.
Sell · Deliver · Train
Every engagement has the same shape:
Sell: finding the real problem, and winning the work
Deliver: building what fixes it
Train: handing it over so the team runs it
When a client gets the value they want, they're more inclined to do more.
Once they see what is possible, they bring their own ideas to the table, ready to be implemented.
Find tenders
A scraper collects new tenders from the sites where they are posted.
Before, the only tenders anyone saw were the ones that reached the inbox.
Qualify + size
OpenAI reads each tender against:
A knowledge base of the company's past bids
The specification of the work it wanted to win
It also estimates the typical bid, so the team can aim a little under it and raise the odds of winning.
Draft the brief
Whisper transcribes the client call. OpenAI turns it into structured requirements, and the tender pack into a scope brief.
Replaced reading a tender pack cover to cover to write the same brief by hand.
Estimator prices
The number stays with the estimator, and the department head keeps the acid test.
Automate the assembly and leave the judgement where the consequences land.
Assemble + chase
The pricing document is drafted from the brief and the price, then sent.
The receipt chase runs itself on a 24-hour timer
~25 a month
Tenders applied to a month rose from an average of 8 to about 25, at 12 to 15% conversion throughout.
measured, the client's own CRMCRM + 25 automations
Pipedrive holds one record per job. 25 Zapier automations tie every bill, invoice, expense, timesheet and variation to it.