Enrich and deduplicate Slack-uploaded companies in HubSpot with Coresignal
UnknownUnknown. This template uses community nodes we can't verify statically. Uses community nodes that can't be verified statically (unverified community packages are off by default in 3.0). Static check, last run 2026-10-19.
Worth a look
- Slack Trigger requires a signing secret on the Slack API credential (When Slack File Uploaded)
Community nodes
These come from third-party npm packages. In n8n 3.0 unverified community packages are off by default (N8N_UNVERIFIED_PACKAGES_ENABLED=false).
n8n-nodes-coresignal-api(Enrich Existing company, Enrich new company)
Nodes used (11)
- Slack Trigger
n8n-nodes-base.slackTrigger - Extract from File
n8n-nodes-base.extractFromFile - Slack
n8n-nodes-base.slack - HTTP Request
n8n-nodes-base.httpRequest - Data table
n8n-nodes-base.dataTable - HubSpot
n8n-nodes-base.hubspot - Summarize
n8n-nodes-base.summarize - Merge
n8n-nodes-base.merge - If
n8n-nodes-base.if - Code
n8n-nodes-base.code - Coresignal
n8n-nodes-coresignal-api.coresignal
What it does
This workflow automates the full company enrichment pipeline: Simply import CSV company lists to Slack and save time on enrichment and CRM maintenance. It processes uploaded files, extracts company domains, checks for existing records in HubSpot, and uses conditional logic with user approval to decide which companies to enrich. The result is a clean, enriched CRM dataset without duplicates and context rich company profiles. Ideal for B2B sales, marketing, and RevOps teams. How It Works 1. A file is uploaded to a Slack channel. The workflow downloads and extracts company data from the file. 2. Company domains are inserted into a temporary data table. 3. HubSpot is queried to identify existing companies (duplicates). 4. If duplicates are found, the user is asked via Slack whether to enrich them. 5. Approved companies are enriched using Coresignal multi-source data. 6. Existing companies are updated, and new companies are created in HubSpot. 7. A summary of results (created, updated, skipped) is posted to Slack. Tools used |Tool / Node|What it does in the workflow|Free / credentials needed?| |-|-|-| |Slack Trigger|Waits for a file to be uploaded in a Slack channel and sends file metadata|Slack app configuration required| |Slack Get File|Fetches the file download URL|Slack app configuration required| |Slack Message|Notifies user that workflow has started|Slack app configuration required| |HTTP Request|Downloads the file from Slack|Slack credentials required| |Extract from File|Parses CSV/Excel data|No credentials required| |Data Table (insert)|Stores company domains|No credentials required| |HubSpot Search Company|Checks for duplicates in HubSpot|HubSpot credentials required| |IF Node|Determines if company exists|No credentials required| |Slack Send & Wait|Asks user whether to enrich duplicates|Slack app configuration required| |Merge Node|Combines approval results|No credentials required| |Data Table (delete/get)|Manages temporary dataset|No credentials required| |Coresignal Enrich Company|Fetches company enrichment data|Coresignal API key required| |Code Node|Maps domains to HubSpot company IDs|No credentials required| |HubSpot Update Company|Updates existing companies|HubSpot credentials required| |HubSpot Create Company|Creates new companies|HubSpot credentials required| |Summarize Node|Counts number of companies (created, updated, skipped) throughout the workflow|No credentials required| |Merge Node (final)|Combines all summary results into one output|No credentials required| |Slack Message (final)|Sends summary of results to Slack channel|Slack app configuration required| How to Set Up 1. Slack Trigger - listen for the fileshare event on your chosen channel. Select the channel by ID, connect your Slack API credential, and ensure your Slack app has permissions to read files and post messages. 2. Notify Slack on file download - send an informational message to the channel confirming processing has started. Use ephemeral mode if the message should only be visible to the triggering user. 3. Download & setch file contents - use a Slack node (resource: file, operation: get) to download the file using the trigger's fileid. Follow this with an HTTP Request node using your Slack credentials to fetch the private download URL - set responseFormat to file to retrieve a binary buffer. 4. Extract & stage data - parse the file with an Extract from File node (supports CSV, Excel, and other tabular formats). Before inserting, use a Data Table node (deleteRows) to clear any existing rows matching the current domain, then insert the fresh data with insertRows. Use the same Data Table ID for both operations. 5. Search HubSpot by domain - use a HubSpot node (searchByDomain) with the expression ={{ $json.Website }} and returnAll enabled to check whether the company already exists. Connect via OAuth2. 6. Branch: existing vs. new company - use an IF node to check whether a HubSpot company ID was returned. The true branch handles updates and duplica