Free this month: Contractor AI Visibility & Local Maps Audit — for Roofers, HVAC & Trades. Request Free Contractor Audit →

Impixo/Case studies/Property platform

A 4,000-listing property platform that AI had never heard of.

Strong domain, decent Google rankings, zero presence in assistant answers. We rebuilt the listing layer on Laravel, made every property machine-readable, and turned 31 thin location pages into real service-area assets.

Property & lettingsSector
Laravel · Schema.orgStack
14 weeksBuild
Ongoing · CompoundRetainer
0 AI citation share

From cited in 9% of relevant assistant answers to 28%, measured across ChatGPT, Gemini and Perplexity on a fixed 120-prompt set.

0 Organic enquiries

Qualified valuation and viewing requests, comparing the 90 days post-launch against the same window a year earlier.

0 Largest contentful paint

Down from 4.6s on the old WordPress stack. Every listing page now passes Core Web Vitals on mobile.

01 / The problem

Ranking well and being invisible are not mutually exclusive.

The client ranked page one for most of their target terms. But when a buyer opened ChatGPT and typed "best letting agents in the area", three competitors came back — none of them the client. That gap is the whole story of AI visibility: classic SEO optimises for a ranked list of links, assistants optimise for a short list of entities they can corroborate.

The audit found the causes quickly. Listings were rendered client-side, so crawlers saw an empty shell. There was no RealEstateListing or Organization schema anywhere. NAP details differed across the footer, the contact page and Google Business Profile. And the 31 "areas we cover" pages were the same 90 words with the town name swapped — exactly the pattern both Google and LLM training pipelines discount.

02 / What we built

Server-rendered listings, entity-grade schema, real local pages.

We moved the listing layer to Laravel with server-side rendering and a cached search index, so the full property record — price, beds, tenure, EPC, coordinates — exists in the HTML on first byte. On top of that we shipped a nested JSON-LD graph: OrganizationRealEstateAgentRealEstateListing, each with stable @id references so an assistant can resolve the relationships rather than guess them.

The 31 location pages were rewritten as genuine assets: local price data pulled from the client's own transaction history, named neighbourhoods, school and transport context, and the properties currently live in that area. Each one carries its own areaServed markup and links to the office that covers it.

We also unified NAP across the site, Google Business Profile, and the eleven directories that mattered, then published an llms.txt and opened the robots policy to AI crawlers that respect it.

03 / Why local mattered here

Property is a local-intent business. Every query has a place in it.

Almost nobody searches for a letting agent in the abstract. They search with a postcode, a suburb, a school catchment. When an assistant fields that query it collapses the entire market down to two or three named businesses — and it picks them based on corroboration: consistent NAP, a well-formed Google Business Profile, review volume and recency, and location pages that actually contain local facts.

That is why we treated local SEO as infrastructure rather than a content chore. It is the layer that makes the rest of the work legible to a machine.

Three months in, the client was named in AI answers for 19 of their 31 target areas. Before the rebuild it was two.

04 / The retainer

The build was the start line, not the finish.

Assistant answers drift. Competitors publish. Models retrain. The engagement moved onto a monthly retainer: a re-scored visibility report, new location and guide content, schema maintenance as the listing types evolve, review-generation support, and Core Web Vitals monitoring. Citation share has climbed every month since launch.

Call Get Strategic Audit