CallGuard
01
Open source Self-host free

Check every outbound AI call before it dials.

CallGuard checks consent, do-not-call lists, the recipient's local calling hours and your AI disclosure against a policy you control, and keeps a tamper-evident record of every decision. One HTTP call before you dial.

Not legal advice. CallGuard applies the rules you configure. The shipped policy is a conservative starting point that your lawyer must review. It does not make any call legal and does not protect you from liability.

Example decisions POST /v0/check
  • ALLOWED

    +1 212 555 0123

    10:00 New York · written consent · AI disclosed

  • BLOCKED

    +1 310 555 0123

    07:00 Los Angeles · outside_calling_window

  • BLOCKED

    +1 605 555 0123

    Denver 07:30 / Central 08:30 · must fit every zone

  • WARN

    "Hi, this is Ava from Acme Dental"

    ai_disclosure_missing

02

The problem

TCPA · consent

AI voices need consent

In February 2024 the FCC ruled that AI-generated voices count as "artificial" voices under the TCPA. Outbound AI calls in the US need prior express consent, and written consent for telemarketing. Your dialer has to know which numbers have it, and whether it was revoked.

EU AI Act · disclosure

"Tell them it's an AI"

The EU AI Act's Article 50 transparency obligations apply from 2 August 2026: people must be told they are talking to an AI. Builders running voice agents bring up the TCPA and the AI Act in public threads. A prompt edit can quietly remove the disclosure from your greeting.

Time zones · records

Local time is messy

Calling hours are in the recipient's local time. Some prefixes span several time zones (parts of the US, Spanish mobiles: Madrid and the Canaries). And when someone asks "why did you call me?", you need a record nobody could have edited afterwards.

03

How it works

  1. Load your data

    Import consent records (with the text the person saw), your internal opt-outs and a national DNC file you obtain yourself. Stored in SQLite on your machine.

  2. Ask before dialing

    POST /v0/check with the number, purpose and greeting. You get allowed, each reason, the rule it came from and the recipient's local time.

  3. Keep the proof

    Every decision, consent and opt-out goes into a hash-chained log. callguard verify-log spots edits; callguard proof <number> shows the full history.

Checks
  • E.164 validation and normalization
  • Internal and imported national do-not-call lists
  • Consent level per purpose, with revocation
  • Calling window in every time zone of the number
  • Per-number daily and weekly attempt caps
  • AI disclosure regex per language, block or warn
  • Opt-outs go straight to your DNC list
  • Rules as a JSON policy file, each with its source
04

Quickstart

Demo, then one check before dialing
# install and run the demo (fixed clock, fictional numbers)
pip install -e '.[dev]' && callguard demo
callguard serve

# before your agent dials
curl -X POST localhost:8787/v0/check -d '{
  "to_number": "+13105550123", "purpose": "telemarketing",
  "greeting_text": "Hi, this is Ava, a virtual assistant from Acme."
}'

{ "allowed": false,
  "reasons": [{ "code": "outside_calling_window", "severity": "block",
    "message": "... America/Los_Angeles Fri 07:00.",
    "rule_source": "TCPA, 47 CFR 64.1200(c)(1) ... Verify with a lawyer." }],
  "recipient_local_time": "2026-11-06T07:00-08:00",
  "disclaimer": "Technical check against your configured policy. Not legal advice." }

Snippets for LiveKit outbound SIP, Twilio and TypeScript are in examples/.

05
provisional

Pricing

Open source Free

Self-hosted, Apache-2.0. Your data stays on your server.

Hosted · usage $0.002/ check

$99/month minimum. For agencies starting outbound campaigns.

Hosted · flat $499/ month

Up to 500k checks per month.

The hosted version is not live yet. Prices may change before launch.

06

Join the hosted waitlist

Tell us what you call for (sales, collections, appointments) and where (US, EU).

We only use your email to contact you about this. Privacy.