ACTION_ID: gohighlevel_upsert_contact NAME: GoHighLevel: Create/Update contact CATEGORY: CRM CREDITS: 0 Create or update a GoHighLevel contact, including tags, DND state, address and custom fields. Returns the full contact record. PREREQUISITE: GoHighLevel account connection — the user must create it in the Floqer UI (Connections page); an agent cannot. Without it the action fails the row with a connection / authentication error. Confirm it exists before configuring. 1. INPUTS first_name (string, optional) First Name. First Name of the contact last_name (string, optional) Last Name. Last Name of the contact name (string, optional) Name. Full Name of the contact email (email, optional) Email. Email of the contact location_id (string, optional) Location Id. Location ID of the contact gender (string, optional) Gender. Gender of the contact(male/female/etc..) phone (string, optional) Phone. Phone Number of the contact address1 (string, optional) Address1. Address1 of the contact city (string, optional) City. City of the contact country (string, optional) Country. Country of the contact state (string, optional) State. State of the contact postal_code (string, optional) Postal Code. Postal Code of the contact website (url, optional) Website. Website of the contact timezone (string, optional) TimeZone. TimeZone of the contact dnd (boolean, optional) DND. DND tags (string, optional) Tags. Tags for the contact. Add as a comma-separated list. Example: tag1,tag2,tag3 source (string, optional) Source. Source of the contact company_name (string, optional) Company Name. Company Name of the contact assigned_to (string, optional) Assigned To. UserID for the Contact Assigned To custom_fields (raw_array, optional) Custom Fields. Custom Fields for the contact 2. OUTPUTS contact_id (string) — Id of the contact location_id (string) — Location ID where the contact is saved first_name (string) — First Name of the contact last_name (string) — Last Name of the contact full_name_lower_case (string) — Full Name of the contact in Lower Case phone (string) — Phone for the contact email (email) — Email of the contact bounce_email (boolean) — Is Bounce Email unsubscribe_email (boolean) — Unsubscribe Email by the contact address1 (string) — Address of the contact city (string) — City of the contact state (string) — State contact lives in country (string) — Country of the contact postal_code (string) — Postal code of the contact website (url) — Website of the contact company_name (string) — Company Name of the contact business_id (string) — Business Id of the contact source (string) — Source of the contact deleted (boolean) — Is the contact deleted tags (string) — Tags for the contact type (string) — Access type of the contact dnd (boolean) — Is DnD active for the contact dnd_settings (json) — DnD settings for the contact date_added (date) — Date when the contact is added date_updated (date) — Date of updation of the contact date_of_birth (string) — D.O.B of the contact last_session_activity_at (date) — Last Session Activity At assigned_to (string) — Contact Assigned to custom_fields (string) — Custom fields for the contact 3. HOW TO CONFIGURE Resolve the location's custom-field catalog: POST .../options/custom_fields (body: {}) Configure Action body: { "inputs": { "first_name": "{{input.first_name}}", "last_name": "{{input.last_name}}", "email": "{{person_work_email_waterfall_01ab.work_email}}", "phone": "{{person_enrich_by_floqer_01cd.phone_number}}", "company_name": "{{input.company_name}}", "website": "{{input.company_domain}}", "tags": "floqer,inbound", "source": "floqer-workflow", "dnd": false, "custom_fields": [ { "name": "", "value": "{{input.segment}}" } ] } } Field-by-field: - location_id Optional. Defaults to the location on the connected GoHighLevel account. - tags Comma-separated list, not an array. - dnd Boolean. `true` suppresses all outbound messaging for the contact. - custom_fields `[{name, value}]` where `name` is the custom-field ID from the options response. 4. KEY NOTES - GoHighLevel matches on email (falling back to phone) to decide create vs update, so this behaves as an upsert even though the internal name says create/update. - `tags` is a comma-separated string. Passing a JSON array stores one malformed tag. - Custom fields are addressed by their GoHighLevel field ID, not the label — resolve them via Get Action Field Options. - `contact_id` is returned and is exactly what `gohighlevel_create_opportunity` needs, so the two chain directly. - The connection is scoped to one GoHighLevel location. Contacts for another location need a separate connection. 5. WHERE IT FITS IN A WORKFLOW Pattern: enrichment chain -> gohighlevel_upsert_contact -> gohighlevel_create_opportunity (contact_id wired from the upsert). 6. WHEN TO USE Use gohighlevel_upsert_contact to keep a GoHighLevel sub-account's contacts in sync with enriched Floqer rows. 7. WHEN NOT TO USE Need to create a pipeline opportunity -> action-detail/gohighlevel_create_opportunity.txt The CRM is HubSpot -> action-detail/hubspot_upsert_object.txt Last updated: 2026-08-03.