ActiveCampaign CSV exports drop notes and break relationships. API-based migration with proper rate limit handling (5 req/s source, 100 req/10s target) is the only path for complex datasets.
There is no native migration path from ActiveCampaign to GoHighLevel. ActiveCampaign's CSV exports silently drop contact notes, deal notes, and all relational links between Contacts, Accounts, and Deals — making a simple export/import inadequate for any dataset with historical context. ActiveCampaign is built on a tag-heavy, automation-builder architecture where Contacts, Accounts, and Deals are separate objects linked by internal IDs. GoHighLevel is contact-centric with pipeline-driven workflows — Contacts are the center of gravity, Opportunities sit inside Pipelines, and Companies are a loosely coupled grouping object. These fundamentally different data models mean you are solving a schema translation problem, not a data transfer. Every production migration requires API-based extraction from ActiveCampaign (5 req/s rate limit), careful field and stage mapping, an ID crosswalk to preserve Account → Contact → Deal relationships, and dependency-ordered loading into HighLevel's V2 API (100 req/10s burst limit) — Companies first, then Contacts, Opportunities, Notes, and Custom Objects.
Read this first
Pair-specific gotchas that catch teams out. Each one has cost somebody a weekend.
Naming mismatch
HighLevel's UI increasingly says "Company," but the API docs still use "Business/Businesses" and businessId. Put both names in your mapping spec so operations and engineering are talking about the same object. (help.gohighlevel.com)
ActiveCampaign CSV exports exclude notes
Contact notes, deal notes, and account notes are not available in any standard CSV export. If notes carry business context, CSV-only migration loses them permanently.
Timestamp trap
ActiveCampaign explicitly warns that created_utc_timestamp and updated_utc_timestamp in contact responses are actually returned in US/Central, not true UTC. If your delta sync logic depends on timestamps, account for this or use id_greater pagination instead. (developers.activecampaign.com)
Effective throughput math
At 100 requests per 10 seconds, HighLevel's V2 API supports ~10 writes per second. For a migration of 20,000 contacts with associated opportunities and notes, expect 30–60 minutes of API write time — longer in practice due to retry logic and multi-object writes.
ActiveCampaign deal value formatting
When exporting deals via CSV, money-type fields require two trailing zeros. Without them, the importer adds a decimal or removes zeros. Verify decimal handling when transforming for HighLevel.
The runbook
Work top to bottom. Tick steps as you go — your progress is saved in this browser.
01 Discovery Agree scope, pipeline design and success criteria before touching data.
Objective A scope covering every object in the revenue model, with sales leadership signed up to the pipeline design.
Keep these open
-
Inventory every object in ActiveCampaign
Count accounts, contacts, leads, deals or opportunities, activities, notes, emails, files, products and quotes. Activity and email history is usually the largest object by an order of magnitude and the one people forget to size.
Data Profiler Get real record counts instead of estimating from memory -
Map the current pipeline and agree the target model
Document every pipeline, stage, probability and required field, then agree the HighLevel model with sales leadership. Migrating a broken pipeline faithfully is a wasted opportunity; redesigning it mid-migration is a wasted migration.
Stage changes alter historical conversion rates. Agree how you will restate reporting before you change the model.
-
Catalogue integrations and automation
List every system touching ActiveCampaign: marketing automation, quoting, billing, ERP, data enrichment, dialler, BI. Each is a separate cutover task with its own owner, and each can silently write bad data into your new CRM.
-
Capture the reporting that must survive
Interview the people who actually live in the dashboards — forecast, pipeline coverage, rep activity, cohort conversion. Every one of these needs the underlying fields to migrate, which frequently expands the scope.
-
Build the business case and pick the go-live date
Model licence delta, implementation effort and productivity dip. Then choose the date deliberately: mid-quarter is disruptive, quarter-end is worse. Most teams land on the first week of a new quarter.
COI & ROI Calculator Build the 36-month business case you will need for sign-off
ActiveCampaign → HighLevel specifics
- Cost consolidation
- ActiveCampaign's pricing scales with contact count and feature tiers. HighLevel bundles CRM, pipeline management, funnels, SMS/email, appointment scheduling, and reputation management into a flat subscription — typically $297–$497/month with unlimited sub-accounts on higher tiers.
- Agency architecture
- HighLevel was built for agencies. Its sub-account model lets you spin up isolated client environments, white-label the entire platform, and resell it as a SaaS product. ActiveCampaign has no equivalent multi-tenant agency model.
- Workflow consolidation
- Teams using ActiveCampaign alongside Calendly, ClickFunnels, Twilio, and separate landing page builders can collapse that stack into HighLevel's all-in-one model.
- ID crosswalk tables
- that preserve Account → Contact → Deal relationships and enable idempotent re-runs
- Phased loading
- with validation checkpoints: schema prep → Companies → Contacts → Opportunities → Notes → Custom Objects → QA → delta catch-up
Don't move on until
- Object counts confirmed for accounts, contacts, deals and activities
- Target pipeline and stage model agreed with sales leadership
- Reporting requirements captured from the people who use the reports
02 Data Audit CRM data is usually dirtier than anyone expects. Find out how dirty.
Objective A profiled export with duplicates, ownership gaps and relationship integrity all quantified and triaged.
Keep these open
-
Export and profile every object
Profile null rates, distinct values and type consistency across all objects. Pay attention to fields sales reps were supposed to fill in: an 80% null rate on a field your forecast depends on is a business finding, not a data one.
Data Profiler Profile the ActiveCampaign export for nulls, outliers and type drift -
Quantify duplicates and agree the merge policy
Measure duplicate accounts (same company, different spellings and suffixes) and contacts (same email, or same person at a renamed company). Agree survivorship rules before merging: which record wins, which fields, and what happens to the activity history on the loser.
Merging before you have agreed survivorship rules destroys history irreversibly. Decide first, merge second.
Data Cleaner Strip empty rows, stray whitespace and dead columns -
Verify relationship integrity
Check every deal has a valid account, every contact a valid account, every activity a valid parent. Referential breaks are the defect that turns a clean-looking load into a CRM where the pipeline report does not tie to the account list.
-
Resolve ownership and the user map
Build the ActiveCampaign user → HighLevel user map, including leavers. Every record needs a valid owner: records assigned to deactivated users either fail to load or land unassigned, and unassigned pipeline is pipeline nobody works.
Records owned by deactivated users are a top cause of load failures. Decide the reassignment target before you start.
-
Scan for PII and regional compliance
CRMs hold marketing consent, lawful basis and unsubscribe state. Confirm these fields migrate intact and that consent provenance survives — losing consent records is a regulatory problem, not a data-quality one.
PII & Compliance Scanner Find regulated fields before they land in a new system -
Clean, normalise and archive the pre-state
Normalise country and state values, phone formats, currencies and casing, and standardise all timestamps to UTC. Keep an untouched copy of the raw export — it is your only reference if a mapping decision turns out wrong.
ActiveCampaign → HighLevel specifics
- API-first extraction
- that captures notes, deal history, and custom objects that CSV exports miss
- Built-in rate limit management
- for both ActiveCampaign's 5 req/s limit and HighLevel's 100 req/10s burst limit, with automatic backoff and retry queues
Don't move on until
- Duplicate rate quantified per object with a merge policy agreed
- Every record has a valid owner mapped to a target user
- Relationship integrity verified — no orphaned deals or contacts
03 Field Mapping Map objects, relationships and picklists — in that order.
Objective A signed mapping spec that covers objects, relationships, picklist values and currency handling.
Keep these open
-
Map objects and their relationships first
Establish how ActiveCampaign objects correspond to HighLevel objects before any field work. Leads-versus-contacts, accounts-versus-organisations and deal hierarchies differ structurally between CRMs, and a field map built on the wrong object model has to be redone.
Schema Mapper Opens pre-loaded with the ActiveCampaign → HighLevel field pair -
Generate and then hand-review the field map
Auto-match both schemas, then review every row. Look hardest at anything named "type", "source", "stage" or "status", where names match and meanings do not.
-
Map every picklist value, including retired ones
Enumerate all values on both sides — deal stages, lead sources, industries, statuses — and map each explicitly, including values no longer offered but still present on old records. Unmapped values either fail the row or land as blanks that quietly break segmentation.
Historical records often carry picklist values that were retired years ago and no longer appear in the UI.
-
Decide currency, amount and date handling
If you sell in multiple currencies, confirm how HighLevel stores amounts, exchange rates and dated conversion rates. Recalculating historical deal values at today's rate silently rewrites your revenue history.
Multi-currency deals re-converted at current rates will not tie to your historical reporting or your finance system.
-
Determine the load order
Sequence the load so parents exist before children: users, then accounts, then contacts, then deals, then activities and notes. Keep source IDs in custom fields so relationships can be rebuilt by lookup rather than guesswork.
-
Freeze the spec and sign off
Version-control the mapping, walk RevOps and sales leadership through the decisions that change reporting, and get written sign-off before the pilot.
-
Build an ID crosswalk table
Map every ActiveCampaign contact_id, account_id, and deal_id to their future HighLevel IDs.
-
Normalize phone numbers
to E.164 format. HighLevel strictly enforces this for SMS routing.
Data Format Converter Reshape the export into the format HighLevel's importer expects -
Flatten ActiveCampaign Lists
into HighLevel tags (e.g., list:Newsletter, list:Customers).
JSON to CSV Converter Flatten nested API responses into a reviewable sheet
Don't move on until
- Object and relationship model mapped and reviewed
- Every picklist value explicitly mapped, including dead values
- Load order determined so parents always exist before children
04 Test Migration Pilot with related records, not a flat sample.
Objective A pilot load whose relationships, ownership and roll-up reporting all verify against source.
Keep these open
-
Configure the HighLevel sandbox to match the agreed model
Build the pipelines, stages, custom fields, record types and user roles first. Load into a default configuration and you will only discover the configuration defects at full scale.
-
Select a connected pilot slice
Take complete account trees — 50-100 accounts with all their contacts, deals, activities and files — rather than a flat random sample. Relationship defects are the whole point of a CRM pilot and a flat sample cannot expose them.
-
Run the load in dependency order with full logging
Load users, accounts, contacts, deals, then activities, logging every request against its source ID. Note which failures are transient (rate limits, timeouts) and which are structural (validation, missing parent).
-
Verify relationships and roll-ups
Confirm every deal sits on the right account with the right owner and stage, and that pipeline totals per account and per rep match ActiveCampaign exactly. Roll-up mismatches almost always mean a relationship or currency defect upstream.
Migration Validation Tool Diff the pilot batch against source before scaling up -
Measure throughput and project the full load
Record actual records-per-hour under HighLevel's API limits and extrapolate, remembering activity history usually dominates volume. If the projection exceeds your window, split the load or trim activity scope now.
-
Let reps work the pilot data
Put two or three reps in the sandbox against their own accounts. They spot missing context, wrong owners and unusable notes far faster than any reconciliation script, and their buy-in is what makes adoption work.
-
Test inbound flows
forms, landing pages, appointment scheduling — to confirm new contacts land correctly.
Don't move on until
- Relationships intact across the whole pilot slice
- Pipeline roll-ups match source for the pilot accounts
- Reps have worked pilot records and confirmed they are usable
05 Cutover Switch the revenue system with the pipeline intact.
Objective All in-scope CRM data live in HighLevel, integrations repointed, and reps selling on day one.
Keep these open
-
Pre-load history ahead of the freeze
Load closed deals, historical activities and inactive accounts while ActiveCampaign stays live. Only open pipeline and the final delta need to move inside the window.
-
Publish the cutover runbook
A timed sequence with owners and abort criteria: freeze, final export, delta load, integration switch, smoke test, go/no-go, rep enablement. Pick a window that avoids quarter-end and month-end close.
-
Freeze ActiveCampaign and take the final delta
Set ActiveCampaign read-only and export everything changed since the pre-load. Reps updating deals during an unenforced freeze is the classic way to lose the most recent — and most valuable — pipeline changes.
A rep who updates a deal in the old CRM during the freeze will lose that update permanently.
-
Load the delta and reconcile the pipeline
Run the delta, then verify open pipeline value and count per rep against ActiveCampaign before anything else. If the pipeline number is wrong on day one, reps stop trusting the system and never fully come back.
Migration Validation Tool Confirm the final delta landed before you reopen -
Repoint every integration and verify with real records
Switch marketing automation, quoting, billing, enrichment, dialler and BI connections, then push a live record through each path. An unrepointed integration writing into the old CRM causes divergence that gets harder to reconcile every day.
Two-way integrations left pointing at the old CRM will keep writing there. Disable them before you switch, not after.
Cron Expression Builder Schedule the delta syncs that run through the freeze -
Go/no-go, then enable the reps
Call the decision explicitly against the exit criteria. Run enablement on real data with their own accounts on screen, and keep ActiveCampaign read-only rather than cancelled until validation closes.
-
Keep your ID crosswalk table
If you need to roll back or re-run a partial migration, the source-to-target ID map lets you do it idempotently.
ActiveCampaign → HighLevel specifics
- Back up everything before migration
- Export all ActiveCampaign data (CSVs for basic fields, plus API dumps for notes and custom objects).
- Zero downtime cutover
- your team keeps working in ActiveCampaign until the switch, with a final delta sync to capture last-minute changes
Don't move on until
- Historical load complete and reconciled before the freeze
- All integrations repointed and verified end to end
- Reps logged in with pipeline visible and correct
06 Validation Prove the revenue numbers tie out, then close the project.
Objective Reconciled data, forecast parity with pre-migration reporting, and signed acceptance.
Keep these open
-
Reconcile every object
Compare counts and values across accounts, contacts, deals, activities and files, plus field-level spot checks on a random sample. Produce a single report suitable for audit and for finance.
Migration Validation Tool Reconcile ActiveCampaign and HighLevel record-for-record -
Tie the pipeline and forecast to baseline
Rebuild forecast, pipeline coverage and win-rate reporting and compare to pre-migration figures. Every variance needs an explanation — most trace back to stage or currency mapping decisions made in Field Mapping.
Stage-model changes will legitimately shift historical conversion rates. Restate the baseline rather than chasing the difference as a defect.
-
Verify ownership, visibility and permissions
Confirm every record has the right owner and that sharing rules, territories and role hierarchy give each rep exactly the visibility intended. Over-broad visibility in a CRM is a data-protection issue as much as a config one.
-
Re-profile for field completeness
Compare loaded null rates against the source profile per field. A field that arrived empty while counts matched is the failure counts alone cannot detect.
Data Profiler Prove field completeness held up through the load -
Test automation and integration write-back
Fire every workflow, assignment rule, sequence and notification, and confirm each integration writes correctly in both directions. Automation is rebuilt rather than migrated, so it is unproven until observed.
-
Sign off and schedule decommission
Get written acceptance against the Discovery criteria, keep ActiveCampaign read-only for 30-90 days with a final archive export taken, then diarise cancellation so the contract does not auto-renew.
-
Rebuild automations/workflows
in HighLevel. Start with revenue-critical workflows (deal stage changes, follow-up sequences).
-
Verify pipeline integrity
Confirm Opportunity counts match source Deal counts per stage.
-
Monitor for 2 weeks
post-cutover. Check for missing notes, orphaned Opportunities, and contacts without Company associations.
ActiveCampaign → HighLevel specifics
- Don't deactivate ActiveCampaign until HighLevel is validated
- Run both systems in parallel for 1–2 weeks.
- Train users
- ActiveCampaign users will look for Lists and Campaigns; redirect them to Tags and Workflows.
Don't move on until
- Full reconciliation report complete across all objects
- Forecast and pipeline reports tie to pre-migration baselines
- Acceptance signed and ActiveCampaign decommission scheduled
Field mapping reference
The field-by-field mapping for each object. Use this as the starting point for your mapping spec.
Object Equivalent
Schema translation from 1:many to many-to-many pattern required. HighLevel caps at 10 per sub-account; consolidation needed if exceeding limit.
| ActiveCampaign field | HighLevel field | Notes |
|---|---|---|
| Contact | Contact | Direct map. Email is the unique identifier in both systems. |
| Account | Company | HighLevel auto-creates Companies via the Business Name field on contact import, or use separate Company CSV import for company-level custom fields. |
| Deal | Opportunity (inside Pipeline) | Must create Pipeline and Stages in HighLevel first. Each Deal maps to an Opportunity linked to a Contact. |
| Deal Stage | Pipeline Stage | Manually create matching stages in HighLevel before import. |
| Tag | Tag | Direct map. Tags transfer cleanly via CSV (single comma-separated column). |
| List | Tag or Smart List | HighLevel doesn't have email lists. Map to tags or use Smart Lists for segmentation. |
| Contact Note | Contact Note | API-only extraction from ActiveCampaign. No CSV path. |
| Deal Note | Contact Note (appended) | HighLevel doesn't have deal-level notes. Append to contact note with deal context prefix. |
| Custom Object | Custom Object (up to 10 per sub-account) | HighLevel supports Custom Objects on all plans with many-to-many associations. Map schema carefully. (help.gohighlevel.com) |
| Automation | Workflow | Cannot be migrated programmatically. Must be rebuilt manually in HighLevel's workflow builder. |
Risk matrix
Per-object risk for this pair. Plan extra validation around anything marked high.
| Object | Risk | Notes |
|---|---|---|
| Contact Notes | high | CSV exports exclude notes entirely; API-only extraction required via ActiveCampaign v3 endpoints. |
| Deal Notes | high | HighLevel has no deal-level notes. Must merge into contact notes with a deal context prefix to preserve history. |
| Deals to Opportunities | high | Requires pre-created Pipelines and Stages in HighLevel, status code mapping (0→open, 1→won, 2→lost), and single-contact linking. |
| Automations/Workflows | high | No programmatic migration path. Each automation must be manually rebuilt; budget 1–2 days per 10 automations. |
| Custom Objects | high | Schema translation from 1:many to many-to-many pattern required. HighLevel caps at 10 per sub-account; consolidation needed if exceeding limit. |
| Account to Company Mapping | medium | HighLevel auto-creates Companies via Business Name field or separate import. API still uses businessId while UI shows Company. |
| Custom Fields | medium | Must pre-create all custom fields in HighLevel before import or values are silently dropped. Data types must match. |
| List Memberships | medium | HighLevel has no email list equivalent. Lists must be flattened into tags or Smart Lists, losing per-list subscription status granularity. |
| Tags | low | Direct mapping between platforms. Tags transfer cleanly but should be audited for bloat — exclude tags with zero associated contacts. |
| Contact Data | low | Core fields (email, name) map directly. Phone numbers require E.164 normalization for HighLevel SMS routing. |
The hard parts
What makes this specific migration difficult, beyond the mechanics.
Notes Extraction
ActiveCampaign CSV exports explicitly exclude contact notes, deal notes, and account notes. API-based extraction via /api/3/contacts/{id}/notes is the only path to preserve historical context.
Relationship Preservation
ActiveCampaign links Accounts, Contacts, and Deals via internal IDs that break on CSV export. An ID crosswalk table is required to rebuild Account → Contact → Deal associations in HighLevel.
Dual Rate Limits
Migration scripts must handle ActiveCampaign's 5 req/s limit and HighLevel's 100 req/10s burst limit simultaneously, requiring exponential backoff with jitter and token bucket throttling.
Automation Rebuild
ActiveCampaign automations cannot be migrated programmatically. Campaign sequences and tag-based triggers must be documented and manually rebuilt in HighLevel's workflow builder.
Custom Object Translation
ActiveCampaign custom objects use a 1:many pattern while HighLevel supports many-to-many associations with a cap of 10 custom objects per sub-account. Schema consolidation may be required.
Tools used in this playbook
All free, all run entirely in your browser — nothing is uploaded.
FAQ
Can I migrate ActiveCampaign contact notes to HighLevel via CSV?
No. ActiveCampaign's native CSV export explicitly excludes contact notes, deal notes, and account notes. You must use the ActiveCampaign API v3 endpoints (/api/3/contacts/{id}/notes or /api/3/notes) to extract them, then load them into HighLevel via the Notes API.
What are the API rate limits for ActiveCampaign and HighLevel?
ActiveCampaign's REST API v3 enforces 5 requests per second per account. HighLevel's V2 API allows a burst of 100 requests per 10 seconds and 200,000 requests per day per Marketplace app per resource. ActiveCampaign's separate Bulk Contact Importer API has its own limit of 100 requests per minute.
How do ActiveCampaign Deals map to HighLevel?
ActiveCampaign Deals map to HighLevel Opportunities. You must first create the Pipeline and Stages in HighLevel, then assign each Opportunity to the corresponding pipelineStageId and contactId. Deal status maps as: 0→open, 1→won, 2→lost.
Can ActiveCampaign automations be migrated to HighLevel programmatically?
No. ActiveCampaign's campaign sequences and tag-based triggers have no export format that translates to HighLevel workflows. You must document each automation's logic and rebuild it manually in HighLevel's workflow builder. Budget 1–2 days per 10 automations.
Does HighLevel support custom objects for ActiveCampaign migration?
Yes. HighLevel supports Custom Objects on all plans with a limit of 10 per sub-account. Each object supports custom fields, many-to-many associations, and workflow triggers. ActiveCampaign custom objects follow a 1:many pattern, so schema translation is required.