- Home
- Resources
- Integrations
- Affinity
Affinity n8n integrationAutomate Affinity with n8n.
The Affinity n8n integration puts relationship data inside a workflow. The node exposes 16 operations over 4 resources: lists, list entries, organizations and people. The trigger, the node that starts a workflow, listens to 25 events grouped in 9 families.
Verified Trustpilot reviews · AI, automation & growth agency
What does the Affinity n8n integration actually do?
Affinity is where a deal team keeps its relationships. The n8n node reaches that data through the Affinity API: 16 operations spread over 4 resources, lists, list entries, organizations and people. The Affinity Trigger covers the other direction, 25 events grouped in 9 families, so a change made inside Affinity starts a workflow instead of waiting for someone to notice it.
A form fills in, a company signs up, an inbound email arrives: that intake moment is where most of these workflows start. The workflow creates the organization with organization.create, then drops it into the right pipeline list with listEntry.create. The second node needs the ID returned by the first, which travels through an expression, a small formula written as {{ $json.id }} that reads a field from the incoming item.
Going the other way, the trigger is what tells the workflow something moved. It fires on opportunity.updated or list_entry.created, the workflow reads the full record, and the result goes out to the channel the team actually watches. Slack works for deal rooms, Gmail for a daily digest to partners who live in their inbox.
Reporting and sync run on a slower clock but touch more records at once. person.getAll and organization.getAll with Return All on stream the address book into Google Sheets for a board update, or line it up against records held in HubSpot so the marketing side and the deal side stop disagreeing about who owns an account.
Two things are worth knowing before you build. Return All walks the API pages until everything has come back; leave it off and Limit caps the number of items the node returns, which is fine for a preview and wrong for an export. And when an Affinity API endpoint falls outside the 16 operations above, the HTTP Request node calls it directly and reuses the same Affinity credential through its predefined authentication, so nothing is blocked, it just takes one extra node.
If n8n itself is the unfamiliar part, the n8n review covers what the platform is good at and where it gets tedious.
How do you connect Affinity to n8n?
- 01
Check the Affinity plan
API access is tied to the subscription. The n8n credentials documentation states that an Affinity account on the Scale, Advanced or Enterprise tier is required before the key exists at all. Worth confirming with whoever owns the Affinity account first, because everything else in this page depends on it and a plan change is not something a workflow can fix.
- 02
Get the API key from Affinity
Affinity issues an API key from its own settings, and its support article
360032633992walks through where to find it. Copy the value once and keep it somewhere safe. Both the Affinity node and the Affinity Trigger authenticate with this single key, so there is nothing else to collect on the Affinity side. - 03
Create the credential in n8n
In n8n, open the Credentials menu and create an Affinity credential, a stored set of authentication details that any workflow can reuse. Paste the value into the API Key field and save. From then on, every Affinity node offers that credential in its dropdown, and you never paste the key into a node again.
What starts a workflow from Affinity ?
Affinity Trigger is the node that starts a workflow when something happens in Affinity. It listens to 25 events, listed below by family. Pick one or several, activate the workflow: n8n registers the webhook on your Affinity account.
What you see in n8n
Every event, by family
One row per object, one chip per action. The event to tick in the node is object.action; hover a chip to read exactly when it fires.
field.*3field.createddeletedupdated
field_value.*3field_value. createddeletedupdated
list.*3list.createddeletedupdated
note.*3note.createddeletedupdated
opportunity.*3opportunity.createddeletedupdated
organization.*3organization.createddeletedupdated
person.*3person.createddeletedupdated
file.*2file.createddeleted
list_entry.*2list_entry. createddeleted
Configuration notes
01Set up the Affinity Trigger
The Affinity Trigger, version 1 of the node, is what turns activity inside Affinity into a workflow run. It works by webhook: when you activate the workflow, n8n registers a URL with Affinity, and Affinity calls that URL whenever something happens. Each event lands in the workflow a few seconds later, with no schedule to configure and nothing being checked on a loop.
Key parameters
- Events: the events this workflow subscribes to, picked from the 25 available. There is no catch all value, so each event you care about has to be ticked by name. Ticking several is fine, and the incoming item tells you which one fired.
02People, company and opportunity events
Three families cover the records a deal team touches every day, 9 events in total. person.created, person.updated and person.deleted follow contacts. organization.created, organization.updated and organization.deleted follow companies. opportunity.created, opportunity.updated and opportunity.deleted follow the deals themselves.
Key parameters
- Events: tick the three opportunity values alone for a pipeline watcher, or pair the created values of person and organization when the goal is to catch anything new entering the CRM.
03List and list entry events
Lists are how Affinity organizes work, and 5 events across 2 families report on them. list.created, list.updated and list.deleted fire on the list itself, its existence and its settings. list_entry.created and list_entry.deleted fire on membership, meaning a record entering or leaving a list.
Key parameters
- Events: the list entry pair is the useful one for pipeline automation, since moving a company into a list is usually what a stage change looks like in Affinity.
list_entry.created as a stage entry and start the matching checklist. Pair it with listEntry.get to load the full entry, because the event tells you something changed and the operation tells you what.04Field, note and file events
The remaining 4 families, 11 events, cover the content attached to records rather than the records themselves. field.created, field.updated and field.deleted report on the structure, a column being added or renamed. field_value.created, field_value.updated and field_value.deleted report on what someone actually typed in. note.created, note.updated and note.deleted follow written notes, and file.created and file.deleted follow attachments.
Key parameters
- Events: field value events are noisy on an active team, so subscribe to them in a dedicated workflow rather than mixing them with quieter families.
note.created is a good hook for a summary sent to the people who missed the call. File events sit at the other end of the scale: an attachment showing up on a record is rare enough to be worth archiving every single time it happens.What can the Affinity node do?
The Affinity node exposes 16 operations across 4 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 |
|---|---|---|---|---|---|
| List | ✓ | ✓ | |||
| List Entry | ✓ | ✓ | ✓ | ✓ | |
| Organization | ✓ | ✓ | ✓ | ✓ | ✓ |
| Person | ✓ | ✓ | ✓ | ✓ | ✓ |
Operations index
List
2 operationsGet a list
list.getWhat you see in n8n
Notes & use cases
Reads one Affinity list and returns its details, which is how a workflow confirms it is pointing at the right list before writing anything into it.
Key parameters
- List ID: the unique ID of the list object to be retrieved. Hardcode it for a list you always use, or pass
{{ $json.listId }}when an earlier node decided which one.
Get many lists
list.getAllWhat you see in n8n
Notes & use cases
Pulls the lists that exist in the account, one item per list, which gives a workflow the map it needs to turn a list name into an ID.
Key parameters
- Return All: on, n8n keeps requesting pages until every list has come back. Off, Limit decides how many lists the node returns.
List Entry
4 operationsCreate a list entry
listEntry.createWhat you see in n8n
Notes & use cases
Adds an existing person, organization or opportunity to a list. This is the operation that actually moves a record into a pipeline.
Key parameters
- List Name or ID: pick the target list from the dropdown n8n loads from the account, or pass an ID with an expression.
- Entity ID: the unique ID of the entity (person, organization or opportunity) to add, typically
{{ $json.id }}from the node that just created it. - Creator ID: a Person who can access Affinity, recorded as having added the entry. Empty, it defaults to the owner of the API key.
Delete a list entry
listEntry.deleteWhat you see in n8n
Notes & use cases
Removes one entry from one list. The person or organization stays in Affinity, only its membership of that list goes away.
Key parameters
- List Name or ID: the list that contains the entry, chosen from the dropdown or passed as an ID.
- List Entry ID: the unique ID of the list entry object to be deleted, which is not the ID of the company or the person.
Get a list entry
listEntry.getWhat you see in n8n
Notes & use cases
Fetches a single entry and returns what Affinity holds about it, so a workflow can read an entry it was told about instead of scanning a whole list.
Key parameters
- List Name or ID: the list that contains the entry.
- List Entry ID: the unique ID of the list entry object to be retrieved.
list_entry.created event, this operation turns that reference into the full record, and only then does the workflow have enough to write a useful message.Get many list entries
listEntry.getAllWhat you see in n8n
Notes & use cases
Walks a list and returns its entries as separate items, one per entry, ready for a loop or a batch write.
Key parameters
- List Name or ID: the list whose entries are to be retrieved.
- Return All: on for a complete export. Off, Limit caps the number of entries returned, which is what you want while testing.
Organization
5 operationsCreate an organization
organization.createWhat you see in n8n
Notes & use cases
Creates a company in Affinity and returns it with its ID, the value every later operation on that company will need.
Key parameters
- Name: the name of the organization.
- Domain: the domain name of the organization, and the field worth normalizing upstream, since a stray prefix creates a duplicate rather than a match.
- Person Names or IDs: people the new organization is associated with, chosen from the list or passed as IDs.
476 does exactly this, creating an organization in Affinity from whatever the workflow received.Delete an organization
organization.deleteWhat you see in n8n
Notes & use cases
Erases a company record from Affinity. Everything the team attached to it goes with the record, so this one usually sits behind a condition rather than running on its own.
Key parameters
- Organization ID: the unique identifier for the organization, not its name and not its domain.
Get an organization
organization.getWhat you see in n8n
Notes & use cases
Looks up one company by ID and returns its record, with an option that changes how much context comes back.
Key parameters
- Organization ID: the unique identifier for the organization.
- With Interaction Dates: switch it on and interaction dates are present on the returned resource, which is what lets a workflow reason about how long it has been quiet.
Get many organizations
organization.getAllWhat you see in n8n
Notes & use cases
Searches the company side of the address book and returns one item per organization.
Key parameters
- Term: a string used to search all the organizations in your team's address book, such as an email address, a first name or a last name.
- Return All: on for the full set, off and Limit caps the result.
- With Interaction Dates: adds interaction dates to every organization returned.
Update an organization
organization.updateWhat you see in n8n
Notes & use cases
Edits a company already in Affinity. Only the fields you fill in are sent, so a workflow can correct one detail without touching the rest.
Key parameters
- Organization ID: the unique identifier for the organization to edit.
- Name and Domain: the new company name and domain when either one changes.
- Person Names or IDs: the people associated with the organization.
Person
5 operationsCreate a person
person.createWhat you see in n8n
Notes & use cases
Registers a new contact in Affinity and returns the created record, ready to be attached to a list or a company.
Key parameters
- First Name and Last Name: both required, and both blocking, since a required field left empty stops the node from running.
- Emails: the email addresses of the person, in the
info@example.comshape. - Organization Names or IDs: the organizations the person is associated with.
Delete a person
person.deleteWhat you see in n8n
Notes & use cases
Deletes a contact from Affinity by ID. Short operation, permanent effect, so it belongs at the end of a branch that has already checked something.
Key parameters
- Person ID: the unique identifier for the person, the value returned by a get or carried by a trigger event.
Get a person
person.getWhat you see in n8n
Notes & use cases
Returns one contact and what Affinity knows about them, in a single item the next node can read field by field.
Key parameters
- Person ID: the unique identifier for the person.
- With Interaction Dates: on, interaction dates come back with the record, which is the difference between knowing a contact exists and knowing whether anyone has spoken to them.
person.updated event arrives with little detail, this operation loads the current state before the workflow decides anything.Get many people
person.getAllWhat you see in n8n
Notes & use cases
Scans the contact side of the address book, returning one item per person, which is the starting point for any export or audit.
Key parameters
- Term: a string used to search all the persons in your team's address book, such as an email address, a first name or a last name.
- Return All: on to page through everyone, off to stop at Limit.
- With Interaction Dates: adds interaction dates to each person returned.
Update a person
person.updateWhat you see in n8n
Notes & use cases
Patches an existing contact. Anything left blank stays as it is in Affinity, which makes this safe to run on a schedule against a source of truth.
Key parameters
- Person ID: the unique identifier for the person to edit.
- Emails: the email addresses of the person, useful when someone changes employer.
- First Name, Last Name and Organization Names or IDs: the name and affiliation fields, updated only when supplied.
Need help automating Affinity with n8n?
A person reads every message.


