Pipelines to Slack, CRMs, sequencers, Sheets and webhooks

Updated Markdown

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" and "Adding records to a pipeline and sending them". The Email target has its own article.

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. 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. Manage them under Settings → Connected accounts. See "What access you grant when connecting a CRM or app".

The "Preview" badge#

Salesforce, Pipedrive, Close, Lemlist, Instantly, Google Sheets and Other app show a Preview badge: "Built from the provider's documentation but not yet verified with a real account. Try it with “Test connection” and a few contacts first." They work like the other targets; start with a test and a few records. Webhook, Slack, HubSpot, Attio, Another list and Email carry no badge.

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, Close#

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).
  • Close: new contacts go to the lead with the same company name, otherwise a new lead is created.

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

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). 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.

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, or "saved" with the record id) 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.

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.

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.

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

HubSpot, Attio, Salesforce, Pipedrive and Close 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 Check 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.

What does the "Preview" badge on a pipeline target mean?#

The target was built from the provider's documentation but not yet verified with a real account. It currently applies to Salesforce, Pipedrive, Close, Lemlist, Instantly, Google Sheets and Other app; run Test connection and send a few records before a large batch.

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.

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 or saved) 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.