Multifamily Marketing

Training · Your week, compressed · 8 min

The competitive shop in twenty minutes

Six comp websites into one page your regional will actually read.

Your comp shop is probably a spreadsheet somebody built in 2021, and half the rent columns still say "call for pricing."

Here's the version that takes twenty minutes and produces a one-page brief your regional reads in the parking lot before a site visit. Not a rent grid. A brief: what six competitors are actually saying, offering, and hiding, and what you should do about it this week.

What you're actually building

Two artifacts, and they do different jobs.

Artifact one: the raw capture. Six comp websites, pulled the same way, into structured fields. Advertised rent by floorplan, concession language verbatim, application and admin fees, pet policy and fees, parking, amenity claims, tour options, what shows as available and when.

Artifact two: the brief. One page. Three sections. What changed since last month, where you're exposed, and two moves you can make without a capital request.

The raw capture is what AI is genuinely good at: reading messy pages and putting the same facts in the same boxes every time. The brief is where you add judgment. Do not let a model write the "so what" and then read it aloud in a pricing call. It will produce something that sounds like a McKinsey deck and means nothing.

Step one: the capture, twelve minutes

Open ChatGPT, Claude, or Gemini. All three now browse. You want a model that can actually fetch a URL, not one guessing from training data, so check that web access is on before you start. If it hands you a 2023 concession, that's what happened.

Paste in your six comp URLs and the schema. The schema matters more than the model. Same fields, same order, every month, or you cannot compare anything.

Ask for a markdown table, one row per property, then a second table with one row per floorplan across all six. The second one is the money table. It's how you see that your two-bed is priced above three comps that are all newer.

Then the step most people skip: ask it to flag what it could not find. "Pricing behind a lead form" is a finding. It means that comp is protecting rate and you can undercut them on transparency in your paid search copy. A blank cell tells you nothing. "Hidden behind a form" tells you something.

Some ILS pages block scraping and some property sites are JavaScript-heavy enough that the model gets partial data. When that happens, paste the page text yourself. Takes ninety seconds and the model doesn't care where the text came from.

Step two: the verbatim column

This is the part that turns a rent grid into intelligence.

Ask for exact concession language, copied word for word. Not summarized. You want "6 weeks free on select homes, 13-month lease" sitting next to your "one month free," because those are not the same offer and your leasing team is fielding that comparison at the desk right now.

Same for their hero headline, their tour CTA, and their availability language. "Now leasing" versus "few homes remaining" versus a live availability calendar tells you how much pressure they're under. A property with a 4pm Saturday self-tour slot open next week is not full.

Step three: the brief, five minutes

Feed the two tables back and ask for the one-pager. Constrain it hard: 250 words maximum, three headers, no adjectives, every claim tied to a specific comp by name.

Then rewrite the recommendation section yourself. You know things the model doesn't: that the comp offering eight weeks free is in lease-up and will stop in March, that the one showing thirty units available always shows thirty units available. That's your value in the meeting, and it's exactly the part that can't be automated.

The fair housing line, and it's a real one

When you ask a model to compare positioning, it will happily tell you a comp is "targeting young professionals" and then suggest you do the same. It will write it into ad copy if you let it. Describing your intended resident rather than your unit is a fair housing problem, and it does not stop being one because a model wrote the sentence.

Add this to every prompt in the workflow: "Describe units, amenities, location and pricing only. Never describe or imply a target resident demographic, lifestyle, family status, or life stage." Then read the output. Words like "professional," "student," "family-friendly," "mature," and "active" all point at people rather than the property. Cut them. Your compliance review will find them if you don't, and the version where you find them first is much better.

What breaks

Models hallucinate specific numbers with total confidence. Spot-check three rents against the live sites before anything goes to a regional. If a comp's site says "starting at $1,595" and your output says $1,650, the model filled a gap. Also: run this the same week every month. Comp shops are only useful as a trend line, and one snapshot is just trivia.

Month one takes an hour while you build the schema. Month two is twenty minutes, because you're pasting the same prompt with fresh URLs.

The prompt

COMP SHOP CAPTURE (run monthly, same week each month)

You have web browsing enabled. Visit each URL below and extract only what is actually on the page. Do not infer, estimate, or fill gaps from prior knowledge. If a field is unavailable, write exactly what blocked you: "behind lead form", "not published", "call for pricing".

MY PROPERTY: [PROPERTY NAME], [CITY/SUBMARKET], [# UNITS], [YEAR BUILT]
COMP URLS:
1. [URL]
2. [URL]
3. [URL]
4. [URL]
5. [URL]
6. [URL]

TABLE 1: one row per property. Columns:
Property | Year built | Advertised rent range | Concession (VERBATIM, word for word, do not summarize) | Application fee | Admin fee | Pet rent + pet fee | Parking cost | Tour options offered (self / virtual / agent) | Hero headline (verbatim) | Availability language (verbatim) | # units shown available | Data gaps

TABLE 2: one row per floorplan across all six comps. Columns:
Property | Floorplan | Beds/baths | Sq ft | Advertised rent | Rent per sq ft | Available date

Then list, in plain bullets:
- Every concession that is richer than [MY CURRENT CONCESSION]
- Every comp whose pricing is hidden behind a lead form
- Every comp advertising a tour type I do not offer
- Anything that appears to have changed since [LAST MONTH'S NOTES, PASTE IF YOU HAVE THEM]

FAIR HOUSING CONSTRAINT: describe units, amenities, location, pricing and policies only. Never describe or imply a target resident demographic, lifestyle, family status, occupation or life stage, either in your analysis or in any suggested copy.

Flag any number you are less than fully confident in with (VERIFY).

Where this goes wrong

The browsing models will confidently produce rents that are close but wrong, especially when a site loads pricing via JavaScript or hides it behind a lead form, so the specific thing to check is three advertised rents against the live sites before the brief goes anywhere near a regional. The second failure is stale data: a model without live web access will answer from training data and hand you last year's concession without saying so, which you catch by asking for the verbatim concession string and seeing if it matches what's on the page today. Concession terms are also the field most likely to get compressed into something wrong ("one month free" when the page says six weeks on a 13-month lease), so the verbatim requirement is doing real work.