Skip to main content
Consuelo uses a sync map between HighLevel contact ids and CRM People ids so future imports, webhook updates, and push operations all refer to the same record pair.

Two sync entry points

FlowWhat it does
Initial importpulls all matching contacts from HighLevel and builds the first set of sync mappings
Incremental syncpulls contacts again, checks what changed since the last sync timestamp, and updates only what needs work

How contact import works

During import, Consuelo:
  1. paginates through HighLevel contacts in batches of 100
  2. optionally filters to contacts with specific HighLevel tags
  3. maps each HighLevel contact into CRM field names
  4. checks for an existing sync mapping first
  5. falls back to dedupe by normalized phone number, then email address
  6. creates a new person or updates an existing one
  7. stores or updates the sync mapping and last sync timestamp

Default dedupe behavior

The current implementation checks duplicates in this order:
  1. existing HighLevel sync mapping
  2. normalized phone number
  3. email address
That means phone formatting differences are cleaned up before comparison, which prevents duplicate People records caused by different display formats.

Contact webhook events

The integration accepts and processes these HighLevel contact events:
  • ContactCreate
  • ContactUpdate
  • ContactDelete
  • ContactDndUpdate
For contacts, webhook handlers can create a new mapped record, update an existing mapped record, remove only the sync mapping on delete, or update the do-not-contact flag.

Conflict handling

The sync engine supports three conflict strategies:
  • use HighLevel data
  • keep the CRM data
  • merge the non-null values from both sides
That conflict check compares the last sync timestamp against updates made in each system.

What the sync log tracks

Every import and incremental sync creates a log entry with:
  • total contacts processed
  • imported count
  • updated count
  • skipped count
  • conflict count
  • error details