Enrich Contacts with Company Data
Merging contact records with fund data breaks when "Bridgewater" needs to match "Bridgewater Associates" and "D.E. Shaw" needs to match "D. E. Shaw & Co." This case study demonstrates fuzzy matching that understands company name conventions.
| Metric | Value |
|---|---|
| Rows processed | 10 |
| Matched | 10 (100%) |
| Total cost | $0.00 |
| Time | 9 seconds |
Add FutureSearch to Claude Code if you haven't already:
claude mcp add futuresearch --scope project --transport http https://mcp.futuresearch.ai/mcp
With both CSVs in your working directory, tell Claude:
Merge crm_contacts.csv with crm_funds.csv. Match contacts to their fund based
on company name, ignoring legal suffixes (LLC, Inc, LP), abbreviations
(Mgmt = Management, Tech = Technologies), and extra descriptors.
Claude calls FutureSearch's merge MCP tool:
Tool: futuresearch_merge
├─ task: "Match contacts to their associated fund/company..."
├─ left_csv: "/Users/you/crm_contacts.csv"
├─ right_csv: "/Users/you/crm_funds.csv"
├─ merge_on_left: "company_name"
├─ merge_on_right: "fund_name"
└─ relationship_type: "one_to_one"
→ Submitted: 10 rows for merging.
Session: https://futuresearch.ai/sessions/8e2eb233-e2cb-4144-b949-0e4fb4962cb2
Tool: futuresearch_results
→ Saved 10 rows to /Users/you/merged_contacts.csv
All 10 matched in 9 seconds for $0.00. View the session.
Add the FutureSearch connector if you haven't already. Then upload crm_contacts.csv and crm_funds.csv and ask Claude:
Merge crm_contacts.csv with crm_funds.csv. Match contacts to their fund based on company name, ignoring legal suffixes (LLC, Inc, LP), abbreviations (Mgmt = Management, Tech = Technologies), and extra descriptors.
Go to futuresearch.ai/app, upload crm_contacts.csv and crm_funds.csv, and enter:
Merge crm_contacts.csv with crm_funds.csv. Match contacts to their fund based on company name, ignoring legal suffixes (LLC, Inc, LP), abbreviations (Mgmt = Management, Tech = Technologies), and extra descriptors.
pip install futuresearch
export FUTURESEARCH_API_KEY=your_key_here # Get one at futuresearch.ai/app/api-key
import asyncio
import pandas as pd
from futuresearch import create_session
from futuresearch.ops import merge
contacts_df = pd.read_csv("crm_contacts.csv")
funds_df = pd.read_csv("crm_funds.csv")
async def main():
async with create_session(name="CRM Merge Workflow") as session:
result = await merge(
session=session,
task="""
Match contacts to their associated fund/company.
Company names may vary between tables. Match on core company name,
ignoring legal suffixes, abbreviations, and descriptors.
""",
left_table=contacts_df,
right_table=funds_df,
merge_on_left="company_name",
merge_on_right="fund_name",
)
return result.data
merged = asyncio.run(main())
Results
| Contact | Company (left) | Fund (right) |
|---|---|---|
| John Smith | Bridgewater | Bridgewater Associates |
| Sarah Johnson | Citadel LLC | Citadel |
| Jessica Wang | D.E. Shaw | D. E. Shaw & Co. |
| Robert Brown | Point72 Asset Mgmt | Point72 Asset Management |
| Amanda Wilson | Renaissance Tech | Renaissance Technologies |
The merge cascade handled all variations (abbreviations, suffixes, spacing) via fuzzy matching without needing LLM calls. When simpler methods work, FutureSearch uses them.