Reference · Tools
Keap Trigger
Starts workflow when Keap (Infusionsoft) CRM events occur via webhooks
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
| Direction | Port(s) |
|---|---|
| Input | None (trigger node) |
| Output | Output |
Credentials
This tool requires Keap OAuth2 credentials. See the Credentials Guide for setup instructions.
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| Keap Account | credential | No | — | Connect your Keap account via OAuth2. |
| Event | options | Yes | — | Which 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 Data | boolean | No | false | Whether 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’sevent_key.objectType— the payload’sobject_type, for examplecontact.id,timestamp,apiUrl— one entry from the payload’sobject_keysarray.apiUrlis 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— alwayskeap_webhook._timestamp— ISO 8601 timestamp of when the delivery arrived._webhookEvent— the payload’sevent_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 BusyBotLast updated . Spotted something wrong? Tell us.