$29 diagnostic playbook
GHL / Close.io two-way sync
A first-pass map for keeping appointments and contact changes synced without duplicate contacts, update loops, or silent webhook misses.
First map
Close event -> normalize contact key -> lookup GHL contact -> upsert appointment/contact -> write sync ledger. Reverse path mirrors the same ledger to prevent loops.
Conflict matrix
| Question | Why it wins |
|---|---|
| What is the source of truth? | Appointments may originate in Close while contact fields change in GHL; each object needs ownership rules. |
| What is the dedupe key? | Email/phone can drift; use normalized phone + email + external ids where available. |
| How are loops blocked? | Every write should stamp a sync ledger so webhook echoes do not trigger another update. |
| How is failure visible? | Failed writes need a retryable queue and a human-readable error row. |
$29 deliverable
- Object map for contacts, appointments, and changed fields.
- One-way or two-way sync recommendation.
- Loop-prevention and retry design.
- Fixed-scope build estimate for n8n implementation.