Contacts, five operations
Create, get, list, update and archive. The list filters on search, platform, email, external ID and Updated Since, which is the filter an incremental sync runs on.
Install n8n-nodes-crmsolid from the Community Nodes panel, paste an API key, and a form submission becomes a contact, a won deal becomes an invoice, and an unanswered conversation becomes a message in whatever channel your team watches. Eight operations across three resources, no runtime dependencies, MIT licensed.
Free forever plan · No credit card required · Cancel anytime
An n8n community node is a package published to npm that an n8n instance installs at runtime, adding a new block to the canvas. It is not a fork of n8n, and it is not a webhook receiver you have to host and keep alive yourself.
n8n-nodes-crmsolid is the CRM Solid one. It authenticates with an API key you mint in the panel and gives a workflow eight operations over contacts, deals and conversations, with cursor pagination handled for you.
Published to npm as n8n-nodes-crmsolid, source on GitHub under MIT. Tested against n8n 1.60 and later on Node.js 20.15 and above. npm · GitHub
The node talks to the same public REST API a script would, so anything it does is reproducible with curl, and anything it cannot do is one HTTP Request node away.
Three resources, chosen because they are the ones an automation actually reaches for. Everything here is enforced by the API, not by the node.
Create, get, list, update and archive. The list filters on search, platform, email, external ID and Updated Since, which is the filter an incremental sync runs on.
Create a deal with title, value, currency, stage, probability, expected close date and notes. List with filters for stage, contact and a title search.
The threads that moved recently across every connected channel, newest first, each row carrying the contact id, the channel, an unread flag and a short preview of the last message.
Write your own identifier onto a contact and a re-run is refused with an HTTP 409 that names the record already there, instead of quietly creating a second copy of the same person.
Turn on Return All and the node walks every page for you. Leave it off and set a limit. A page holds at most 100 rows for contacts and deals, 50 for conversations, so a big list is many requests however you ask for it.
The credential holds one API key. Each operation declares the scope it needs, so a key without contacts:write fails a create with a 403 rather than appearing to work and changing nothing.
The node is published to npm as n8n-nodes-crmsolid and installs the way every community node installs: from inside n8n, not by copying files onto a server.
Or, on a self-hosted instance, from the command line:
npm install n8n-nodes-crmsolid
# then restart n8nOne caveat worth knowing before you plan around it: n8n Cloud offers only the community nodes n8n has reviewed and verified itself, and this package has not been through that review. Self-hosted instances install any published package. On Cloud the same operations are reachable through the HTTP Request node against the REST API, which is the honest answer rather than a detail we would rather leave out.
The package declares no runtime dependencies. Every request travels through n8n's own HTTP helper, which is what lets the credential inject the Authorization header and what keeps the install small.
The node authenticates with a CRM Solid API key: one key, one header, no OAuth round trip.
The credential test makes the cheapest authenticated call there is:
curl https://api.crmsolid.com/v1/me \
-H "Authorization: Bearer csk_live_YOUR_KEY"API keys are part of the Business plan. On Free and Pro there is no key to mint, so the credential has nothing to hold. That is the one prerequisite worth checking before you install anything.
The budget is 60 requests per minute per key by default. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and going over the line returns HTTP 429 with a Retry-After in seconds. Because the limit is per key rather than per workspace, a workflow stuck in a loop throttles itself instead of starving your other integrations.
This is the whole surface, not a highlight reel.
Each operation maps to exactly one endpoint on the public v1 API, so nothing here behaves differently from a request you would write by hand.
The platform field on a contact accepts Telegram, WhatsApp, Instagram, LinkedIn, X and Email. It records the channel a person arrived on, which is how the CRM groups their conversations afterwards.
Anything not on that list is not in the node. Sending messages, tagging, lead scoring, tasks, invoices and sequences all exist on the REST API. They are simply not among these eight operations.
The most common reason to reach for this node. A lead fills in a form and the record exists in the CRM before anybody opens a tab.
If you need true upsert semantics rather than a 409, the REST API has a batch endpoint that matches on external ID, email, phone or username and accepts up to 200 rows per request. The node does not expose it. Point an HTTP Request node at POST /v1/contacts/batch and you get the same behaviour with one call instead of two hundred.
Worth reading before you build it, because the obvious design is the wrong one.
A deal cannot be moved to won through the API at all. Winning a deal books an income entry in the CRM ledger, so that transition is deliberately reserved for the panel where a human is looking at it. The node reflects that: Deal, Create refuses the won and lost stages, and there is no update operation. You read won deals; you do not write them.
If fifteen minutes is too slow, do not shorten the poll. Subscribe instead: CRM Solid fires an outbound webhook on deal.won, signed with HMAC-SHA256 in an X-Webhook-Signature header and carrying the event name in X-Webhook-Event. Point it at an n8n Webhook node and the invoice goes out seconds after somebody closes the deal, with no polling budget spent at all. The same applies to contact.created, contact.updated and message.received.
Conversation, Get Many returns the threads that moved recently across every connected channel: Telegram, WhatsApp, Instagram, X, email and website live chat in one list. Each row carries the contact id, the channel, whether it is unread, and up to 160 characters of the last message.
Two limits are worth knowing before you build this. The preview is a preview: the node cannot page through a full message thread, so a classifier only ever sees the last message. And the node cannot tag a contact or send a reply. Both exist on the REST API and on the MCP server; neither is among these eight operations.
Three behaviours that decide whether a workflow survives its first real week.
A list response from the API the node sits on:
{
"items": [ { "Id": 812, "Name": "Sarah Lin", "Platform": "email" } ],
"nextCursor": 764,
"hasMore": true
}Incremental syncs run on Updated Since. Store the timestamp of the last successful run, pass it on the next one, and you pull the handful of contacts that changed rather than all of them. That is the difference between a nightly sync that finishes and one that spends its entire budget on rows nobody touched.
Six things it is better to read here than to discover halfway through building a workflow around them.
The REST API can queue a Telegram message or an X DM and the MCP server can too. Those operations are not in this node. If a workflow has to reach a customer, use an HTTP Request node or one of n8n's own channel nodes.
Winning a deal books an income entry in the ledger, so the transition is panel-only. The node creates deals and lists them. It does not close them, and Create refuses the won and lost stages outright.
This is an action node. To start a workflow from something happening in the CRM, register an outbound webhook and receive it with n8n's Webhook node. Polling on a Schedule Trigger works too, and costs you rate-limit budget the webhook does not.
Tags, lead scores, owner assignment, tasks and pipeline moves all exist on the REST API. None of them are among the eight operations. Contact, Update writes the plain fields and nothing else.
No invoices, no ledger entries, no payments, no refunds. Nothing in this node moves money in either direction, which is the same boundary the MCP server draws.
API keys are a Business-plan feature. On Free and Pro there is no key to paste into the credential, so the node has nothing to authenticate with, however correctly it is installed.
Three ways to connect the same CRM, each right for a different job. Most teams end up running two of them.
Deterministic work on a schedule or a trigger
You know exactly what should happen and when. A form arrives, a contact is created. A deal closes, an invoice goes out. The logic lives on a canvas your whole team can read, and a failed execution is visible in the executions list with the payload that caused it.
Best when the rule is fixed and the volume is steady.
Reacting the moment something happens
Register an endpoint in the CRM and it posts to you on contact.created, contact.updated, message.received, deal.won and the rest. Signed with HMAC-SHA256, retried with backoff, and replayable from a delivery log. Pair it with an n8n Webhook node and you get push instead of poll.
Best when latency matters more than simplicity.
Judgement, not plumbing
An AI assistant decides at call time with the actual thread in front of it, rather than following a rule written weeks earlier. 62 tools, 21 resources and 15 prompts over one authenticated endpoint, with every call bounded by the scopes on the key.
Best when the answer depends on reading the situation.
The questions that come up in the first hour, answered with the real behaviour.
The other ways into the same data, and the parts of the CRM a workflow will be writing into.
The surface underneath the node: scoped keys, cursor pagination, idempotent writes, rate-limit headers and outbound webhooks.
The same CRM for an AI assistant rather than a workflow. 62 tools, 21 resources and 15 prompts over one authenticated endpoint.
A developer walkthrough: minting keys, first authenticated request, webhook signature verification and rate-limit backoff.
When an assistant should decide at call time, when to write code, and when a no-code trigger is the right answer.
Gmail, Outlook, Calendly, Zoom, GitHub and the outbound webhooks that chain the CRM into anything else.
What a contact record actually holds: tags, custom fields, lead score, owner and a full activity timeline.
The pipeline the Deal operations write into, including why the won transition books revenue and stays in the panel.
Plan comparison, including the Business plan that carries API keys, webhooks and the MCP server.
Install the node, mint a key with two scopes, and let the first form submission land as a contact. Everything after that is a matter of dragging one more node onto the canvas.
Free forever plan · GDPR-ready · No credit card required
We value your privacy
We use cookies to improve our site, analyze traffic, and personalize ads. You can accept all, reject non-essential, or customize your choices. Read our Cookie Policy.