---
type: Case Study
title: An AI operator that files MLS listings, with a human sign-off
description: "For a Canadian real estate brokerage, an AI operator enters MLS lease listings end to end: 21 photos, a screenshot at every step and one human approval before submission."
resource: https://techfocus.biz/#case-mls-listing-automation
tags:
  - ai
  - browser-automation
  - real-estate
  - mls
  - human-sign-off
  - playwright
timestamp: 2026-11-06T00:00:00Z
generated:
  by: techfocusbiz-site/1.0
  at: 2026-11-06T00:00:00Z
status: stable
stale_after: 2027-11-06T00:00:00Z
order: 2
client: A Canadian real estate brokerage
industry: Real estate
region: Canada
problem: "A lease-listing process lived inside a legacy MLS system with no API: two-factor logins, dozens of fields and photo uploads, all done by hand for every listing."
built:
  - AI browser automation that logs in through a two-factor relay and fills the listing form
  - 21 photo uploads, a compliance check and broker paperwork prep per listing
  - A screenshot at every step, kept as the audit trail
  - A human sign-off gate before anything is submitted
  - "For the same brokerage: a website with MLS/DDF sync and MapLibre maps, and a rental marketplace rebuilt on Next.js and Supabase"
stack:
  - Playwright
  - Anthropic Claude
  - n8n
  - Next.js
  - Supabase
  - MapLibre
steps:
  - name: Discovery
    text: We walked through the lease-listing process as the brokerage actually ran it, inside a legacy MLS system with no API. The written scope fixed what the operator would do, where it would stop, and who approves.
  - name: Build
    text: Built with Playwright, Anthropic Claude and n8n, the operator logs in through a two-factor relay, fills the form, uploads 21 photos, runs a compliance check and prepares broker paperwork. Every step saves a screenshot, and the run stops at a human sign-off gate before anything is submitted.
  - name: Launch
    text: The operator runs listing by listing. A human reviews the screenshot trail and the prepared paperwork and gives one approval per listing, and only then is the listing submitted.
results:
  - value: 1
    display: End to end
    label: automated listing entry
  - value: 21
    display: "21"
    label: photos per listing
  - value: 1
    display: "1"
    label: human approval per listing
  - value: 1
    display: Every step
    label: has a screenshot
quote: null
color: "#ffb020"
---

An AI operator enters an MLS lease listing end to end for a Canadian real estate brokerage, and a human approves every listing before it is submitted.

# Problem

The brokerage's lease-listing process lived inside a legacy MLS system with no API. Every listing meant a two-factor login, dozens of fields and photo uploads, all by hand. Repetitive, exact work like this suits an operator better than a person.

# What was built

Browser automation stands in for the API that does not exist. Built with Playwright, Anthropic Claude and n8n, the operator logs in through a two-factor relay and fills the listing form. It uploads 21 photos, runs a compliance check and prepares the broker paperwork. It saves a screenshot at every step.

Then it stops. A human reviews the screenshot trail and the paperwork and gives one approval per listing. Nothing is submitted without it. The same gate runs across [AI agents and AI operations](../services/ai-operations.md): screenshots and tests at every step, and a person signs off before anything goes live.

For the same brokerage, we also built [a website with MLS/DDF sync and MapLibre maps](../portfolio/brokerage-mls-website.md), live since October 2026, and rebuilt [a rental marketplace](../portfolio/rental-marketplace.md) on Next.js and Supabase.

# Results

Listing entry is automated end to end: 21 photos per listing, one human approval per listing and a screenshot for every step. The brokerage keeps control of what goes into the MLS while the typing moves to the operator. See [the MLS listing automation](../portfolio/mls-listing-automation.md) and [the FAQ on whether AI does the work](../faqs/is-ai-doing-the-work.md).
