Reference · Tools

Keap Trigger

Starts workflow when Keap (Infusionsoft) CRM events occur via webhooks

Webhook trigger Marketing v1

The Keap Trigger fires when a subscribed CRM event occurs — contact.add, invoice.add, opportunity.add and others — handling Keap's webhook handshake for you. A typical build is starting an onboarding sequence the moment a contact is added by any source.

Node type
Webhook trigger
Parameters
3
Outputs
Output
Credentials
Keap OAuth2

Keap Trigger

Triggers on Keap CRM events such as contact changes, invoices, orders, and opportunities

Overview

Receives webhook notifications from Keap (formerly Infusionsoft) when CRM events occur, such as contact creation, invoice payments, opportunity stage changes, order placements, task completions, and more. Keap uses a confirmation handshake protocol: when a webhook is first registered, Keap sends a request with an x-hook-secret header that must be echoed back. Once verified, subsequent event payloads contain event_key, object_type, and an array of object_keys with id, timestamp, and apiUrl references. Supports both raw data mode (full payload as-is) and normalized mode (individual items per object key). Events are selected from the full set of Keap webhook event keys. Useful for automating CRM workflows, syncing contacts to other systems, triggering follow-ups on deal changes, and building notification pipelines around Keap activity.

Category: Marketing
Tool Name: keap_trigger
Version: 1

Appearance: Icon: lucide-CircleDollarSign | Color: #159570

Node Type

Trigger — webhook (receives incoming HTTP callbacks)

Input / Output

DirectionPort(s)
InputNone (trigger node)
OutputOutput

Credentials

This tool requires Keap OAuth2 credentials. See the Credentials Guide for setup instructions.

Parameters

ParameterTypeRequiredDefaultDescription
Keap AccountcredentialNoConnect your Keap account via OAuth2.
EventoptionsYesWhich Keap event to listen for. Events are fired when the corresponding CRM action occurs.
Options: company.add, company.delete, company.edit, contact.add, contact.delete, contact.edit, contact.email, contact.form, contact.note, contact.submit, contact.tag.add, contact.tag.remove, invoice.add, invoice.delete, invoice.edit, invoice.payment.add, invoice.payment.delete, note.add, note.delete, note.edit, opportunity.add, opportunity.delete, opportunity.edit, order.add, order.delete, order.edit, task.add, task.complete, task.delete, task.edit, tag.add, tag.delete, tag.edit, appointment.add, appointment.delete, appointment.edit, email.bounce, email.click, email.complete, email.open, email.optIn, email.optOut, email.send, email.statusReport
RAW DatabooleanNofalseWhether to return the data exactly as received from the Keap API, or normalize it into individual items per object key.

One node subscribes to one event. To react to several events, add one Keap Trigger node per event.

Output Data

With RAW Data off (the default), Keap’s object_keys array is expanded so that each referenced record becomes its own output item:

{
  "_trigger": "keap_webhook",
  "_timestamp": "2026-01-01T00:00:00.000Z",
  "_webhookEvent": "contact.add",
  "eventKey": "contact.add",
  "objectType": "contact",
  "id": "123",
  "timestamp": "2026-01-01T00:00:00.000Z",
  "apiUrl": "https://api.infusionsoft.com/crm/rest/v1/contacts/123"
}
  • eventKey — the Keap event key from the payload’s event_key.
  • objectType — the payload’s object_type, for example contact.
  • id, timestamp, apiUrl — one entry from the payload’s object_keys array. apiUrl is the Keap REST URL for the record, so a downstream HTTP Request node can fetch the full object.

With RAW Data on, a single item carries the Keap payload exactly as sent, under the same three metadata fields:

{
  "_trigger": "keap_webhook",
  "_timestamp": "2026-01-01T00:00:00.000Z",
  "_webhookEvent": "contact.add",
  "event_key": "contact.add",
  "object_type": "contact",
  "object_keys": []
}
  • _trigger — always keap_webhook.
  • _timestamp — ISO 8601 timestamp of when the delivery arrived.
  • _webhookEvent — the payload’s event_key.

If a delivery arrives with no object_keys, one item is emitted carrying eventKey, objectType and the rest of the payload. Keap’s initial verification request is answered with the required handshake header and does not start the workflow.

Reference values downstream by expression, for example {{ $json.id }} or {{ $json.apiUrl }}.

Usage Examples

  • Start a workflow when a new contact is added in Keap
  • Trigger a notification when an invoice is paid in Infusionsoft
  • Automate follow-ups when a contact is updated in Keap
  • Sync data to another system when a Keap opportunity stage changes

Example Configuration

Fire when a contact is added:

{
  "type": "keap_trigger",
  "parameters": {
    "eventId": "contact.add",
    "rawData": false
  }
}

Fire when an invoice payment is recorded:

{
  "type": "keap_trigger",
  "parameters": {
    "eventId": "invoice.payment.add",
    "rawData": false
  }
}

Track opportunity edits and keep the payload untouched:

{
  "type": "keap_trigger",
  "parameters": {
    "eventId": "opportunity.edit",
    "rawData": true
  }
}

React to email engagement:

{
  "type": "keap_trigger",
  "parameters": {
    "eventId": "email.click",
    "rawData": false
  }
}

Trigger Behavior

  • Activation: When the workflow is activated, a webhook endpoint is registered with the service.
  • Deactivation: The webhook is automatically unregistered when the workflow is deactivated.
  • Payload: The incoming webhook payload is parsed and output as workflow items.
  • Verification: Supports signature verification where applicable.

Tips

Entry point that fires when Keap sends a webhook for a subscribed CRM event. Select which event to listen for (e.g., contact.add, invoice.add, opportunity.add). Keap uses a handshake protocol: on webhook creation, it sends an x-hook-secret header that must be echoed back. Once confirmed, event payloads include event_key, object_type, and object_keys with id, timestamp, and apiUrl. Enable RAW Data to receive the full payload as-is, or leave it off for normalized individual items.

Frequently asked questions

Do I need to do anything to confirm the webhook?

No. Keap uses a handshake protocol, sending an x-hook-secret header on creation that must be echoed back, and the trigger does that automatically.

What is in the payload?

Once confirmed, event payloads carry event_key, object_type and object_keys containing id, timestamp and apiUrl — enough to identify what changed and fetch the full record if needed.

What does RAW Data change?

With it on you receive the full payload exactly as Keap sent it. With it off the trigger emits normalized individual items, which is usually easier to work with.

Which credential does it use?

A Keap OAuth2 credential — the same one the Keap action node uses.

Build with the Keap Trigger node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Keap OAuth2 credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.