Resolution

How entity resolution works in the Signal Database, and how to match signals to your existing contact and company records.

When you license the Signal Database, every signal record comes pre-resolved with multiple identifiers. This page explains how resolution works and how to efficiently match signals to your existing data.

How Resolution Works

Unlike the real-time API (which resolves entities on-demand from minimal input), the Signal Database delivers pre-resolved records with all available identifiers populated.

What We Resolve

For each signal, we resolve and include:

Contact-Level Signals:

  • Professional email address
  • LinkedIn profile URL
  • Current company domain
  • Current company LinkedIn URL

Company-Level Signals:

  • Primary company domain
  • Company LinkedIn URL
  • Normalized company name

Resolution Sources

We resolve entities by cross-referencing:

  • LinkedIn profile data
  • Email domain verification
  • Company website analysis
  • Employment history correlation
  • Public business registrations

Matching Signals to Your Data

Recommended Join Keys

Use these fields in order of reliability:

PriorityContact MatchingCompany Matching
1stcontact_emailcompany_domain
2ndcontact_linkedin_urlcompany_linkedin_url
3rdcompany_name (fuzzy match)

Best Practices

For Contact Matching:

-- Example: Join signals to your contacts table
SELECT 
  c.id as contact_id,
  s.*
FROM signals s
LEFT JOIN contacts c 
  ON LOWER(s.entity_identifiers.contact_email) = LOWER(c.email)
  OR s.entity_identifiers.contact_linkedin_url = c.linkedin_url
WHERE s.entity_type = 'contact'

For Company Matching:

-- Example: Join signals to your accounts table
SELECT 
  a.id as account_id,
  s.*
FROM signals s
LEFT JOIN accounts a 
  ON LOWER(s.entity_identifiers.company_domain) = LOWER(a.domain)
  OR s.entity_identifiers.company_linkedin_url = a.linkedin_url
WHERE s.entity_type = 'company'

Handling Unmatched Signals

Not every signal will match a record in your database. Unmatched signals are still valuable:

  1. New prospects: Signals on contacts/companies not yet in your CRM represent potential new leads
  2. Data enrichment: Use unmatched signals to expand your TAM with pre-qualified targets
  3. ICP refinement: Analyze which signal types appear for contacts outside your database

Coverage Expectations

Resolution coverage varies by identifier type:

IdentifierCoverageNotes
contact_email85-95%Professional emails; personal emails excluded
contact_linkedin_url90-98%Primary identifier for most contacts
company_domain99%+Nearly all companies have a resolvable domain
company_linkedin_url95%+Some small businesses may lack LinkedIn presence

Deduplication

Signals are deduplicated before delivery:

  • Same signal, same entity: Only the most recent detection is included
  • Refresh window: Signals are refreshed based on their category (see Delivery for cadence)
  • Entity merging: If we detect that two records represent the same entity, we merge and deliver under the canonical identifiers

Data Quality

Validation Rules

All signals pass validation before delivery:

  • Email addresses are format-validated and domain-verified
  • LinkedIn URLs are normalized to canonical format
  • Company domains exclude generic providers (gmail.com, etc.)
  • Timestamps are standardized to ISO 8601 UTC

Confidence Indicators

For some signal types, we include confidence metadata in the variables object:

{
  "variables": {
    "resolution_confidence": "high",
    "last_verified_at": "2024-12-01T00:00:00Z",
    // ... other fields
  }
}

Comparison: API vs. Signal Database Resolution

AspectGenerate Insights APISignal Database
InputMinimal (email OR LinkedIn URL)N/A (pre-resolved)
ResolutionReal-time lookupPre-computed
Identifiers ReturnedBased on what we can resolveAll available identifiers
Best ForPoint lookupsBulk ingestion & joining

Questions?

If you have specific resolution requirements or need custom identifier mapping, contact us at [email protected].