Skip to main content
10 min read

Field Mapping

ABM.dev maps enriched data from canonical fields to your CRM's native properties. Customize mappings and transformations to match your data model.

How Field Mapping Works

When enrichment completes, ABM.dev translates the standardized canonical fields into your CRM's property format:

Canonical Fields

90 standardized fields

Transformations

Format, concat, split

CRM Properties

HubSpot, Salesforce, etc.

Bidirectional Sync

Field mappings work in both directions. When you enrich from a CRM contact, we read existing data using the same mappings to provide context for enrichment.

Default Mappings

ABM.dev includes sensible defaults for common CRM platforms. These work out of the box with no configuration required.

Person/Contact Fields

Canonical FieldHubSpotSalesforce
emailemailEmail
first_namefirstnameFirstName
last_namelastnameLastName
titlejobtitleTitle
companycompanyCompany
phone_numberphonePhone
professional_profile_urllinkedin_urlLinkedIn_URL__c
office_locationcityMailingCity

Company/Account Fields

Canonical FieldHubSpotSalesforce
firm_namenameName
website_urlwebsiteWebsite
industryindustryIndustry
employeesnumberofemployeesNumberOfEmployees
citycityBillingCity
country_regioncountryBillingCountry
descriptiondescriptionDescription
revenueannualrevenueAnnualRevenue

Transformations

When canonical field values need to be modified before writing to your CRM, transformations handle the conversion:

DateFormat

Parse and format dates between systems

2024-01-15 → Jan 15, 2024

Concat

Combine multiple fields into one

first_name + last_name → full_name

Split

Decompose a field into multiple values

San Francisco, CA → city: San Francisco, state: CA

Format

Pattern-based string formatting

+1-555-0123 → (555) 012-3123

Uppercase/Lowercase

Case conversion for consistency

engineering → ENGINEERING

Trim

Remove leading/trailing whitespace

Jane Smith → Jane Smith

Custom Field Mappings

Override default mappings or add custom fields via the API:

Setting custom field mappings
// Configure custom mappings for your organization
const mappings = await abmdev.fieldMappings.create({
  integration_type: "hubspot",
  entity_type: "person",
  mappings: [
    {
      internal_field: "matched_persona",    // Canonical field
      external_field: "abm_persona",        // Your HubSpot property
      direction: "write",                   // write, read, or bidirectional
      transformation: null                  // Optional transformation
    },
    {
      internal_field: "confidence_score",
      external_field: "abm_confidence",
      direction: "write",
      transformation: {
        type: "format",
        pattern: "{value}%"                 // 85 → "85%"
      }
    },
    {
      internal_field: "full_name",
      external_field: "contact_name",
      direction: "bidirectional",
      transformation: {
        type: "uppercase"                   // Jane Smith → JANE SMITH
      }
    }
  ]
});

Mapping Directions

Write (ABM.dev → CRM)

Enriched data flows from ABM.dev to your CRM. Use this for fields you want to populate or update in your CRM after enrichment.

Read (CRM → ABM.dev)

Existing CRM data is read into ABM.dev to provide context during enrichment. Useful for using CRM data as enrichment input.

Bidirectional

Data flows both ways. CRM data is read for context, and enriched data is written back. This is the most common configuration for core fields.

Fallback Priority

When multiple canonical fields could map to the same CRM property, use priority to control which takes precedence:

Priority-based fallback
// Map multiple fields to one CRM property with fallback
const mappings = await abmdev.fieldMappings.create({
  integration_type: "hubspot",
  entity_type: "person",
  mappings: [
    {
      internal_field: "email",
      external_field: "email",
      direction: "write",
      priority: 1                    // Highest priority
    },
    {
      internal_field: "secondary_email",
      external_field: "email",
      direction: "write",
      priority: 2                    // Used if primary is empty
    }
  ]
});

// ABM.dev will try fields in priority order
// If email is empty, secondary_email is used

Priority Rules

Lower numbers = higher priority. If a high-priority field has data, lower-priority mappings to the same CRM field are skipped.

Related Guides