All Cheat Sheets
CRM30 minIntermediate

Import contacts without wrecking your data

Bring an existing list into GHL with clean mapping, source tags, and duplicate protection, and respect consent so you do not text people who never opted in.

  1. 1

    Settle consent before anything

    For each list, answer: did these people opt in to hear from this business, and is there proof? Email nurture needs consent; SMS absolutely requires it (A2P). No proof means no SMS to that list.

  2. 2

    Clean the CSV

    One row per contact, columns for first name, last name, email, phone (E.164 format like +15551234567 imports most reliably), plus any custom fields. Delete obvious junk rows now, not later.

  3. 3

    Create fields before importing

    Any CSV column you want to keep needs a matching custom field to map into. Create them first (see the fields SOP).

  4. 4

    Run the import

    Contacts, then the Import button. Upload the CSV, map every column, and apply a source tag to the whole batch (like import-2026-07 plus src-oldcrm) so you can find or unwind this batch later.

  5. 5

    Choose the duplicate strategy

    GHL matches duplicates by email and phone as configured in Settings. For a first import into a used account, prefer updating existing records over creating new ones.

  6. 6

    Spot-check ten records

    Open ten imported contacts. Verify fields landed in the right places, phones are dialable, and the batch tag is present. Check the total count matches the CSV.

Do it with Claude

Claude can upsert contacts through the MCP (contacts_upsert-contact) for surgical imports and dedupe checks, and after any import can pull a sample to verify mapping landed correctly.

Watch out for

  • Importing a scraped or purchased list and texting it: that is how accounts get shut down.
  • Phones without country codes failing silently or landing as unusable strings.