All docs

DNC list management

How VICIdial's DNC works, where to load federal lists, internal opt-out workflow.

VICIdial has three layers of DNC. Use all three.

1. Federal DNC (vicidial_dnc with campaign_id = 'all')

Loaded once, applies across every campaign. This is where the FTC DNC.gov download goes.

AdminListsDNC ListBulk Update DNC List.

Format: one phone number per line, no formatting.

15555551234
15555551235

Refresh monthly. Subscribe to the FTC update feed.

2. State DNC (per-state lists)

Some states maintain their own. Florida, Indiana, Pennsylvania, Tennessee, Wyoming. Where required, load these into separate vicidial_dnc rows scoped to a campaign_id matching the state code.

In your campaign config, set Use Internal DNC=Y to honor everything in vicidial_dnc for matching campaign IDs.

3. Internal opt-out

Real-time, per-call. When an agent presses the DNC hot key (or selects DNC disposition), VICIdial inserts that lead's phone into vicidial_dnc with the campaign_id of the campaign they were on, AND the special 'all' campaign_id (for company-wide opt-out).

The dialer will skip that number on subsequent calls — across all campaigns.

Common gotchas

"We're getting DNC complaints despite the federal list being loaded"

Two likely causes:

  • The DNC.gov data is stale. Refresh monthly.
  • You loaded the list with campaign_id = 'MYCAMPAIGN' instead of 'all'. The "all" entry is what makes it global.

"An agent marked someone DNC but they got called again"

VICIdial's DNC check happens at lead-load time, not dial-time. If a lead was already in the hopper when the DNC was set, it'll dial. Either drain the hopper or set the campaign to DNC=AREACODE for stricter pre-dial filtering.

Bulk import a CSV from a 3rd-party DNC vendor

Use the bulk loader (Admin → Lists → DNC List → Bulk Update). Same one-phone-per-line format. Faster than the per-row form by a lot.

"Stop calling" requests via web form

Build a simple endpoint (PHP/Node/whatever) that inserts into vicidial_dnc with phone_number=$x, campaign_id='all'. Connect your unsubscribe links to it. Test before linking from any messaging.

Auditability

Keep a record of:

  • When + how each number entered DNC
  • Which agent marked it (if internal)
  • The opt-out wording presented to the customer (if web)

VICIdial logs the agent and disposition; the wording is your responsibility.

RND vs DNC

Not the same thing. DNC = "they don't want calls." RND = "this number was reassigned away from whoever consented." Both apply. Both must be checked.