← Back to Projects

CadenceCRM DNC Check

A Go High Level Marketplace app that checks contacts against Do Not Call lists automatically.

Install it into any GHL sub-account and every new contact or outbound message gets screened against both company blacklists and the national DNC registry. Flagged contacts are tagged and locked down before your team ever reaches out.

The Problem

Sales teams using Go High Level manage thousands of contacts. Leads come in from imports, web forms, and API integrations — and some of those numbers are on Do Not Call lists. Calling or texting them is a TCPA violation that carries real fines.

Most teams either check DNC manually (slow and inconsistent) or don't check at all (risky). This app makes it automatic and invisible — it runs in the background on every contact.

How It Works

1

Install via GHL Marketplace

One-click OAuth install into any GHL sub-account. The app requests the minimum scopes needed — contact read/write and conversation read access.

2

Contact Created or Message Sent

GHL fires a webhook whenever a new contact is added (import, form, API) or when an agent sends an outbound SMS or makes a call.

3

DNC Check Runs

The app checks the contact's phone number against two lists: the company's internal blacklist and the national Do Not Call registry. Results are cached for 12 hours to avoid redundant API calls.

4

Flagged Contacts Get Tagged

If the number is on either list, the contact gets tagged (DNC-COMPANY for company blacklist, DNC-NATIONAL for federal DNC) and Do Not Disturb is enabled on SMS and call channels.

Two Layers of Protection

Company Blacklist

Numbers flagged internally — prior complaints, legal issues, or explicit opt-outs specific to your organization.

Tag applied: DNC-COMPANY

National DNC Registry

The federal Do Not Call list. Numbers here are legally protected — contacting them can result in TCPA fines up to $43,792 per violation.

Tag applied: DNC-NATIONAL

Features

Real-Time Webhook Processing

Checks run instantly on ContactCreate and OutboundMessage events. No batch jobs, no delays.

Smart Caching

Results are cached per phone number with configurable TTLs. Avoids hammering the DNC API on repeat contacts.

Tag Preservation

Existing tags on contacts are always preserved. The app fetches current tags, merges DNC tags in, and writes back — nothing gets wiped.

DND Auto-Enable

Flagged contacts get Do Not Disturb enabled on SMS and call channels with a clear reason message.

Skip Already-Flagged

If a contact already has DNC tags, the check is skipped entirely. No wasted API calls on known-flagged numbers.

Automatic Token Refresh

Hourly cron job keeps OAuth tokens fresh. No manual re-authentication needed after install.

Tech Stack

FrameworkNext.js 15, TypeScript, Tailwind CSS
PlatformGo High Level Marketplace (OAuth app)
DatabaseSupabase (installations, DNC cache)
DNC APICompany DNC API (REST)
HostingVercel
AuthGHL OAuth 2.0 with automatic token refresh
CachingSupabase table with 12h TTL per phone
RepoGitHub (ION-Web-Services)

Architecture

  ┌──────────────┐
  │  GHL Webhook  │  ContactCreate / OutboundMessage
  └──────┬───────┘
         │
  ┌──────▼───────┐    ┌───────────────┐
  │   Vercel     │───▶│  DNC Cache    │  Cache hit? → skip API
  │   Webhook    │    │  (Supabase)   │
  └──────┬───────┘    └───────────────┘
         │ cache miss
  ┌──────▼───────┐
  │   DNC API    │  Company Blacklist + National DNC
  └──────┬───────┘
         │ flagged?
  ┌──────▼───────┐
  │  GHL API     │  Add tags + Enable DND
  │  (Contact)   │
  └──────────────┘

What It Solves

  • Eliminates manual DNC checking — every contact is screened automatically
  • Catches DNC numbers on import, not just before first call
  • Reduces TCPA exposure across the entire sales org
  • Works silently in the background — agents don't need to do anything
  • Caching keeps costs low even at high contact volume