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.
| System | What it does for the business |
|---|---|
| ServiceM8 or Jobber | The source of jobs, quotes, notes and sites. It is read, never changed. |
| Search index | A 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 list | Who the staff are, their branch and their role. It decides what each person is allowed to search. |
| Search page | Where staff ask a question and see the answer, the matching records and a link to each source job. |
02Problem
What the owner sees
- Staff who cannot find what was agreed on a site two years ago
- Prices quoted again from memory
- Branch knowledge that leaves with the person
- 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.
| Everyday situation | What goes wrong |
|---|---|
| Different words | A note says "plant room key with caretaker" and the search is for "access" |
| Same site, several spellings | The history is split across entries for one address |
| Edited quotes | Several versions exist and the search returns the wrong one |
| Photo-only notes | The useful detail is in a photo with no text |
| Pricing | A coordinator should find the job but not the margin or the price |
| Other branches | A coordinator should not see another branch’s customers |
03Approach
Four steps, in this order. Each one ends with a result that is checked.
- LookA read-only review of the records, how notes are written and who needs to find what. Nothing is changed.
- Agree the access rulesWhich role sees which branch, and which fields, are written down and approved.
- Build and connectRecords are prepared with their branch and role labels, and the filter is applied before any search runs.
- CheckTest questions with known answers, a permission test for each role, and a log of wrong or empty answers.
| Role | Branches | Pricing and margin | Customer contact details |
|---|---|---|---|
| Technician | Own branch, own jobs and site notes | Hidden | Hidden |
| Coordinator | Own branch | Hidden | Shown |
| Branch manager | Own branch | Shown | Shown |
| Owner or finance | All branches | Shown | Shown |
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
| Layer | What is set up and why |
|---|---|
| Read-only export | Jobs, quotes, invoices and notes are read on a schedule. The job system is never written to. |
| Record preparation | Each record is cut into readable pieces and labeled with its job, site, branch, date and version. |
| Access labels | Branch and role labels are attached to every piece. Price fields sit in a separate piece, labeled for managers only. |
| Filter before search | The person’s role is applied first, so a record they may not see is never a candidate for an answer. |
| Answer with sources | The answer is written only from the matching records, and each one links to its source job. If nothing matches, it says so. |
| Refresh | New and edited records are picked up daily. Deleted or archived jobs are removed. |
| Query log | Who asked, in which role, and which records were shown. It is kept for review. |
How the data moves
- Job record read
- Prepared and labeled with branch and role
- Question asked
- Role filter applied
- Search
- Answer with links to source jobs
- Question logged
05Edge cases
These are agreed with the operations manager and tested in the permission tests.
| Situation | How it is handled |
|---|---|
| Duplicate sites | Addresses 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 quote | The latest version is returned. Earlier versions are kept, dated and labeled, and are shown to managers only. |
| Photo-only note | Indexed 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 coordinator | The job is found. The answer says that pricing is held by managers. |
| Question about another branch | Nothing is found. The answer says nothing matched within the person’s access. |
| Person changes branch or role | Access is refreshed daily and checked again at the time of each question |
| Customer contact details | Removed from the search text. They are shown from the job only to roles that may see them. |
| Conflicting records | Both are shown with their dates. The answer does not choose between them. |
| Company with its own job system | Labeled with a company, and only searched by people with access to that company |
| Who asked what | Every 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.
| Question | Asked as | Expected | Result |
|---|---|---|---|
| What was agreed about access to the plant room at Elm Street? | North coordinator | Note on job J-3188, with a link | Pass |
| What did we quote for the roof drainage at Lakeview? | North coordinator | Job found, price hidden | Pass |
| What did we quote for the roof drainage at Lakeview? | North branch manager | Quote Q-5531 at US$12,400, version 3 | Pass |
| Any notes on the Harbour Road site? | South coordinator | Nothing found within access | Pass |
| What does the note on job J-3190 say? | North technician | Listed as photo only, with the caption | Pass, noted limit |
| Test | Technician | Coordinator | Branch manager | Owner or finance |
|---|---|---|---|---|
| Another branch’s notes | Blocked | Blocked | Blocked | Shown |
| Price on a quote | Blocked | Blocked | Shown | Shown |
| Customer phone number | Blocked | Shown | Shown | Shown |
| Earlier quote versions | Blocked | Blocked | Shown | Shown |
| Date | Question | Problem | Action |
|---|---|---|---|
| Week 1 | Access code for the Cedar Street gate | Empty: the code was only in a photo | Added to the photo-only list |
| Week 2 | Who serviced the boiler at Mill Lane in March | Wrong site: similar address | Address spellings grouped |
| Week 3 | Insurance details for Park Avenue | Empty: not a job record | Out 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.
| Check | How | Pass condition |
|---|---|---|
| Permission test | Every role asks the same questions across branches and price fields | No result outside the role’s access |
| Known answers | A set of questions with answers agreed in advance | Each expected job is returned, or the miss is logged |
| Sources | Every answer is compared to the records it links to | Each statement is backed by a linked record |
| No match | Questions with no answer in the data | The answer says so and does not guess |
| Refresh | A record is edited, deleted and archived | The search reflects each change by the next day |
| After go-live | The query log is reviewed on a schedule | Wrong 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.
| Area | Included |
|---|---|
| Health Check | Review of the records, note-writing habits and who needs to find what, a 45-minute call, written findings and a fixed quote |
| Access rules | Roles, branches and field rules in writing, approved by the owner |
| Read-only connection | A scheduled read of jobs, quotes, invoices and notes |
| Search and answers | Search that applies the role filter first, with answers linked to source jobs |
| Test set | Known-answer questions and a permission test for each role |
| Query log | A log and a review routine for wrong or empty answers |
| Handover | Written SOPs, a recorded walkthrough and files you own, plus 14 days of fixes after go-live |
| Not included | Tax filing or payroll. |
| Also outside the scope | Hosting 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). |
| Milestone | Deliverable | Timing | Share |
|---|---|---|---|
| M1 Health Check and access rules | Findings, a fixed quote and the access rules in writing | Week 1 | 20% |
| M2 Read-only connection and preparation | Records read, labeled and refreshed daily | Weeks 2 to 3 | 30% |
| M3 Search and permissions | Answers with sources, permission tests pass for every role | Weeks 4 to 5 | 35% |
| M4 Test set and handover | Known-answer test set, query log, SOPs, walkthrough, 14 days of fixes | Week 6 | 15% |
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.