Work sample 13 / 14AI agent integration

Semantic search across job history, quotes and site notes, by role

How I'd approach plain-language search over years of job history for a multi-branch service group, with each person's branch and role applied before the search runs, and every answer linked to its source job.

Worked example on representative data.

Area
AI agent integration
Tools
ServiceM8 or Jobber · AI search
Typical scope
US$3,500–5,000
Timeline
About 6 weeks · 4 fixed milestones

01Context

An established service group with several branches and years of job history: quotes, invoices, job notes and site notes written by technicians and coordinators. Jobs are run in ServiceM8 or Jobber.

The systems in play

In the example the group wants staff to ask a question in plain language and get an answer with a link to the source job, while each person sees only what their role allows.

Table 1Who uses what
SystemWhat it does for the business
ServiceM8 or JobberThe source of jobs, quotes, notes and sites. It is read, never changed.
Search indexA copy of the text of each record, prepared so a question finds records by meaning, not only by exact words. It lives on infrastructure the group controls.
Access listWho the staff are, their branch and their role. It decides what each person is allowed to search.
Search pageWhere staff ask a question and see the answer, the matching records and a link to each source job.

02Problem

What the owner sees

  1. Staff who cannot find what was agreed on a site two years ago
  2. Prices quoted again from memory
  3. Branch knowledge that leaves with the person
  4. Fear that a search tool shows pricing or other branches to the wrong person

Keyword search misses a record that uses different words. A search that ignores permissions solves one problem and creates another.

Table 2Where the drift starts
Everyday situationWhat goes wrong
Different wordsA note says "plant room key with caretaker" and the search is for "access"
Same site, several spellingsThe history is split across entries for one address
Edited quotesSeveral versions exist and the search returns the wrong one
Photo-only notesThe useful detail is in a photo with no text
PricingA coordinator should find the job but not the margin or the price
Other branchesA coordinator should not see another branch’s customers

03Approach

Four steps, in this order. Each one ends with a result that is checked.

  1. LookA read-only review of the records, how notes are written and who needs to find what. Nothing is changed.
  2. Agree the access rulesWhich role sees which branch, and which fields, are written down and approved.
  3. Build and connectRecords are prepared with their branch and role labels, and the filter is applied before any search runs.
  4. CheckTest questions with known answers, a permission test for each role, and a log of wrong or empty answers.
Table 3Access rules agreed in writing (example settings)
RoleBranchesPricing and marginCustomer contact details
TechnicianOwn branch, own jobs and site notesHiddenHidden
CoordinatorOwn branchHiddenShown
Branch managerOwn branchShownShown
Owner or financeAll branchesShownShown

04What the setup includes

What the setup includes, and why each piece is there. The detail of how it is configured is agreed in the scoping call.

Show the setup, layer by layer
Table 4The setup, layer by layer
LayerWhat is set up and why
Read-only exportJobs, quotes, invoices and notes are read on a schedule. The job system is never written to.
Record preparationEach record is cut into readable pieces and labeled with its job, site, branch, date and version.
Access labelsBranch and role labels are attached to every piece. Price fields sit in a separate piece, labeled for managers only.
Filter before searchThe person’s role is applied first, so a record they may not see is never a candidate for an answer.
Answer with sourcesThe answer is written only from the matching records, and each one links to its source job. If nothing matches, it says so.
RefreshNew and edited records are picked up daily. Deleted or archived jobs are removed.
Query logWho asked, in which role, and which records were shown. It is kept for review.

How the data moves

  1. Job record read
  2. Prepared and labeled with branch and role
  3. Question asked
  4. Role filter applied
  5. Search
  6. Answer with links to source jobs
  7. Question logged

05Edge cases

These are agreed with the operations manager and tested in the permission tests.

Table 5Edge cases and how each is handled
SituationHow it is handled
Duplicate sitesAddresses are normalized and grouped. Records for the same site are shown together, with a list of the merged spellings for a person to confirm.
Edited quoteThe latest version is returned. Earlier versions are kept, dated and labeled, and are shown to managers only.
Photo-only noteIndexed by its job, caption and date. It appears on a "photo only" list, because the text in the photo is not read.
Price asked by a coordinatorThe job is found. The answer says that pricing is held by managers.
Question about another branchNothing is found. The answer says nothing matched within the person’s access.
Person changes branch or roleAccess is refreshed daily and checked again at the time of each question
Customer contact detailsRemoved from the search text. They are shown from the job only to roles that may see them.
Conflicting recordsBoth are shown with their dates. The answer does not choose between them.
Company with its own job systemLabeled with a company, and only searched by people with access to that company
Who asked whatEvery question, role and result is in the query log, and changes to access rules are approved and dated

06Worked example

The tables below use representative data. They show the shape of the tests, not a client result. No accuracy figure is claimed.

Table 6Test questions with known answers (sample rows)
QuestionAsked asExpectedResult
What was agreed about access to the plant room at Elm Street?North coordinatorNote on job J-3188, with a linkPass
What did we quote for the roof drainage at Lakeview?North coordinatorJob found, price hiddenPass
What did we quote for the roof drainage at Lakeview?North branch managerQuote Q-5531 at US$12,400, version 3Pass
Any notes on the Harbour Road site?South coordinatorNothing found within accessPass
What does the note on job J-3190 say?North technicianListed as photo only, with the captionPass, noted limit
Table 7Permission test by role (sample rows)
TestTechnicianCoordinatorBranch managerOwner or finance
Another branch’s notesBlockedBlockedBlockedShown
Price on a quoteBlockedBlockedShownShown
Customer phone numberBlockedShownShownShown
Earlier quote versionsBlockedBlockedShownShown
Table 8Log of wrong or empty answers (sample rows)
DateQuestionProblemAction
Week 1Access code for the Cedar Street gateEmpty: the code was only in a photoAdded to the photo-only list
Week 2Who serviced the boiler at Mill Lane in MarchWrong site: similar addressAddress spellings grouped
Week 3Insurance details for Park AvenueEmpty: not a job recordOut of scope, noted

07How the result is checked

Permissions are checked first, because they are the failure that matters most. Quality checks follow, with a log that keeps the weak spots visible.

Table 9Checks and pass conditions
CheckHowPass condition
Permission testEvery role asks the same questions across branches and price fieldsNo result outside the role’s access
Known answersA set of questions with answers agreed in advanceEach expected job is returned, or the miss is logged
SourcesEvery answer is compared to the records it links toEach statement is backed by a linked record
No matchQuestions with no answer in the dataThe answer says so and does not guess
RefreshA record is edited, deleted and archivedThe search reflects each change by the next day
After go-liveThe query log is reviewed on a scheduleWrong or empty answers are listed with an action

08Scope and milestones

A fixed scope agreed in writing before anything starts. Each milestone is paid when you sign off its deliverable.

Table 10Scope: what a project like this covers
AreaIncluded
Health CheckReview of the records, note-writing habits and who needs to find what, a 45-minute call, written findings and a fixed quote
Access rulesRoles, branches and field rules in writing, approved by the owner
Read-only connectionA scheduled read of jobs, quotes, invoices and notes
Search and answersSearch that applies the role filter first, with answers linked to source jobs
Test setKnown-answer questions and a permission test for each role
Query logA log and a review routine for wrong or empty answers
HandoverWritten SOPs, a recorded walkthrough and files you own, plus 14 days of fixes after go-live
Not includedTax filing or payroll.
Also outside the scopeHosting and running costs of the search service. Reading text inside photos. Changing permissions in the job system. Software subscriptions (billed to you by the vendors).
Table 11Fixed milestones
MilestoneDeliverableTimingShare
M1 Health Check and access rulesFindings, a fixed quote and the access rules in writingWeek 120%
M2 Read-only connection and preparationRecords read, labeled and refreshed dailyWeeks 2 to 330%
M3 Search and permissionsAnswers with sources, permission tests pass for every roleWeeks 4 to 535%
M4 Test set and handoverKnown-answer test set, query log, SOPs, walkthrough, 14 days of fixesWeek 615%

Typical scope for this kind of project: US$3,500–5,000

About 6 weeks across 4 fixed milestones. The Systems Health Check (US$300, fixed) comes first and confirms the scope.

Describe the process you want handled, and I'll say where I'd start.

Send a short note through the form on the home page. I will reply with where I would start, and whether the US$300 Systems Health Check is the right first step.