Meta's ad algorithm needs volume to learn. You've been feeding it three headlines and a stock photo of a couch, then wondering why performance plateaus by day nine.
Not your fault. Writing thirty distinct ad variants by hand is a full afternoon, and by variant eleven you're just swapping "spacious" for "roomy" and calling it a test. The machine can tell. Two ads that differ by one adjective aren't two ads, they're one ad with a typo.
Here's what changes today: you generate thirty genuinely different variants for a lease-up or a soft-occupancy asset in about twenty minutes, structured so the platform can actually learn something from them, and structured so you can read the results afterward.
Why volume matters more than polish
Meta Advantage+ and Google's responsive display ads both work the same basic way: you supply assets, the system assembles combinations, and it shifts budget toward whatever wins. Google's RDA format takes up to five headlines, five descriptions, and fifteen images. Meta Advantage+ creative will permute your headlines, primary text and images across placements.
Give it three headlines and you've handed it a very small box to search in. The optimization is only as good as the range you gave it.
But range doesn't mean random. If your thirty variants are thirty ways of saying "luxury living in [SUBMARKET]," you've generated noise. What you want is thirty variants that differ along axes you actually care about, so when one cluster wins you learn something transferable. Not "ad 14 won." But "price-anchored copy beat amenity copy by a wide margin, and the tour-scheduling CTA beat the generic learn more."
That's the difference between running a test and running a slot machine.
Build the axes first, then generate
Do not open ChatGPT and ask for thirty apartment ads. You will get thirty apartment ads and they will all be the same ad.
Instead, define your variation axes before you generate anything. For a lease-up, a good set looks like this:
Angle (what the ad argues): price/value, specific amenity, location and commute, availability urgency, floor plan specificity, move-in offer.
Opening move (the first four words): question, number, direct statement, feature callout.
CTA: schedule a tour, check availability, see floor plans, view pricing.
Six angles times four openings gives you 24 combinations before you touch the CTA. That's your thirty. And critically, every variant is now tagged with which cell it came from, which means the reporting has meaning.
The generation pass
Feed the model your actual asset facts first. Not a brochure. Facts. Unit mix, real starting rents by floor plan, the concession as it's actually written, three amenities that genuinely differentiate, the two nearest employment centers with drive times, and the pet policy, because in multifamily the pet policy converts.
Then have it produce the grid. Ask for output as a table with columns for variant ID, angle, opening move, headline, primary text, and CTA. Table format matters more than it sounds: it's what lets you paste straight into a bulk upload sheet or hand it to whoever's building the campaign without a re-typing step that introduces typos into your rent numbers.
Character limits go in the prompt, not in your edit pass. Meta primary text wants under 125 characters before truncation, headlines around 40. Google RDA headlines cap at 30 characters, descriptions at 90. Tell the model the exact count and it will mostly comply. Mostly. Check the long ones.
The fair housing check, and it is not optional
Models write copy about the resident, not the residence. Ask for apartment ad copy and you'll get "perfect for young professionals," "ideal for a growing family," "great for students," "a quiet community for mature residents." Every one of those describes who should live there rather than what the property is, and that's exactly the line HUD guidance draws around discriminatory advertising, including familial status and age.
The fix is a standing instruction in every generation prompt: describe the unit, the community, and the amenities. Never describe the resident, their life stage, their household composition, their occupation, or their family status. Then read all thirty before they go live. The model will comply about ninety percent of the time and the remaining ten percent is your job. Also strip anything implying preference around religion, national origin, disability or race, including proximity language like "near [religious institution]" or neighborhood-character phrasing that functions as a proxy. If your team runs ads in a state or city with additional protected classes, source of income being the common one, add those to the same instruction.
Loading and reading the results
Split thirty variants across at least two ad sets, not one. One ad set with thirty creatives will spend its budget finding the top two or three and starve the rest before they get statistically meaningful impressions. Group by angle instead: price-angle variants in one ad set, amenity-angle in another. Now you're comparing arguments, not individual sentences.
Give it enough runway. Meta's learning phase generally wants around 50 optimization events per ad set per week, and if your event is a lead form submit, that's a real volume requirement for a single 280-unit lease-up. If you can't clear it, optimize for a lighter event like landing page view for the test, then switch once you know which angle wins.
Read results at the angle level first, variant level second. The variant that won might have won on a lucky image pairing. The angle that won tells you what to write next month.
What breaks
The model will invent amenities. It will give you a rooftop dog park at a garden-style property because rooftop dog parks are in its training data. It will also round your rents to friendlier numbers, which is a pricing-accuracy problem before it's anything else. Verify every number and every feature against your actual availability before upload.
And it will drift toward the same three adjectives across all thirty variants if you don't force the axes. Which brings you right back to a slot machine with better formatting.