phone number standards

Sent logo
Sent TeamMar 8, 2026 / phone number standards / Article

Guadeloupe Phone Numbers: Format, Area Code & Validation Guide

Complete guide for developers on Guadeloupe phone number formatting, validation, portability, and telecom API integration with country code +590.

Guadeloupe Phone Numbers: Format, Area Code & Validation Guide

This comprehensive guide covers everything developers and system administrators need to know about Guadeloupe's phone number system. Learn how to format, validate, and store Guadeloupe phone numbers with country code +590, implement number portability checks, handle international dialing, and integrate telecom APIs for production applications.

Background

Guadeloupe, a French overseas territory, operates a telecommunications system under ARCEP (Autorité de Régulation des Communications électroniques et des Postes), France's telecom regulatory authority. The system follows French regulations with Caribbean-specific adaptations. The infrastructure has modernized significantly, especially in mobile networks, with expanding 4G LTE and 5G coverage. Four main operators – Orange, Digicel, Free Caraïbe, and Outremer Telecom – compete in the market. Number portability lets users switch carriers while keeping their numbers.

Operator Comparison

OperatorNetwork TypeCoverage FocusNotable Services
OrangeMobile/FixedNationwide5G, fiber optic
DigicelMobileIslands-wideRegional roaming
Free CaraïbeMobile/FixedUrban centersCompetitive pricing
Outremer TelecomFixedBusiness sectorEnterprise solutions

Guadeloupe Phone Number Formats

Understand Guadeloupe's phone number structure for proper handling and validation in your applications.

Structure Breakdown

Numbers follow a predictable pattern:

  • International Format: +590 XXX XX XX XX (Example: +590 690 12 34 56)
  • National Format: 0XXX XX XX XX (Example: 0690 12 34 56)

Best Practice: Store phone numbers in E.164 international format (+590) for maximum compatibility and to avoid ambiguity. This simplifies integration with international systems and reduces dialing errors.

Number Types

Number TypeFormatExampleUsage Context
Landline+590 590 XX XX XX+590 590 27 12 34Fixed location services
Mobile+590 690 XX XX XX+590 690 12 34 56Mobile services
Toll-Free+590 800 XX XX XX+590 800 12 34 56Free calls for the caller
Premium Rate+590 89X XX XX XX+590 891 23 45 67Services with higher charges

How to Dial Guadeloupe Phone Numbers

Domestic Calls

Dial within Guadeloupe using this pattern:

  1. Dial 0 (national prefix)
  2. Dial the 9-digit local number

Examples:

  • Mobile to mobile: 0690 12 34 56
  • Landline to landline: 0590 27 12 34
  • Mobile to landline: 0590 27 12 34

Guadeloupe uses nationwide numbering – no area codes within the territory.

International Calls

  • Outbound from Guadeloupe: Dial 00 + country code + number
  • Inbound to Guadeloupe: Dial +590 + local number (omit the leading 0)

Key Point: Always omit the leading 0 when you dial a Guadeloupe number from outside the country.

Common Dialing Errors

ErrorSymptomSolution
Keeping the 0 prefixCall fails internationallyUse +590 690… not +590 0690…
Missing +590Invalid number formatAdd country code for all international storage
Using 00 domesticallyCall routing issuesUse 0 prefix for domestic calls only
Wrong carrier prefixCall doesn't connectVerify number type (590 for landline, 690 for mobile)

Phone Number Validation

Implement robust phone number validation to ensure data integrity. Use regular expressions to validate Guadeloupe number formats:

javascript
const validateGuadeloupeNumber = (number) => {
  // Remove whitespace, dashes, parentheses
  const cleanedNumber = number.replace(/[\s\-()]/g, '');
  const regex = /^\+590(590|690|800|89\d)\d{6}$/;
  return regex.test(cleanedNumber);
};

// Example usage
console.log(validateGuadeloupeNumber('+590 690 12 34 56')); // true
console.log(validateGuadeloupeNumber('0690123456')); // false (missing +590)

This regex validates all standard number formats and handles common input variations (spaces, dashes, parentheses).

Error Handling

Provide clear, actionable feedback for invalid numbers:

javascript
function validateWithFeedback(number) {
  const cleaned = number.replace(/[\s\-()]/g, '');

  if (!cleaned.startsWith('+590')) {
    return { valid: false, error: 'Number must start with +590. Example: +590 690 12 34 56' };
  }

  if (cleaned.length !== 13) {
    return { valid: false, error: `Number must be 13 digits (including +590). You entered ${cleaned.length} digits.` };
  }

  const prefix = cleaned.substring(4, 7);
  const validPrefixes = ['590', '690', '800', '890', '891', '892', '893', '894', '895', '896', '897', '898', '899'];

  if (!validPrefixes.includes(prefix)) {
    return { valid: false, error: `Invalid prefix ${prefix}. Use 590 (landline), 690 (mobile), 800 (toll-free), or 89X (premium).` };
  }

  return { valid: true };
}

Number Portability

Guadeloupe follows French regulations for number portability. The process completes within 10 business days maximum. Key features:

  • Universal Coverage: Both landline and mobile numbers are portable
  • Automated Validation: Real-time systems prevent unauthorized transfers
  • Service Continuity: Operators synchronize to minimize downtime

Porting Process

From a user perspective:

  1. Contact your new carrier with your current number and account details
  2. Provide authorization and identification (RIO code from current carrier)
  3. New carrier initiates the port request
  4. Wait 3–10 business days for completion
  5. Receive confirmation when the port is active

Requirements:

  • Active account with current carrier (no outstanding debts)
  • Valid identification matching account holder name
  • RIO (Relevé d'Identité Opérateur) code from current carrier
  • No porting restrictions (typically 90 days between ports)

Costs: Free for users – new carrier may charge activation fees, but porting itself has no regulatory fees.

Developer Integration

Integrate with portability check APIs to verify number eligibility and status:

javascript
async function checkPortability(number) {
  try {
    const response = await fetch(`/api/v1/portability/check`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${API_TOKEN}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ phone_number: number })
    });

    if (response.status === 429) {
      throw new Error('Rate limit exceeded. Try again in 60 seconds.');
    }

    if (!response.ok) {
      throw new Error(`API error: ${response.status}`);
    }

    return await response.json();
  } catch (error) {
    console.error('Portability check failed:', error);
    throw error;
  }
}

Implementation Note: Replace /api/v1/portability/check and API_TOKEN with your specific API endpoint and authentication token.

API Response Format

Success (200):

json
{
  "phone_number": "+590690123456",
  "portable": true,
  "current_carrier": "Orange",
  "number_type": "mobile",
  "last_ported": "2024-08-15T10:30:00Z",
  "restrictions": null
}

Ineligible (200):

json
{
  "phone_number": "+590690123456",
  "portable": false,
  "reason": "Recent port within 90 days",
  "eligible_date": "2025-02-15"
}

Error (400/401/429/500):

json
{
  "error": "invalid_number",
  "message": "The provided number format is invalid"
}

Rate Limits: 100 requests per minute per API key.

Network Coverage and Infrastructure

Guadeloupe has modern telecommunications infrastructure with widespread 4G LTE coverage reaching approximately 95% of the population (ARCEP data, Q3 2024). 5G deployment is expanding in major cities. Fixed-line infrastructure in urban areas provides high-speed connectivity.

Coverage Details

Area Type4G Coverage5G CoverageTypical Speed
Pointe-à-Pitre (urban)99%Available50–150 Mbps
Basse-Terre (urban)99%Limited40–120 Mbps
Coastal towns95–98%Planned30–100 Mbps
Rural areas80–90%Not available10–50 Mbps
Remote/mountainous60–75%Not available5–30 Mbps

Known Coverage Limitations:

  • Mountainous interior regions (Basse-Terre National Park)
  • Some offshore islands (Les Saintes, Marie-Galante – coverage varies by operator)
  • Deep valleys and heavily forested areas

Network Monitoring

Integrate network status checks to enhance user experience:

javascript
async function getNetworkStatus(latitude, longitude) {
  try {
    const response = await fetch(`${API_ENDPOINT}/network/status`, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({ latitude, longitude })
    });

    if (!response.ok) {
      // Fallback to default "unknown" status
      return { status: 'unknown', coverage: null };
    }

    return await response.json();
  } catch (error) {
    console.warn('Network status check unavailable:', error);
    return { status: 'unavailable', coverage: null };
  }
}

Implementation Note: Replace API_ENDPOINT and API_KEY with your provider's details. Orange and Digicel offer network status APIs for enterprise customers. Contact your carrier's business division for API access and documentation.

Database Schema for Phone Numbers

Design your database schema to efficiently store and manage Guadeloupe phone number data:

sql
CREATE TABLE phone_numbers (
    id SERIAL PRIMARY KEY,
    number VARCHAR(20) NOT NULL UNIQUE CHECK (number ~ '^\+590(590|690|800|89\d)\d{6}$'), -- Enforced [E.164 format](https://www.sent.dm/resources/e164-phone-format) and validation
    type VARCHAR(20) CHECK (type IN ('landline', 'mobile', 'toll_free', 'premium_rate')),
    carrier_id INTEGER REFERENCES carriers(id),
    ported BOOLEAN DEFAULT FALSE,
    porting_date TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

This schema enforces E.164 format, categorizes number types, and tracks porting status.

Index Recommendations

sql
-- Optimize lookups by number
CREATE INDEX idx_phone_number ON phone_numbers(number);

-- Optimize queries by carrier and type
CREATE INDEX idx_carrier_type ON phone_numbers(carrier_id, type);

-- Optimize porting history queries
CREATE INDEX idx_porting_date ON phone_numbers(porting_date) WHERE ported = TRUE;

-- Optimize time-based queries
CREATE INDEX idx_created_at ON phone_numbers(created_at);

Data Privacy and Compliance

As a French territory, Guadeloupe falls under GDPR. Follow these requirements:

Data Collection:

  • Obtain explicit consent before storing phone numbers
  • Document the legal basis for processing (consent, contract, legitimate interest)
  • Provide clear privacy notices

Data Retention:

  • Define retention periods based on business needs (typically 2–5 years for inactive accounts)
  • Implement automatic deletion after retention period
  • Respond to deletion requests within 30 days

Security Measures:

  • Encrypt phone numbers at rest and in transit
  • Implement access controls and audit logs
  • Regular security assessments

User Rights:

  • Provide data access (export functionality)
  • Enable data portability
  • Honor deletion requests ("right to be forgotten")
sql
-- Add retention tracking
ALTER TABLE phone_numbers ADD COLUMN retention_until TIMESTAMP;
ALTER TABLE phone_numbers ADD COLUMN consent_date TIMESTAMP;
ALTER TABLE phone_numbers ADD COLUMN legal_basis VARCHAR(50);

NoSQL Alternative (MongoDB)

javascript
const phoneNumberSchema = new Schema({
  number: {
    type: String,
    required: true,
    unique: true,
    match: /^\+590(590|690|800|89\d)\d{6}$/
  },
  type: {
    type: String,
    enum: ['landline', 'mobile', 'toll_free', 'premium_rate'],
    required: true
  },
  carrier: { type: Schema.Types.ObjectId, ref: 'Carrier' },
  ported: { type: Boolean, default: false },
  portingDate: Date,
  retentionUntil: Date,
  consentDate: Date,
  legalBasis: String,
  createdAt: { type: Date, default: Date.now },
  updatedAt: { type: Date, default: Date.now }
});

// Indexes
phoneNumberSchema.index({ number: 1 });
phoneNumberSchema.index({ carrier: 1, type: 1 });
phoneNumberSchema.index({ portingDate: 1 }, { sparse: true });

Testing and Quality Assurance

Test thoroughly to ensure reliability. Implement unit tests for number formatting, validation, and API integrations. Cover the entire lifecycle from input to storage and retrieval.

javascript
// Example using Jest
const { validateGuadeloupeNumber } = require('./phone-utils');

describe('Guadeloupe Phone Number Validation', () => {
  it('should validate a correctly formatted mobile number', () => {
    expect(validateGuadeloupeNumber('+590690123456')).toBe(true);
  });

  it('should reject an invalid number format', () => {
    expect(validateGuadeloupeNumber('59069012345')).toBe(false);
  });
});

This example demonstrates basic validation. Expand your test suite to cover edge cases:

javascript
describe('Edge Cases', () => {
  const testCases = [
    { input: '+590 690 12 34 56', expected: true, desc: 'with spaces' },
    { input: '+590-690-12-34-56', expected: true, desc: 'with dashes' },
    { input: '+590(690)123456', expected: true, desc: 'with parentheses' },
    { input: '0690123456', expected: false, desc: 'missing country code' },
    { input: '+590690123', expected: false, desc: 'too short' },
    { input: '+59069012345678', expected: false, desc: 'too long' },
    { input: '+590990123456', expected: false, desc: 'invalid prefix' },
    { input: '+590 800 00 00 00', expected: true, desc: 'toll-free' },
    { input: '+590 891 23 45 67', expected: true, desc: 'premium rate' }
  ];

  testCases.forEach(({ input, expected, desc }) => {
    it(`should ${expected ? 'accept' : 'reject'} number ${desc}`, () => {
      expect(validateGuadeloupeNumber(input)).toBe(expected);
    });
  });
});

Integration Tests

javascript
describe('Phone Number Lifecycle', () => {
  it('should handle complete CRUD operations', async () => {
    const testNumber = '+590690123456';

    // Create
    const created = await createPhoneNumber(testNumber, 'mobile');
    expect(created.number).toBe(testNumber);

    // Read
    const fetched = await getPhoneNumber(testNumber);
    expect(fetched.number).toBe(testNumber);

    // Update (port to new carrier)
    const updated = await portNumber(testNumber, newCarrierId);
    expect(updated.ported).toBe(true);
    expect(updated.carrier_id).toBe(newCarrierId);

    // Delete
    await deletePhoneNumber(testNumber);
    const deleted = await getPhoneNumber(testNumber);
    expect(deleted).toBeNull();
  });
});

Performance Testing

Test validation performance with large datasets:

javascript
const { performance } = require('perf_hooks');

function benchmarkValidation(iterations = 100000) {
  const testNumbers = [
    '+590690123456',
    '+590590271234',
    '+590800123456',
    'invalid'
  ];

  const start = performance.now();

  for (let i = 0; i < iterations; i++) {
    testNumbers.forEach(num => validateGuadeloupeNumber(num));
  }

  const end = performance.now();
  const timePerValidation = (end - start) / (iterations * testNumbers.length);

  console.log(`Average validation time: ${timePerValidation.toFixed(4)}ms`);
  console.log(`Validations per second: ${(1000 / timePerValidation).toFixed(0)}`);
}

Frequently Asked Questions About Guadeloupe Phone Numbers

Q: Can I use a Guadeloupe number for SMS verification? Yes. All mobile numbers (690 prefix) support SMS. Ensure your SMS provider supports French Caribbean destinations. For more details on SMS implementation, see our SMS API integration guide.

Q: Do Guadeloupe numbers work with WhatsApp and Signal? Yes. Use the full international format (+590 690…) when registering.

Q: What happens to my number if I move from Guadeloupe? You can keep your number if you maintain an active account. Some carriers offer international roaming or virtual presence options.

Q: Are there number reservation services? Yes. Contact carriers directly for vanity numbers or specific number patterns. Fees vary by carrier and number desirability.

Q: How do I handle numbers from Saint Barthélemy and Saint Martin? Both territories use different country codes: +590 for Saint Martin (shared with Guadeloupe) and +590 for Saint Barthélemy. The numbering system is shared with Guadeloupe.

Troubleshooting

Issue: Number validation fails in production but works locally

Cause: Different regex engines or character encoding issues Solution: Use a consistent validation library across environments and normalize input to remove hidden characters

Issue: API calls return 401 Unauthorized

Cause: Expired or invalid API token Solution: Implement token refresh logic and verify token permissions

Issue: Database queries are slow

Cause: Missing indexes on frequently queried columns Solution: Add indexes on number, carrier_id, and created_at columns

Issue: Users report they can't port their number

Cause: Outstanding balance, recent port, or incorrect RIO code Solution: Verify account status with current carrier and obtain valid RIO code

Additional Resources