Create or Update Contact

keap.upsert_contact
ActionCRM & salesconnection required

Calls the Keap API with the connection's credentials.

Create a contact in Keap, or update the existing contact Keap matches as a duplicate, and return the resulting record.

Connection

Required
Yes — the node will not save without one
Auth type
OAuth 2.0
Providers
Keap
Secret shape
{"client_id": "…", "client_secret": "…", "refresh_token": "…"}
Config it needs
base_url, default_user_id
Resolved by
config.connection_id, else node.connection_id

Configuration

2 fields, 1 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.

FieldTypeRequiredDefaultConstraintsExample
contact
The contact as Keap's own field names; the email address or name is what Keap matches an existing record on.
objectYes——{"email_addresses":[{"email":"ada@example.com","field":"EMAIL1"}],"given_name":"Ada"}
duplicate_option
How Keap decides an existing contact is the same person: by email address alone, or by email address and name.
stringNo—one of "Email", "EmailAndName"—

Example configuration

Every value below is the contract’s own example or default — nothing invented.

{
  "contact": {
    "email_addresses": [
      {
        "email": "ada@example.com",
        "field": "EMAIL1"
      }
    ],
    "given_name": "Ada"
  }
}

Output

One shape.

result

The provider's response object, as returned.

Extra keys beyond the ones listed can appear.

{}

Notes

  • Keap answers with the resulting contact either way and never says whether it created or updated it, so this node does not claim one.
  • A new contact still needs at least one email_addresses or phone_numbers entry.

See Create or Update Contact run in a workflow.

In a technical demo we add the Keap connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.