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
| Aspect | Smart Columns | Action Columns |
|---|---|---|
| Purpose | Enrich rows with new data | Trigger external side effects |
| Result | New field on the row | Status of the action (pending, running, done, failed) |
| Example | "Add ICP fit score" | "Push to HubSpot" |
| Cost | Per-row credit cost | Often free (depends on the action) |
| Re-run safe? | Yes | Depends on the action's idempotency |
You can use both on the same list. A common pattern:
- Smart Column:
enrich_company - Smart Column:
icp_fit_analysis - Action Column: Push high-fit rows to HubSpot
Built-in actions
| Action | What it does |
|---|---|
| Push to CRM | Send the row to a connected CRM (HubSpot, Salesforce, Lemlist, Mailchimp) — see Integrations |
| Send notification | Trigger a Cleanlist notification or external webhook |
| Kick off prospecting | Use the row's company as a seed for a new prospecting job |
| Re-enrich | Re-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:
- Create an Action Column on a lead list
- Pick the action type and configure it (target CRM, mapping, conditions, etc.)
- Run on selection, on filtered rows, or on the entire list
- Each row enters a queue with
pending → running → done | failed - The portal shows live progress per row
- 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 row | Smart Column |
| Send rows to a CRM | Action Column |
| Notify a teammate when a high-fit lead lands | Action Column with conditional trigger |
| Periodically re-enrich stale rows | Action Column scheduled run |
| Generate cold-email drafts | Smart Column (cold_intro_email) |
Related
- Smart Columns — the enrichment counterpart
- Integrations — supported CRMs and outbound destinations
- CRM Integration guide