← Back to Work
Case study · Prepared after a free discovery call

An AI-powered Business Office Manager agent, designed in one discovery call

A multi-community senior living operator needed their Yardi Voyager data entry automated across the full range of Business Office Manager tasks, pre-move-in, move-in, move-out, ancillary charges, billing change forms, resident agreements, ACH, and more. We used move-in as the flagship example to design the complete architecture, worked out during a single complimentary discovery call.

The discovery call

The challenge the client brought to us

During a free discovery call, the client, a multi-community senior living operator, described a Yardi Voyager data-entry process that was slow, error-prone, and increasingly hard to scale.

Slow

Every task required staff to read a document, understand it, and manually enter repetitive data that could easily be automated.

Error-prone

Manual typing occasionally missed a letter or digit, leading to unclean resident and billing records.

No audit trail

There was no detailed, step-by-step record of why an operator chose a given unit, rate, or payer flow.

Scales linearly

Pipeline volume grows with occupancy, so headcount has to keep growing right along with it.

What they needed: a way to turn manual clicking into seconds of AI-assisted work, with one human approval step.

The client's Business Office Managers handle a wide range of tasks in Yardi Voyager beyond move-ins, including pre-move-in, move-out, ancillary charges, billing changes, resident agreements, and ACH setup. We used the move-in process below as the flagship example to design an architecture built to extend across all of them, as laid out in the rollout plan further down.

Our approach

From inbox to Yardi in five stages

A pipeline with one human approval and a full audit log at every step.

Input

Forms and documents arrive by email.

AI extracts

A vision AI model structures the data.

Operator reviews

Per-field confidence, with edit and retry.

Bot drives Voyager

Automation fills resident and payer fields.

Task completed

A human clicks final submit (human-in-the-loop).

Credentials are held in memory for under 3 seconds and never logged.

A human is in the loop on every Yardi dialog and approval.

A structured log records every click, with a screenshot on failure.

Our solution

Solution architecture and key technical decisions

Four isolated layers, so the operator never has to touch Yardi credentials directly.

Python Vision-capable AI model Playwright + Chromium Async task orchestration Cloud-hosted

Frontend

The operator reviews forms through a simple browser interface, with live progress, human-in-the-loop prompts, and clear approval steps.

AI vision extraction

A vision model reads handwritten and scanned PDFs; parallel calls achieve roughly 92% accuracy. Why: each document mixes handwritten and computer-typed fields, and handwritten text alone drags extraction accuracy down significantly. An AI vision layer was needed to keep accuracy consistent across both.

Backend

Task orchestration, validation, and audit logging, with every component async and type-validated for observability and production hardening, not just speed.

External services: real browser automation

The bot drives a real browser, mimicking a human operator inside Voyager itself, and always pauses for MFA, unit conflicts, and final human confirmation before anything submits. Why: Yardi does provide an API for this, but at the discovery-call stage the client hadn't yet granted API access, this was a demo built to prove the concept before the project formally started. Playwright-driven browser automation was the workaround to demonstrate the full flow without waiting on that access.

Technical details

Tech stack:

  • Python for the extraction and orchestration pipeline
  • A vision-capable AI model for reading scanned and handwritten PDFs, needed because handwritten fields alone see meaningfully lower accuracy without it
  • Playwright driving a real Chromium browser for the Voyager interaction step
  • A lightweight database for task state and audit logging, with a move to a production-grade cloud database planned for Phase 2
  • Cloud-hosted deployment, consistent with the rest of the proposed architecture

Constraint we designed around: Yardi Voyager does expose an API for writing resident and payer data back in, but this was a pre-project demo built straight out of a discovery call, so formal API access hadn't been granted yet. Rather than wait on that access to prove the concept, the workaround was Playwright-driven browser automation: a bot that mimics a real human operator inside Voyager's own interface, clicking, typing, and navigating exactly as a person would, while still pausing for MFA and final human approval before anything submits. Once a project is formally scoped and API access is granted, the direct API path outlined below becomes the faster, production-grade option.

Built-in safeguards

Security and data protection

Three layers of protection, designed around resident and payment data from day one.

PDF → AI

Extraction runs inside a private, access-controlled cloud environment. No data ever touches a public consumer AI API, and the vendor contractually does not train on this data.

AI → Operator

Extracted data lives only in the operator's local browser session. Card numbers and CVVs are masked in every log line, and session cookies are encrypted with a symmetric key.

Operator → Yardi

The Yardi password is held in memory for under 3 seconds and never logged. Sensitive payment fields are stripped before any database write, and MFA is always entered by a human, the bot never sees the code.

Planned next: routing through a private network endpoint, PCI scope minimisation so card data is never persisted at all, and a managed secrets vault with SSO for every credential.

The proposed solution

Our recommended rollout plan

A phased path from first automation to a fully hardened, production-grade system.

Phase 1: Core automation

End-to-end pre move-in automation, from PDF to AI to operator review to Voyager, with per-field confidence scoring and MFA / unit-conflict human-in-the-loop bridges.

Phase 2: Scale and harden

Extend automation to move-in, move-out, ACH, and billing tasks; move to a production-grade cloud database, add a managed secrets vault, and stand up container-based deployment with autoscaling.

Phase 3: R&D exploration

Evaluate a dedicated document-intelligence model as a successor to the current vision model, potentially cutting per-document cost by around 80% and extraction time by around 70%.

Phase 1 delivers immediate impact, Phase 2 makes it production-grade, and Phase 3 pushes efficiency further.

Looking ahead

A faster path forward: direct API integration

The same automation, but in seconds instead of minutes, and resilient to future interface changes, once formal API access is granted at project kickoff.

Today: browser automation only

Read PDF, launch a browser, log in with MFA, click through Voyager's forms, pause on every dialog for human approval, then submit and verify.

≈ 90–120 seconds per resident, per task

With direct API: backend-to-backend

Read PDF, extract with AI, post resident and billing data directly, verify the response, no browser and no MFA replay required.

≈ 20–25 seconds per resident, per task

5x faster: backend calls beat browser clicks every time.

Resilient: no breakage when Yardi's interface changes.

Tighter security: tokens beat replaying MFA daily.

Scales linearly: one worker can process hundreds per day.

This is the depth of a single discovery call

If your process has a similar mix of manual data entry, compliance concerns, and scale problems, a free discovery call is the fastest way to see what's possible.

Book a free discovery call