Skip to content

Listing descriptions

If you write listing copy, your agent can do most of it for you. Paste a listing or pick one from your saved list, and your agent produces three descriptions — short for the MLS, medium for Zillow / portals, long-form for your website — each scanned for Fair Housing concerns and matched to the way you write.

  • Three outputs in one go — MLS short, Zillow medium, website long-form, all from the same listing facts
  • Fair Housing scanning built in — every output is checked against an admin-managed phrase catalog covering all seven federally protected classes plus modern style red-flags (“stunning”, “boasts”, “nestled”, and friends)
  • Anti-hallucination guarantee — your agent will never invent features. If you say “updated kitchen”, it will not assume granite. If you say “big yard”, it will not assume landscaped
  • Voice calibration — paste two or three of your own past descriptions, and the system summarizes your tone, sentence length, vocabulary, and structure into a small profile that gets injected into every future generation
  • MLS character-limit awareness — set your MLS once (CRMLS, Bright, HAR, ARMLS, NWMLS, MRED, Stellar, REIN, GLVAR, or “custom”), and the MLS-short output is hard-capped to that limit
  • Override flow — when an exception is genuinely warranted (e.g., “Master Bedroom” is the deeded room name), you can mark a flag as accepted and proceed

Examples that work in chat:

You sayAgent does
”Write descriptions for the Crestwood listing.”Looks up the listing in your saved list, generates all three descriptions, runs Fair Housing scan
”Give me Zillow copy for [paste]“Extracts fields from the paste, generates one Zillow-style description
”Is this Fair Housing OK? [paste]“Pure scan — no LLM, no description, just the flagged phrases
”Write descriptions but allow Fair Housing overrides — I know what I’m doing”Generates all three; hard-block phrases come back as warns instead of blanking the text
”Calibrate my voice — here are three of my listings”Saves the samples, summarizes your style into a profile

A typical generation against a Portland mid-century ranch returns three texts plus a Fair Housing summary.

MLS short (~600-1000 chars depending on your MLS)

Section titled “MLS short (~600-1000 chars depending on your MLS)”

Three-bedroom, two-bath split-level on a quarter-acre lot in SE Portland. 1,850 sq ft, built 1975. Hardwood floors, updated kitchen, fenced yard. Two-car garage. Walk to schools and Saturday market. New roof 2019.

Use it for: MLS data entry, RPR, RentSpree, anywhere with strict character caps.

Zillow medium (150-250 words, three short paragraphs)

Section titled “Zillow medium (150-250 words, three short paragraphs)”

Set on a quiet street in SE Portland, this three-bedroom split-level offers 1,850 square feet of well-laid-out living. Hardwood floors run throughout the main level; the updated kitchen connects to a sunlit dining area and a screened-in porch.

Three bedrooms upstairs, including a generously sized primary with a walk-in closet. The full bath has been recently updated. Downstairs, a fourth flexible space works as office, guest room, or media room.

The fenced backyard backs to mature trees, with a covered patio for year-round use. Two-car attached garage. Walking distance to highly rated elementary and the Saturday farmers’ market. New roof 2019.

Use it for: Zillow, Realtor.com, Redfin, Trulia, the public-portal blurb.

Website long-form (350-500 words, five paragraphs)

Section titled “Website long-form (350-500 words, five paragraphs)”

[Five-paragraph long-form: arrival → interior → kitchen → outdoors → schools/practical. Each paragraph 60-110 words. Voice profile applied if calibrated.]

Use it for: your own site, custom flyers, email blasts, anywhere you control the page width.

The scanner runs every output through a regex pass against an admin-managed phrase catalog (~40 starter phrases covering all seven federally protected classes plus a banned-style word list). Each match is one of two severities:

  • hard_block — text contains a phrase that is or could be discriminatory. By default, the platform blanks the offending output and surfaces the matched phrase to you. Examples: “perfect for a growing family”, “no children”, “able-bodied”, “no Section 8”.
  • warn — text contains a phrase that’s risky-by-pattern but not categorically off-limits, including all 11 banned style words from the design doc. Examples: “stunning”, “exclusive neighborhood”, “American Dream home”. Output is preserved; the scanner annotation is shown so you can edit before publishing.

A few concrete examples of what the scanner catches:

PhraseSeverityWhyBetter
”perfect for a growing family”hard_blockFamilial-status preference”Spacious layout”, “ample bedrooms"
"near St. Mary’s”hard_blockReligion proximity reference”Place of worship nearby” (or omit)
“chef’s kitchen”warnBanned style cliché”Well-appointed kitchen”

This scanner is best-effort guidance, not legal advice. The phrase catalog is derived from NAR / HUD enforcement patterns and is updated quarterly. Always consult your broker or attorney for jurisdiction-specific Fair Housing compliance. We’re a software safety net, not a substitute for trained judgment.

Set up once, then every future generation matches your style:

  1. Go to Dashboard → Settings → Listings & descriptions.
  2. Paste 2-3 of your own published listings into the “Voice samples” box (any listing format works — we strip MLS junk).
  3. Click Calibrate voice.

Behind the scenes, your agent reads your samples through your BYOK LiteLLM key and saves a small JSON profile capturing your tone (luxury / practical / conversational / clinical), sentence-length pattern, vocabulary preferences, structural tendencies, and formality. That profile is injected into every future description prompt.

Voice profile is per-agent, not per-user. If you have multiple agents (e.g., separate listing accounts under one platform login), each has its own voice.

You can re-calibrate anytime by pasting new samples and clicking Calibrate again. The previous profile is replaced atomically.

Different MLSs cap the description field at different lengths. The MLS-short output is hard-truncated to your MLS’s limit so you can copy-paste straight in without trimming.

MLSDefault limit
CRMLS1,000
Bright MLS4,000
HAR1,500
ARMLS2,000
NWMLS1,500
MRED1,500
Stellar1,500
REIN MLS1,500
GLVAR2,000
Custom1,500

Set yours in Dashboard → Settings → Listings & descriptions → MLS. You can also override with a custom integer between 200 and 10,000 if your MLS isn’t in this list or your office uses a tighter rule.

Sometimes a Fair Housing flag is technically correct but contextually wrong. The classic case: “Master Bedroom” is the actual deed-recorded room name on a historic property, even though “primary bedroom” is the modern preference.

When that happens, ask your agent to regenerate with overrides allowed:

“Generate the descriptions but allow Fair Housing overrides — I’ve reviewed the flags.”

The agent re-runs with allow_overrides=true. Hard-blocks become warns; the text is preserved and the scanner annotations are kept on each output so you can defend the choice if questioned. This is the rare path — the default is conservative and we recommend leaving it that way unless you’re the listing agent and have explicit guidance from your broker.

  • No real-time NAR feed. The phrase catalog ships seeded from NAR-v2026Q1 and is updated quarterly via admin.
  • No per-brokerage admin UI yet. The jurisdiction column exists (global, state:CA, brokerage:xyz) but admin UI to manage state / brokerage overrides defers to v2. Email support if you want a state-specific phrase added.
  • No auto-rewrite. When the scanner blocks an output, your agent surfaces the issue and you decide. Future v2: optional auto-rewrite suggestion that uses the alternatives list.
  • No direct API. Description generation is only available through your agent (chat or hooks) or the dashboard. No standalone POST /describe for external systems.
  • All description text is generated through your agent’s BYOK LiteLLM key. The text never goes to any third-party model except the one you’ve provisioned.
  • We do not cache descriptions on our side. Each generation hits the LLM fresh.
  • Your voice profile (raw samples + JSON summary) is stored encrypted-at-rest on the agent row, scoped to your user. No other agent can read it.
  • The Fair Housing phrase catalog is platform-shared (admin-managed); it has no PII and no per-user data.
  • Every Fair Housing scan is a pure regex pass — it does not leave the platform and does not hit your LLM.

What the agent will say if it can’t generate

Section titled “What the agent will say if it can’t generate”
  • No BYOK key: “Your LiteLLM key isn’t connected — set it up in Dashboard → Settings → BYOK so I can generate descriptions.”
  • Pasted text isn’t a listing: “That doesn’t look like a real-estate listing — could you paste a listing block (address, beds, baths, sqft, price)?”
  • Provider rate-limited: “The LLM provider is rate-limiting; one moment, retrying.” (One automatic retry, then surfaces the error.)
  • All three blocked by Fair Housing: “All three outputs flagged hard_block phrases. I’ve blanked them and surfaced the matches — would you like me to retry with overrides allowed?”
  • State / brokerage phrase overrides in the admin UI.
  • Auto-rewrite suggestions when the scanner blocks an output.
  • Tied to #04 Showing Prep Brief — your agent can include “Fair Housing language to avoid” notes when generating showing scripts.