n8n-nodes-innotes
v2.0.21
Published
N8N node for InNotes CRM API integration
Maintainers
Readme
n8n-nodes-innotes
An n8n community node for the InNotes LinkedIn CRM API: contacts, notes, jobs, statuses, tags, the current user, and the job-automation callback.
The LinkedIn scraper node is a separate package,
n8n-nodes-linkedin-scraper.
Installation
Published to NPM as n8n-nodes-innotes; package.json carries the
n8n-community-node-package keyword.
Build from source (engines: Node >=18.10, yarn >=1.22.0):
yarn install
yarn buildCredentials
Create an InNotes API credential:
| Field | Notes |
|---|---|
| Base URL | Your InNotes instance. Default https://innotes.me |
| Bearer Token | Generate in the InNotes dashboard settings |
| Callback Secret | Required — the node refuses to run Automation → Report Job Created without a value. InNotes fills it in when it provisions your automation; setting the credential up by hand, any non-empty value works, because the callback authenticates with the Bearer token above |
| Allowed Domains | * for all |
The credential is tested against GET /api/user.
Username/password auth was removed in 2.0.0. Regenerate any older credential with a Bearer token.
Resources and operations
| Resource | Operations | |---|---| | Automation | Get Config, Report Job Created | | Contact | Create, Get, Get Many, Update, Delete | | Note | Create, Get (both broken — see below) | | Job | Create, Get, Get All, Search, Update, Delete, Exists, Batch Exists | | Status | Get All, Create | | Tag | Get All | | User | Get, Get CV |
Required fields: Contact create needs Name and LinkedIn Key; Job create needs Job Name and Company Name.
The Note resource is broken. NoteDescription.ts declares External ID
(ext_id) and Note Text (text) as its required fields, but the executor
reads content and contactId on create and noteId on get with no fallback —
none of which the note resource declares, so a UI-filled node throws on the
missing parameter — and Get calls /api/note/{noteId} rather than looking up
by external ID.
Job Search takes a search method: general, ext_id, title, company,
location, description. Batch Exists takes a comma-separated list of
external IDs and posts them to /api/job/batch-exists in chunks of 200.
Pagination
Contact Get Many takes Return All or a Limit (default 24). The limit
is capped at 200 because GET /api/contacts clamps pageSize there — without
the cap a request for 500 returns 200 rows with a 200 status and nothing to say
it was truncated.
Job Get All offers neither: it exposes only Search Term and External ID, while
the executor reads an undeclared returnAll/limit, so every call requests
pageSize=24, page=1 and cannot be changed.
Options
A node-level Options collection with Batch Size (default 10, max 100) and Timeout Between Batches in ms (default 1000), to stay under rate limits.
Errors
Contact Create and the Job Create / Get / Get All / Update / Delete
operations re-raise a failure as NodeApiError naming the operation and the
request parameters.
Contact creation reports only the count of contact_details entries, never
the values — n8n persists execution data, and those are a third party's phone
numbers and email addresses.
Development
yarn install
yarn lint # eslint (flat config, eslint.config.mjs)
yarn test # jest
yarn build # gulp: tsc -> dist/, plus icons, credentials, package.json
yarn dev # build + watchPublishing is automated — see CI_SETUP.md. Do not npm publish by hand.
License
MIT.
