This is a product-class write-up, not a named-client story and not a results press release. Counts below describe the pack we actually write (approach points, tools, layers) — not invented bug totals or conversion lifts.
Overview
Prompts like “attract the right tenants” produced copy implying families with children or racialized neighborhood descriptions.
Suggested lookalike audiences in an attached ads tool inherited the current resident mix.
HUD’s 2024 guidance on digital platforms makes clear that algorithmic ad targeting and delivery can violate the Fair Housing Act even without intent. AI copy and suggested audiences are in that scope.
Highlights
- Steering language pack
- Publish gates on generated ads
- Honest residual risk on third-party delivery
Typical launch bar: Wait until journeys and evals agree — do not ship on demo scores alone.
Challenges
Marketing wanted “vibrant” and “exclusive” language that reads as steering.
The ads platform, not the client, did the delivery optimization — residual risk still sat with the advertiser.
Image generation for listings invented interior features not in the photos.
How we tested
Forbidden-steering suite: familial status, race, religion, disability coded language.
Search filters cannot include discriminatory attributes the product claims not to offer.
Human review on generated ads before they can be pushed to a platform.
Listing media EXIF/location stripping if required.
Starting point vs what we required
| Starting point | What we required |
|---|---|
| Marketing wanted “vibrant” and “exclusive” language that reads as steering. | Forbidden-steering suite: familial status, race, religion, disability coded language. |
| The ads platform, not the client, did the delivery optimization — residual risk still sat with the advertiser. | Search filters cannot include discriminatory attributes the product claims not to offer. |
| Image generation for listings invented interior features not in the photos. | Human review on generated ads before they can be pushed to a platform. |
What we delivered
Adversarial evals
- Promptfoo — Fair-housing language suite
Journeys / UI
- Playwright — Filter UI and ad-preview
API / contract
- Postman — Search API rejected filter params
LLM traces / evals
- LangSmith — What audience hints were sent to the ads tool
Outcomes
Copy evals failed coded steering. Generated ads could not publish without a broker-of-record acknowledgement in staging.
Image generation was labeled and blocked from stating features not in listing fields. We documented residual ad-delivery risk instead of pretending a prompt filter solves HUD delivery issues.
Stack
| Layer | Tool | What we validated |
|---|---|---|
| Adversarial evals | Promptfoo | Fair-housing language suite |
| Journeys / UI | Playwright | Filter UI and ad-preview |
| API / contract | Postman | Search API rejected filter params |
| LLM traces / evals | LangSmith | What audience hints were sent to the ads tool |
Same method as the rest of our work: severity-ranked findings, pass rules in writing, and a ship / wait / block call. See the evaluation method and tool comparison.