ARTICLE CONTENT:
Data Mapping Reference Guide
Overview
This reference guide helps you map data between CRMs and platforms when migrating. Use it to:
- Understand how fields differ between systems
- Plan your data export/import strategy
- Create mapping spreadsheets before migration
- Troubleshoot data transfer issues
This guide grows over time. As we encounter new mapping scenarios in support tickets, we add them here.
Last updated: January 15, 2026
—
Contact Fields – Standard Mappings
Standard fields that exist in most CRMs:
| Field Name | Ontraport | ActiveCampaign | Keap | Drip | Kit | AA Managed |
|---|---|---|---|---|---|---|
| First Name | firstname | first_name | FirstName | first_name | first_name | first_name |
| Last Name | lastname | last_name | LastName | last_name | last_name | last_name |
| Phone | office_phone | phone | Phone1 | phone | phone | phone |
| Address | address | address | StreetAddress1 | address1 | address | billing_address_1 |
| City | city | city | City | city | city | billing_city |
| State | state | state | State | state | state | billing_state |
| Zip | zip | zip | PostalCode | zip | zip_code | billing_postcode |
| Country | country | country | Country | country | country | billing_country |
Important notes:
- Field names are case-sensitive in most CRMs
- Phone number formats vary (some require specific format, others are flexible)
- Address fields may map to billing vs. shipping addresses in AccessAlly Managed
—
Custom Fields
How custom fields work in each CRM:
Ontraport Custom Fields
- Format: Can be any name you create
- Types: Text, Numeric, Date, Dropdown, Checkbox
- Export: Custom fields export with their field name as column header
- Import: Must create custom field in Ontraport before importing data
- API: Custom fields have numeric IDs (f1234, f1235, etc.)
ActiveCampaign Custom Fields
- Format: Any name, but shown as “name” in exports
- Types: Text, Textarea, Date, Dropdown, Radio, Hidden
- Export: Custom fields appear as separate columns
- Import: Auto-creates custom field if doesn’t exist
- Personalization tags: Use %FIELDNAME% in emails
Keap Custom Fields
- Format: Prefixed with underscore: _CustomFieldName
- Types: Text, Text Area, Dropdown, Date, Currency, etc.
- Export: Custom fields have underscore prefix in CSV
- Import: Must match exact name including underscore
- API: Custom fields use numeric IDs internally
Drip Custom Fields
- Format: Simple field names (no special prefixes)
- Types: All stored as text (no field type enforcement)
- Export: Custom fields in separate columns
- Import: Auto-creates if doesn’t exist
- Liquid tags: Use {{ subscriber.field_name }} in emails
Kit (ConvertKit) Custom Fields
- Format: Simple field names
- Types: All text-based
- Export: Custom fields as columns
- Import: Auto-creates fields
- Note: Limited custom field support compared to other CRMs
AccessAlly Managed Custom Fields
- Format: WordPress user meta fields
- Types: Stored as text, numeric validation optional
- Access: Managed through WordPress user meta
- Note: No built-in custom field interface – uses WordPress meta fields
—
Tags – Structure and Differences
Tag Structures by CRM
| CRM | Tag Structure | Categories? | Notes |
|---|---|---|---|
| Ontraport | Flat list | No | Simple tag names |
| ActiveCampaign | Flat list with optional categories | Yes (optional) | Categories for organization only |
| Keap | Hierarchical with categories | Yes (required) | ⚠️ Tags belong to categories |
| Drip | Flat list | No | Simple tag names |
| Kit | Flat list | No | Simple tag names + segments |
| AA Managed | Flat list | No | Tags managed in AccessAlly |
Tag Migration Issues
Keap → ActiveCampaign Tag Problem:
- Keap has tag categories (e.g., “Access” in category “Membership”)
- ActiveCampaign doesn’t support tag categories
- During import, AC prepends the category: “Membership – Access”
- AccessAlly looks for “Access” → no match → members lose access
- Solution: Plan tag remapping BEFORE migration
- → Keap to AC Tag Remapping Guide
Tag Naming Best Practices
To make migrations easier:
- Use consistent naming: “Product – Level” or “Product_Level”
- Avoid special characters: stick to letters, numbers, spaces, dashes
- Use descriptive names: “Gold Membership” not “GM”
- Document tag purposes: keep a tag reference spreadsheet
- Avoid category-like names if you might migrate to/from Keap
—
Subscription & Product Mappings
Subscription Status Mappings
| Status Type | Ontraport | ActiveCampaign | Keap | Stripe | AccessAlly Local |
|---|---|---|---|---|---|
| Active/Current | active | active | Active | active | active |
| Canceled | cancelled | canceled | Inactive | canceled | cancelled |
| Past Due | past_due | past_due | PastDue | past_due | past_due |
| Paused | paused | paused | Inactive | paused | paused |
| Expired | expired | expired | Inactive | incomplete_expired | expired |
Important notes:
- Keap doesn’t distinguish between canceled, paused, and expired (all “Inactive”)
- Stripe has additional statuses (incomplete, unpaid, trialing)
- When migrating, “Active” is most critical to preserve
Product ID Mapping Strategy
Products are identified differently in each system:
- Ontraport: Product ID (numeric)
- ActiveCampaign: Deal value or custom field
- Keap: Product ID (numeric)
- Stripe: Product ID + Price ID
- AccessAlly: Offer name (text)
Create a product mapping spreadsheet:
| Current Product Name | Current Product ID | Destination Product Name | Destination Product ID | Price | Tags Applied |
|---|---|---|---|---|---|
| Gold Membership | 1234 | Gold Membership | 5678 | $97/mo | Gold, Member |
| [Your products…] |
—
Automation Trigger Mappings
How automation triggers differ between CRMs:
Common Trigger Types
| Trigger Event | How it Works in Each CRM |
|---|---|
| Tag Applied |
|
| Form Submission |
|
| Email Opened |
|
| Link Clicked |
|
| Purchase Made |
|
Automation Migration Notes
When migrating automations:
- Triggers don’t auto-migrate – must be recreated manually
- Test each automation in destination CRM before going live
- Some trigger types may not have direct equivalents
- Webhook-based triggers need new webhook URLs
- Time delays transfer as concepts but need reconfiguration
—
Migration-Specific Mapping Guides
Detailed mapping guides for specific migration paths:
Top 3 Priority Paths (Complete Guides)
- Drip → AccessAlly Managed Data Mapping
- Email sequence to tag-based email mapping
- Contact ID migration issues
- Custom field transfer
- ActiveCampaign → Ontraport Data Mapping
- Tag structure preservation
- Custom field mapping
- Deal/transaction mapping
- Keap → ActiveCampaign Data Mapping
- 🚨 Tag category prepending (CRITICAL)
- Custom field underscore handling
- Campaign to automation conversion
Additional CRM Combinations
- Ontraport → ActiveCampaign
- Keap → AccessAlly Managed
- Ontraport → AccessAlly Managed
- [More combinations added as we document them]
—
Data Mapping Templates
Download these spreadsheet templates to plan your migration:
Contact Field Mapping Template
Use this template to map contact fields between systems:
| Current Field Name | Current Field Type | Destination Field Name | Destination Field Type | Required? | Notes |
|---|---|---|---|---|---|
| firstname | Text | first_name | Text | Yes | Standard field |
| _MemberLevel | Dropdown | Member_Level | Text | No | Keap underscore → AC no prefix |
| [Your fields…] |
Tag Mapping Template
Use this template to map tags:
| Current Tag | Current Category (if Keap) | Destination Tag | Used for Access? | Used in Automations? | Notes |
|---|---|---|---|---|---|
| Access | Membership | Membership – Access | Yes | Yes | ⚠️ AC prepends category |
| [Your tags…] |
—
Common Data Mapping Issues
Issue: Field Name Case Sensitivity
Problem: Some CRMs are case-sensitive (Keap “FirstName” vs. AC “first_name”)
Solution: Match exact case when creating mapping spreadsheet
Issue: Date Format Differences
Problem: Different CRMs expect different date formats (YYYY-MM-DD vs. MM/DD/YYYY)
Solution: Use ISO format (YYYY-MM-DD) in CSV exports when possible
Issue: Phone Number Formats
Problem: Some CRMs require specific phone formats ((123) 456-7890 vs. 1234567890)
Solution: Document required format in destination CRM, clean data before import
Issue: Custom Field Type Mismatches
Problem: Source CRM has dropdown, destination expects text
Solution: Convert dropdown values to text strings during export
Issue: Missing Destination Fields
Problem: Destination CRM doesn’t have equivalent field
Solution: Create custom field in destination before importing, or map to notes field
—
Data Validation Checklist
Before importing data, validate:
☐ All required destination fields are mapped from source
☐ Field types match (text to text, date to date, etc.)
☐ Email addresses are valid format
☐ Phone numbers match expected format
☐ Dates are in correct format
☐ Custom fields exist in destination system
☐ Tag names are EXACT matches (including case)
☐ Special characters won’t cause issues
☐ CSV encoding is UTF-8 (for special characters)
☐ Test import with 10 contacts before full import
—
This Guide is Growing
Help us improve this reference:
- If you encounter a mapping scenario not documented here, let us know
- We add new mappings monthly based on support tickets
- Check back for updates to this guide
- Subscribe to updates (coming soon)
Last updated: January 15, 2026
Next update: February 2026 (monthly batch process)
—
💡 Pro Tip: Spend time on data mapping BEFORE migration day. A complete mapping spreadsheet catches issues early and makes the actual migration much smoother. The 2-4 hours spent mapping saves days of troubleshooting later.