Match Customer Records Across Tools

Match Customer Records Across Tools

Match customer records across CRM, billing, and support tools with a shared key. Step-by-step guide with field mapping examples and edge case handling.

No credit card required

Free 100k syncs every month

Your sales rep opens a HubSpot contact and sees "Free plan." They craft an upgrade pitch. The customer replies: "I upgraded two weeks ago. Check your data." The upgrade happened in Stripe, but Stripe and HubSpot don't share customer records. So the CRM still reflects a reality that expired 14 days ago.

This is what happens when you can't match customer records across tools. Not a data science failure. Not a missing identity graph. Just two tools with the same customer and no way to keep each other current. If you've read our identity resolution guide, you know the concept. This guide shows you how to do it: pick a matching key, connect two tools, and have matched records flowing in under 30 minutes.

Why customer records diverge across CRM, billing, and support tools

Every SaaS tool creates its own version of your customer. Stripe stores the billing email, subscription status, and payment history. HubSpot stores the marketing email, lifecycle stage, and deal value. Intercom stores the chat email, conversation count, and last seen timestamp. Each tool is accurate within its own world. The problem is that these worlds don't overlap.

Records diverge for three reasons:

Different entry points. A customer signs up with their work email, pays with their finance team's email, and contacts support with a personal address. Now three tools have three different records for one person.

No automatic propagation. When a customer upgrades in Stripe, nothing pushes that change to HubSpot. The CRM record sits frozen at the last manual update or CSV import.

Manual sync decay. Teams start by exporting CSVs weekly. Then someone gets busy and the export becomes monthly. Then quarterly. Each gap widens the drift between what each tool knows about the customer.

The cost of this drift is concrete. Support agents ask customers questions they've already answered. Sales reps pitch upgrades to paying customers. Marketing segments use stale plan data. A RevOps lead at a 40-person company told us they spent 6 hours per week reconciling Stripe and HubSpot data manually. That's 312 hours per year spent copying data between tabs.

Choosing your matching key to match customer records: email, customer ID, or composite keys

The matching key is the field that tells Oneprofile "these two records are the same person." Choose the wrong key and you get false matches or missed links. Choose the right one and matching is automatic.

Matching key

Reliability

When to use it

Watch out for

Email address

High (90%+ of B2B records)

Default for most teams

Customers using different emails per tool

Customer ID

Highest (unique, immutable)

When both tools store your internal ID

Not all tools support custom ID fields

Phone number

Medium

Consumer businesses, SMS-heavy workflows

Formatting differences (+1 vs 001)

Composite (email + company)

High

When single fields have duplicates

More complex to configure

Email is the right default. Nearly every SaaS tool stores it, and customers typically use one primary email for business tools. Audit your tools first: open 20 random records in both source and destination, and check whether the email matches. If 90%+ match, email is your key.

Customer ID is more reliable when available. If your app assigns a unique ID per customer and both tools store it (e.g., as a custom property in HubSpot and a metadata field in Stripe), use that. IDs don't change when customers update their email address.

Composite keys solve the edge case where individual fields aren't unique enough. If two different customers share the same email (it happens with shared team inboxes), matching on email + company domain narrows the match correctly.

Step-by-step: connect two tools, match customer records, and verify sync

This walkthrough uses Stripe as the source and HubSpot as the destination. The process is the same for any tool pair.

1. Audit your matching key. Before connecting anything, verify your key exists in both tools. In Stripe, check that customer records have email addresses. In HubSpot, check that contacts have the same email. If fewer than 90% of records share the key, clean the data first or pick a different key.

2. Connect Stripe. In Oneprofile, add Stripe as a source. Authenticate with a restricted API key that has read access to Customers, Subscriptions, and Charges. Oneprofile validates the key against the Stripe API before saving.

3. Connect HubSpot. Add HubSpot as a destination. Authenticate via OAuth or a private app token with read/write access to Contacts and Contact Properties.

4. Select record types and matching key. Map Stripe Customers to HubSpot Contacts. Select email as the matching key. Oneprofile checks whether a HubSpot contact with that email exists before deciding to update or create.

5. Map the fields that matter. Start with the fields your team uses daily:

Stripe field

HubSpot property

Why it matters

subscription.status

subscription_status

Active, past_due, canceled, trialing

plan.nickname

plan_name

Which plan the customer pays for

subscription.current_period_end

renewal_date

When the subscription renews

Sum of charges

lifetime_revenue

Total revenue from this customer

subscription.created

subscription_start_date

Tenure-based segmentation

You can expand later. Start with 5-8 fields, validate the team uses them, then add more.

6. Choose sync mode. Use "Update or Create" for most use cases. Existing HubSpot contacts get updated when their Stripe data changes. New Stripe customers without a HubSpot match get created as new contacts.

7. Set a schedule and run the first sync. A 15-minute schedule works for most teams. The initial sync backfills all historical Stripe customers into HubSpot. Subsequent syncs are incremental: only records that changed since the last run get processed.

Handling edge cases when you match customer records across platforms

Matching works cleanly for 90% of records. The remaining 10% require specific handling.

Different emails per tool. A customer signed up with jane@acme.com in HubSpot but pays with billing@acme.com in Stripe. The email key won't match these. Two options: standardize on one email (update the Stripe customer email) or switch to a customer ID key that both tools share. For ongoing prevention, ensure your signup flow writes the same email to both tools.

Duplicate records in the destination. HubSpot has two contacts with the same email (it happens with form submissions and manual entry). When Oneprofile finds multiple matches, the record lands in the dead letter queue for manual resolution. Deduplicate in HubSpot first, then re-run.

Missing fields in the source. Some Stripe customers don't have a subscription (one-time purchases, manual invoices). Fields like subscription.status will be empty. Map these intentionally: either skip the field when null or set a default value like "no_subscription."

Currency and number formatting. Stripe stores amounts in cents (10000 = $100.00). If your HubSpot property expects dollars, apply a transformation during field mapping. Oneprofile supports field transformations for unit conversion.

Test data contamination. If you've used Stripe's test mode with test API keys, those test customers might have emails that overlap with real contacts. Use a live-mode API key. If test data already contaminated your destination, clean it before running the production sync.

What to do after customer record matching is live: monitoring and scaling

After the first sync completes, verify the results. Spot-check 10-20 records in HubSpot: does the subscription status match Stripe? Does the plan name look right? Check the dead letter queue for any records that failed and resolve the root causes.

Week one: monitor and adjust. Watch for unexpected dead letter queue entries. The most common causes are field type mismatches (sending text to a number field) and records deleted in the destination between sync runs. Fix the mapping or destination setup, then reprocess.

Week two: expand fields. Once the initial fields are validated, add more. Account balance, cancellation date, coupon code, last charge amount. Each field makes the destination record more complete without increasing sync complexity.

Month one: add more tools. The same matching key that links Stripe to HubSpot links Intercom to HubSpot, your Postgres database to HubSpot, and Mailchimp to HubSpot. Set up one sync config per tool pair. Each uses email as the key, so records stay consistent across your entire stack.

Ongoing: let field-level change tracking do the work. Oneprofile tracks which individual fields changed, not just which records changed. When a customer upgrades in Stripe, only plan_name and subscription_status update in HubSpot. The lifecycle stage your sales rep set manually stays untouched. No full-record overwrites, no lost data.

The 6-hour weekly reconciliation ritual disappears. When a customer upgrades, downgrades, or churns in Stripe, HubSpot reflects it within 15 minutes. Your support team sees billing context without opening a second tab. Your marketing segments use current data, not last month's CSV. And when a sync fails, the record lands in a queue instead of vanishing.

Ready to get started?

No credit card required

Free 100k syncs every month

Ready to get started?

No credit card required

Free 100k syncs every month

Ready to get started?

No credit card required

Free 100k syncs every month

How do I match customer records when emails differ across tools?

Use a secondary matching key like customer ID or phone number. If neither exists, audit the tools to standardize on one email per customer. Most mismatches are work vs. personal email, which a naming convention fixes.

Do I need an identity graph to match customer records?

No. Identity graphs solve the harder problem of linking anonymous visitors across devices. If your customers have a shared identifier like email, direct sync on that key matches records without graph infrastructure.

What happens when a match fails during sync?

Failed records land in a dead letter queue for investigation. Common causes: email format mismatch, deleted record in the destination, or API rate limit. Fix the root cause and reprocess.

Can I match records across more than two tools?

Yes. Set up one sync config per tool pair. Each config uses the same matching key (e.g., email), so records stay consistent across every tool in your stack.

How long does it take to match customer records with Oneprofile?

Under 30 minutes for a two-tool setup. Connect both tools with API keys, choose a matching key, map fields, and run the first sync. Most time goes to deciding which fields matter.

© 2026 Oneprofile Software

455 Market Street, San Francisco, CA 94105

© 2026 Oneprofile Software

455 Market Street, San Francisco, CA 94105

© 2026 Oneprofile Software

455 Market Street, San Francisco, CA 94105