
8 décembre 2025
Voici un Extracteur de données pour Gmail.
Cela vous permet de créer des tableaux pour récupérer vos données, comme par exemple, tous les noms, prénoms, adresses Email, numéros de téléphone..etc
Ce petit Script va fouiller dans votre boite Gmail pour créer un tableau et catégoriser vos données.
Son petit nom : Casa-Extracteur-v1.0
Une fois dans google sheets, vous pourrez l’exporter facilement en .ODS ou .XLS
Email Extracteur
Ouvre Google Sheets → crée une nouvelle feuille.
Renomme la feuille comme tu veux (ex. Contacts Gmail).
Mets rien dedans, le script va créer les colonnes.
Ouvre Google Scripts et dans la feuille : menu Extensions → Apps Script.
Supprime tout le code présent.
Colle ce script à la place :
/*** Extraction simple : Inbox, 1 an */
function extractContacts() {
const defaultQuery = « in:inbox newer_than:365d »;
extractContactsByQuery_(defaultQuery);
}
/*** Extraction via une recherche Gmail saisie par l’utilisateur */
function extractContactsFromPrompt() {
const ui = SpreadsheetApp.getUi();
const response = ui.prompt(
« Extraction de contacts »,
« Saisis une recherche Gmail (comme dans Gmail). Exemples :\n » +
» label:A_EXTRAIRE\n » +
» from:contact@monsite.fr\n » +
‘ subject: »formulaire »\n’,
ui.ButtonSet.OK_CANCEL
);
if (response.getSelectedButton() !== ui.Button.OK) return;
const query = response.getResponseText().trim();
if (!query) {
ui.alert(« Aucune requête saisie. »);
return;
}
extractContactsByQuery_(query);
}
/*** Extraction générique */
function extractContactsByQuery_(query) {
const ss = SpreadsheetApp.getActiveSpreadsheet();
if (!ss) throw new Error(« Script non lié à une feuille Google Sheets. »);
const sheetName = « Contacts Gmail »;
let sheet = ss.getSheetByName(sheetName);
if (!sheet) sheet = ss.insertSheet(sheetName);
// Reset + en-têtes
sheet.clearContents();
sheet.appendRow([
« Nom »,
« Prénom »,
« Email »,
« Téléphone »,
« Adresse »,
« Code Postal »,
« Ville »,
« Sujet du mail »,
« Date »,
« Requête Gmail »,
]);
const maxThreads = 500;
const threads = GmailApp.search(query, 0, maxThreads);
threads.forEach((thread) => {
const messages = thread.getMessages();
messages.forEach((message) => {
const from = message.getFrom();
const body = message.getPlainBody();
// ============ EMAIL ============
const email = extractEmail_(from);
// ============ NOM / PRÉNOM ============
const { prenom, nom } = extractName_(from);
// ============ TÉLÉPHONE ============
const telephone = extractPhone_(body);
// ============ ADRESSE ============
const adresse = extractAddress_(body);
// ============ CODE POSTAL / VILLE ============
const { codePostal, ville } = extractCity_(body);
sheet.appendRow([
nom,
prenom,
email,
telephone,
adresse,
codePostal,
ville,
message.getSubject(),
message.getDate(),
query,
]);
});
});
}
/* =======================================================================
Helpers (fonctions utilitaires)
======================================================================= */
function extractEmail_(from) {
// Format classique : « Nom Prénom
const emailMatch = from.match(/<([^>]+)>/);
if (emailMatch) return emailMatch[1].trim();
// Sinon, on tente une capture simple
const simpleEmailMatch = from.match(/([\w.+-]+@[\w.-]+\.\w+)/);
return simpleEmailMatch ? simpleEmailMatch[1].trim() : from.trim();
}
function extractName_(from) {
const emailMatch = from.match(/<([^>]+)>/);
// On enlève la partie
let namePart = from;
if (emailMatch) {
namePart = from
.substring(0, from.indexOf(« <"))
.replace(/"/g, "")
.trim();
}
let prenom = "";
let nom = "";
if (namePart) {
const parts = namePart.split(/\s+/).filter(Boolean);
prenom = parts[0] || "";
nom = parts.slice(1).join(" ");
}
return { prenom, nom };
}
function extractPhone_(body) {
const phoneMatch = body.match(/((?:\+33|0)[1-9](?:[ .-]?\d{2}){4})/);
return phoneMatch ? phoneMatch[1].trim() : "";
}
function extractAddress_(body) {
const addressMatch = body.match(
/(\d{1,3}\s+[^\n,]*(?:rue|avenue|bd|boulevard|chemin|impasse|allée|allee|place)[^\n,]*)/i
);
return addressMatch ? addressMatch[1].trim() : "";
}
function extractCity_(body) {
let codePostal = "";
let ville = "";
const cpMatch = body.match(/\b(\d{5})\b/);
if (!cpMatch) return { codePostal, ville };
codePostal = cpMatch[1];
// Cherche la ville juste après le CP
const afterCP = body.substring(cpMatch.index + cpMatch[0].length).trim();
const villeMatch = afterCP.match(/^([A-Za-zÀ-ÖØ-öø-ÿ’ -]+)/);
if (villeMatch) {
ville = villeMatch[1].trim().split("\n")[0].trim();
}
return { codePostal, ville };
}
/**
* Menu Google Sheets
*/
function onOpen() {
SpreadsheetApp.getUi()
.createMenu("Contacts Gmail")
.addItem("Extraire (inbox – 1 an)", "extractContacts")
.addItem("Extraire depuis une recherche Gmail…", "extractContactsFromPrompt")
.addToUi();
}
Clique sur Enregistrer (icône disquette) → donne un nom au projet.
Dans le menu, lance la fonction Extractcontact une première fois :
en haut, à gauche de ▶, choisis Extractcontact → clique sur ▶.
Google va te demander d’autoriser l’accès à Gmail & Sheets → accepte (tu devras cliquer sur “Paramètres avancés” → “Continuer”).
Retourne dans ta feuille Google Sheets.
Tu dois voir un menu Contacts Gmail en haut.
Clique dessus → Extraire les contacts.
Le tableau se remplit avec : Nom, Prénom, Email, Téléphone, Adresse, Sujet, Date.
La détection du téléphone et de l’adresse est basée sur des motifs (regex), donc ce n’est pas parfait, mais ça fonctionne bien sur les formulaires classiques.
Tu peux adapter la ligne const query = '...' pour cibler seulement les mails de formulaires, d’un domaine, d’un label, etc.
Si tu veux, au message suivant, tu me dis comment arrivent tes contacts (formulaire de site, réponses à un modèle, etc.) et j’adapte le script précisément à ton cas.
Ce script permet l’extraction de maximum 500 lignes de tableur. Cette limite étant fixé par Google.
Étiquettes : données, Email, Extracteur Gmail
© 2026 Le Mag de l'agence | Theme by Eleven Themes
Leave a Comment