Keap n8n integrationAutomate Keap with n8n.
A Keap n8n integration you can wire in an afternoon. The node exposes 28 operations across 8 resources: contacts, companies, tags, notes, orders, products, emails and files. The Keap Trigger catches form submissions through a webhook. Written for ops people who keep both tools open all day.
Verified Trustpilot reviews · AI, automation & growth agency
What does the Keap n8n integration actually cover?
The Keap n8n integration puts two pieces in your workflow: the Keap node, which calls the Keap REST API across 8 resources and 28 operations, and the Keap Trigger, which starts a workflow when Keap posts a form submission. The trigger works over a webhook, an URL that n8n registers when you activate the workflow, so a submission lands in your workflow within seconds and nothing polls Keap on a timer.
Start with lead capture, because that is where most Keap workflows begin. A submission hits the Keap Trigger, contact.upsert writes the person in with Duplicate Option set to Email so a repeat visitor updates the existing record instead of creating a twin, contactTag.create stamps the right tags on them, and contactNote.create logs where the lead came from. Four steps, no manual retyping.
The second pattern is commerce. An order confirmed elsewhere, say in WooCommerce or paid through Stripe, gets matched against the Keap catalog with ecommerceProduct.getAll, then written back with ecommerceOrder.create. You keep the shop as the source of truth for the cart, and Keap as the source of truth for the customer lifecycle.
The third one is reporting, and it is the least glamorous of the three. contact.getAll with Since and Until pulls everything that changed in a window, Return All keeps n8n paging until the API runs out of contacts, and the rows land in Google Sheets for the weekly review. Teams running Keap alongside HubSpot use the same shape to keep two systems in step.
When an endpoint of the Keap REST API sits outside the node's 28 operations, the HTTP Request node calls it directly and reuses the same Keap credential through predefined authentication. You keep one OAuth2 connection for the whole workflow, whether the call goes through the dedicated node or not.
Two things are worth knowing before you build. Reads are paginated: leave Return All off and n8n stops at Limit, which is fine for a preview and wrong for an export. And some properties are trimmed from responses by default, which is exactly what the Fields option is for on contacts and companies. If you are still comparing platforms before you commit, the n8n review goes through the trade-offs in detail.
How do you connect Keap to n8n?
- 01
Create a Keap developer account
The credential starts on Keap's side, not in n8n. Sign up on the Keap developer portal, which is the prerequisite listed in the n8n credential documentation, and create the application that will hold your OAuth2 keys. Keap's own
Getting Started with OAuth2guide walks through the web flow if you have never issued keys there before. - 02
Add the Keap credential in n8n
In n8n, open the Credentials menu and create a Keap credential. OAuth2 is the supported authentication method, so n8n sends you through Keap's consent screen and stores the tokens for you. A credential is created once and reused everywhere: every later workflow simply picks it from the dropdown on the node, and you never paste keys into a node again.
- 03
Select the credential and run one operation
Drop a Keap node on the canvas, pick the credential, then choose a resource and an operation.
contact.getAllwith Limit set low is a good first call: it proves the connection without touching any data. Once it returns records, add the Keap Trigger and activate the workflow so n8n registers the webhook URL with Keap.
What starts a Keap workflow?
Keap Trigger is the node that starts a workflow each time Keap receives a new submission. Pick the form, activate the workflow: n8n registers the webhook on your Keap account.
What you see in n8n
Configuration notes
01Set Up the Keap Trigger
The Keap Trigger starts the workflow when Keap sends it a form submission. It runs on a webhook, so Keap calls the n8n URL as soon as the submission happens and the execution starts within seconds. Nothing is checked on an interval.
Key parameters
- Event Name or ID: required. Pick it from the list the node loads, or supply an ID yourself with an expression such as
{{ $json.eventId }}when the value comes from an earlier node.
contact.upsert to write the submitter in, or with contactTag.create to segment them the moment they arrive. Remember that the URL is registered with Keap when the workflow goes active, so nothing reaches the trigger while the workflow is still sitting in the editor.02Return RAW Data
One setting decides what the rest of your workflow sees. RAW Data returns the payload exactly as it arrived from the Keap API, untouched by the node.
Key parameters
- RAW Data: optional boolean. On, the item keeps the API's own shape and field names; off, the node hands over what it normally returns.
What can the Keap node do?
The Keap node exposes 28 operations across 8 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
| Resource | Create | Get | Get Many | Update | Delete | Create Record | Send | Upload | Create or Update |
|---|---|---|---|---|---|---|---|---|---|
| Company | ✓ | ✓ | |||||||
| Contact | ✓ | ✓ | ✓ | ✓ | |||||
| Contact Note | ✓ | ✓ | ✓ | ✓ | ✓ | ||||
| Contact Tag | ✓ | ✓ | ✓ | ||||||
| Ecommerce Order | ✓ | ✓ | ✓ | ✓ | |||||
| Ecommerce Product | ✓ | ✓ | ✓ | ✓ | |||||
| ✓ | ✓ | ✓ | |||||||
| File | ✓ | ✓ | ✓ |
Operations index
Company
2 operationsCreate a company
company.createWhat you see in n8n
Notes & use cases
Adds a company record to Keap, the object you attach contacts and orders to when you sell to organizations rather than individuals.
Key parameters
- Company Name: the only required field, typically
{{ $json.company }}coming off a form submission. - Addresses, Phones and Faxes: separate collections, each one added line by line rather than typed into a single box.
- Additional Fields: holds Email, Website, Notes and Opt In Reason, plus the address details such as Country Code in ISO Alpha-3 form.
Get many companies
company.getAllWhat you see in n8n
Notes & use cases
Pulls the company list out of Keap, either whole or filtered, and returns one item per company for the next node to work through.
Key parameters
- Return All: on, n8n keeps requesting pages until the API has none left; off, it stops at Limit.
- Company Name: narrows the query to companies matching that name.
- Order and Order Direction: sort by
datecreated,idorname, ascending or descending. - Fields: a comma-separated list of properties to add back to the response, since notes, fax number and custom fields are left out by default.
datecreated, to see which organizations arrived since the last review.Contact
4 operationsCreate or update a contact
contact.upsertWhat you see in n8n
Notes & use cases
One call that creates the contact, or updates the record already sitting in Keap. This is the workhorse of most Keap workflows, because it removes the duplicate problem instead of managing it.
Key parameters
- Duplicate Option: required. Email matches on the address alone, Email And Name needs both to line up before Keap treats it as the same person.
- Emails, Phones, Addresses and Social Accounts: collections, each entry typed by Field or Type.
- Additional Fields: 17 of them, including Given Name, Family Name, Job Title, Owner Name or ID, Company ID and Source Type.
Delete a contact
contact.deleteWhat you see in n8n
Notes & use cases
Removes a contact from Keap. There is no confirmation step inside the node, so whatever reaches it gets deleted.
Key parameters
- Contact ID: required, the Keap identifier and not the email address. It usually comes from a preceding lookup as
{{ $json.id }}.
contact.getAll, then passes the ID here. Putting a manual approval step between the lookup and the deletion is a habit worth keeping.Get a contact
contact.getWhat you see in n8n
Notes & use cases
Fetches a single contact by identifier and returns its properties as one item, ready to be read by expressions further down.
Key parameters
- Contact ID: required, the numeric Keap ID of the person.
- Fields: a comma-separated list of properties to include, because lead source ID, custom fields and job title are not returned by default.
Get many contacts
contact.getAllWhat you see in n8n
Notes & use cases
Reads your contact base, page after page, with filters that make the result usable instead of enormous.
Key parameters
- Return All: on for a full export, off to cap the result at Limit.
- Since and Until: a date window applied to the last update, which is how you get an incremental sync rather than a full reload.
- Email, Given Name, Family Name: filters to find a specific person.
- Order and Order Direction: sort by
date,email,idorname.
Contact Note
5 operationsCreate a contact note
contactNote.createWhat you see in n8n
Notes & use cases
Writes a note on a contact's history, the trace a salesperson reads before picking up the phone.
Key parameters
- Contact ID: who the note belongs to.
- User Name or ID: the Infusionsoft user the note is created on behalf of, chosen from the list or set by expression.
- Additional Fields: Title, Body, and Type among
appointment,call,email,fax,letterandother.
call note with the summary in the body, so the history stays complete without anyone typing it.Delete a contact note
contactNote.deleteWhat you see in n8n
Notes & use cases
Takes a note off the record permanently. Nothing else on the contact is affected.
Key parameters
- Note ID: required, the identifier of the note itself, which is not the contact ID. Fetch it with
contactNote.getAllif you only know who the note belongs to.
Get a contact note
contactNote.getWhat you see in n8n
Notes & use cases
Returns one note with its content, so a workflow can read what was written before deciding what to do next.
Key parameters
- Note ID: required, and the only input this operation takes.
Get many contact notes
contactNote.getAllWhat you see in n8n
Notes & use cases
Lists notes across contacts, or narrows down to one person's history when you give it a filter.
Key parameters
- Return All: on to walk every page, off to stop at Limit.
- Contact ID: keeps only the notes attached to that contact.
- User Name or ID: keeps only the notes created on behalf of that user.
Update a contact note
contactNote.updateWhat you see in n8n
Notes & use cases
Edits a note that already exists rather than adding a second one next to it. Only the fields you fill in are changed.
Key parameters
- Note ID: required, the note to rewrite.
- Additional Fields: Title, Body, Type, Contact ID to move the note to another person, and User Name or ID.
Contact Tag
3 operationsCreate a contact tag
contactTag.createWhat you see in n8n
Notes & use cases
Applies one or several tags to a contact in a single call. Tags drive segmentation in Keap, so this is often the last step of a capture workflow.
Key parameters
- Contact ID: required, the person being tagged.
- Tag Names or IDs: required, a multi-select that lets you apply several tags at once, or an expression when the IDs are computed upstream.
Delete a contact tag
contactTag.deleteWhat you see in n8n
Notes & use cases
Removes a tag from a contact without touching the contact itself or the tag definition.
Key parameters
- Contact ID: required.
- Tag IDs: required, and here it is a plain text field rather than the picker used when adding tags.
trial tag so the nurture sequence built on it stops sending, then tags the customer as active.Get many contact tags
contactTag.getAllWhat you see in n8n
Notes & use cases
Answers a question every routing workflow ends up asking: what is this contact tagged with right now?
Key parameters
- Contact ID: required, since tags are always read per contact.
- Return All: on to get the full set, off to stop at Limit.
Ecommerce Order
4 operationsCreate an e-commerce order
ecommerceOrder.createWhat you see in n8n
Notes & use cases
Records an order in Keap, with its lines and its delivery address, so revenue and lifecycle live next to each other.
Key parameters
- Contact ID, Order Date, Order Title and Order Type: all required, with the type either
onlineoroffline. - Order Items: a collection where each line carries Product ID, Quantity, Description and an optional Price that overrides the catalog price.
- Shipping Address and Promo Codes, the latter comma-separated so the matching discount is applied.
offline order, and lands in the same reporting as the website's.Get an e-commerce order
ecommerceOrder.getWhat you see in n8n
Notes & use cases
Retrieves one order and its detail, which is what you call when a webhook gives you an order reference and nothing else.
Key parameters
- Order ID: required, and the only field to fill.
Delete an e-commerce order
ecommerceOrder.deleteWhat you see in n8n
Notes & use cases
Erases an order from Keap. Worth treating as a last resort, since the order also carries your revenue history.
Key parameters
- Order ID: required, the identifier of the order to remove.
Get many e-commerce orders
ecommerceOrder.getAllWhat you see in n8n
Notes & use cases
Sweeps through orders with the filters that matter for follow-up: a date window, payment status, one customer or one product.
Key parameters
- Return All: on to page through everything, off to cap at Limit.
- Since and Until: the period to search in.
- Paid: a boolean that separates settled orders from the rest.
- Contact ID and Product ID: narrow to one customer or one item.
Ecommerce Product
4 operationsCreate an e-commerce product
ecommerceProduct.createWhat you see in n8n
Notes & use cases
Registers a product in the Keap catalog so orders can reference it by ID afterwards.
Key parameters
- Product Name: the only required field.
- Additional Fields: SKU, Product Price, Product Description and Product Short Desc, plus two booleans, Active for visibility and Subscription Only for items sold on a recurring basis.
Delete an e-commerce product
ecommerceProduct.deleteWhat you see in n8n
Notes & use cases
Takes a product out of the Keap catalog for good.
Key parameters
- Product ID: required, the catalog identifier rather than the SKU you use in the shop.
ecommerceProduct.create on the replacement is usually a calmer route than deleting outright.Get an e-commerce product
ecommerceProduct.getWhat you see in n8n
Notes & use cases
Looks up a single product and returns its catalog record, price and description included.
Key parameters
- Product ID: required, the Keap identifier of the item.
Get many e-commerce products
ecommerceProduct.getAllWhat you see in n8n
Notes & use cases
Walks the catalog and hands back the products as items, which is how you turn Keap into the reference list for the rest of a workflow.
Key parameters
- Return All: on to retrieve the whole catalog, off to stop at Limit.
- Active: a boolean filter to keep only the products still on sale.
Create a record of an email sent
email.createRecordWhat you see in n8n
Notes & use cases
This operation logs an email inside Keap without sending anything. The message left from somewhere else, and the record keeps the contact history complete.
Key parameters
- Sent To Address: the recipient address, required, often
{{ $json.email }}coming from the node before it. - Sent From Address: the address the message was sent from, also required.
- Contact ID: in Additional Fields, the numeric Keap contact the entry attaches to.
- Original Provider: in Additional Fields, one of
UNKNOWN,INFUSIONSOFT,MICROSOFTorGOOGLE, paired with Original Provider ID, which Keap autogenerates as a UUID without dashes when left empty.
Get many emails
email.getAllWhat you see in n8n
Notes & use cases
Reads sent email records back out of Keap and returns one item per message, ready for a report or a follow-up branch.
Key parameters
- Return All: on, n8n walks every page of the Keap API; off, Limit caps how many emails come back.
- Contact ID: in Filters, narrows the result to the emails of one contact.
- Email: in Filters, an address such as
name@email.comwhen the contact identifier is unknown. - Since Sent Date and Until Sent Date: the date window; Since Sent Date has to be filled whenever the until date is set.
Send an email
email.sendWhat you see in n8n
Notes & use cases
Keap sends the message itself here, on behalf of one of its users, and the send stays attached to that identity.
Key parameters
- User Name or ID: required, the Infusionsoft user the email goes out for; pick it from the list or set an ID through an expression.
- Contact IDs: the recipients, several of them separated by commas.
- Subject: the subject line, alongside HTML Content or Plain Content in Additional Fields, both encoded in Base64.
- Attachments: up to 10 files per copy, 1MB each, filled with File Name and File Data or read from a binary Property.
File
3 operationsDelete a file
file.deleteWhat you see in n8n
Notes & use cases
One file leaves the Keap library for good. The node takes its identifier and returns the outcome, nothing else.
Key parameters
- File ID: required, the identifier of the file to remove, usually
{{ $json.id }}passed down from a listing step earlier in the workflow.
Get many files
file.getAllWhat you see in n8n
Notes & use cases
Browsing the Keap file library from a workflow starts here. Each file comes back as its own item, filters included.
Key parameters
- Return All: enabled, every page of files is fetched; disabled, Limit decides where the listing stops.
- Name: in Filters, a name search where
*before or after the text runs a LIKE query. - Type: in Filters, the file category, from
attachmentandimagetowebformordigitalProduct. - Permission and Viewable:
user,companyorbothon one side,public,privateorbothon the other.
Upload a file
file.uploadWhat you see in n8n
Notes & use cases
A document produced upstream, a signed quote or an invoice PDF, gets stored in Keap and tied to a record.
Key parameters
- Input Binary Field: required, the name of the incoming binary field holding the file; Binary File tells the node to read the data from there.
- File Association: required,
company,contactoruser, and Contact ID names the record it lands on. - File Name: required, extension included, since Keap keeps the name as given.
- File Data: required, the content encoded in Base64, with Is Public controlling visibility.
Need help automating Keap with n8n?
A person reads every message.