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:
90 standardized fields
Format, concat, split
HubSpot, Salesforce, etc.
Bidirectional Sync
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 Field | HubSpot | Salesforce |
|---|---|---|
email | ||
first_name | firstname | FirstName |
last_name | lastname | LastName |
title | jobtitle | Title |
company | company | Company |
phone_number | phone | Phone |
professional_profile_url | linkedin_url | LinkedIn_URL__c |
office_location | city | MailingCity |
Company/Account Fields
| Canonical Field | HubSpot | Salesforce |
|---|---|---|
firm_name | name | Name |
website_url | website | Website |
industry | industry | Industry |
employees | numberofemployees | NumberOfEmployees |
city | city | BillingCity |
country_region | country | BillingCountry |
description | description | Description |
revenue | annualrevenue | AnnualRevenue |
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, 2024Concat
Combine multiple fields into one
first_name + last_name → full_nameSplit
Decompose a field into multiple values
San Francisco, CA → city: San Francisco, state: CAFormat
Pattern-based string formatting
+1-555-0123 → (555) 012-3123Uppercase/Lowercase
Case conversion for consistency
engineering → ENGINEERINGTrim
Remove leading/trailing whitespace
Jane Smith → Jane SmithCustom Field Mappings
Override default mappings or add custom fields via the API:
// 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:
// 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 usedPriority Rules