Resources · n8n integration

Zulip n8n integrationAutomate Zulip with n8n.

Every Zulip message a workflow has to send can leave n8n instead of a person. The Zulip n8n integration groups 16 operations over 3 resources: messages, streams and users. No Zulip trigger exists, so a Schedule or Webhook node opens the run. Written for teams that run Zulip in house.

Verified Trustpilot reviews · AI, automation & growth agency

Why automate

What does the Zulip n8n integration actually do?

The Zulip node is the app node n8n ships for Zulip, and it talks to the Zulip API with your organization URL, a login email and an API key. It covers three resources: messages, streams and users. Anything a workflow posts, reads, edits or deletes in Zulip goes through one of its 16 operations, and the same credential serves every workflow on your instance.

Start with the notice nobody wants to write by hand. A monitoring workflow catches a failed job, formats one line, and message.sendStream drops it in the right stream and topic. The same shape carries a daily summary pulled from Google Sheets, or an alert relayed from Gmail when a specific sender writes in.

Onboarding is the second obvious one. When a new hire lands in the HR sheet, user.create opens the account with an email, a full name and a password, stream.create subscribes the person to the team streams, and user.update sets the role. The day someone leaves, user.deactivate closes the account from the same workflow.

Third comes cleanup and correction. stream.getAll lists what exists, message.update fixes a post that went out with the wrong figure, and message.delete clears a stale bot notice. Teams that mirror announcements elsewhere send the same payload to Slack or Telegram right after the Zulip node.

The node stops at those 16 operations. Anything outside message, stream and user management goes through the HTTP Request node, which calls any endpoint of the Zulip API and reuses the same credential through predefined authentication.

Two limits are worth knowing before you build. There is no Zulip trigger node, so nothing in n8n reacts on its own when a message arrives; a Schedule Trigger at a fixed interval, or an n8n Webhook, which is a URL another service calls, starts the workflow instead. And the operations that target an existing stream, message or account expect an identifier, not a name, so a lookup step often comes first. How the node sits next to the rest of the catalog is covered in the n8n review.

Connect

How do you connect Zulip to n8n?

  1. 01

    Get the API key in Zulip

    Open your Zulip organization and go to the Gear cog, then Personal Settings, then Account and privacy, then API Key. The key belongs to the account you are logged in with, so decide first whether the automation should post under a person or under a dedicated account, because that choice shows on every message the workflow sends and defines what it is allowed to do.

  2. 02

    Create the credential in n8n

    In n8n, open Credentials and add a Zulip credential. Three values are asked for: URL, the address of your Zulip domain, Email, the address used to log in to Zulip, and API Key, the value copied in the previous step. Save once, and the credential is available to every workflow on the instance.

  3. 03

    Pick it in the node and test

    Drop a Zulip node in the workflow and choose the credential in its dropdown. There is no authentication selector to set, so the next choice is the resource, Message, Stream or User, then the operation. Get subscribed streams is a good first run: it needs no parameter and returns a list, which confirms the URL, the email and the key line up.

Actions

The 16 operations of the Zulip node, one by one

The Zulip node exposes 16 operations across 3 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.

Resources × operations matrix
ResourceCreateGetGet ManyUpdateDeleteDeactivateGet SubscribedSend PrivateSend to StreamUpload a File
Message✓✓✓✓✓✓
Stream✓✓✓✓✓
User✓✓✓✓✓

Message

6 operations
01

Delete a message

message.delete

What you see in n8n

Notes & use cases

Removes one message from Zulip for good, in a stream or in a private conversation. Zulip works from the numeric identifier of the message, never from its text.

Key parameters

  • Message ID: the unique identifier of the message, usually carried over from a Get a message step or from the node that posted it, through an expression such as {{ $json.id }}.
Use cases
a status bot posts a deploy notice on every run, and the previous one is cleared before the new one goes out so the topic stays readable.
02

Get a message

message.get

What you see in n8n

Notes & use cases

Pulls a single message back into the workflow so the branch that follows can read its content instead of guessing it.

Key parameters

  • Message ID: the unique identifier of the message; it comes from a spreadsheet column, a form field or an earlier node, passed as {{ $json.messageId }}.
Use cases
a support routine stores the identifier of the message that opened a thread, then re-reads it later to copy the original wording into the ticket it creates.
03

Send a private message

message.sendPrivate

What you see in n8n

Notes & use cases

Delivers a direct message to one person or to a handful of them, without anything appearing in a stream.

Key parameters

  • To: the recipients, picked from the list in the node or given as a comma separated list of usernames (emails); an expression works when the address comes from a previous step.
  • Content: the body of the message, written the way it should appear in Zulip.
Use cases
the manager on duty gets a private ping when an order above the approval threshold lands, instead of a public post the whole team would read.
04

Send a message to a stream

message.sendStream

What you see in n8n

Notes & use cases

Posts a message in a stream, under a topic. Most Zulip workflows end on this operation.

Key parameters

  • Stream Name or ID: the destination stream, chosen from the node list or given as an ID through an expression.
  • Topic Name or ID: the topic the message lands under, which Zulip only uses for stream messages.
  • Content: the text itself, often assembled in a Set node just before.
Use cases
every new signup writes one line in the growth stream, under a topic named after the month, so the history stays grouped.
05

Update a message

message.update

What you see in n8n

Notes & use cases

Edits a message already published, its text, its topic, or both, without deleting it and posting again.

Key parameters

  • Message ID: the message to edit.
  • Content: the replacement text, set in Update Fields.
  • Topic: the new topic, which Zulip only accepts on stream messages.
  • Propagate Mode: changeOne touches that message only, changeLater also moves the ones sent after it in the same topic, changeAll takes them all.
Use cases
a live inventory post is rewritten on each run, so the stream holds one current figure rather than a pile of outdated ones.
06

Upload a file

message.updateFile

What you see in n8n

Notes & use cases

Sends a file carried by the workflow up to Zulip. The file arrives as binary data from the node before, a download, an export or a generated document.

Key parameters

  • Put Output File in Field: the name of the binary field that carries the file, matching whatever the previous node used for its binary output.
Use cases
a weekly export is generated inside the workflow and uploaded to Zulip in the same run, so nobody has to drag a file into the app on Monday morning.

Stream

5 operations
07

Create a stream

stream.create

What you see in n8n

Notes & use cases

Opens one or more streams and subscribes accounts to them in a single call, which is why the node asks for a list rather than one name.

Key parameters

  • Subscriptions: the streams to subscribe to, each with a Name and a Description; a stream that does not exist yet is created.
  • Invite Only: keeps the stream private, while History Public to Subscribers decides whether newcomers can read what was said before they joined.
  • Principals: the email addresses to subscribe; left empty, only the account behind the credential is subscribed.
Use cases
each new client project opens its own private stream with the account managers already in it.
08

Delete a stream

stream.delete

What you see in n8n

Notes & use cases

Takes a stream out of the organization, together with the topics it held.

Key parameters

  • Stream ID: the identifier of the stream to delete, a number and not its name, which a Get many streams step provides through an expression.
Use cases
a cleanup workflow runs at the end of a quarter and closes the streams opened for events that are over, after posting a last notice in each of them.
09

Get many streams

stream.getAll

What you see in n8n

Notes & use cases

Lists the streams of the organization. The Additional Fields decide how wide that list goes, so the same operation answers two very different questions.

Key parameters

  • Include Public: adds every public stream of the organization.
  • Include Subscribed: adds the streams the account follows.
  • Include Default: adds the default streams of the realm; Include All Active adds all active ones and needs administrative privileges.
  • Include Owner Subscribed: for a bot account, adds the streams its owner follows.
Use cases
a monthly audit lists the streams and writes them to a sheet to spot the ones nobody posts in.
10

Get subscribed streams

stream.getSubscribed

What you see in n8n

Notes & use cases

Returns only the streams the connected account follows. Shorter list, and the one most workflows actually need.

Key parameters

  • Include Subscribers: adds a subscribers field to each stream returned, holding the user IDs of everyone subscribed to it.
Use cases
before a broadcast, the workflow checks that the account is subscribed where it is supposed to post, and sends a private warning when a stream is missing from the list.
11

Update a stream

stream.update

What you see in n8n

Notes & use cases

Changes the settings of an existing stream: its name, its description, its privacy and who is allowed to post in it.

Key parameters

  • Stream ID: the stream to update.
  • New Name and Description: the new label and the line shown under it.
  • Is Private and History Public to Subscribers: close the stream, and decide what its new subscribers can read.
  • Stream Post Policy: 1 lets any user post, 2 only administrators, 3 only new members. Announcement Only limits the stream to announcements.
Use cases
when a project ends, its stream is renamed with an archive prefix and switched to announcements.

User

5 operations
12

Create a user

user.create

What you see in n8n

Notes & use cases

Opens an account in the Zulip organization. All four fields are required, so the workflow has to hold them before the node runs.

Key parameters

  • Email: the address of the new user, in the name@email.com form.
  • Full Name: the name shown to the rest of the organization.
  • Short Name: a short name that stays invisible to other users.
  • Password: the password of the new account, better passed through an expression than typed in the node.
Use cases
the HR workflow that creates the mailbox opens the Zulip account on the same row of the sheet.
13

Deactivate a user

user.deactivate

What you see in n8n

Notes & use cases

Deactivates an account so the person can no longer log in to the organization.

Key parameters

  • User ID: the identifier of the user to deactivate, a number that a Get many users step hands over through an expression.
Use cases
the offboarding workflow closes the Zulip account on the day the laptop is returned, triggered by a status change in the HR tool, so nobody has to remember to open the admin panel.
14

Get a user

user.get

What you see in n8n

Notes & use cases

Reads one account and returns its profile, which is how a workflow turns an identifier into a usable name or email.

Key parameters

  • User ID: the identifier of the account to read.
  • Custom Profile Fields: includes the custom profile field data in the response, such as the team or the job title your administrator added.
  • Client Gravatar: when on, the avatar URL comes back only for a real Zulip avatar and stays null for accounts using gravatar.
Use cases
an approval flow reads the profile of the requester before deciding which stream the request belongs in.
15

Get many users

user.getAll

What you see in n8n

Notes & use cases

Brings back the member list of the organization in one run, each account with its profile.

Key parameters

  • Custom Profile Fields: adds the custom profile data to every account returned, useful when the team or the department lives in those fields.
  • Client Gravatar: same rule as on the single lookup, the avatar URL is returned only for Zulip avatars.
Use cases
a quarterly access review exports the full list and compares it with the HR roster to surface accounts that should have been closed.
16

Update a user

user.update

What you see in n8n

Notes & use cases

Changes an account that already exists: its name, its permissions, or the custom fields of its profile.

Key parameters

  • User ID: the account to update.
  • Full Name: the name shown in Zulip.
  • Role: 100 owner, 200 organization administrator, 300 moderator, 400 member, 600 guest.
  • Is Admin and Is Guest: the two switches that mark the account as administrator or as guest.
  • Profile Data: the custom profile field data to update.
Use cases
a promotion recorded in the HR tool moves the account from member to moderator without a manual edit.
Need help

Need help automating Zulip with n8n?

A person reads every message.

FAQ

Zulip and n8n, the questions that come next

01Is the Zulip n8n integration free?
Yes on the n8n side. The Zulip node ships with n8n, so there is nothing to install and nothing extra to pay for it, whether the workflow runs on n8n Cloud or on a self-hosted instance under the Community Edition and its Sustainable Use license. A workflow behaves the same in both places, so moving from one to the other changes nothing in the node. The credential is created once in the Credentials menu and reused by every workflow that talks to Zulip, which means a second or a third automation adds no setup at all. What Zulip itself costs your organization is a separate question, and this page does not cover it.
02What credentials do you need to connect Zulip to n8n?
One API key credential, holding three values. The URL is the address of your Zulip domain, the Email is the address you use to log in to Zulip, and the API Key is read under Gear cog, then Personal Settings, then Account and privacy, then API Key. n8n keeps the three together under Credentials, and the Zulip node offers that credential in its dropdown afterwards, in this workflow and in every other one. The node has no authentication selector, so the API key is the only route. The account behind the key sets what the workflow may do, which matters for the operations that ask for administrative privileges.
03What are the limits of the Zulip node in n8n?
Three of them matter in practice. The node covers 16 operations across 3 resources, messages, streams and users, so the rest of the Zulip API is out of its reach. The HTTP Request node fills the gap: it calls any Zulip endpoint and reuses the same credential through predefined authentication. Second, operations that target an existing stream, message or account expect an identifier and not a name, so a lookup step often has to run first. Third, rights follow the account behind the API key, and a listing option such as Include All Active returns nothing without administrative privileges.
04Can n8n react to a new Zulip message in real time?
No. Zulip has no trigger node in n8n, so nothing starts a workflow by itself when a message arrives in a stream. A Zulip workflow starts somewhere else: a Schedule Trigger running at a fixed interval, an n8n Webhook, which is a URL another service calls, or the trigger of another tool sitting in the same workflow. Most Zulip automations are outbound anyway, since the interesting event happens in the CRM, the monitoring tool or the spreadsheet, and Zulip is where the result gets announced. If watching Zulip itself is really the goal, a scheduled run that reads and compares is the honest answer.
05n8n or Make for Zulip?
It depends on where the data should live. Make is hosted by Make, with no self-hosting option, and billed per operation, so a workflow posting a lot of Zulip messages carries a cost that grows with volume. n8n runs on n8n Cloud or on your own server, which keeps the message content and the API key inside your own infrastructure, something teams that picked Zulip for that same reason tend to care about. The visual builder in Make is friendlier for a first automation. n8n leaves more room once a workflow branches, loops over a member list or falls back to the HTTP Request node for an endpoint the Zulip node does not expose.