Your new marketing list has tens of thousands of leads. How many of them are already in your CRM? We build a Snowflake native CRM Record Matching tool to solve accuracy, speed, and fidelity.
If your answer involves exporting CSVs, running VLOOKUPs in Excel, and praying nothing breaks – you’re not alone. And you’re leaving money on the table.
We built our DataTools Pro Snowflake app to remove painfully slow CRM record matching and identity reconciliation workflows forever. It’s a Snowflake native app that cleans, deduplicates, and matches your prospect lists against your CRM data, like Salesforce, without data ever leaving Snowflake.
Here’s the story of why we built it, what it solves, and how it works.
The Problem Nobody Wants to Talk About
Every B2B sales and marketing team runs into the same wall:
You buy a list. You run a campaign. You get leads. Then someone asks: “How many of these are already in Salesforce?”
What follows is a painful, error-prone, multi-hour ritual:
- Export your list to CSV
- Export Leads from Salesforce. Export Contacts from Salesforce. Export Accounts from Salesforce.
- Open Excel. Start matching. First by email. Then by name. Then by company.
- Manually tag each row: “Existing Lead,” “Existing Contact,” “Net New.”
- Add campaign columns. Add lead source. Add attribution tags.
- Pray you didn’t accidentally assign someone else’s lead.
- Import back into Salesforce via Data Loader.
- Repeat next week.
This process is broken in at least five ways:
- It’s slow. A 50K-row list can eat an entire day.
- It’s inaccurate. “John Smith” at “Acme Inc” and “Jon Smith” at “Acme Incorporated” are the same person – but VLOOKUP doesn’t know that.
- It’s insecure. You’re exporting CRM data to laptops, emailing spreadsheets, storing PII in shared drives.
- It’s not repeatable. Every analyst does it differently. No audit trail. No consistency.
- It doesn’t scale. What works for 500 rows collapses at 50,000.
The real cost isn’t the analyst’s time. It’s the revenue you lose when net-new prospects get ignored because they were falsely tagged as “already in CRM” – or when existing customers get cold-called because the match was missed.
What we built
DataTools Pro is a Snowflake Native Application that handles the entire pipeline:
Upload → Clean → Deduplicate → Match → Enrich → Export
All inside Snowflake. No data extraction. No external tools. No Excel.
It matches your prospect lists against Salesforce Leads, Contacts, and Accounts using AI-powered fuzzy matching — then gives you campaign-ready export files you can drop straight into Salesforce.
Feature 1: Data Cleaning That Actually Works
Before you can match anything, you need clean data. And “clean” in CRM data means handling problems like:
| Raw Input | Problem | Cleaned Output |
|---|---|---|
john.smith@acme.com, j.smith@personal.com | Multiple emails in one cell | Split into 2 separate records |
(555) 123-4567 | Inconsistent phone format | 5551234567 |
John smith | Extra whitespace, mixed case | JOHN SMITH |
5453 | Truncated zip code | 05453 |
Ryan O'Brien | Special characters | Handled gracefully |
DataTools Pro normalizes everything automatically:
- Smart column detection — AI-powered mapping that reads your column headers and sample data to figure out which field is which. No manual mapping needed for standard fields.
- Email normalization — splits multi-value email cells into separate records so no match is missed
- Phone standardization — strips formatting so
(555) 123-4567matches555.123.4567 - Deduplication — removes exact duplicates on the fields you choose before matching begins
- Encoding detection — handles UTF-8, Latin-1, CP1252, and other encodings without you ever noticing
Import Complete
Feature 2: Account Matchback – Match Companies, Not Just People
Sometimes you don’t have individual contacts. You have a list of company names and you need to know which ones are already Salesforce Accounts.
Company name matching is notoriously hard:
| Your List | Salesforce Account | Same company? |
|---|---|---|
| Acme Inc | Acme, Incorporated | Yes |
| JP Morgan Chase | JPMorgan Chase & Co. | Yes |
| Smith & Sons LLC | Smith and Sons | Yes |
| ABC Corp (DBA: Alpha Business) | Alpha Business Consulting | Maybe |
DataTools Pro handles this with a lexical-first matching strategy:
- Company name cleaning – strips legal suffixes (LLC, Inc, Corp, Ltd), removes parenthetical DBA text, normalizes punctuation
- AI-powered candidate search – Snowflake Cortex finds semantically similar company names, not just exact matches
- JaroWinkler scoring – precise string similarity that rewards matching prefixes (ideal for company names where “Acme” vs “Acme Inc” should score high)
- DBA / Legal name support – matches against both primary name and “Doing Business As” names
- State-aware matching – if both records have state data and the states differ, it’s flagged as a different business (prevents matching “Smith Plumbing” in Texas with “Smith Plumbing” in Oregon)
Tunable Thresholds
Every business has different tolerance for false positives vs. false negatives. The admin page lets you tune the matching thresholds:
- High confidence threshold (default: 93) – above this JaroWinkler score, it’s confidently “In CRM”
- Review threshold (default: 86) – above this, it needs human review
- Text match boost – if Cortex AI confidence is also high, a “Review” can be promoted to “In CRM”
Feature 3: Person Matchback – Find People in Your CRM
This is the core. You have a list of people. You need to know: who’s already a Lead or Contact in Salesforce, and who’s truly net-new?
How It Works
- One-time setup: An admin points the app at your Salesforce Lead table, Contact table, and Account table in Snowflake. The app builds a search index using Snowflake Cortex Search Service.
- Run a match: Upload your list (or point to an existing Snowflake table), click “Find Matches.” The app does the rest.
- Review results: Every row gets a confidence band:
| Status | What It Means |
|---|---|
| AUTO_MATCH | High confidence. Email match + name match, or phone match + name match. Safe to process automatically. |
| REVIEW | Probable match but needs human eyes. Email matched but name didn’t, or fuzzy name match without a hard identifier. |
| NO_MATCH | Not found in CRM. This is a net-new prospect. |
The Matching Intelligence
This isn’t simple email lookup. The matching engine combines multiple signals:
- Email match – exact match, case-insensitive
- Phone match – normalized digits, requires 7+ digits to avoid false positives
- Domain match – extracts domain from email, matches against CRM email domains
- Name similarity – Levenshtein distance normalized by name length. “Jon” matches “John” at 75% similarity. “Jonathan” matches “Jon” at lower confidence.
- Company similarity – same fuzzy logic applied to company names
These signals are layered. An email match with a strong name match is AUTO_MATCH. An email match with a completely different name is REVIEW (could be a shared inbox or forwarded email). A name match alone with moderate company similarity is REVIEW.
The result: fewer false positives, fewer missed matches, and a clear audit trail of why each decision was made.
Feature 4: Customer & Opportunity Context
Knowing a company is “in Salesforce” is step one. The real question is: are they already a customer? Do they have open opportunities?
DataTools Pro integrates with your Opportunity data to answer both:
- Customer flag: Is this account marked as a Customer (by account type field or by having a Won opportunity)?
- Open opportunities: Does this account have deals in the pipeline right now?
- Per-account drill-down: Click into any matched account to see all its opportunities — stage, amount, close date, won/lost status.
This turns a simple “already in CRM” check into actionable intelligence. Your sales team instantly knows:
- “Don’t cold-call these 200 companies — they’re current customers”
- “These 50 companies have open deals — coordinate with the account owner before marketing to them”
- “These 300 companies are truly net-new — prioritize outreach”
Feature 5: Append CRM Fields – Enrich Without Rebuilding
After matching, you often need additional CRM data on your results: Industry, Annual Revenue, Lead Source, Owner Name, Phone, Website.
The traditional approach would be to add these fields to the search index. That means:
- Rebuilding the index (time + compute cost)
- Heavier index = higher ongoing Cortex costs
- Need to rebuild every time you want a different set of fields
Our approach: enrich at results time, not index time.
When you click “Append CRM Account Fields,” the app performs a live LEFT JOIN against your source tables using the matched record ID. You pick exactly the columns you want, and they’re added to your results instantly. No index rebuild. No extra Cortex cost.
Owner Name resolution is built in. Select OwnerId from the field list, point the app at your Salesforce User table, and it resolves the raw Salesforce ID to a human-readable name via a second LEFT JOIN.
For Person Matchback, the same feature works across both Lead and Contact tables — the app automatically routes each row’s JOIN to the correct source table based on whether the match was a Lead or Contact.
Feature 6: Constant Variables – No More Manual Column Pasting
Here’s a workflow that every marketing ops person knows too well:
- Download matchback results as CSV
- Open in Excel
- Add a column: “Campaign Name” → paste “Q3 2026 ABM Outreach” in every row
- Add another column: “Lead Source” → paste “Purchased List” in every row
- Add another: “Import Date” → paste today’s date in every row
- Save. Upload to Salesforce.
DataTools Pro replaces this with a point-and-click interface. An admin defines a catalog of constant variables (Campaign Name, Lead Source, Import Batch ID, etc.), and end users fill in the values directly on the results page. One click, and every row gets the columns attached.
No Excel. No copy-paste errors. No forgotten columns.
Feature 7: Campaign-Ready Exports
The final output isn’t just a spreadsheet. DataTools Pro generates Salesforce-ready import files:
For Existing Matches (Campaign Members):
A CSV with CampaignId, ContactId, LeadId, and Status — ready to drop into Salesforce Data Loader and attach to a Campaign. The app handles the Lead vs. Contact routing automatically.
For Net-New Prospects (New Leads):
A CSV with FirstName, LastName, Company, Email, Phone, address fields, and LeadSource — ready for the Salesforce Lead Import Wizard with campaign assignment.
You enter your Campaign ID (or paste the full Salesforce Lightning URL), choose a Campaign Member Status, and download both files. Done.
Feature 8: Run History & Audit Trail
Every matchback run is logged and snapshotted. You can:
- Review past runs – see when each analysis was run, how many matches were found, how many were net-new
- Re-open historical results – load any past run’s full results, including appended CRM fields and constant variables
- Download historical exports – regenerate CSVs from any past run
- Compare over time – track how your match rates change across campaigns
Each snapshot is immutable. What you saw on Tuesday is exactly what you’ll see when you re-open that run on Friday – even if the underlying CRM data has changed.
Why Snowflake Native?
We could have built this as a standalone SaaS app. Here’s why we didn’t:
Your data never leaves Snowflake
No extraction. No API calls to external services. No data sitting on vendor servers. Your Salesforce data stays in your Snowflake account, and the app runs as a first-party application inside your environment.
You control the compute
The app uses your warehouse. You decide the size. You see the cost. There’s no hidden compute bill from a vendor running queries on your behalf.
Zero infrastructure to manage
No servers. No containers. No Kubernetes. Install the app from the Snowflake Marketplace, grant it access to your tables, and you’re running.
It scales with your data
50 rows or 5 million rows – the same app, the same workflow. Snowflake handles the compute scaling.
Security and governance built in
Snowflake’s role-based access control, network policies, and audit logging all apply. The app can only see what you grant it access to.
The Architecture (For the Technical Folks)
Key technical decisions:
- Cortex Search Service for candidate retrieval – semantic search that finds “Acme Inc” when you search for “Acme Incorporated”
- Results-time JOIN for field enrichment – no index bloat, no rebuild cost
- JaroWinkler + Levenshtein for string similarity – the right algorithms for name and company matching
- Case-insensitive column resolution via
INFORMATION_SCHEMA.COLUMNS– works regardless of how your Salesforce sync tool cases column names - Immutable run snapshots – point-in-time results that don’t change when CRM data changes
Who Is This For?
Marketing Operations teams who:
- Run ABM campaigns and need to segment lists into “existing” vs. “net-new”
- Import purchased lists and need to check against CRM before creating duplicates
- Attach campaign attribution to matched records
Sales Operations teams who:
- Need to identify which target accounts are already in the pipeline
- Want to enrich prospect lists with CRM data (owner, industry, revenue) before routing
- Need to flag current customers before outbound campaigns touch them
Revenue Operations teams who:
- Need a repeatable, auditable process for list matching
- Want to eliminate the spreadsheet-based matching workflow
- Need to track match rates over time across campaigns
Data Teams who:
- Want to keep PII inside Snowflake’s security boundary
- Need a self-service tool that business users can run without SQL knowledge
- Want to reduce the number of “can you match this list for me?” requests
What Our Users See After Switching
| Before (Manual Process) | After (DataTools Pro) |
|---|---|
| 4-6 hours per list match | Under 10 minutes |
| VLOOKUP = exact match only | Fuzzy matching catches “Jon” = “John” |
| No audit trail | Every run logged and snapshotted |
| Data exported to laptops | Data stays in Snowflake |
| Manual campaign column entry in Excel | Point-and-click constant variables |
| Inconsistent process across analysts | Same tool, same logic, every time |
| No opportunity context | Customer flags + pipeline visibility |
| One-off work product | Reusable, repeatable, historical |
Next Generation Solution as a Service
We have learned that every org has their own unique marketing process, data challenges, and matchback needs. That is why we offer our DataTools matching solution as a bundled technology-services offering. When we deploy, I lead solution engineering and our customers benefit of having the last 10% of their data machback needs built. If you are interested, feel free to contact the DataTools Pro team and setup a meeting