Ask ChatGPT to write a lease-up email for your new community in Charlotte and you'll get something that reads like it was written by a very polite intern who has never been to Charlotte, never seen the building, and thinks "modern living meets urban convenience" is a sentence a human would say out loud.
That's not the model failing. That's the model doing exactly what you asked, which was nothing in particular.
Generic output is a prompt problem, and it's almost always the same three missing pieces. Add them and the difference is not subtle. You go from copy you'd rewrite entirely to copy you'd tweak and ship.
The mechanism, in one paragraph
A language model predicts the most likely next words given what you gave it. Ask a vague question, get the statistical average of every apartment marketing email ever written on the public internet. And the statistical average of apartment marketing is, respectfully, "Welcome home." The model isn't being lazy. It's giving you the center of the distribution because you didn't tell it where you actually wanted to stand.
So your job isn't to ask better questions. It's to narrow the field so hard that "Welcome home" isn't a plausible answer anymore.
Missing piece #1: The specifics only you have
This is the big one. Your prompt has to contain facts the model could not possibly guess.
Not "write a renewal email for my community." Try this instead: "Renewal email for a 240-unit 2019 build in Nashville. This resident is in a 1x1 at $1,585, renewal offer is $1,625, they've been here 26 months, zero late payments, two work orders both closed same day. Comparable 1x1s at the two closest competitors are $1,690 and $1,740."
Same task. Completely different output. The second one can say something true: you've been here two years, you've never paid late, and moving costs you more than staying. The first one can only say "we value you as a resident."
- Real numbers. Rent, concession value, days on market, unit count, square footage, actual distances to actual employers.
- Real names. "Eight minutes to the Publix on Ponce" beats "convenient shopping nearby" every time, and it's the kind of thing a prospect can verify, which is why it works.
- Real friction. What's actually hard about leasing this asset? Backing up to a rail line, third-floor walkups, a parking deck that opened late. The model can write around a problem it knows about. It cannot write around one you hid from it.
- Real voice samples. Paste in three emails your best leasing agent actually sent. Say "match this tone."
The test: if a competitor could send your prompt with two words swapped, it's too thin.
Missing piece #2: The reader, sharply defined
"Prospective renters" is not an audience. It's a category, and the model will write to the middle of it.
Give it a situation instead: "This person toured 9 days ago, said the unit was great but the price was at the top of their range, and hasn't responded to two follow-ups." Now you've got a real assignment. The email has to address price without begging, and it has to give a reason to reply now.
Or: "Current resident, lease expires in 71 days, works from home four days a week, has complained twice about package theft." That renewal email basically writes itself, and it mentions the new package room, because you told the model there was a reason to.
Here's where you have to be careful, and this is the one part of the lesson I'd ask you to read twice.
Models will happily write copy that describes the person instead of the unit. Ask for a lease-up ad and you'll get "perfect for young professionals" or "ideal for a growing family" or "great for students" without you ever asking for it, because that phrasing is everywhere in the training data. Under the Fair Housing Act, copy that signals a preference for or against people based on familial status, age, national origin, or the other protected classes is a problem, whether or not you meant it that way. The fix is a standing instruction in every copy prompt: describe the unit and the property, never the person who should live there. "Two bedrooms, in-unit washer dryer, home office nook off the living room" does the exact same selling work and says nothing about who belongs there. Add that line to your prompt, and then read the output anyway. Model compliance with instructions is good, not perfect, and you're the one who signs off.
Also worth knowing: this applies to your targeting, not just your words. Meta restricts housing ads to a special category with limited targeting for exactly this reason. Ask an AI to build you an audience and it may cheerfully suggest age and parental-status filters that you're not permitted to use.
Missing piece #3: The shape of what you want back
Most prompts describe the topic and skip the deliverable. So the model picks a format, and it picks the safest one, which is four paragraphs of medium-length prose.
- Length in words or characters. "Under 90 words." "Subject line under 42 characters so it doesn't truncate on iPhone."
- Structure. "Three bullets, one CTA, no greeting."
- Format. "Return as a table with columns: channel, headline, body, CTA."
- Quantity. "Give me 5 subject lines, ranked, with one line on why each might underperform."
- Constraints. "No exclamation marks. Never use the word 'luxury.' Don't mention the pool, it's closed until May."
That last category is underrated. Negative constraints do more work than positive ones. "Write compelling copy" means nothing. "Don't use the words community, lifestyle, oasis, or retreat" produces immediate, visible change.
Put the three together
Watch what happens across one task. Version one: "Write an Instagram caption for our lease-up."
Version two: "Instagram caption for a 187-unit lease-up in the Highland Park submarket of Dallas, currently 34% leased, targeting move-ins before August 31. Current offer is six weeks free on 13-month leases. The building's real differentiator is a 4,000 square foot co-working floor with eight bookable phone booths, which nothing else in the submarket has. Write for people scrolling, not reading. Under 125 characters plus up to five hashtags. Describe the space and the offer, not the type of person who should live there. No emojis. Don't say 'welcome home.'"
One of those gets you something. The other gets you "Discover your new home at [Property Name]."
What still breaks
Even a good prompt will invent things. It'll give you a walk score you never provided, a distance that's off by a mile, an amenity from a different property in your portfolio. Numbers are the highest-risk item: check every rent, every distance, every square footage before anything goes out. The model is generating plausible text, not looking anything up.
And it will drift. Ten outputs into a session, it starts sliding back toward the average because your original constraints are competing with everything generated since. When output goes soft, don't argue with it. Start a fresh chat and paste your constraints back in.
Build the three pieces into a reusable block once, and every prompt after that starts from a much better place.