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 madeExampleWho creates itFix
Another sourceSame person on Meta, IndiaMART and JustDialThe person, shopping aroundMatch across sources before import
Same source, new actionTwo enquiries and a call from one IndiaMART buyerThe portal, which logs each actionMerge on mobile and email
Overlapping exportYesterday's rows reappear in today's fileYour export routineKeep an ID column; compare with your master list
Your own channelsMissed call, then WhatsApp, then expo cardYour marketingOne sheet for every source
Your teamA rep adds a lead from a phone call that is already in the portal listReps, with no rule on who adds whatOne 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.

SourceWhat its own page says (read 31 Oct 2026)What it means for your sheet
IndiaMARTRepeat 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.
JustDialApp 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 adsHelp pages could not be opened. No claim made.Export on a fixed schedule. Watch your own file for repeats.
Your own channelsYour recordsSame 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.

VerdictWhat it looks likeWhat you doWho owns it
MergeSame person, same need, seen in two or three placesKeep the earliest row, copy the other sources into its notes, move later rows to a spare tab.Whoever logged the first real contact
ReopenSame 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
PairSame 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
ReturnSomeone you already have, lost or gone cold, enquires againFresh 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. 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. 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. 3

    Flag

    Add two running counts: one for the mobile, one for name plus area. Anything above 1 goes to review.

  4. 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. 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. 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.

ColumnNameWhat goes in it
ARowOriginal position or the portal's own ID, if it gives one
BReceivedDate and time the enquiry arrived
CSourceMeta, IndiaMART, JustDial, Missed call, Expo, WhatsApp
DNameAs typed by the person
EMobile as typedWhatever came in, spaces and +91 included
FEmailIf given
GAreaLocality or PIN code
HNeedHome or shop, kW, bill, any note
IMobile keyFormula: the last ten digits only
JName keyFormula: lowercase, no stray spaces, placeholder names blanked
KMobile seenFormula: 1 for the first time this mobile appears, 2 for the second
LName and area seenFormula: the same, for name plus area
MIn MasterFormula: known or new
NVerdictYou type: merge, reopen, pair, return, or keep

Formulas for row 2, filled down:

ColumnFormula for row 2What 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.

#SourceReceivedName as typedMobile as typedMobile keyMobile seenName and area seenVerdict
1Meta12 Nov, 7:10 pmRakesh Patel98250 11111982501111111Keep (first)
2IndiaMART12 Nov, 8:05 pmIndiaMART Buyer+91 98250-1111198250111112(blank)Merge into 1
3JustDial13 Nov, 9:30 amrakesh patel09825011111982501111132Merge into 1
4Meta13 Nov, 11:00 amMeena Shah9824022222982402222211Keep (first)
5JustDial13 Nov, 2:15 pmMeena S98240-22222982402222221Merge into 4
6IndiaMART13 Nov, 3:40 pmDinesh Mehta9879033333987903333311Keep (first)
7IndiaMART14 Nov, 10:05 amDinesh Mehta9879033333987903333322Reopen: add to 6
8Meta14 Nov, 12:20 pmKavita Joshi9898044444989804444411Keep (first)
9Meta14 Nov, 5:45 pmSandeep Joshi9898044444989804444421Pair with 8
10JustDial15 Nov, 10:30 amHardik Desai9904055555990405555511Keep (first)
11IndiaMART15 Nov, 4:00 pmHardik Desai(none, email only)(blank)(blank)2Merge into 10
12Meta16 Nov, 6:15 pmNilesh Rana971206666697120666661 (known)1Return: 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.

SituationRuleWhy
Repeat enquiry while the lead is openStays with the current owner, who is told the same day.A second voice breaks the relationship.
Owner has logged no contact in seven daysOwnership 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 returnsRoute normally; the new owner reads the old notes first.The history avoids repeating questions.
Same mobile, two peopleOne rep owns both records, labelled shared phone.One household should hear one voice.
Two reps both logged a first callThe earlier logged time wins.A fact settles it, not a view.
A rep leaves or is on leaveOpen 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 saysSay thisThen
"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.

SourceRowsNew people first reached hereRepeat rowsCost at an assumed ₹300 a rowCost per new person
Meta54 (plus 1 returning)0₹1,500₹375
IndiaMART413₹1,200₹1,200
JustDial312₹900₹900
Total126 new, 1 returning5₹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. 1

    Matching on name

    Names vary by form, and IndiaMART can send a default one. Use the mobile first, then email.

  2. 2

    Deleting instead of moving

    Microsoft says Excel's Remove Duplicates is permanent. Move rows to a spare tab instead.

  3. 3

    Keeping the latest row

    Keep the earliest row and add the later sources to its notes.

  4. 4

    Importing before the Master check

    A person you lost last quarter returns as a stranger. Check the Master tab first.

  5. 5

    Merging family into one person

    Two names on one mobile is a Pair, not a copy. Both stay, with one rep.

  6. 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.

  1. 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.
  2. Tomorrow, 20 minutes. Create the Master tab with one column of ten-digit mobiles you have already imported.
  3. This week, one meeting. Agree the seven ownership rules on one page, with your own numbers, where reps can see it.
  4. Before the next import. Give each flagged row a verdict, move merged rows to a spare tab, test-import five rows, then the rest.
  5. 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

Get the next post in your inbox.

One email a fortnight. Real solar sales benchmarks. Unsubscribe anytime.