Create or update contact Automation Action


Published Sep 21, 2026

Creates a contact if none is in context, otherwise updates the current contact. Identifier: contact:upsert.

Automations Action Selectable node JSON import

Create or update contact

Identifier and availability

  • Type: action
  • Stable identifier: contact:upsert
  • Status: Selectable — available in the new-node selector and importable.

Purpose

Creates a contact if none is in context, otherwise updates the current contact.

Prerequisites and context

Required configuration: settings. Review the available context below before using variables.

Parameters

JSON path Type Required Default Allowed values Description
settings object Yes — — Node-specific settings. Unknown keys are rejected.
settings.first_name string No — — First name
settings.last_name string No — — Last name
settings.source string No — — Source
settings.campaign_source string No — — Campaign Source
settings.channel_source string No — — Channel Source
settings.email string No — — Email
settings.phone string No — — Phone
settings.address1 string No — — Address 1
settings.address2 string No — — Address 2
settings.city string No — — City
settings.state string No — — State
settings.zip_code string No — — Zip code

Unknown parameter and settings keys are rejected. Resource references use names, emails, document keys, or endpoints rather than database IDs.

Inputs and available variables

This node declares no additional variable groups. The always-available date group and context inherited from its path still apply.

Templated strings use double braces, for example {{contact.first_name}}. Availability in the editor does not create runtime context; the trigger and preceding branch still need to provide it.

Connections and branches

This is a sequential action with no branch ports. A root placement uses from set to null and branch set to actions; a branch placement uses the branching action key and branch token. Use a 1-based order within that path.

Connection fragment:

{
    "from": null,
    "to": "action_contact_upsert",
    "branch": "actions",
    "order": 1
}

Valid JSON node example

{
    "key": "action_contact_upsert",
    "type": "action",
    "name": "contact:upsert",
    "display_name": null,
    "parameters": {
        "settings": {
            "first_name": "{{contact.first_name}}",
            "last_name": "{{contact.last_name}}",
            "source": "Automation",
            "campaign_source": "Follow-up",
            "channel_source": "Workflow",
            "email": "{{contact.email}}",
            "phone": "{{contact.phone}}",
            "address1": "123 Main Street",
            "address2": "Suite 200",
            "city": "Denver",
            "state": "CO",
            "zip_code": "80202"
        }
    }
}

Validation and runtime caveats

The node runs only after its Automation is explicitly reviewed, published, and active.

See the Automation JSON import format for the envelope, dependency resolution, graph rules, complete examples, and AI author checklist.

Search

More guidance related to this article.

Need more help?

If this article doesn’t solve it, send us a message and we’ll help directly.

Contact Support