Help / How do I use bulk actions on the database?/4 min read
THE FORGE
All docs
Getting started 4 min read

How do I use bulk actions on the database?

The /database page has a Notion / Airtable-style selection bar that pops up when you select one or more rows. It exposes 10 actions covering state changes, organization, AI enrichment, output, and removal — turning the database into a real workspace instead of a list view.

Open the selection bar. Tick any row's checkbox (or click the header checkbox to select-all visible). The bar slides up from the bottom of the table within ~100ms and stays until selection clears. The "Clear" button on the bar dumps the selection.

Selection cap. Soft cap at 1,000 rows. We warn you with a toast at 500 because anything over 100 queues as a background bulk_jobs row (you can keep working — we'll notify on completion). Anything ≤100 runs synchronously.

The 10 buttons

Grouped by category:

State change

  • Move to stage — pick a new pipeline stage (Lead, Contacted, Qualified, Proposal, Negotiation, Won, Lost). Status-changed timestamps update.
  • Assign owner — reassign every selected prospect to a teammate. Validates the target is on your team. (Solo / Pro / Enterprise tiers.)
  • Tag… — adds a free-form tag. Existing tags are preserved; commas split multiple.

Organize

  • Add to list — drop the selection into an existing list or create a new one inline.
  • Add to sequence — enroll selected prospects in a visual sequence. The executor fires the first step within 30 seconds. Solo / Pro / Enterprise; Solo capped at 3 active enrollments per sequence.
  • Account list from people — derives a deduped account list from the selected prospects' company values. See the account lists guide.

AI (usage charged)

  • Enrich… — opens a section picker with live cost preview. Per-prospect, per-section usage. Enrichment is paid-only: Basic sees the modal with every section locked; Solo / Pro unlock every section, from the 0-unit email and LinkedIn lookups to phone, title, company info, signals correlation, and ICP scoring. Each LLM section writes a usage_ledger row by task_type so the bill is fully auditable.
  • Clean fields — LLM scans for empty + malformed fields and proposes corrections. Default is review-first via a diff modal; auto-apply mode lives on /settings#bulk-actions. See the clean fields guide. 2 units per prospect.

Output

  • Export to CSV — streams the selection through a chunked Response. Default columns are the visible ones; cap is 1,000 rows.

Removal

  • Delete — soft delete: sets deleted_at = NOW(), the prospects move to /database/trash. Undo toast fires for 10 seconds after the action — one click restores everything just deleted. After 30 days, the nightly purge worker hard-deletes anything still trashed and writes a row to hard_delete_audit for long-retention evidence.

How sync vs async works

For ≤100 selected, every action runs synchronously — you see the result inline within seconds. Above 100, the action queues a bulk_jobs row and the worker drains it in the background. Track progress at /api/bulk-jobs/<id>. Queued jobs are cancellable from the same endpoint; running jobs commit progress incrementally so cancel returns "already running" once dispatch starts.

CSV exports are always sync (capped at 1,000 rows, ~100KB CSV). Account list derivation is also always sync.

Recovery

Soft-deleted prospects live at /database/trash for 30 days with a per-row Restore button and a bulk Restore option. Empty Trash hard-deletes everything currently trashed — confirmation requires typing DELETE <N> exactly to avoid accidents. Tasks, activity, sequence enrollments, and list memberships stay intact through soft delete so a restore round-trips cleanly.

Selection across views

Filters and saved views narrow what's visible; the selection bar operates on the currently filtered set. Saved views aren't mutated by bulk actions — only the prospects you tick are touched.

Troubleshooting

  • Bar doesn't show up — confirm at least one row checkbox is ticked. The bar reads selection state from the same checkbox listeners the table renders.
  • Action says "no matching prospects" — every selected ID must be owned by you and not already trashed. Cross-tenant or already-deleted IDs silently fall into denied_count.
  • Not enough usage for Enrich / Clean fields — paid tiers can enable auto-overage at /settings/usage. Basic hits a hard block — upgrade to Solo or Pro.
Missing something?

Ask it on the help page and the assistant answers from the whole corpus. If it cannot, team@dealarena.io can, and the answer usually becomes a doc.

/help/bulk-actions

Prospect