Phone Data Quality
Integration Patterns

RFC 3966 Tel URI Scheme: Format, ext= Parameter, Examples

Part of: Clean Dial: Phone Data Quality for HubSpot
Tikita Tolley

If you’ve ever seen a tel:+1-555-123-4567 link on a website or wondered about the proper way to format telephone URIs, you’ve encountered RFC3966 in action - but what exactly is this standard, and why does it matter for modern phone number management?

Quick reference: valid tel: URIs

FormExampleNotes
Global, with separatorstel:+1-555-123-4567Country code required; hyphens, periods, spaces all valid
Global, no separatorstel:+15551234567Equivalent to the above; matches E.164 directly
With extensiontel:+1-555-123-4567;ext=1234;ext= is the spec parameter, not x or ,
Local with regional dial plantel:555-0123;phone-context=+1phone-context makes the local number unambiguous
Local with private contexttel:101;phone-context=example.comInternal numbering (PBX, intranet)

Every example below shows how each parameter behaves in real-world phone fields, including the formats that quietly break HubSpot, the dialer, or your workflow.

Understanding RFC3966: The Tel URI Scheme

RFC3966, officially titled “The tel URI for Telephone Numbers,” is an Internet Engineering Task Force (IETF) standard that defines how telephone numbers should be represented in Uniform Resource Identifiers (URIs). Published in December 2004, this specification provides a standardized way to format phone numbers for use in web applications, email systems, and other digital platforms.

The tel URI scheme follows this basic format:

tel:+1-555-123-4567 tel:+44-20-7946-0958 tel:+33-1-42-68-53-00

Key Components of RFC3966 - Global vs Local Numbers

RFC3966 distinguishes between two types of telephone URIs:

Global Numbers start with a ’+’ symbol and include the full international dialing code:

  • tel:+1-415-555-0123 (US number)

  • tel:+44-20-7946-0958 (UK number) Local Numbers don’t include the international prefix and are context-dependent:

  • tel:555-0123 (local US number)

  • tel:0123456789 (local format)

Visual Separators and Parameters

The standard allows visual separators (hyphens, periods, spaces, parentheses) to improve readability. They are stripped before dialing, so all of these are equivalent:

  • tel:+1-555-123-4567
  • tel:+1.555.123.4567
  • tel:+1 555 123 4567
  • tel:+1(555)123-4567

The URI can also carry parameters appended with a semicolon. The two most common are ext= and phone-context=.

ext= for extensions. When a number has an internal extension, append ;ext=<digits> after the main number:

  • tel:+1-555-123-4567;ext=1234
  • tel:+44-20-7946-0958;ext=200

phone-context= for local numbers. A local number on its own is ambiguous - tel:555-0123 could be in any country. phone-context= makes it concrete in one of two ways:

  • A global dial-plan prefix: tel:555-0123;phone-context=+1 (this number is dialed within the +1 plan)
  • A private domain: tel:101;phone-context=example.com (an extension on the example.com PBX or intranet)

Local numbers without phone-context= are technically out of spec - most parsers will accept them but the meaning is undefined.

Why RFC3966 Matters for Modern Applications

Data Consistency and CRM Integrity

When building applications that handle phone numbers - whether it’s a CRM like HubSpot, a communication platform, or an HLR Lookup service - RFC3966 provides the framework for consistent data formatting.

This standardization becomes critical when:

  • Integrating with international systems
  • Storing phone numbers in databases
  • Enabling click-to-call functionality E164 Format Compatibility

RFC3966 works alongside the E.164 international telephone numbering standard. While E.164 defines the numerical structure (+15551234567), RFC3966 defines how these numbers should appear in URI contexts, allowing for human-readable formatting while maintaining machine-parseable structure.

RFC3966 in Practice: Real-World Applications

HubSpot Integration Challenges

When working with HubSpot’s API, phone number formatting becomes a critical consideration. HubSpot stores phone numbers in various formats depending on user input, but maintaining RFC3966 compliance ensures:

  • Consistent data across international contacts

  • Proper click-to-call functionality

  • Reliable syntax checking

  • Seamless integration with telecommunication tools Many HubSpot users struggle with phone data quality, especially when dealing with international contacts or bulk imports. Numbers might be stored as:

  • (555) 123-4567

  • 555.123.4567

  • +1 555 123 4567

  • 5551234567 Phone Number Intelligence Solutions

This inconsistency is where RFC3966-compliant formatting tools become essential. A robust system should:

  • Parse various input formats
  • Normalize to RFC3966 standard
  • Align with E.164 numbering plans
  • Return both formatted and standardized versions For HubSpot users, implementing RFC3966-compliant formatting significantly improves data quality and reduces communication failures.

Common RFC3966 Pitfalls and Solutions

Internationalization Issues

Many underestimate the complexity of international phone number handling.

Common mistakes include:

  • Assuming all numbers follow North American formats
  • Ignoring country-specific dialing rules
  • Failing to handle variable-length numbers
  • Not accounting for special service numbers Visual Separator Confusion

RFC3966 allows visual separators, but these must be handled correctly:

tel:+1-555-123-4567 // Valid tel:+1 555 123 4567 // Valid tel:+1.555.123.4567 // Valid tel:+1(555)123-4567 // Valid

All these represent the same number: +15551234567

Common mistakes with the ext= parameter

A lot of phone fields accept extension syntax that looks reasonable but isn’t actually RFC 3966. Here are the most common broken forms and the corrected versions:

BrokenWhy it failsCorrect
tel:+15551234567x1234x is not in RFC 3966; some dialers honor it, most don’ttel:+1-555-123-4567;ext=1234
tel:+1-555-123-4567,1234Comma is a pause-marker convention, not an extension markertel:+1-555-123-4567;ext=1234
tel:+1-555-123-4567 ext 1234Spaces inside the URI break parsingtel:+1-555-123-4567;ext=1234
tel:+1-555-123-4567;ext=Empty ext= is invalidOmit ;ext= entirely when there is no extension
tel:5551234567;ext=1234Local number with ext= and no phone-context= is ambiguoustel:+1-555-123-4567;ext=1234

The pattern: ;ext=<digits> placed directly after the main number, no spaces. The parameter name is case-insensitive but lowercase is conventional.

Validating RFC 3966 in code

A pragmatic validator does two things: confirm the structure matches the spec, then confirm the number itself is plausible. Here is a small JavaScript example that covers both global and local forms and returns the parsed parts:

// Returns { valid, type, e164, ext, context } for any tel: URI string.
function parseTelUri(input) {
  const m = /^tel:(\+?[\d\-.\s()]+)((?:;[\w-]+=[^;]+)*)$/i.exec(input);
  if (!m) return { valid: false };

  const [, raw, paramStr] = m;
  const digits = raw.replace(/[^\d+]/g, "");
  const isGlobal = digits.startsWith("+");
  const params = Object.fromEntries(
    paramStr.slice(1).split(";").filter(Boolean)
      .map(p => p.split("=").map(decodeURIComponent))
  );

  // Local numbers MUST carry a phone-context per RFC 3966.
  if (!isGlobal && !params["phone-context"]) {
    return { valid: false, type: "local-missing-context" };
  }

  return {
    valid: true,
    type: isGlobal ? "global" : "local",
    e164: isGlobal ? digits : null,
    ext: params.ext ?? null,
    context: params["phone-context"] ?? null,
  };
}

// Example: parseTelUri("tel:+1-555-123-4567;ext=1234")
// → { valid: true, type: "global", e164: "+15551234567", ext: "1234", context: null }

For production work, hand off the heavy lifting to Google’s libphonenumber - it understands country-specific dial plans and normalises to E.164. The validator above is intentionally minimal so you can copy it into a HubSpot custom-code workflow action or an edge function without pulling in a 200kb dependency.

Tools and Resources for RFC3966 Implementation

Libraries

Several libraries help implement RFC3966 compliance:

  • libphonenumber (Google’s library, available in multiple languages)
  • phone (lightweight JavaScript library)
  • phonenumbers (Python implementation) Purpose-Built Solutions While these general libraries are excellent for developers, we built Clean Dial to help solve RFC3966 compliance challenges for HubSpot users, while checking if numbers are still active.

Clean Dial provides:

  • Automatic RFC3966 URI formatting via a free HubSpot workflow action
  • Syntax Quality Checks to ensure numbers are mathematically possible
  • HLR Network Lookups to verify real-time connectivity This bridges the gap between technical RFC3966 standards and practical CRM management, giving HubSpot administrators the benefits of proper phone number formatting without requiring development resources.

Future-Proofing Your Phone Number Handling

As communication technologies evolve, RFC3966 compliance becomes increasingly important:

Emerging Technologies

  • VoIP systems requiring standardized addressing

  • IoT devices with embedded communication

  • International SMS/messaging platforms

  • Advanced CRM integrations Compliance and Accessibility

  • GDPR and data protection requirements

  • Accessibility standards for click-to-call

  • International business compliance

  • Telecom regulation adherence

RFC3966 might seem like a technical detail, but it’s foundational for any application handling phone numbers professionally. Whether you’re a HubSpot administrator dealing with international contacts, a developer building communication features, or a business owner concerned about data quality, understanding and implementing RFC3966 standards will improve your phone number handling significantly.

For organizations using HubSpot specifically, ensuring your phone data follows RFC3966 standards can dramatically improve data quality, reduce failed communications, and enable better integration with external systems. The investment in proper phone number formatting pays dividends in data reliability and user experience.

As businesses become increasingly global and digital communication continues to evolve, RFC3966 compliance isn’t just a technical nice-to-have, it’s a business necessity for reliable, professional phone number management.

If you’re dealing with messy phone data and want a professional way to format and verify your numbers, Clean Dial is the solution.

  • Unlimited Free Formatting to the RFC3966 standard.
  • 10 Free HLR Credits to test live network connectivity on your contacts.

You can find out more here.