ImmoCRM Today: The Marketing CRM for Estate Agencies That Tracks Cost per Contract, per Creative
Six months after the original case study, ImmoCRM is a marketing-first CRM for estate agencies: cost per meeting and per contract at ad-creative level, CAPI feedback to Meta, Telegram for agents, a valuation widget.
Back in March I wrote up how we built ImmoCRM: a multi-tenant CRM that catches an estate agency's Meta leads in seconds and routes them to the right agent. That post is still accurate, but it describes maybe a third of what the system does now. Six months of running it for real agencies pushed it somewhere I didn't plan: it stopped being a lead inbox and became the thing an agency uses to decide where its marketing money goes.
I've looked hard for something comparable and haven't found it. There are plenty of real-estate CRMs, and they are almost all built around listings: offer management, portal exports, documents. ImmoCRM is built around the other side of the business, the one that pays for the ads. As far as I can tell it's the only marketing-first CRM for estate agencies on the Polish market, and I'd honestly like to be corrected if someone knows another.
Here's what it does today, with the caveats I'd want to hear if I were the one buying it.
Cost per contract, per creative
The question every agency owner asks is "which ads actually make us money", and the honest answer from most tools is "we know which ads produce leads". That's not the same question. A campaign can produce cheap leads that never sit down with an agent.
ImmoCRM tracks each lead from the ad it came from through the whole pipeline: contacted, meeting booked, contract signed, property sold. Because every lead carries its Meta ad id, the statistics view can roll costs up at three levels, campaign, ad set and individual ad, and show cost per lead, cost per meeting and cost per contract at each one. Next to each row there's the creative itself, thumbnail, headline and body, so "the video with the agent talking beats the still with the flat" is something you read off a table rather than argue about in a meeting.
Two ad sets can have the same cost per lead and a 5x difference in cost per meeting. Without this view you'd scale the wrong one.
The one caveat: attribution needs the ad parameters to arrive with the lead. Leads that come in without them, for example from a valuation form someone found organically, are shown separately as an attribution gap rather than silently assigned to the wrong campaign.
Telling Meta what a good lead looks like
Every landing page and funnel carries the agency's Meta pixel, and the server sends a deduplicated Conversions API event for each lead, so nothing is lost to blocked browsers or a cookie banner nobody clicked. The part that matters more: when an agent moves a lead to "meeting booked" in the CRM, or from Telegram, ImmoCRM fires a Schedule event back to Meta for that same person.
So Meta isn't just optimising for people who fill in forms. It gets told, a few days later, which of those people turned into an actual meeting, and it shifts delivery toward people who look like them. Contract-signed feedback is the next step; Meta requires a monetary value on that event and we're still deciding how to attach commission data an agency is comfortable sending.
Wyceniarka: leads that come to you
I wrote a separate post about the valuation widget, so briefly: a homeowner gets a valuation range for their flat, house or plot on the agency's own site, in the agency's branding, with no vendor logo. Before they see anything they're asked why they want it, so only people who say "planning to sell" land in the agents' pipeline. The result is a range (±5% for flats, ±7% for houses, ±15% for land), never a single number, so there's still a reason to call the agent. And the final screen shows the agency's phone, Instagram and client reviews instead of a dead end.
For the Poznań agency we run it for, in the same four months and the same CRM, regular Meta lead-form campaigns produced a meeting for roughly 550 zł and Wyceniarka for roughly 145 zł. I round those numbers and they're the agents' own status bookkeeping, not a Meta-reported conversion, but the gap is not subtle.
Landing pages and quizzes instead of lead forms
Meta's instant forms are fast and they produce the worst leads I've seen. People tap through without reading. So agencies on ImmoCRM build their own sales landing pages and quizzes in the funnel builder: a few questions about the property or the situation, a short pitch, then contact details. It's more friction, on purpose. Fewer people finish, and the ones who do actually meant it.
The last step of every funnel is the same as the valuation result: the agency's Instagram (with an optional auto-redirect), a one-tap WhatsApp button, and a carousel of client testimonials. The visitor leaves with a face and a phone number, not a "thank you for your submission".
Agents live in Telegram, not in the CRM
Agents don't open dashboards between viewings. So the operational side runs through Telegram. A new lead is posted to the team group and assigned either round-robin or by a manager picking a name; the assigned agent gets the card in a direct message. From that card they change the lead's status (the status list is the agency's own, configured per organisation), add a free-text note, and set or snooze a follow-up. All of it writes back to the CRM.
Inside the CRM an agent sees only their own leads, enforced at the database level, not just in the interface. Agencies that prefer a shared pool can switch a folder to "everyone sees everything" mode, but that's a choice, not the default.
Two things I didn't expect agents to use as much as they do: the follow-up calendar with a week view and "call again in 3 days / next week" presets, and the tasks list. Both send Telegram reminders with complete and snooze buttons. It's a small feature. It's also the reason leads stop dying at "nowy" after the first missed call.
Agents promote their own listings
An agent pastes an Otodom link into the CRM, ImmoCRM scrapes the listing (photos, price, description), the agent sets a daily budget, and a Meta campaign goes live for that property with tracked links. Stop, change budget or change the goal from the same panel. Leads from that ad land in the CRM tagged with the property, so "how much did we spend to sell the flat on Wilkońskich" has an answer.
No agency owner wants to be the bottleneck for every property ad. This removes them from the loop while keeping every złoty in the same statistics as the rest of the marketing.
Finding out where each agent leaks
The Agents tab shows the same funnel per person: leads received, contacted, meetings, contracts, with the conversion between each stage. One agent books meetings from 30% of leads and closes 10% of them; another books 12% and closes 40%. Those are different coaching conversations, and before this view the owner only saw "agent A did 3 contracts, agent B did 3 contracts".
There's a ranking on top of it (meeting-to-contract ratio, contact speed, average attempts, commission generated) and a monthly digest posted to the owner's Telegram, so the numbers show up without anyone remembering to look.
Messages, sequences, campaigns
From a lead's card an agent can send an SMS, an email, or open WhatsApp with a prefilled greeting in one tap (that one is a link, not an API integration, because a real agent typing the rest works better than a bot). Under the hood it's Twilio for SMS with opt-out handling, and Brevo for email.
Then the automatic layer:
- Sequences. A flow builder with triggers (new lead, status changed, no contact for N days) and actions (send SMS, notify on Telegram, change status, assign an agent, add a note, call a webhook), plus delays, conditions and A/B splits. The standard one is a welcome sequence: a personal-sounding SMS from the assigned agent a few minutes after the lead arrives, another the next day if there was no answer.
- SMS campaigns. When an agency has a few hundred leads sitting in "no contact" or "call back later", it builds a group from them and sends a single campaign: are you still thinking about selling? The replies re-enter the pipeline. It's the cheapest lead source an agency has and most never use it.
- Newsletter. A monthly (or weekly, or fortnightly) series to every lead who consented: what changed on the local market, what changed in the regulations, what the agency sold. The draft is AI-written from the notes the agency supplies for that month; it refuses to invent market data on its own, which is the only way I'd ship an AI newsletter.
Contracts, sales and the actual return
When a lead's status becomes "deal", ImmoCRM creates a contract record: address, property value, commission percentage, which agent, and it splits the commission into office and investor revenue. Contracts then move through their own statuses (listed, sold, extended). Because every contract is still linked to the lead and the lead to the ad, the statistics can finally show return on ad spend at the level of closed sales, not "leads generated".
That number is the one owners were computing in spreadsheets, quarterly, by hand, and getting wrong.
Under the hood, briefly
Next.js and Postgres on Supabase, with row-level security doing the multi-tenancy so an agent, a manager and a super-admin hit the same tables and see different rows. Meta Graph API for lead retrieval, campaign creation and CAPI. Twilio for SMS, Brevo for email, Telegram Bot API for the agent side. Scheduled jobs handle sequences, follow-up reminders, newsletter sending, SMS campaigns and the monthly ranking digest. The valuation module has its own schema and its own scrapers for listing comparables per city.
Nothing exotic. The hard part was never the technology. It was deciding that a CRM for agencies should be organised around the cost of a signed contract, and then making every feature feed that one number.
If you run an agency and your marketing reporting stops at "leads", ImmoCRM is at immocrm.pl. If you'd rather have something like this built for a different business, that's what we do.