Skip to main content
In production · Canadian unions and HR teams

Sertus — AI for Canadian labour relations.

Built for the people who file grievances, prepare for arbitration, and bargain the next contract. Every answer traces back to an article number in the agreement they are actually working from.

In productionCanadian dataLabour RelationsRAG architecture
Monday · 7:42 AM

A steward opens their laptop. A member called at 7:20 about a discipline meeting scheduled for 9. The question is whether the notice complied with Article 23.4 of the agreement between Local 418 and the employer — specifically the version that took effect after the last bargaining cycle, not the one in the binder on the shelf.

Before Sertus, that question meant flipping to the index, finding 23.4, cross-referencing the side letter from 2021, checking whether a recent arbitration decision applied, and deciding within about fifteen minutes whether the meeting should go ahead.

After Sertus, the steward types the question. The answer comes back with the article number, the clause text, and the side letter reference. They verify the citation against the source. They walk into the meeting prepared.

The people who do this work don't want a chatbot. They want a colleague who has read the agreement carefully and can point to the page.

The domain

Why collective agreements resist normal software

A collective agreement is not a document. It is a system.

Each one is 80 to 300 pages of cross-referenced articles, schedules, wage grids, side letters, and memoranda of understanding. Bargaining units inside the same employer hold different agreements with different provisions for the same question. A clause about sick leave means one thing to a nurse covered by an ONA agreement and another to a maintenance worker covered by CUPE Local 3261 — and the difference can decide a grievance.

Procedure is worse. Most agreements set strict time limits on each grievance stage — notice, first step, escalation, arbitration. Miss a deadline by a day and the case is gone, no matter how strong the underlying complaint. Teams tracked these in spreadsheets, in email threads, or in the senior steward's head. When the senior steward retired, institutional memory walked out the door.

That is the problem Sertus was built for. Not “AI for HR.” Specifically the reality that someone on a Monday morning has to give a defensible answer about Article 23.4 and has to be able to show where they got it.

What it does

A colleague who read the whole agreement

Sertus ingests collective agreements as structured documents, not flat PDFs. Articles are parsed into a hierarchy with their tables, schedules, and cross-references preserved. A retrieval layer grounds every AI answer in a specific clause and returns the citation alongside the response. A grievance workflow tracks each case through its defined stages with the time limits pulled from the agreement that actually applies.

The interface is designed to be used by people who are not technical, because that is who uses it. Auditability is the feature the work depends on.

  • Answers questions with the exact article, clause, and page number
  • Cross-references clauses across multiple bargaining units for bargaining prep
  • Tracks grievances across filing, steward review, employer response, mediation, arbitration, and close-out
  • Pulls procedural deadlines from the applicable agreement and flags overdue items
  • Generates meeting talking points grounded in the agreement's own language
  • Logs every AI-generated answer with the retrieval context for supervisor review
  • Stores all data in Canada, designed around PIPEDA
The document pipeline

From PDF to cited answer, in six steps

A collective agreement arrives as a PDF. What we do with it, in order:

  1. 01

    Structured parse

    PDFs move through Docling, running as Cloud Run Jobs with tiered compute — small files (up to 50 pages), medium (51–150), and large (151+) each get separate CPU and memory allocations. Tables come out in two formats: GitHub-flavored markdown for the UI and structured JSON for the retrieval layer.

  2. 02

    Article tree construction

    A post-processor walks Docling's structured output and builds a hierarchical article tree — parent articles, child clauses, schedules, appendices, side letters — with bounding boxes and confidence scores preserved. No off-the-shelf legal parser handles this cleanly, so we wrote our own.

  3. 03

    Embedding

    Each article is embedded at 768 dimensions using a model tuned for Canadian legal language. Embeddings live in pgvector on Cloud SQL. One system, one audit surface.

  4. 04

    Retrieval with prompt caching

    When a user asks a question, Sertus retrieves the relevant articles and calls Claude with ephemeral cache_control on the agreement text. A 200K-token agreement gets cached on the first turn and reused across the conversation — which is what keeps back-and-forth grievance work affordable.

  5. 05

    Structured generation for high-stakes outputs

    Fact extraction, established facts, outcome assessment, and the discipline cache all use Zod-validated generateObject calls rather than freeform text. The output shape is guaranteed; the model does not decide whether a field exists.

  6. 06

    Audit trail

    Every AI-generated answer is persisted alongside the retrieval context — which articles were fetched, which were used, what the user asked, what the model returned. Supervisors can review any interaction any time.

Compliance posture

Built for the supervisor's review

Data residency

All services run in northamerica-northeast2 (Toronto). Nothing crosses the border.

PIPEDA

Designed around PIPEDA and applicable provincial privacy legislation.

Audit logging

Security audit logs record user actions with scope and field-level granularity. AI usage is tracked per token, per model, per user.

Role-based access

Admin, manager, member, viewer — enforced at the organization and bargaining-unit level. Cross-tenant access is blocked at the query layer.

Invitation lifecycle

Users can be invited, pending acceptance, assigned to orgs or bargaining units before full membership. Access is never granted by accident.

Results

What changed after deployment

Research time per clause lookup
45–60 min → under 2 min
Grievance deadline compliance
100% since deployment
New-steward onboarding
3× faster
Bargaining prep time per cycle
Days saved
Kickoff to production
12 weeks
What shipped

The scope underneath

  • 70 Prisma tables across auth, org structure, grievances, complaints, agreements, evidence, documents, jobs, audit logs
  • 144 database migrations
  • 30 API routes and 133 server-action files
  • 250+ React components
  • Multi-tenant: Organization → Bargaining Unit scoping
  • Postgres-backed job queue with DOCLING → EMBEDDINGS → ARTICLES → AI_ANALYSIS stages
  • Claude Sonnet 4 on the critical path, Claude Haiku for fast paths, Vertex AI fallback
  • 19 E2E test suites including an accessibility suite
  • Terraform-managed GCP: Cloud Run, Cloud SQL, Cloud Run Jobs, GCS, Scheduler, Artifact Registry

“We used to lose a grievance every year or two because someone missed a deadline. Since Sertus, we haven't lost one. The stewards trust it because it shows them exactly where the answer came from.”

Labour Relations DirectorCanadian public-sector union
Common questions

FAQ

What is Sertus?

Sertus is a retrieval-augmented AI platform built for Canadian labour relations. It searches collective agreements, cites exact clauses, tracks grievances from filing through arbitration, and preserves institutional knowledge that would otherwise be lost when experienced staff leave.

How does Sertus cite its sources?

Every answer includes the exact article number, clause, and section from the applicable collective agreement. Stewards can verify any AI-generated answer by checking the cited source directly. The system retrieves the actual clause text, not a summary or paraphrase.

Where is Sertus data stored?

All data is stored in Canada on Canadian-hosted infrastructure. Sertus is designed to comply with PIPEDA (the Personal Information Protection and Electronic Documents Act) and applicable provincial privacy legislation.

How does the grievance tracking work?

Each grievance is tracked through defined stages: filing, steward review, employer response, mediation, arbitration, and close-out. Deadlines are calculated from the procedural rules in the applicable collective agreement. The system sends reminders before deadlines and flags overdue items on a team dashboard.

Can Sertus handle multiple collective agreements?

Yes. Sertus ingests multiple collective agreements and can cross-reference clauses across different bargaining units. Teams use this for bargaining prep — comparing sick-leave provisions, overtime rules, or disciplinary procedures across agreements in seconds instead of days.

How long did it take to build Sertus?

Sertus went from kickoff to production deployment in 12 weeks. The build ran in three phases: document ingestion and structuring, retrieval pipeline development, and grievance workflow implementation. Each phase was tested with real users and real collective agreements before moving forward.

Who uses Sertus?

Sertus is used by union stewards, HR teams, and labour-relations professionals in Canadian organizations. It’s designed for people who aren’t technical — the interface prioritizes clarity and auditability over complexity.

What AI architecture does Sertus use?

Sertus uses Retrieval Augmented Generation (RAG) with a custom embedding model fine-tuned on Canadian legal language. Collective agreements are parsed into clause-level chunks with article numbers, topic tags, and cross-references preserved, so retrieval is precise and every answer is traceable to its source.

Building in a regulated domain?

The parts of Sertus that took the longest — the document parse, the audit trail, the multi-tenant compliance surface — are the parts most AI vendors skip. If you're building something that has to stand up to a supervisor's review, start here.

Book a discovery call