Partners in one CRM without seeing each other's leads
A custom home builder in Delray Beach refers work to a painter and a cabinet shop, and all three wanted their leads in one system without any of them seeing the others' customers.
Three related companies run on one CRM, and each lead carries a source that says which company it belongs to. The rule that a user can only see leads from their own source is written into the database itself, not just the screens, so there is no page, export or report that can leak one partner's leads to another.
One system, three businesses
The builder gets inquiries through their website. Some of those become painting jobs and cabinet jobs for the partner companies. The painter and the cabinet shop each have their own websites and their own inquiries too. Everyone wanted the same thing: the follow up habits, the lead scoring, the mobile app, the morning numbers. Nobody wanted to pay for and learn three separate systems.
They also did not want to share customers. A painter's quote request is the painter's business. The builder should not see it, and the cabinet shop certainly should not. Partners are partners. They are not one company.
The simple version that does not work
The obvious approach is to hide things on the screen. Show the painter a filtered list. Give the builder a different filter. This is how a lot of shared systems are built, and it breaks the first time someone finds a page that forgot the filter. An export. A search box. A report. A link someone pastes into a text message. The data is all there, and the only thing standing between a user and the wrong lead is whether every single screen remembered the rule.
Over a year of changes and new features, some screen will forget.
What we did instead
Every lead in the system has a field called source. It says which website, and therefore which company, the lead came from. Every user belongs to one source, or to all of them for the person who administers the system.
Then we wrote the rule into the database, which is the storage layer that every screen, report, and export has to go through. The rule says: when this user asks for leads, only return the ones whose source matches the user's source. It does not matter how the request arrived. A new page a developer builds next year gets the rule for free, because the database applies it before any page ever sees the data.
- The painter logs in and sees painting leads. Their lead list, their pipeline, their mobile app, their exports, their reports: painting only.
- The cabinet shop logs in and sees cabinet leads, the same way.
- The builder logs in and sees builder leads. When the builder refers a customer to the painter, a copy is created with the painter's source, and from that moment it belongs to the painter.
- The administrator sees everything, because someone has to be able to fix a lead that landed in the wrong place.
What this looks like in practice
Each company's website sends its leads to the same CRM, tagged with its own source. The alert for a new painting lead goes to the painter. The alert for a cabinet lead goes to the cabinet shop. The daily numbers page shows each company its own numbers. One codebase, one database, one login screen, three separate businesses.
When the painter wants to add a salesperson, that person is created with the painting source and sees what the painter sees. When the builder wants to review how referrals are going, the administrator can pull that view without any partner's day to day being affected.
What enforced at the database buys you
Mostly, it buys you sleep. A partner never has to take your word that the screens are filtered. The rule is in the one place every request has to pass through, and it can be shown to anyone who asks. If a developer makes a mistake in a new feature, the worst outcome is a page that shows nothing, not a page that shows everything.
It also makes adding a fourth company a small job. A new source, a few new users, and the rule already covers them.
When this is the right shape
It fits companies that refer to each other, a franchise with independent owners, a group of practices under one brand, or a business with separate divisions that should not read each other's pipeline. It does not fit a single company with one sales team, where everyone should see everything. The design follows the relationship, not the other way around.
The builder, painter, and cabinet shop have been running this way for a while now, and the same source rule sits under the CRMs we build for landscapers and advisors too, because a rule that lives in the database is one less thing anyone has to remember.
Questions people ask
Can the builder see the painter's leads?
No. Each user is tied to one source, and the database only returns leads from that source no matter which page, export or report asks. The only account that sees across companies is the administrator, who needs it to fix leads that land in the wrong place.
What happens when the builder refers a customer to a partner?
A copy of the lead is created with the partner's source, and from then on it belongs to the partner. The partner gets the alert, works the lead in their own pipeline, and the builder keeps their original record without seeing the partner's notes.
Why enforce the rule in the database rather than in the app?
Because every screen, search, export and future feature has to go through the database, so the rule cannot be skipped by accident. If a new page forgets the filter, it shows nothing instead of showing another company's customers.
Want this done for your business?
Two minute intake. A real person reads every one and replies within a business day.
Keep reading
The five minute rule: where most businesses lose the lead
The form worked, the lead still went to a competitor.
Running itWhat a weekly website audit catches that a redesign never will
Most website problems are not design problems.
Running itA CRM is a promise to reply: how we wire follow up so nobody is forgotten
How we wire a trade business CRM so no lead is forgotten: an instant reply in the owner's voice, a dated task, a nudge when a prospect goes quiet, email in view.