Pourquoi valider les adresses postales ?

La qualité des données d'adresses est un enjeu critique pour toute entreprise opérant en France. Des adresses incorrectes entraînent des retours de courrier, des livraisons échouées et des coûts opérationnels évitables. Selon La Poste, environ 10% des adresses dans les bases de données françaises contiennent des erreurs.

La validation d'adresses consiste à vérifier qu'une adresse existe dans un référentiel officiel et à la normaliser selon les standards postaux. En France, le référentiel de référence est la Base Adresse Nationale (BAN), qui recense plus de 26 millions d'adresses géocodées.

Le problème : intégrer la BAN soi-même

La BAN est un jeu de données open data accessible librement. Cependant, l'intégrer dans votre application implique :

  • Télécharger et mettre à jour régulièrement les fichiers CSV (plusieurs gigaoctets)
  • Mettre en place un moteur de recherche performant (Elasticsearch, PostgreSQL FTS…)
  • Gérer la normalisation des voies, les abréviations, les fautes de frappe
  • Maintenir l'infrastructure serveur associée

Pour un projet en phase de démarrage ou une PME, cette complexité est souvent disproportionnée.

La solution : une API de validation

Une API de validation d'adresses vous permet d'interroger la BAN en temps réel, sans infrastructure à maintenir. Voici comment utiliser l'API TrustyData en Python avec la bibliothèque requests :

import requests

def valider_adresse(adresse: str) -> dict:
    """Valide une adresse française via l'API TrustyData."""
    response = requests.get(
        "https://api.trustydata.fr/v1/address/verify",
        params={"q": adresse, "limit": 1},
        headers={"Authorization": "Bearer VOTRE_CLE_API"},
    )
    response.raise_for_status()
    return response.json()

# Exemple d'utilisation
resultat = valider_adresse("10 rue de la paix 75002 paris")
print(resultat)

Prêt à intégrer l'API TrustyData ?

Découvrir les plans →

Interpréter le score de confiance

L'API retourne un score de confiance entre 0 et 1 pour chaque adresse validée :

Score Interprétation Action recommandée
> 0.8 Correspondance au numéro Adresse fiable, utiliser directement
0.5 – 0.8 Correspondance à la voie Vérifier le numéro avec l'utilisateur
< 0.5 Correspondance approximative Demander une ressaisie

Validation en lot (batch)

Pour traiter un fichier CSV complet, vous pouvez paralléliser les appels :

import csv
import requests
from concurrent.futures import ThreadPoolExecutor

def valider_lot(fichier_csv: str, colonne_adresse: str = "adresse"):
    """Valide toutes les adresses d'un fichier CSV."""
    with open(fichier_csv) as f:
        lignes = list(csv.DictReader(f))

    def traiter(ligne):
        resultat = valider_adresse(ligne[colonne_adresse])
        ligne["adresse_validee"] = resultat.get("label", "")
        ligne["score"] = resultat.get("score", 0)
        return ligne

    with ThreadPoolExecutor(max_workers=10) as pool:
        resultats = list(pool.map(traiter, lignes))

    return resultats

Bonnes pratiques

  1. Validez à la saisie : intégrez l'autocomplétion dans vos formulaires pour éviter les erreurs en amont
  2. Traitez les scores bas : mettez en place un workflow de vérification pour les adresses dont le score est inférieur à 0.5
  3. Mettez à jour régulièrement : les adresses changent (nouvelles voies, fusions de communes), revalidez vos bases périodiquement
  4. Respectez les limites d'API : utilisez un debounce de 200ms pour l'autocomplétion et le parallélisme raisonnable pour le batch

Conclusion

La validation d'adresses françaises en Python est simplifiée grâce aux API basées sur la BAN. En quelques lignes de code, vous pouvez normaliser, vérifier et enrichir vos données d'adresses sans infrastructure complexe.

TrustyData propose un plan gratuit avec 5 000 requêtes par mois — idéal pour démarrer votre intégration et tester la qualité de vos données.