> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dncscrub.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Salesforce

> Add DNCScrub TCPA and Do Not Call compliance scrubbing directly to your Salesforce Leads, Contacts, Accounts, and Campaign Members

The **CCC DNCScrub** app for Salesforce brings TCPA and Do Not Call compliance checking natively into your CRM. It checks phone numbers against federal and state DNC registries, wireless lists, litigator databases, and your own Internal Do Not Call list — directly on Lead, Contact, Account, and Campaign Member records, before your team dials.

The app is a native [Lightning](https://www.salesforce.com/products/platform/lightning/) application built with Lightning Web Components. Scrub results are stored in custom fields on your records, so they work with standard Salesforce reports, list views, flows, and validation rules.

<Note>
  This is the modern Lightning app. A [legacy Visualforce package](/integrations/overview) is still available for older orgs, but new installations should use the Lightning app described here.
</Note>

## Prerequisites

* A Salesforce org on **Lightning Experience** (Developer, Professional with API access, Enterprise, or Unlimited edition)
* Permission to install apps and edit Lightning record pages (System Administrator or equivalent)
* A DNCScrub account with API access — your **Login ID** (API key) and, optionally, a **Campaign ID**

## Step 1: Install the App

Install the CCC DNCScrub managed package using the link that matches your org. You must be logged in to the target org before opening the link.

**Production:**<br />
`https://login.salesforce.com/packaging/installPackage.apexp?p0=04thm000000qKgzAAE`

**Sandbox:**<br />
`https://test.salesforce.com/packaging/installPackage.apexp?p0=04thm000000qKgzAAE`

**Specific Org:** replace `<theirdomain>` with your org's My Domain.<br />
`https://<theirdomain>.sandbox.my.salesforce.com/packaging/installPackage.apexp?p0=04thm000000qKgzAAE`

<Steps>
  <Step title="Open the install URL">
    Copy the install URL for your org type above and open it in your browser. Salesforce will confirm the components being added.
  </Step>

  <Step title="Choose who to install for">
    Select **Install for All Users** (or the scope that fits your rollout).
  </Step>

  <Step title="Approve access">
    During install, Salesforce shows a **"Yes, grant access to these third-party web sites"** checkbox listing the DNCScrub API endpoints. Check it to approve. You do **not** need to add these URLs manually — the package includes them as active Remote Site Settings and creates them for you on install.
  </Step>
</Steps>

<Note>
  **Each org is configured separately — including sandboxes.** Installing the package does not carry over configuration between environments. In every org you install into, repeat [Step 2](#step-2-connect-your-dncscrub-account) to enter your Login ID / Campaign ID and [Step 3](#step-3-assign-permission-sets) to assign the permission sets. If you're testing against a sandbox, confirm the Login ID you enter is valid for the environment you're pointing at.
</Note>

## Step 2: Connect Your DNCScrub Account

After installing, open the **CCC DNCScrub** app from the App Launcher and go to the **Settings** tab to enter your DNCScrub credentials. These settings apply org-wide to every scrub operation.

<Frame>
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-settings-empty.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=21808ea7ce812e9cc2e4f2bbf17b4696" alt="The CCC DNCScrub Settings tab before any credentials are entered, with empty API credentials, scrub options, and notifications sections" width="1860" height="1101" data-path="images/sf-settings-empty.png" />
</Frame>

<Steps>
  <Step title="Enter your credentials">
    Under **API credentials**, enter:

    * **Login ID (API Key)** — your DNCScrub API key
    * **Campaign ID** — the DNCScrub campaign used to scrub (optional)
  </Step>

  <Step title="Test the connection">
    Select **Test Connection** to verify your Login ID works against the DNCScrub API.
  </Step>

  <Step title="Set scrub behavior">
    Configure the **Scrub Options**:

    * **Scrub Against** — which lists to screen numbers against
    * **Rescrub Interval (0–23 hours)** — how long a cached result stays "fresh" before a new API call is made. `0` re-checks on every page load; `23` re-checks at most once per day.

    Optionally enable **Notifications** to send an email after a bulk scrub completes.
  </Step>

  <Step title="Save">
    Select **Save Settings**.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-settings.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=c524d8fa15616afbc110496a7a026b3d" alt="CCC DNCScrub Settings tab showing API credentials with a verified connection, scrub options, and notifications" width="1825" height="1105" data-path="images/sf-settings.png" />
</Frame>

## Dashboard

Once connected, the **Dashboard** tab is your home base — an at-a-glance view of scrubbing activity (Do Not Call scrubs today and this week, Do Not Call numbers identified today, and reassigned checks today), along with an embedded Quick Scrub and a Recent Activity log.

<Frame>
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-dashboard.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=a17af13f8d9077327331d523af76b9e8" alt="CCC DNCScrub Dashboard with activity statistics, quick scrub, and a recent activity table" width="1859" height="781" data-path="images/sf-dashboard.png" />
</Frame>

## Step 3: Assign Permission Sets

The app ships with two permission sets. Assign them to your users from **Setup → Permission Sets**.

| Permission Set | For            | Access                                                                                                               |
| -------------- | -------------- | -------------------------------------------------------------------------------------------------------------------- |
| **CCC Admin**  | Administrators | Full read/write on all CCC objects and fields, all tabs including Settings, and bulk schedule management             |
| **CCC User**   | Standard users | Read-only scrub fields on records, can trigger scrubs and view results; no access to Settings or schedule management |

<Warning>
  **User seeing an "invalid access" error, or a Standard user can't scrub?** They're almost always missing a permission-set assignment. Standard users have no access to the scrub fields or actions until you assign them **CCC User** (or **CCC Admin**) — assigning the permission set resolves it. This must be done in each org, including sandboxes.
</Warning>

## Step 4: Add the Scrub Panel to Record Pages

The **CCC DNC Scrub Panel** is a Lightning component you place on Lead, Contact, Account, or Campaign Member record pages.

<Steps>
  <Step title="Edit the record page">
    On a record, select the gear icon → **Edit Page** to open Lightning App Builder.
  </Step>

  <Step title="Drag in the Scrub Panel">
    Drag the **CCC DNC Scrub Panel** component onto the page (the sidebar works well).
  </Step>

  <Step title="Configure the phone fields">
    Set the **Phone Fields to Scrub** property to a comma-separated list of field API names — for example `Phone,MobilePhone,HomePhone`. Each field is scrubbed and displayed independently.
  </Step>

  <Step title="Activate the page">
    Save and **Activate** the page for the relevant app, record type, or profile.
  </Step>
</Steps>

<Frame caption="The CCC components appear under Custom in the Lightning App Builder palette.">
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-app-builder-setup.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=9f906bacaad456201f8d73858e388b65" alt="Lightning App Builder editing a Lead Record Page, with the CCC DNC Scrub Panel and other CCC components listed under Custom in the components palette" width="1860" height="1096" data-path="images/sf-app-builder-setup.png" />
</Frame>

<Frame caption="The CCC DNC Scrub Panel placed on the record page in App Builder.">
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-app-builder-panel.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=a52fc78a6944f1e2f31fbfc36a1d2bfe" alt="Lightning App Builder showing the CCC DNC Scrub panel added to the Lead Record Page canvas" width="1856" height="1099" data-path="images/sf-app-builder-panel.png" />
</Frame>

### Scrub Panel properties

| Property                              | What it does                                                                                                      |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| **Phone Fields to Scrub**             | Comma-separated phone field API names to display and scrub (e.g. `Phone,MobilePhone`)                             |
| **Disable Auto-Scrub on Record View** | Turns off automatic scrubbing when the panel loads, so numbers are only checked when the user clicks **Re-Scrub** |

<Tip>
  You can place more than one panel on the same record page with different settings — for example, one panel that auto-scrubs the business `Phone` and a second panel for `MobilePhone` that only scrubs on demand.
</Tip>

## Scrubbing a Record

When the Scrub Panel loads, it automatically checks every configured phone field (unless auto-scrub is disabled). If a number was scrubbed within the rescrub interval, the cached result is shown without a new API call; otherwise a fresh check runs.

Each phone field renders as its own card with a status badge, line type, carrier, region, and a **Re-Scrub** button. Click **Re-Scrub** at any time to force a fresh check.

<Frame>
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-scrub-panel.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=b85b9cca95f94776efe4ee0882c2f374" alt="A Lead record page with the CCC DNC Scrub panel in the sidebar showing an Internal DNC result, line type, scrub time, and a Re-Scrub button" width="1832" height="1051" data-path="images/sf-scrub-panel.png" />
</Frame>

The record's summary fields always reflect the **worst** result across all phone fields. If `Phone` is *Clean* but `MobilePhone` is *Do Not Call*, the record shows **Do Not Call**.

### Reading the result codes

Each phone number receives a result code. Codes marked **Callable: Yes** are considered safe to call.

| Code               | Status              | Callable | Description                                       |
| ------------------ | ------------------- | -------- | ------------------------------------------------- |
| `C`                | Clean               | Yes      | Not on any DNC list                               |
| `D`                | Do Not Call         | No       | On the National Do Not Call Registry              |
| `B`                | Blocked             | No       | Number is blocked                                 |
| `P`                | Internal DNC        | No       | On your Internal Do Not Call list                 |
| `W`                | Wireless            | Yes      | Wireless/mobile number (may require TCPA consent) |
| `L`                | Restricted Wireless | No       | Wireless with calling restrictions                |
| `E`, `F`, `G`, `H` | EBR                 | Yes      | Has an active EBR exemption                       |
| `O`                | EBR Override        | Yes      | EBR override in effect                            |
| `I`, `M`           | Invalid             | No       | Not a valid phone number                          |
| `X`                | Exemption           | Yes      | A legal exemption applies                         |
| `LIT`              | Litigator           | No       | Known TCPA litigator                              |
| `NL`               | Not Litigator       | Yes      | Cleared by litigator screening                    |

## Quick Scrub

The **Quick Scrub** tab (also embedded in the Dashboard) is for ad-hoc checks. Paste one or more phone numbers — comma or newline separated — and get immediate results split into callable and non-callable groups. Quick Scrub does **not** require a Salesforce record and does **not** save results to any record.

<Frame>
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-quick-scrub.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=79f8a320e331bc25125b0d1d0fc9a47d" alt="Quick Scrub tab with a list of phone numbers and callable versus non-callable results" width="1857" height="961" data-path="images/sf-quick-scrub.png" />
</Frame>

## Internal DNC (IDNC) Management

Your **Internal DNC** list is your organization's private do-not-call list, separate from the national registry. Use it when a customer requests not to be called, you receive a written opt-out, or you need to block numbers beyond federal/state lists.

Manage it from the **IDNC Manager** tab — or the IDNC panel on a record page. Enter one or more numbers and use **Check Status**, **Add to IDNC**, or **Remove from IDNC**. Numbers on the IDNC return result code `P` (Internal DNC) and are marked non-callable in all future scrubs.

<Frame>
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-idnc.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=93841234bde3bd1398a64de29178a7da" alt="Internal DNC Manager tab with phone number input, Check Status, Add to IDNC, and Remove from IDNC buttons, and a status results table" width="1853" height="697" data-path="images/sf-idnc.png" />
</Frame>

## EBR Management

An **Existing Business Relationship (EBR)** is a legal exemption that can let you call a DNC-listed number. From the **EBR Manager** tab, use **Add EBR** to record a relationship for a number (EBR type, date, optional reference and brand), and **Check EBR** to see which numbers already have one on file.

<Frame>
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-ebr.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=44dfb3adf100d8e68a5f2812783ee33b" alt="EBR Management tab with an Add EBR form (phone number, EBR type, date, reference, brand) and a Check EBR panel" width="1847" height="933" data-path="images/sf-ebr.png" />
</Frame>

| EBR Type            | Exemption window                           |
| ------------------- | ------------------------------------------ |
| **Sale**            | 18 months from the last transaction        |
| **Inquiry**         | 3 months from the consumer's inquiry       |
| **Permission**      | Express written consent from the consumer  |
| **Recent Sale**     | Recent transaction (organization-specific) |
| **Newspaper Trial** | Newspaper subscription trial period        |

When an EBR is active, the scrub returns codes `E`, `F`, `G`, `H`, or `O` instead of `D`, indicating the number is callable under the exemption.

## Reassignment Check (Authority+)

Under the TCPA, calling a number that was reassigned to a new subscriber after you obtained consent can create legal liability. The **Reassignment Check** tab (Authority+) verifies whether a number still belongs to the original subscriber.

<Steps>
  <Step title="Enter the number and consent date">
    Provide the **Phone Number** and the **Consent Date** — when the customer originally agreed to be contacted.
  </Step>

  <Step title="Check reassignment">
    Select **Check Reassignment**. The system checks whether the number changed hands after the consent date.
  </Step>

  <Step title="Review Safe Harbor">
    If **Safe Harbor** is *Yes*, you have TCPA safe harbor protection — the reassignment database confirms the number had not been reassigned at the time of the call.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-reassignment-check.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=ac229b7abfc2075d77aa35fd52990d3b" alt="Reassigned Number Check tab with a phone number, consent date, and Safe Harbor result" width="1854" height="766" data-path="images/sf-reassignment-check.png" />
</Frame>

## Bulk Scrub and Scheduling

The **Bulk Scrub** tab scrubs records in batches and can run on a schedule.

<Steps>
  <Step title="Create a schedule">
    Select **New Schedule** and choose the object — Lead, Contact, Account, or Campaign Member — and the phone fields to scrub.
  </Step>

  <Step title="Set the frequency">
    Choose how often it runs:

    * **One Time** — runs once on a specific date
    * **Daily** — runs every day at a set time
    * **Weekly** — runs on selected days of the week
    * **Monthly** — runs on a specific day of the month
  </Step>

  <Step title="Optionally filter records">
    Add filters to target specific records (for example, only Leads with Status = *Hot*). The record-count preview shows how many records will be processed before you save.
  </Step>
</Steps>

Records are processed in batches of 200, with one API call per batch. Records scrubbed within the rescrub interval are skipped.

<Frame>
  <img src="https://mintcdn.com/contactcentercompliance/TGgJIehAOGRoSLC1/images/sf-bulk-scrub.png?fit=max&auto=format&n=TGgJIehAOGRoSLC1&q=85&s=97a995c433383d66a1d2b40f8b48807f" alt="Bulk Scrub tab showing a new schedule with object, phone fields, frequency, and record-count preview" width="1808" height="1089" data-path="images/sf-bulk-scrub.png" />
</Frame>

## Where Scrub Data Is Stored

Aggregate (worst-case) results are stored in custom fields on Lead, Contact, Account, and Campaign Member:

| Field Label   | API Name               | Description                                           |
| ------------- | ---------------------- | ----------------------------------------------------- |
| Scrub Result  | `CCC_Scrub_Result__c`  | Result code from the most recent scrub                |
| Scrub Status  | `CCC_Scrub_Status__c`  | Human-readable status (Clean, Do Not Call, EBR, etc.) |
| Last Scrubbed | `CCC_Last_Scrubbed__c` | Date and time of the most recent scrub                |
| Scrub Reason  | `CCC_Scrub_Reason__c`  | DNC list match detail or reason                       |
| Is Reassigned | `CCC_Is_Reassigned__c` | Whether the phone was reassigned (Authority+)         |
| EBR Type      | `CCC_EBR_Type__c`      | Type of EBR exemption, if any                         |

When multiple phone fields are configured, each gets its own **Scrub Detail** (`CCC_Scrub_Detail__c`) child record tracking that field's result code, status, line type, carrier, region, and last-scrubbed time. Every operation is also written to the immutable **Scrub Log** (`CCC_Scrub_Log__c`) audit object.

### Using scrub data in Salesforce

Because the CCC fields are standard custom fields, they work everywhere:

* **Reports & dashboards** — group or filter on `CCC_Scrub_Status__c` to report compliance across your database.
* **List views** — filter to see all *Do Not Call* or *Clean* records at a glance.
* **Flow / Process Builder** — trigger actions when `CCC_Scrub_Status__c` changes (e.g. notify a manager when a lead is flagged as a litigator).
* **Validation rules** — block lead conversion or activity creation when the status is *Do Not Call* or *Litigator*.

## Administration Notes

* **Rescrub interval** — set on the Settings tab (0–23 hours); applies org-wide to panels and bulk operations.
* **Remote Site Settings** — three sites must be active for all features. They are included in the package; verify them under **Setup → Remote Site Settings**:

  | Name               | URL                            | Used For                         |
  | ------------------ | ------------------------------ | -------------------------------- |
  | `CCC_FullScrub`    | `https://www.dncscrub.com`     | DNC scrubbing, IDNC, and EBR     |
  | `CCC_DataAPI`      | `https://dataapi.dncscrub.com` | Authority+ reassignment checking |
  | `CCC_LitigatorAPI` | `https://api.dncscrub.com`     | Litigator screening              |

## Support

* [DNCScrub API Documentation](/api-reference/overview)
* [Salesforce Lightning Experience Help](https://help.salesforce.com/)
* [Contact Support](mailto:support@dnc.com)
