Duplicate leads in a solar CRM usually start like this. At 7:10 pm on a Thursday, a homeowner in Adajan, Surat, fills in your Meta lead form for a 5 kW system. At 8:05 pm he sends an enquiry through IndiaMART, because he saw your catalogue there last month. Next morning he taps your JustDial listing. By noon your team holds three rows for him in three places, and three reps have rung him. When he picks up the third call he says, a little tired, that he has already spoken to two of you.
That story is made up, but any team that buys portal leads will recognise it. The CRM holds only what you put in. The copies are made upstream, where each portal gives you its own record of the same person, and downstream, where nobody has agreed whose lead it is.
This guide gives you a clean-up you can run in Excel or Google Sheets before import, and team rules for repeat enquiries. What IndiaMART and JustDial say about their own leads was read on their pages on 31 October 2026. Meta's help pages would not open for us, so Meta is described in general terms only. We do not claim that Quickest Solar CRM detects duplicate leads or connects to IndiaMART, JustDial or Meta. The method works on files you control, so it works with any CRM.
Key takeaway. Duplicate leads in a solar CRM are cleaned before import, not after. Stack every source in one sheet, cut each phone number to ten digits, flag repeats with a count formula, then give each repeat one of four verdicts (merge, reopen, pair or return) instead of deleting it. The first rep with a logged contact owns the lead, and the team writes that rule down.
Why one homeowner shows up as three or four leads
One person becomes several leads because every channel keeps its own record and none of them knows about the others. A Meta form, an IndiaMART enquiry and a JustDial listing each log a new row for each action, without checking whether you already have the person. Our guides on missed-call numbers, click-to-WhatsApp ads and expo leads each produce a list that must be merged with the rest. The table shows five ways a copy gets made.
The cost is more than a double call. Your lead count rises, so your cost per lead looks better than it is, and your source attribution credits the wrong channel. A rep who rings someone already in talks with a colleague can lose the customer's trust.
| Where the copy is made | Example | Who creates it | Fix |
|---|---|---|---|
| Another source | Same person on Meta, IndiaMART and JustDial | The person, shopping around | Match across sources before import |
| Same source, new action | Two enquiries and a call from one IndiaMART buyer | The portal, which logs each action | Merge on mobile and email |
| Overlapping export | Yesterday's rows reappear in today's file | Your export routine | Keep an ID column; compare with your master list |
| Your own channels | Missed call, then WhatsApp, then expo card | Your marketing | One sheet for every source |
| Your team | A rep adds a lead from a phone call that is already in the portal list | Reps, with no rule on who adds what | One person imports; reps log activity only |
Watch out. Do not aim for zero repeats. A person who enquires in three places is comparing installers, and other installers are calling them too. The repeat is a signal to move faster, not a row to throw away.
What IndiaMART, JustDial and Meta say about repeat enquiries
IndiaMART's own documentation says repeat contacts from one buyer arrive as separate records. JustDial's app listing says only that businesses are notified of enquiries. Meta's help pages would not open for us.
IndiaMART. Its help page on connecting Lead Manager to outside CRMs (dated 11 December 2025, read 31 October 2026) says: "if the same Buyer has sent multiple Enquiries including Calls, they all will come as separate records, but you may be considering them duplicates." It adds: "If a Buyer had sent two Enquiries and had made a call, the API will return 3 records for it." IndiaMART's own advice for combining them is "merging logic with the combination of SENDER_MOBILE+SENDER_EMAIL" (Pull API page). A second page, dated 1 June 2026, says the field UNIQUE_QUERY_ID "can be and should be used for duplication check between any two leads" (Push API page).
Two details matter for a sheet. A missing buyer name comes through as the default "IndiaMART Buyer", and each lead carries a mobile or an email, not necessarily both. So a name is a poor key, and a mobile alone will miss some people. The page also treats a catalogue view within 7 days of a conversation as follow-up, "to avoid sending duplicate data". All of this describes API output; we have not tested your Lead Manager screen.
3records
Two enquiries plus one call from one buyer
Source: IndiaMART Pull API help page, updated 11 Dec 2025
7days
Days of buyer-seller inactivity after which a catalogue view counts as a new lead (API output)
Source: IndiaMART Pull API help page, updated 11 Dec 2025
10digits
Length of a mobile number in India, excluding the country code
Source: TRAI recommendations, 29 May 2020
We make no claim that Quickest Solar CRM uses this API, and the pages say its output "cannot be directly imported into MS-Excel". The sheet method below works from whatever list you can copy or export from your own account.
JustDial. JustDial's own listing for its Business app on the App Store (read 31 October 2026) says: "Receive Real-Time Enquiries - Get notified instantly when a customer sends an enquiry or request." That is all we could confirm, as its other pages returned an access error. Treat each notification as one row with a time. For setup and cost see our guide to solar leads from JustDial.
Meta. We could not open Meta's lead-ad help pages, so we say nothing about how Meta treats a second submission or how long it keeps the lead file. Export on a fixed schedule, check Meta's help centre for current rules, and count repeats in your own file.
| Source | What its own page says (read 31 Oct 2026) | What it means for your sheet |
|---|---|---|
| IndiaMART | Repeat enquiries and calls are separate records. Name can be a default. A lead has a mobile or an email. | Key on mobile, then email. Never on name alone. Keep any ID column. |
| JustDial | App listing: notified instantly of an enquiry. Nothing else confirmed by us. | One row per enquiry, with the time. Match on mobile like every other source. |
| Meta lead ads | Help pages could not be opened. No claim made. | Export on a fixed schedule. Watch your own file for repeats. |
| Your own channels | Your records | Same sheet, same keys. See the missed-call and expo guides. |
Four kinds of duplicate leads, and a different fix for each
Not every repeat is a copy. A tool that deletes every second row treats all four kinds alike, which is how a real customer gets lost.
| Verdict | What it looks like | What you do | Who owns it |
|---|---|---|---|
| Merge | Same person, same need, seen in two or three places | Keep the earliest row, copy the other sources into its notes, move later rows to a spare tab. | Whoever logged the first real contact |
| Reopen | Same person, new need (a 3 kW home first, now a 10 kW shop) | One record; add the new need to its notes and set a fresh follow-up date. | The current owner, who is told the same day |
| Pair | Same mobile, different person (two family members on one phone) | Two records, both labelled "shared phone". One rep calls both. | One rep, so the household hears one voice |
| Return | Someone you already have, lost or gone cold, enquires again | Fresh enquiry, but attach the old notes before anyone calls. | Normal routing; the new rep reads the history first |
Take Pair seriously. Two people on one mobile are often husband and wife, and both may matter to the sale. Delete one and you lose a decision-maker (see our guide to qualifying solar leads). Return fails the other way: teams merge the new enquiry into the old Lost record, where nobody sees it. A person who comes back by choice has told you something, so make sure a rep sees it.
The Same-Person Test: stack, key, flag, decide, import
The Same-Person Test is a six-step routine you run on every batch before import. It asks one question of every row: is this someone we already have? It uses three keys in order: the mobile number, then the email, then name plus area. One match sends a row to review. Two agreeing keys, or a rep who has spoken to the person, confirm it.
Mobile comes first because every source has it. India's mobile numbers are ten digits excluding the country code, according to the TRAI recommendations of 29 May 2020 (TRAI, para 2.9). Forms and exports often add 91, +91 or a leading 0, so cut each number to its last ten digits. Email is second, because an IndiaMART row can arrive with no mobile. Name plus area is weakest: the same person writes "Meena Shah" in one form and "Meena S" in another.
-
1
Stack
Put every source into one sheet, oldest first, with Source and Received (date and time) columns. Keep each row's original ID.
-
2
Key
Build helper columns: the ten-digit mobile, the lowercase email, a cleaned name. Leave a key blank when data is missing, so blanks never match.
-
3
Flag
Add two running counts: one for the mobile, one for name plus area. Anything above 1 goes to review.
-
4
Decide
A person looks at each flagged row and picks a verdict: merge, reopen, pair or return. This is the one step you do not hand to a formula.
-
5
Merge
The earliest row stays. Copy later sources and needs into its notes. Move later rows to a spare tab named Merged away.
-
6
Import and remember
Import five rows as a test, then the rest. Add the batch's keys to a Master list, so tomorrow's batch is checked against everything you have loaded.
Fast tip. Keep the Master list as its own sheet with one column of ten-digit mobiles. It is the memory your CRM may not have. Every new batch is checked against it before import.
The sheet: columns and formulas for Excel and Google Sheets
The same formulas work in Excel and Google Sheets. Use one tab called Batch, paste the sources under each other, and sort by Received, oldest first, so the first row for a person is the earliest. Set the mobile column to text before pasting, so a number with 91 in front is not shown in scientific notation.
| Column | Name | What goes in it |
|---|---|---|
| A | Row | Original position or the portal's own ID, if it gives one |
| B | Received | Date and time the enquiry arrived |
| C | Source | Meta, IndiaMART, JustDial, Missed call, Expo, WhatsApp |
| D | Name | As typed by the person |
| E | Mobile as typed | Whatever came in, spaces and +91 included |
| F | If given | |
| G | Area | Locality or PIN code |
| H | Need | Home or shop, kW, bill, any note |
| I | Mobile key | Formula: the last ten digits only |
| J | Name key | Formula: lowercase, no stray spaces, placeholder names blanked |
| K | Mobile seen | Formula: 1 for the first time this mobile appears, 2 for the second |
| L | Name and area seen | Formula: the same, for name plus area |
| M | In Master | Formula: known or new |
| N | Verdict | You type: merge, reopen, pair, return, or keep |
Formulas for row 2, filled down:
| Column | Formula for row 2 | What it does |
|---|---|---|
| I Mobile key | =IF(E2="","",RIGHT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(E2," ",""),"-",""),"+",""),".",""),10)) | Strips spaces, hyphens, plus signs and dots, keeps the last ten characters. +91 98250-11111 and 09825011111 become the same key. |
| J Name key | =IF(OR(TRIM(D2)="",LOWER(TRIM(D2))="indiamart buyer"),"",LOWER(TRIM(D2))) | Trims, lowercases, and blanks missing names and the IndiaMART default. |
| K Mobile seen | =IF(I2="","",COUNTIF($I$2:I2,I2)) | A running count. The range grows as you fill down, so row 5 counts rows 2 to 5. |
| L Name and area seen | =IF(OR(J2="",G2=""),"",COUNTIFS($J$2:J2,J2,$G$2:G2,G2)) | Catches a person whose mobile is missing from one source. |
| M In Master | =IF(I2="","",IF(COUNTIF(Master!$A:$A,I2)>0,"known","new")) | Looks for the key on your Master tab, one column of mobiles already imported. |
Microsoft's COUNTIF page gives the syntax as COUNTIF(range, criteria), and Google Sheets has the same function. Add a length check too: a key that is not ten characters is a typo or a landline, and needs fixing by hand.
Watch out. The IF(...="","", ...) wrapper in columns I to L is not decoration. Without it, every row with no mobile would be counted as a match for every other row with no mobile, and half your sheet would light up as duplicates of nothing.
Why we flag instead of using Remove Duplicates
Excel has Data, then Remove Duplicates. Google Sheets has Data, then Data cleanup, then Remove duplicates. They suit a single-source list, not a mixed batch. Microsoft says "removing duplicate values means that you are permanently deleting duplicate values", advises copying the original first, and says the comparison depends on what appears in the cell, not the value stored underneath, so "98250 11111" and "9825011111" differ until cleaned (Microsoft Support). Google says cells with "identical values but different letter cases, formatting or formulas are considered to be duplicates" (Google Docs Editors Help).
Remove Duplicates works when
- ✓The list is from one source and one person
- ✓Every row has a clean ten-digit mobile
- ✓A repeat always means the same person with the same need
- ✓You kept a copy of the original sheet
It fails when
- ✗Two people share one mobile (Pair), because it deletes the second
- ✗A new need arrives from the same person (Reopen), because the new need is lost with the row
- ✗A person has an email but no mobile in one source
- ✗You cannot get the deleted rows back
We flag with formulas, decide by eye and move rows to a spare tab. It is the only way to tell Kavita from Sandeep.
A worked example: twelve rows, seven people
The example is illustrative: invented people, numbers and times, arranged to show every verdict once. Twelve rows arrive over four days from three sources, sorted oldest first. Nilesh Rana is already on the Master tab as Lost seventy days ago.
| # | Source | Received | Name as typed | Mobile as typed | Mobile key | Mobile seen | Name and area seen | Verdict |
|---|---|---|---|---|---|---|---|---|
| 1 | Meta | 12 Nov, 7:10 pm | Rakesh Patel | 98250 11111 | 9825011111 | 1 | 1 | Keep (first) |
| 2 | IndiaMART | 12 Nov, 8:05 pm | IndiaMART Buyer | +91 98250-11111 | 9825011111 | 2 | (blank) | Merge into 1 |
| 3 | JustDial | 13 Nov, 9:30 am | rakesh patel | 09825011111 | 9825011111 | 3 | 2 | Merge into 1 |
| 4 | Meta | 13 Nov, 11:00 am | Meena Shah | 9824022222 | 9824022222 | 1 | 1 | Keep (first) |
| 5 | JustDial | 13 Nov, 2:15 pm | Meena S | 98240-22222 | 9824022222 | 2 | 1 | Merge into 4 |
| 6 | IndiaMART | 13 Nov, 3:40 pm | Dinesh Mehta | 9879033333 | 9879033333 | 1 | 1 | Keep (first) |
| 7 | IndiaMART | 14 Nov, 10:05 am | Dinesh Mehta | 9879033333 | 9879033333 | 2 | 2 | Reopen: add to 6 |
| 8 | Meta | 14 Nov, 12:20 pm | Kavita Joshi | 9898044444 | 9898044444 | 1 | 1 | Keep (first) |
| 9 | Meta | 14 Nov, 5:45 pm | Sandeep Joshi | 9898044444 | 9898044444 | 2 | 1 | Pair with 8 |
| 10 | JustDial | 15 Nov, 10:30 am | Hardik Desai | 9904055555 | 9904055555 | 1 | 1 | Keep (first) |
| 11 | IndiaMART | 15 Nov, 4:00 pm | Hardik Desai | (none, email only) | (blank) | (blank) | 2 | Merge into 10 |
| 12 | Meta | 16 Nov, 6:15 pm | Nilesh Rana | 9712066666 | 9712066666 | 1 (known) | 1 | Return: attach old notes |
The formulas find the repeats and a person decides.
- Rows 1, 2 and 3 share one mobile once the formatting is stripped. Row 2's name is the IndiaMART default, so only the mobile caught it. Merge.
- Rows 4 and 5 share a mobile, but "Meena Shah" and "Meena S" do not match as names. Only the mobile key finds this one. Merge.
- Rows 6 and 7 are one person with a second need: a 3 kW home on the 13th, a 10 kW shop on the 14th. This is Reopen: one record, a new note, a new follow-up date.
- Rows 8 and 9 share a mobile but are two people. A delete tool would drop Sandeep. This is Pair.
- Row 11 has an email and no mobile, so only the name and area count caught it. Merge into row 10.
- Row 12 is known from the Master tab. This is Return, and the rep reads the old notes before calling.
Worked example. Twelve rows became seven records: rows 1, 4, 6, 8, 9, 10 and 12 are imported, and five rows (2, 3, 5, 7 and 11) go to the Merged away tab with their source and need copied into the surviving record. Seven people, not twelve, are called. Assumptions: the sources and rows are invented, and the Master tab already held row 12.
Before import, check that the mobile column has not turned into scientific notation. Import five rows alone, see how the columns landed, then import the rest. Our guide to moving from Excel to a solar CRM covers the same clean-up for an old spreadsheet, and the comparison of a CRM and a spreadsheet shows where a sheet stops being enough.
Who owns a repeat enquiry: seven rules to write down
A repeat enquiry belongs to the rep with the first logged contact, for as long as that contact is alive. Clean data does not stop two reps calling one person. Only a written rule does. The windows below are our suggested starting points, not a standard, so set your own. "Logged" is the key word: "I called him last week from my own phone" does not count unless the call is in the lead's history with a date.
| Situation | Rule | Why |
|---|---|---|
| Repeat enquiry while the lead is open | Stays with the current owner, who is told the same day. | A second voice breaks the relationship. |
| Owner has logged no contact in seven days | Ownership lapses; route by your normal rule. | Stops a rep sitting on a lead. |
| Existing customer asks for a second job (a shop after a home) | The rep who sold the first job is offered it first; if they cannot take it that day, it routes. | Trust is built, but speed still counts. |
| Lost or silent lead returns | Route normally; the new owner reads the old notes first. | The history avoids repeating questions. |
| Same mobile, two people | One rep owns both records, labelled shared phone. | One household should hear one voice. |
| Two reps both logged a first call | The earlier logged time wins. | A fact settles it, not a view. |
| A rep leaves or is on leave | Open leads are re-routed within a day. | No lead sits with nobody. |
An illustrative case: Rakesh's Meta lead arrives at 7:10 pm. Asha rings at 7:25, sends a WhatsApp message and logs both. His IndiaMART enquiry lands at 8:05. At 9:50 next morning Bhavin sees the JustDial alert. Asha's logged contact is under seven days old, so the lead stays with her, and Bhavin adds a note that Rakesh enquired on two more portals. That tells Asha he is shopping around and she should move first.
Pair this with our solar lead routing rules and follow-up cadence. In Quickest Solar CRM you can log activities on a lead, set follow-up reminders and filter leads, so a logged contact is easy to find. We do not claim it assigns or locks a lead to a rep. Use a label such as the rep's first name and filter on it.
What to say when the second call has already happened
A short, honest sentence beats pretending the first call never happened.
| The customer says | Say this | Then |
|---|---|---|
| "I already spoke to someone from your company." | "Sorry for the second call. That was Asha, and she will stay your one contact. Is 4 pm tomorrow still good for the site visit?" | Log the call, hand back to the owner, do not pitch. |
| "You called me from a different number." | "Yes, our team has more than one line. I will note this number so that you hear from one person only." | Add the number to the lead's notes. |
| "I enquired on three sites, who are you?" | "We saw your enquiry in more than one place and joined them. I am the person who will help you, and I have your 5 kW home request in front of me." | Confirm the need once. Do not ask for the bill again if the owner already has it. |
If the person cannot be reached, a short WhatsApp message does the same job: "Namaste Rakesh ji, we found your solar enquiry in a few places and have joined them, so Asha will be your one contact. She will call you at 4 pm tomorrow." Our WhatsApp follow-up templates have wording you can adapt.
Judge each source by new people, not rows
Once the sheet is clean, count three things per source: rows received, new people it reached first, and repeat rows. A source that sends many rows but few new people costs more per customer than it looks.
| Source | Rows | New people first reached here | Repeat rows | Cost at an assumed ₹300 a row | Cost per new person |
|---|---|---|---|---|---|
| Meta | 5 | 4 (plus 1 returning) | 0 | ₹1,500 | ₹375 |
| IndiaMART | 4 | 1 | 3 | ₹1,200 | ₹1,200 |
| JustDial | 3 | 1 | 2 | ₹900 | ₹900 |
| Total | 12 | 6 new, 1 returning | 5 | ₹3,600 | ₹600 |
Worked example. The ₹300 a row is an assumption to make the arithmetic visible, not a rate from any portal or ad account. Replace it with your own cost. Total ₹3,600 divided by 6 new people gives ₹600 per new person, against ₹300 per row.
The table is a first-touch view and is unfair to later sources, since IndiaMART's row 2 may be why Rakesh picked up the phone. Use it to ask better questions, and see our guide to solar lead source attribution for the full test of which channel closes. Portal setup and cost are in our IndiaMART and JustDial guides.
We have not read any portal's terms on credits for repeat leads and make no claim that one exists. IndiaMART's help page on responding to enquiries (updated 6 March 2025) says only to "respond to buyer enquiries as soon as possible" and says nothing about repeats (IndiaMART help).
Six mistakes that make the clean-up worse
-
1
Matching on name
Names vary by form, and IndiaMART can send a default one. Use the mobile first, then email.
-
2
Deleting instead of moving
Microsoft says Excel's Remove Duplicates is permanent. Move rows to a spare tab instead.
-
3
Keeping the latest row
Keep the earliest row and add the later sources to its notes.
-
4
Importing before the Master check
A person you lost last quarter returns as a stranger. Check the Master tab first.
-
5
Merging family into one person
Two names on one mobile is a Pair, not a copy. Both stay, with one rep.
-
6
No owner rule
A clean sheet with no owner rule still produces a double call. Write the rule on one page.
Do the clean-up on a fixed day, on one sheet, by one person. If two people dedupe two halves of a list, the duplicates move between the halves.
How QuickEstimate fits
Quickest Solar CRM takes the clean file at the end of the process. You can add and edit leads, import many leads in one go from Excel, apply labels, set follow-up reminders, filter your leads, and log an activity on several leads at once. Team members can be added with permissions.
It does not do the matching for you, and we do not claim that it detects duplicate leads or receives leads from IndiaMART, JustDial or Meta. The clean-up happens in your sheet, so the same method works for any CRM. Whatever CRM you use, test it by importing one mobile number twice.
- Lead Capture, add leads by hand or import your cleaned sheet from Excel, then use one label for the source and one for the owner, so each rep can filter their own list.
- The Free plan, one user and ten proposals a month with no card, enough to try a five-row test import with your own cleaned batch.
If the whole sales team will use it, Pro is ₹6,999 per user per year with a three-user minimum, billed yearly with a GST invoice. The pricing page has the details.
What to do this week
Run one batch through the test, write down your ownership rule, and import only what survives.
- Today, 30 minutes. Open the last seven days of leads from every source. Paste them into one tab and sort by time. Add the mobile key and count repeats.
- Tomorrow, 20 minutes. Create the Master tab with one column of ten-digit mobiles you have already imported.
- This week, one meeting. Agree the seven ownership rules on one page, with your own numbers, where reps can see it.
- Before the next import. Give each flagged row a verdict, move merged rows to a spare tab, test-import five rows, then the rest.
- At month end. Count rows, new people and repeat rows per source, using the table above, and decide whether any source needs a closer look.
Frequently asked questions
What is a duplicate lead in a solar CRM?
A duplicate lead is a second record for a person or enquiry you already hold, such as the same homeowner arriving from IndiaMART, JustDial and a Meta ad. Not every repeat is a copy: a second need (reopen), two people on one mobile (pair) and a lost lead returning (return) each need more than deletion.
Does a solar CRM remove duplicate leads automatically?
It depends on the CRM, so test yours: import a small file with the same mobile number twice and see whether it warns, merges or creates two records. We do not claim that Quickest Solar CRM detects duplicate leads, so this guide cleans the file before import, which works with any CRM.
How do I find duplicate leads in Excel?
Put every source in one sheet, sort oldest first, and cut each mobile to its last ten digits in a helper column. Then use a running count, =COUNTIF($I$2:I2,I2), where I is the helper column. A result of 2 or more marks a repeat. Review each before removing anything.
How do I find duplicate leads in Google Sheets?
Use the same helper columns and the same COUNTIF and COUNTIFS formulas as in Excel. Google also has Data, then Data cleanup, then Remove duplicates, which treats cells with identical values but different letter cases or formatting as duplicates. Flag first, then decide by eye.
Should I delete duplicate leads or merge them?
Merge, and keep the removed rows on a spare tab. Keep the earliest row and copy the later sources and needs into its notes. Microsoft's help says Remove Duplicates permanently deletes the duplicate values and advises copying the original first.
Who should own a lead that enquires again on another portal?
The rep with the earliest logged contact, while that contact is less than a set number of days old. We suggest seven days as a starting point, which is our own default and not a standard. If the owner has logged nothing, route the lead normally.
Why does IndiaMART send the same buyer more than once?
IndiaMART's own help page on connecting Lead Manager to outside CRMs, updated 11 December 2025, says that if the same buyer sends multiple enquiries, including calls, they all come as separate records. Its example is two enquiries and a call returning three records. The page describes API output, so check your own Lead Manager screen.
Want to put this into practice?
Quickest Solar CRM gives you everything in this article, proposal automation, lead capture, WhatsApp follow-up, built for Indian solar EPCs.
Start free