Reference · Tools
Keap trigger
Triggers a workflow when specific CRM events occur in Keap, such as contact changes, invoice payments, or opportunity updates.
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.
- Works as
- Webhook trigger
- Tool name
keap_trigger- Parameters
- 3
- Outputs
- Output
- Credentials
- Keap OAuth2
- Official docs
- Keap docs developer.keap.com
What you can build with Keap
- Start a workflow when a new contact is added in Keap.
- Trigger a notification when an invoice is paid in Infusionsoft.
- When automate follow-ups when a contact is updated in Keap.
- When sync data to another system when a Keap opportunity stage changes.
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.
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 }}.
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
This tool receives notifications from Keap when CRM events occur, such as contact additions or invoice payments. It is ideal for initiating workflows or syncing data in response to specific activities within Keap, rather than actively querying or modifying Keap records. It produces event data, either as the full Keap payload or as normalized individual items, for use in subsequent automation steps.
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 Keap
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 reviewed . Spotted something wrong? Tell us.