FutureSearch Logofuturesearch
  • Blog
  • Solutions
  • Research
  • Docs
  • Evals
  • Company
  • Get Researchers
FutureSearch Logo

General inquiry? You can reach us at hello@futuresearch.ai.

Company

Team & CareersPressPrivacy PolicyTerms of Service

Developers

SDK DocsAPI ReferenceCase StudiesGitHub

Follow Us

X (Twitter)@dschwarz26LinkedIn
FutureSearchdocs
Your research team
Installation
  • All install methods
  • Claude.ai
  • Claude Cowork
  • Claude Code
  • Web App
  • Python SDK
  • Skill
  • MCP Server
Reference
  • API Key
  • classify
  • dedupe
  • forecast
  • merge
  • rank
  • agent_map
  • screen
  • Progress Monitoring
  • Chaining Operations
Guides
  • LLM-Powered Data Labeling
  • Add a Column via Web Research
  • Classify and Label Rows
  • Deduplicate Training Data
  • Filter a Dataset Intelligently
  • Join Tables Without Shared Keys
  • Rank Data by External Metrics
  • Resolve Duplicate Entities
  • Scale Deduplication to 20K Rows
Case Studies
  • Deduplicate Contact Lists
  • Deduplicate CRM Records
  • Enrich Contacts with Company Data
  • Fuzzy Match Across Tables
  • Link Records Across Medical Datasets
  • LLM Cost vs. Accuracy
  • Merge Costs and Speed
  • Merge Thousands of Records
  • Multi-Stage Lead Qualification
  • Research and Rank Web Data
  • Run 10,000 LLM Web Research Agents
  • Score Cold Leads via Web Research
  • Score Leads from Fragmented Data
  • Screen 10,000 Rows
  • Screen Job Listings
  • Screen Stocks by Economic Sensitivity
  • Screen Stocks by Investment Thesis
FutureSearchby futuresearch
by futuresearch

Deduplicate Contact Lists

Go to futuresearch.ai/app, upload both contact CSVs, and enter:

Merge these two contact lists to find the same person across both. Account for nicknames (Bob/Robert, Mike/Michael, Tom/Thomas), initials (S. Chen = Sarah Chen), and institution matching. When in doubt, favor false negatives over false positives.

7 matches found, 5 correctly left unmatched. Results are nearly instant.

Add the everyrow connector if you haven't already. Then upload both contact CSVs and ask Claude:

Merge these two contact lists to find the same person across both. Account for nicknames (Bob/Robert, Mike/Michael, Tom/Thomas), initials (S. Chen = Sarah Chen), and institution matching. When in doubt, favor false negatives over false positives.

7 matches found, 5 correctly left unmatched. Results are nearly instant.

Claude Code can diff two lists. But what if "Dr. Sarah Chen" on one list is "S. Chen" on another, and "Robert Johnson" appears as "Bob Johnson"? You need semantic matching that understands nicknames and initials.

Here, we get Claude Code to merge two overlapping contact lists (12 and 10 people) to identify duplicates across name formats.

MetricValue
Left list12 contacts
Right list10 contacts
Matched pairs7
Total cost$0.00
Time128 seconds

Add everyrow to Claude Code if you haven't already:

claude mcp add futuresearch --scope project --transport http https://mcp.futuresearch.ai/mcp

With both contact CSVs in your working directory, tell Claude:

Merge these two contact lists to find the same person across both. Account for
nicknames (Bob/Robert, Mike/Michael, Tom/Thomas), initials (S. Chen = Sarah Chen),
and institution matching. When in doubt, favor false negatives over false positives.

Claude calls everyrow's merge MCP tool:

Tool: everyrow_merge
├─ task: "Match contacts between two lists to identify the same person..."
├─ left_csv: "/Users/you/contacts_list_a.csv"
├─ right_csv: "/Users/you/contacts_list_b.csv"
├─ merge_on_left: "name"
├─ merge_on_right: "full_name"
└─ relationship_type: "one_to_one"

→ Submitted: 12 rows for merging.
  Session: https://futuresearch.ai/sessions/1d39b32d-d71e-48e8-8ac7-de907f86745a

Tool: everyrow_results
→ Saved 12 rows to /Users/you/merged_contacts.csv

7 matches found, 5 correctly left unmatched. View the session.

List AList BMatch Type
Dr. Sarah ChenS. ChenInitial + institution
Michael O'BrienMike O'BrienNickname
James WilsonJames R. WilsonMiddle initial
Robert JohnsonBob JohnsonNickname
Thomas LeeTom LeeNickname
Priya SharmaPriya S.Initial
Elena RodriguezElena R.Initial

David Kim, Anna Kowalski, Maria Santos, Jennifer Park, and Christopher Davis were correctly left unmatched (no counterpart in the other list). The merge handled all variations via fuzzy matching without needing LLM calls.

The everyrow SDK's merge() identifies the same person across lists with different name formats, nicknames, and initials.

MetricValue
Left list12 contacts
Right list10 contacts
Matched pairs7
Cost$0.00
pip install everyrow
export EVERYROW_API_KEY=your_key_here  # Get one at futuresearch.ai/api-key
import asyncio
import pandas as pd
from everyrow import create_session
from everyrow.ops import merge

list_a = pd.read_csv("contacts_list_a.csv")
list_b = pd.read_csv("contacts_list_b.csv")

async def main():
    async with create_session(name="Contact List Merge") as session:
        result = await merge(
            session=session,
            task="""
                Match contacts between two lists to identify the same person.
                Account for nicknames (Bob/Robert, Mike/Michael, Tom/Thomas),
                initials (S. Chen = Sarah Chen), and institution matching.
                Favor false negatives over false positives.
            """,
            left_table=list_a,
            right_table=list_b,
            merge_on_left="name",
            merge_on_right="full_name",
        )
        return result.data

merged = asyncio.run(main())

7 matches found at $0.00. The merge correctly handled nickname matching (Bob/Robert, Mike/Michael, Tom/Thomas), initial matching (S. Chen to Sarah Chen), and left 5 contacts unmatched when no counterpart existed.