Duplicate Leads From Lead Aggregators: Why You Pay Twice for One Homeowner
If you buy leads from more than one aggregator, you are buying the same homeowner more than once. It happens because homeowners fill out several forms while researching a project, and the vendors selling those forms cannot see each other. Your CRM will not save you, because it meets the lead after the vendor has already billed you. The only place this gets solved is at your own intake, before the lead is delivered.
What counts as a duplicate lead
A duplicate lead is the same homeowner sold to you more than once. It can arrive from one source or several, minutes apart or weeks apart, under the same product line or a different one. If the email or the phone number matches a lead you already bought, you are paying twice for one conversation.
There are four kinds, and most contractors only catch the first.
Same source, same campaign. A homeowner submits the same form twice, or a vendor’s system re-posts a lead. This is the easiest to catch and the least common.
Cross-source. The same homeowner arrives from two different aggregators, sometimes days apart. Neither vendor knows about the other, so neither one flags it.
Cross-campaign. A homeowner who came in for one product comes back for another. A walk-in tub inquiry in March and a shower-to-tub conversion inquiry in April can be the same person and the same conversation your rep already had. If you run several product lines, this one quietly eats budget every month.
Re-submission over time. A homeowner who inquired 45 days ago fills out a new form. Whether that is a duplicate or a fresh opportunity depends on your sales cycle, which is what the duplicate window is for.
Why the same homeowner reaches you twice
The vendors are not doing anything unusual. The structure of the market produces this result on its own.
Homeowners shop. Someone researching a roof does not fill out one form, they fill out four, across four sites, in one sitting. Each of those submissions flows into a different network of buyers. If you buy from two of those networks, you just bought the same person twice, and both vendors delivered exactly what you asked for.
Nobody upstream can check. There is no shared database between lead vendors, and there should not be. The only party in the transaction who can see all of your sources at once is you.
That is also why buying from better sources does not solve it. Even the best aggregators will collide with each other, because the collision happens on the homeowner’s couch and not in anyone’s system. The more sources you run, the more collisions you get, which means growth makes this worse rather than better.
See our vetted list of home improvement lead sources
Catching a duplicate at intake is better for the vendor too. The alternative is what most contractors do now: pay, notice weeks later, and open a credit dispute. A real-time rejection tells the vendor immediately, nothing gets billed, and the vendor can sell that lead to another buyer instead of writing off a credit.
What duplicates cost you
The invoice is the smaller half. Work an example with your own numbers.
| Input | Example |
|---|---|
| Leads purchased per month across your sources | 600 |
| Average cost per lead | $75 |
| Monthly lead spend | $45,000 |
| Share that duplicate a lead you already bought | your number |
Say your own count comes back at 10%. That is 60 leads a month you already owned, or $4,500 a month. Substitute whatever your data actually shows, and if you do not know the number, that is the first thing to measure.
Run your numbers in the ROI calculator
The second cost is hidden in your reporting. If 600 leads contain 60 duplicates, you paid $45,000 for 540 unique homeowners, which is $83 a lead and not $75. Every duplicate inflates the true cost of every source you buy from, so your source comparisons are wrong until duplicates are out of the data.
The third cost never appears on any invoice. It is your rep calling a homeowner who already told your company no last week. That call wastes ten minutes, it makes your company look disorganized to that homeowner, and it teaches your reps to distrust the lead list.
Read about the other five ways purchased leads waste money
Why your CRM cannot fix this
Most CRMs have some form of duplicate detection, so contractors assume they are covered. They are not, for three reasons.
It happens after the sale. Your CRM sees the lead after the vendor has delivered and billed it. Merging two records does not get your money back. To avoid paying, the duplicate has to be caught at the moment the vendor posts it.
It only sees one system. If leads reach your CRM from six sources through six integrations, dedup logic tends to be inconsistent across them. Anything sitting in your dialer or your texting tool is invisible to the CRM entirely.
It has no connection to billing. The point of catching a duplicate is not paying for it, and that only works when the rejection is a real-time API response the vendor’s billing system respects. A CRM merge happens where no vendor can see it.
This is why the check has to sit between your lead sources and your CRM rather than inside it. Every source posts to one intake point, that point checks each lead against what you have already bought, and only clean leads pass through.
How to stop paying for duplicates
-
Centralize your intake
Every source posts to one place before anything reaches your CRM. Cross-source duplicates can only be caught by something that sees every source at once. If one vendor posts to your CRM and another posts to your dialer, nothing can compare them.
Route the sources that do not allow rejections through as well. You will not save money on those leads, but they still join the record that protects every other source you buy from.
-
Match on email and phone
Homeowners do not fill out forms consistently. The same person will use one email with two phone numbers, or keep the phone and change the email. Checking both fields independently catches cases that either one alone would miss.
-
Load your recent lead history before you go live
A duplicate check cannot catch anything on day one if it starts empty. During onboarding, your lead history across all sources gets loaded in, so incoming leads are checked against what you already bought rather than only against what arrives from here forward.
-
Check across campaigns
If you sell roofing and windows, the same homeowner arriving under both products in the same month is one opportunity. Contractors running three or more product lines are usually surprised by how much this alone catches.
-
Reject in real time, tied to billing
The rejection has to happen through an API response at the moment the vendor posts the lead. On sources that support real-time rejection, a rejected duplicate is not billed. Some sources cannot tie billing to a real-time response, and for those the duplicate is still kept out of your CRM and you get the records to dispute the charge. Which sources fall into which category gets confirmed before launch.
How long should a duplicate window be
The window is how far back the check looks. Most Opta customers land somewhere between 30 and 90 days, and some run shorter or block indefinitely.
There is no correct number, because the tradeoff runs in both directions. A short window means you pay again for a homeowner who is still in your pipeline from three weeks ago. A long window means you block a homeowner who genuinely re-entered the market and is now ready to buy.
Your sales cycle is what settles it. If most of your deals close within a certain number of days of first contact, a homeowner reappearing inside that period is almost always someone your team is already working. A homeowner reappearing 14 months later is not a duplicate, they are a homeowner who finally decided to do the project.
Blocking forever sounds safe and usually is not. It quietly removes people who took two years to commit, which in remodeling is a real share of the market.
You can also reject too much
Rejection is not a score to maximize. The goal is to stop paying for leads that were never workable, not to push the reject rate up. Every filter you add is a rule about which homeowners you will never speak to, and some of those rules cost more than the leads do.
Test rules against your own history before turning them on. Run your last 30 days of disposition reporting through the filters you are considering and look at what would have been blocked. Contractors routinely stack up rules that would have killed sales they made last month, and a filter that blocks a job you would have closed costs far more than a duplicate does.
Keep the settings current, too. A duplicate window set to forever and a zip list you have not touched since you opened a new market both reject leads you actually want.
This is also why cutting a source because its rejection rate looks high is usually the wrong move. On sources that support real-time rejection, the blocked leads cost you nothing, so a source with a high duplicate rate can still be the cheapest revenue you buy. Judge a source on your cost of marketing, meaning what it costs you against the revenue it produces, which is a number that lives in your CRM rather than in any filtering platform.
What this looks like in practice
Install America is a multi-product remodeler working in Pennsylvania, Tennessee, and North Carolina. Before Opta, leads reached their reps with no check in front of them. They were live in four business days.
We were paying for ridiculous stuff. Duplicates, bad phone numbers, leads that thought they were getting something for free. These were the things we were looking to eliminate.
Tom McMillan, CEO, Install America
Where the money actually goes
Duplicates are not a vendor problem and they are not a data hygiene problem. They are a consequence of where you sit in the transaction, as the only party who can see every source you buy from. That position is also the only place the problem can be solved, and it has to happen before the lead is delivered, because after delivery all you have left is a dispute.
Common questions
Do I still pay for a duplicate that gets rejected?
On sources that support real-time rejection, no. The lead is refused through the API response before delivery, so the charge never lands. Some sources cannot tie billing to a real-time response, and for those the duplicate is kept out of your CRM and you get the records to dispute the charge. Which sources fall into which category is confirmed before launch.
What if a homeowner comes back a year later?
That is not a duplicate, it is a homeowner who is finally ready, and your duplicate window is what keeps you from blocking them. A window matched to your sales cycle catches the person still in your pipeline and lets the person who waited two years through.
Will routing leads through a filter break my source attribution?
No. Your CRM’s source ID and product ID are passed on every lead that gets delivered, so leads show the correct source in your disposition reporting. Filtering changes which leads arrive, not how they are labeled.
See what you’re paying twice for
Book a 15-minute demo. We’ll look at your sources and show you what a duplicate check would have blocked.
Book a demoNo setup fees. No long-term contracts. Live in one week.