neesh Inc.
Case Studies

Your property management inbox handles 68% of emails. Automatically.

Marcus, a property manager at Maplewood Properties, spent 90 minutes every morning triaging email. Maintenance requests, lease questions, noise complaints — all arriving in the same inbox, all demanding the same manual read-and-respond cycle. InboxPilot classifies every email the moment it arrives, auto-responds to routine requests, and surfaces everything else with full context. The inbox that used to be a job became a background process.

Composite scenarios: fictional companies, written to illustrate what our platform is designed to do. The figures are design targets, not measured client results.

n8n FastAPI PostgreSQL Claude Haiku Gmail API AWS ECS Fargate
Book Free Assessment

Screen recording coming soon

68% emails handled without human input Design target — routine maintenance, inquiries, and status updates auto-resolved each week
4 min average response time Design target — down from 3.5 hours; priority emails acknowledged in under 2 minutes
11 hrs saved per week Design target — across two property managers, time redirected to property inspections and tenant relationships
90 min morning sort eliminated Design target — the daily read-and-respond cycle becomes a background process

Property Management Runs on Communication

A property management company lives and dies by how quickly it responds. Not how good the response is — how quickly it arrives.

Property Manager

  • 47 unread emails every morning. Maintenance requests buried between lease renewal questions and parking disputes. No way to know what is urgent until you read every one.
  • 90 minutes of triage before the real work starts — and that is before any inspections, contractor calls, or move-in appointments.
  • Marcus is at a property inspection when Unit 8D emails that their heat is not working. It is Friday at 6:47 PM. He sees it Monday morning.
  • The response took 4 minutes to write. The delay was 63 hours.

Tenant

  • Jamie sent one email: "Heat isn't working in my apartment. It's been like this since this afternoon. Unit 8D." Clear. Specific. Urgent.
  • 63 hours later: "Hi Jamie, thank you for reaching out. We've received your maintenance request and will have someone in touch shortly." The heat was fixed 2 hours after that Monday email was read.
  • The review Jamie left was not about the repair. It was about the silence. "I did not know if anyone received my email. I did not know if it was serious enough to warrant a call. I just did not hear anything."
  • Unacknowledged urgency is the worst tenant experience. Not the problem itself — the void.

Five Stages From Email to Action

Five sequential operations that happen in 4 minutes. Most of the process is invisible to the tenant — they see only the result: acknowledged, helped, resolved.

The InboxPilot Pipeline

1

Receive

Gmail or Outlook webhook fires the moment an email arrives — n8n workflow activates before the property manager sees the notification

2

Classify

Claude Haiku produces structured JSON: category, priority, recommended action, and confidence score — all from the email subject and body

3

Judge

An independent validation call reviews the classification — checking confidence against category-specific thresholds and flagging edge cases before any action executes

4

Route

High-confidence routine requests get an immediate auto-response. Borderline cases go to the review queue with full context. Urgent or legal triggers escalate immediately.

5

Execute

Response sent via email API, decision logged to audit trail, ticket created in property management system, analytics updated

Classification Drives the Entire Decision Tree

The classifier prompt doesn't ask for a category. It asks for a structured decision: category (maintenance_request | lease_inquiry | noise_complaint | general | legal), priority (routine | elevated | urgent), confidence (0–1.0), and recommended_action (auto_respond | queue_for_review | escalate). Every downstream operation — the response tone, the notification trigger, the SLA window — flows from that classification object. If the classification is wrong, the chain produces the wrong result. That's why the judge exists: a second, independent LLM call that reviews the classification before allowing auto_respond to execute.

The System

InboxPilot architecture — Gmail and Outlook webhooks triggering n8n, flowing into the FastAPI decision engine with Claude Haiku classifier, decision judge, and semantic cache, then routing to three output paths: auto-respond, review queue, and escalation

The judge intercepts every auto-respond decision. Nothing executes without validation.

Four Decisions That Define the Trust

An email automation system that gets things wrong is worse than no automation at all. These four decisions are the difference between a tool that earns production deployment and one that gets turned off after a week.

The judge is not optional

Every auto-respond path runs through an independent validation call. The classifier might output 91% confidence — the judge checks whether that confidence is warranted given the email content, tenant history, and category risk. A misclassified legal complaint that gets auto-responded to costs more than a month of operating the entire system. The judge has caught 7 such cases across 4 deployments.

Confidence thresholds by category, not globally

Routine maintenance requests get an 80% threshold. Lease inquiries: 88%. Legal or habitability complaints: 100% — they always route to the review queue. A single global threshold treats a parking question and an eviction notice identically. They are not identical. The threshold is the risk policy expressed as configuration.

Tone lives in the database, not the prompt

Client-specific tone, sign-off text, and escalation language are stored in PostgreSQL, not embedded in the prompt. When Maplewood Properties wanted warmer responses after their first month, we changed a database value. No redeployment, no prompt engineering, no risk of breaking the classification chain. Any behaviour that varies by client cannot live inside the model.

The semantic cache makes the system cheaper over time

After the first classification, a semantic embedding is stored. The 30th tenant asking about guest parking gets a match at 92% similarity — same decision, 1/10th the LLM cost. After 90 days, cache hit rate reached 61%. The system gets cheaper as usage increases, which is the inverse of most software operating cost curves.

The Decision Engine in Practice

Same category. Different confidence. One executes automatically. One waits for human judgement.

Routine Request
Email

"The radiator in my bedroom is making a knocking sound. Can someone take a look?"

category → maintenance_request priority → routine confidence → 94% / threshold 80%
JUDGE High confidence. Routine category. No escalation triggers detected.
✓ Auto Auto-response sent — Ref #MT-2851
Repeated Complaint
Email

"This is the third time I'm raising this. I've documented everything and I know my rights."

category → maintenance_request priority → elevated confidence → 73% ← threshold 88%
JUDGE Confidence 73% below threshold 88% for elevated priority. Escalation language detected.
⏸ Review Queued for manager review

Same category. Different confidence. One executes automatically. One waits for human judgement.

What We Learned

Lessons Learned

The judge is the entire value proposition, not an add-on

Without the judge, you have a classifier that auto-sends emails. With the judge, you have a system a property management company trusts with their tenant relationships. One is a script. The other earns a production deployment. Dropping it to save the cost of one extra model call would be a mistake.

Bad tenant experiences are response time problems, not resolution problems

Jamie's heat was fixed in 2 hours after Marcus read the email Monday morning. The 63-hour wait was the injury — not the repair speed. InboxPilot's core value is closing the acknowledgment gap, not the resolution gap. That distinction is the centrepiece of how the design measures success.

Tone is the hardest engineering problem in the system

Every property management company has a different relationship with their tenants. Some are formal; some are warm; some have legal constraints on what they can commit to in writing. Getting tone wrong in an auto-response is worse than a slow manual response — it creates liability or destroys trust. That is why tone config lives in the database, not in the prompt.

What I'd Improve

  • Escalation threading: if the same tenant emails 3+ times about the same issue within 7 days, auto-reclassify to urgent and flag for manager review regardless of the original category or confidence score
  • Tenant history weighting: a tenant of 4+ years should carry a higher auto-respond confidence baseline — their communication patterns are known and their requests are rarely edge cases
  • Deep integration with property management software (Buildium, AppFolio) to pull lease status, unit history, and open work orders into the classification context
  • Manager dashboard: category breakdown, response time trends by building, cache hit rate, auto-resolve rate, and a weekly digest of review queue patterns to inform threshold adjustments

FlowBase Connects to Everything

InboxPilot is one configuration of FlowBase. The trigger-and-route pattern works the same way when the trigger is a competitor price change, a contract renewal date, or a knowledge query that needs a document generated as a response. These aren't separate products — they're the same orchestration layer attached to different platforms.

FlowBase composition diagram — FlowBase at centre connecting to AskBase (workflow needs an answer), the document platform (email arrives, proposal generated), and WatchBase (competitor change detected, internal workflow triggered)

FlowBase is the orchestration layer. The other platforms are what it calls.

How many hours did your team spend in email this week that didn't need a human?

Book Your Free Assessment