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
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.
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.
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.
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
| Framework | Next.js 15, TypeScript, Tailwind CSS |
| Platform | Go High Level Marketplace (OAuth app) |
| Database | Supabase (installations, DNC cache) |
| DNC API | Company DNC API (REST) |
| Hosting | Vercel |
| Auth | GHL OAuth 2.0 with automatic token refresh |
| Caching | Supabase table with 12h TTL per phone |
| Repo | GitHub (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