New: API Reference docs are live — integrate Cleanlist enrichment into your apps. View API docs →
Features
Action Columns

TL;DR: Smart Columns enrich rows with new data. Action Columns trigger side effects on rows — pushing to CRMs, firing notifications, kicking off background jobs. Both run async with per-row status and retry.

Action Columns

Action Columns let your lead list do work, not just hold data. They look like normal columns in the portal but each row represents a triggered side effect rather than an enrichment.

Smart Columns vs Action Columns

AspectSmart ColumnsAction Columns
PurposeEnrich rows with new dataTrigger external side effects
ResultNew field on the rowStatus of the action (pending, running, done, failed)
Example"Add ICP fit score""Push to HubSpot"
CostPer-row credit costOften free (depends on the action)
Re-run safe?YesDepends on the action's idempotency

You can use both on the same list. A common pattern:

  1. Smart Column: enrich_company
  2. Smart Column: icp_fit_analysis
  3. Action Column: Push high-fit rows to HubSpot

Built-in actions

ActionWhat it does
Push to CRMSend the row to a connected CRM (HubSpot, Salesforce, Lemlist, Mailchimp) — see Integrations
Send notificationTrigger a Cleanlist notification or external webhook
Kick off prospectingUse the row's company as a seed for a new prospecting job
Re-enrichRe-run the original enrichment waterfall on the row (useful if a row failed previously)

The exact set of actions in your portal depends on which integrations you've enabled.

How execution works

Action Columns run on the same Temporal workflow infrastructure as enrichment and Smart Columns:

  1. Create an Action Column on a lead list
  2. Pick the action type and configure it (target CRM, mapping, conditions, etc.)
  3. Run on selection, on filtered rows, or on the entire list
  4. Each row enters a queue with pending → running → done | failed
  5. The portal shows live progress per row
  6. You can re-run failed rows individually or in bulk

Conditional execution

Action Columns can be gated by conditions on the row. Example: "Push to HubSpot only if icp_fit_score > 7 and primary_email_status = 'reliable'." This lets you stack a Smart Column → Action Column pipeline that automatically routes only the best rows downstream.

Idempotency

For destinations that support upsert (like HubSpot via the unified integration), the Push to CRM action is idempotent — running it twice on the same row won't create a duplicate. For destinations that don't, the action records what it sent and uses that to avoid resends.

Auditing

Every Action Column run stores:

  • Who triggered it
  • When it ran
  • The result status per row
  • The error message for failed rows
  • The destination's response payload (when applicable)

You can view this history from the column header menu.

When to reach for an Action Column

If you want to…Use
Add data to a rowSmart Column
Send rows to a CRMAction Column
Notify a teammate when a high-fit lead landsAction Column with conditional trigger
Periodically re-enrich stale rowsAction Column scheduled run
Generate cold-email draftsSmart Column (cold_intro_email)

Related