# Pipelines to Slack, CRMs, sequencers, Sheets and webhooks

Source: https://listplus.ai/en/help/pipelines/pipelines-crm-slack-and-webhook
Last updated: 2026-10-17

This article explains what each external pipeline target does and how to
set it up. For creating a pipeline, adding records and sending them, see
"[Pipelines — send records on to your CRM, Slack, e-mail or API](https://listplus.ai/en/help/pipelines/pipelines-overview)" and "[Adding
records to a pipeline and sending them](https://listplus.ai/en/help/pipelines/send-records-to-a-pipeline)". The Team email and Email draft
targets have their own articles.

## Connected accounts

Slack, CRMs, sequencers and Google Sheets use a **connected account**. In
the pipeline setup, pick one under **Choose account …** or click **Connect
new account**; the service's own sign-in window opens. Connecting needs the
Pro plan; using HubSpot needs Premium, and a delivery costs a fixed number
of credits per record that arrived — shown on the target's tile, see the
price list. Connected accounts
belong to the workspace: every member's pipelines can use them, and actions
run in the name of the person who connected the account (exceptions: see
"[Whose connected account a pipeline uses](https://listplus.ai/en/help/pipelines/pipeline-accounts)"). Manage them under
**Settings → Connected accounts**. See "[What access you grant when
connecting a CRM or app](https://listplus.ai/en/help/export-sync-integrations/crm-credentials)".

## Slack

**Post a message to a channel.** Choose the Slack account and the
**Channel**. Messages appear under the name of the person who connected the
Slack account, and that person must be a member of the channel. Each record
becomes one card: an optional **Intro line** (with placeholders and @here),
name and job title · company, up to 10 fields, and optional buttons **Open
in ListPlus**, **LinkedIn** and **Website**. Slack posts about one message
per second, so large sends take a moment.

## CRMs: HubSpot, Attio, Salesforce, Pipedrive

Each record is matched by **e-mail address**, so a record without an e-mail
is held by the data check. New contacts are always created. For an existing
one you choose: **Only fill empty fields** (default), **Leave it – only
create new ones**, or **Overwrite with our values**.

- **HubSpot:** creates or updates a contact; optional **Add to list**
  (static list; existing contacts are added too).
- **Attio:** creates or updates a person; optional list of people.
- **Salesforce:** **Create as** Lead or Contact. A new lead needs a last
  name and a company, a new contact a last name.
- **Pipedrive:** creates or updates a person and links the company as an
  organization (created if needed).

The History shows the outcome per record, for example "Contact created",
"Contact updated", "2 empty fields filled" or "Skipped – already exists".

A pipeline sends record by record, so every record has its own result and
its own retry. For a large number of contacts at once, **Export** to HubSpot
is the cheaper way, because it writes many contacts per request (see
"[Exporting to HubSpot and Google Sheets](https://listplus.ai/en/help/export-sync-integrations/export-to-hubspot-and-sheets)" and the price list).

## Sequencers: Lemlist and Instantly

Both **add a contact as a lead to a campaign**. If the campaign is running,
the sequence starts right away for new leads.

- **Lemlist** needs an e-mail or a LinkedIn profile and a Lemlist plan with
  API access (from "Email Pro"). Options include skipping leads already in
  another campaign and letting Lemlist find or verify e-mails, which uses
  Lemlist credits.
- **Instantly** connects with an API key (API v2) and needs a paid Instantly
  plan and an e-mail per lead. You choose whether to skip contacts already in
  a campaign, anywhere in the Instantly workspace, or add them anyway.

## Google Sheets

**Append row** to a spreadsheet and sheet you pick. Columns are matched by
the header row and shown under **Map columns** for you to check; an empty
sheet gets a header row on the first send. Options: **Skip if the e-mail is
already in the sheet** and **Add missing columns at the end**. Columns added
to the sheet later stay empty until you map them.

## Webhook (n8n, Make, Zapier or your own API)

Paste the **Webhook URL** (HTTPS, public host; redirects are not followed).
The Webhook needs no plan; each record delivered costs credits (the price is
on the tile).
Under Data & advanced settings, choose the method (POST, PUT or PATCH),
**Auth** (None, Bearer token, API key header or Basic auth) and additional
headers; their values are stored encrypted and never shown again. Each
record is sent as its own JSON request; a response within 15 seconds with a
2xx status counts as sent.

## Another list and Other app

- **Another list** appends each contact as a row to a list of your
  workspace. Choose **Merge – only fill empty cells** or **Always append a
  new row**. It can't write into the list a record came from.
- **Other app** runs a ready-made action of another connected app. You map
  each action field; most such actions only create records, so duplicates
  can occur. An action of a mail app that sends, replies or forwards runs
  only on a mailbox the pipeline's creator connected; draft actions may use
  any current member's mailbox (see "[Whose connected account a pipeline
  uses](https://listplus.ai/en/help/pipelines/pipeline-accounts)").

## Companies in a pipeline

A pipeline also takes **companies from your Watchlist** — as company
records, not as contacts. They get in two ways: tick companies in
**Watchlist → Companies** and choose **Add → Send to pipeline**, or pick a
pipeline in a company's alert (**Send news to**), so the company arrives
whenever its alerts find something.

A company record carries the company's name, domain, website and LinkedIn
page, industry, size and location once the company was enriched, and the
last news its alert found, if any. What the targets do with it:

- **Slack** shows a company card: the name linked to its LinkedIn page, the
  domain, and the news in your language, for example "3 new job postings"
  with the first job titles.
- **Team email** lists the company with its news.
- **HubSpot** creates or updates a **company**, found by its domain.
  **Salesforce** writes an **Account**, found by its website. **Attio**
  writes a record in **Companies**, found by its domain. The setting for
  existing records applies in the same way; the contact list of the target
  is not used for companies.
- **Webhook** sends it like any record, with `source.type` "company".

To fill a watched company's profile (industry, size, location, a missing
LinkedIn page), use **Complete profile** under Watchlist → Companies — that
is not a pipeline.
- Targets that need an email address (Instantly, Pipedrive) hold a
  company at **To review**: they only know contacts. **Lemlist** takes the
  entry but the send fails, because a lead needs an email address or a
  person's LinkedIn profile.

## For advanced users

**Payload (version 1).** Each webhook request body is JSON with `version`,
`test` (true for tests), `pipeline` (`id`, `name`), `delivery` (`id`,
`attempt`, `sentAt`), `source` (`type` "list" with list id, list name and
record id, "saved" with the record id, or "company" with the domain of a watched company) and `record`. In `record`, known
columns appear under their content type (`email`, `first_name`,
`company_name` …) regardless of the column name, so one pipeline works for
every list; with **All fields**, other columns go under `extra` with their
original name. Empty values are left out. A company whose alert has found
something also has `signal`: `at`, `text` (the news in plain English) and
`events`, each with `type` ("new_jobs" or "hiring_spike"), `count`, and
where they apply `titles`, `days` and `url`.

**Headers.** `X-ListPlus-Delivery` is stable for one entry across all
attempts, so use it as your idempotency key. `X-ListPlus-Pipeline` carries
the pipeline id. `X-ListPlus-Signature: sha256=…` is an HMAC-SHA256 of the
exact request body, keyed with the pipeline's **Signing secret**.

**Signing secret.** It is shown once, when the pipeline is created, and
can't be displayed again. **New secret** replaces it; the old one stops
working right away. To verify a request, compute the HMAC-SHA256 of the raw
body with your secret, prefix it with `sha256=` and compare it to the header
in constant time.

**Related topics:** pipelines-overview · send-records-to-a-pipeline ·
email-pipeline · crm-credentials · zapier-make-n8n · send-to-sequencers.

## FAQ

### How do I post new leads to a Slack channel?

Create a pipeline with New pipeline, choose Slack, pick the connected Slack account and the Channel, and optionally set an intro line and the fields for the card. Each record you send becomes one message card; the person who connected the Slack account must be a member of that channel. To post new decision makers by themselves, use the trigger template Notify your team in the list.

### Whose name do the Slack messages from a pipeline appear under?

Under the name of the person who connected the Slack account in your workspace. If Slack says "You're not a member of this channel – join it in Slack", that person needs to join the channel.

### Which connected account does a pipeline use, and can my colleagues use mine?

Each pipeline uses the account chosen in its setup. Connected accounts belong to the workspace, so pipelines of any member can use them, and actions run in the name of the person who connected the account. Two exceptions: an Other app action that sends, replies or forwards mail runs only on a mailbox the pipeline's creator connected (draft actions may use any current member's mailbox), and an account connected by someone who has left the workspace is used by no pipeline — its entries are held.

### How does a CRM pipeline handle contacts that already exist?

HubSpot, Attio, Salesforce and Pipedrive match by e-mail address and always create new contacts. For an existing one you choose Only fill empty fields (default), Leave it – only create new ones, or Overwrite with our values.

### Why is my record not sent to HubSpot or Salesforce?

CRM targets match contacts by e-mail, so a record without one waits under Entries as To review with "Missing: …" naming the e-mail field. Salesforce also needs a last name and a company for a new lead, or a last name for a new contact.

### Can a pipeline add leads to a Lemlist or Instantly campaign?

Yes, choose Lemlist or Instantly and pick the campaign; if the campaign is running, the sequence starts right away for new leads. Lemlist needs a plan with API access (from Email Pro), Instantly an API key (v2) and a paid Instantly plan.

### How does a Google Sheets pipeline decide which column gets which value?

Columns are matched by the sheet's header row and shown under Map columns for you to check; an empty sheet gets a header row on the first send. Columns added to the sheet later stay empty until you map them.

### How do I send records to n8n, Zapier or Make with a pipeline?

Create a pipeline with the Webhook target, paste your n8n, Zapier or Make webhook URL (HTTPS) and optionally set method, Auth and headers. Each record is sent as one JSON request; use Test connection to send a sample marked "test": true first.

### Can a pipeline send a company to my CRM as a company?

Yes. Companies from your Watchlist go into a pipeline as company records: HubSpot creates or updates a company, Salesforce an Account, and Attio a record in Companies, each found by the company's domain or website. Targets that need an email address, such as Instantly or Pipedrive, hold a company at To review.

### How do I get a Slack message when a company I watch is hiring?

Create a Slack pipeline, then on the Watchlist set an alert for the company and pick that pipeline under Send news to. When the alert finds new job postings, the channel gets a company card with the number of new postings and the first job titles.

### How do I verify that a webhook request really came from ListPlus?

Every request carries X-ListPlus-Signature: sha256= followed by an HMAC-SHA256 of the raw body, keyed with the pipeline's Signing secret. Compute the same value with your secret and compare; the secret is shown only once, and New secret replaces it immediately.

### What does the webhook payload of a pipeline look like?

JSON with version, test, pipeline, delivery (id, attempt, sentAt), source (list, saved or company) and record, where known fields use fixed keys like email, first_name and company_name whatever your column is called. The X-ListPlus-Delivery header stays the same for every attempt of one entry, so you can use it to ignore duplicates.

### Can a pipeline copy contacts into another list?

Yes, choose Another list and pick a list of your workspace; decide between Merge – only fill empty cells and Always append a new row. It can't write into the list the record came from.

### My tool isn't in the pipeline catalog, what can I do?

Use the Webhook target with n8n, Make or Zapier, or Other app to run a ready-made action of another connected app, where you map each field yourself. Other app actions usually only create records, so duplicates can occur.

### Which plan do pipeline targets need, and what do they cost?

Slack, Salesforce, Pipedrive, Attio, Google Sheets, Lemlist, Instantly, Email draft and Other app need the Pro plan, and HubSpot needs Premium. A delivery costs a fixed number of credits per record that arrived, shown on the target's tile (see the price list); the Webhook, Team email and Another list targets need no plan, and Team email and Another list have no delivery charge. After a downgrade a send answers that a higher plan is needed, and the accounts stay connected.
