Guida all'arricchimento dei dati email

Leggi in Markdown

Estrarre un nome e un'indicazione di genere da un indirizzo email

Estrai un nome candidato da un indirizzo email e completa il tuo flusso in Excel, Google Sheets o nell'API con la previsione e i relativi campi di origine, senza sostituire i dati forniti dalla persona stessa.

Flusso di arricchimento dei dati email

Trasforma gli indirizzi email in dati strutturati

Invia un indirizzo supportato ed esamina ciò che GenderAPI restituisce: nome candidato, indicazione di genere, contesto del paese e confidenza.

  • Nome candidato
  • Indicazione di genere
  • Contesto del paese
  • Confidenza
Documentazione dell'API per gli indirizzi email
Flusso GenderAPI che trasforma un indirizzo email in dati cliente strutturati
Un indirizzo email può fornire un nome candidato e una previsione; alcuni campi possono restare null.

Prova l'API V2

Analizza un indirizzo email

Set di dati + IA

Invia un valore ed esamina la risposta completa, inclusi i risultati sconosciuti e i crediti utilizzati.

Sempre IA (predefinita): 2 crediti, anche quando il risultato è sconosciuto. Fallback: 1 credito, inclusi il fallback IA e i risultati sconosciuti. Disattivata, solo set di dati (senza IA): 1 credito per ogni richiesta completata, anche quando il risultato è sconosciuto. Con l'interpretazione dei nickname: 1 credito se il risultato viene dal set di dati, oppure 2 in totale se viene usata l'IA, anche quando il risultato è sconosciuto.

Il valore inviato (l'intero indirizzo email) viene trasmesso a GenderAPI.io e inoltrato al servizio IA configurato in modalità Sempre IA (predefinita) o quando serve il fallback IA, ma non in modalità Disattivata. Maggiori informazioni sul trattamento dei dati.

Nessuna chiave API salvata. Puoi usare la prova IP condivisa finché ha crediti disponibili.

La risposta qui sotto è una risposta reale acquisita il 1° ottobre 2026. Fai clic su Analizza per inviare una richiesta.

Risposta V2 reale · acquisita il 1° ottobre 2026
NomeMarco
GenereMaschile
Affidabilità98%
PaeseItalia (IT)
FonteModello IA
Crediti usati2

Questa risposta reale è stata acquisita il 1° ottobre 2026; è stato sostituito solo il saldo dell'account. I valori in tempo reale possono essere diversi. Una previsione non è un'identità confermata.

Opzioni di integrazione

Scegli dove elaborare i dati email

Microsoft ExcelInstalla il componente aggiuntivo →Google SheetsApri il Marketplace →ShopifyVisualizza l'app →Excel / CSV in batchApri lo strumento →AirtableVisualizza l'estensione →REST APIVisualizza l'endpoint →

Microsoft Excel

Elabora colonne di indirizzi con il componente aggiuntivo per Excel

Scegli il metodo per gli indirizzi email, quindi collega la colonna di origine e i campi dei risultati. Usa GENDER.FROM_EMAIL per ricerche dinamiche nelle celle oppure il pannello laterale per risultati permanenti.

Video tutorial per estrarre nomi dagli indirizzi email in ExcelGuarda il video tutorial per ExcelYouTube · Si apre in una nuova scheda

Google Sheets

Analizza gli indirizzi email con il componente aggiuntivo o una formula

Usa il componente aggiuntivo per le righe esistenti, un flusso supportato per le nuove righe oppure la formula GENDER per ricerche in singole celle.

REST API

Integra l'analisi degli indirizzi email nel tuo backend

Chiama l'endpoint autenticato per gli indirizzi email dal server, senza esporre la chiave API nel browser o in codice pubblico. Gestisci esplicitamente lo schema della risposta, i codici di errore e il consumo di crediti.

Esempio di campi per nome e genere estratti da un indirizzo email
Schermata dei risultati di un'integrazione precedente; non mostra il contratto di risposta V2 attuale.

Accuratezza e uso responsabile

Non forzare un risultato quando l'indirizzo non contiene un nome

Indirizzi funzionali, identificativi casuali e caselle condivise possono non offrire un segnale affidabile. Conserva data.result_status, data.reason e data.confidence e gestisci separatamente i risultati incerti.

Guida all'implementazione V2

Salva separatamente i dati di origine e la previsione

Conserva l'identificativo originale del record. L'API non apre alcun profilo, non verifica chi sia il titolare di un account e non conferma alcuna identità. Invia un contesto del paese solo quando disponi di un dato affidabile; non ricavarlo dal dominio o dalla lingua del sito.

RecordCampoInterpretazione
Record di originecontact_id / original_emailConserva i dati di origine nel tuo sistema e non sostituire con la previsione un nome indicato dalla persona stessa. Questi non sono campi della risposta dell'API.
Nome candidatodata.name / data.matchIl nome selezionato può essere null. Non esiste un campo per un cognome verificato e una corrispondenza non dimostra l'identità del titolare della casella di posta.
Previsionedata.gender / data.result_status / data.reasonSalva un risultato sconosciuto come null nativo del JSON. Una voce del set di dati in parità può contenere un nome candidato senza genere.
Evidenzedata.source / data.confidence_kind / data.confidence / data.sample_countconfidence è compreso tra 0 e 1. La frequenza nel set di dati e un punteggio dell'IA sono misure diverse; per l'IA sample_count è null.
Registro dell'operazionemeta.request_id / meta.usageConserva l'id e lo stato dell'addebito; una risposta persa non significa né che l'operazione sia stata gratuita né che non sia riuscita.

La ricerca nel set di dati analizza la parte prima di @, rimuove un suffisso che inizia con + e valuta i nomi candidati. Una richiesta standard può inoltre aggiungere un numero limitato di candidati per prefisso e suffisso nelle parti composte. Se più voci corrispondono, viene scelta quella con il numero di occorrenze registrate più alto; quel candidato non è necessariamente il nome reale della persona. Se invii un paese, per ogni candidato viene preferita la voce del paese; se manca, può essere usata una voce globale. Controlla data.match.scope e country_source.

Scegli la modalità di elaborazione e il costo in crediti

OpzioneElaborazioneCosto per elemento riuscito
options.ai_mode: offSolo set di dati1 credito
options.ai_mode: fallbackPrima il set di dati; se non viene determinato alcun genere, normale fallback IA1 credito in totale, IA inclusa
options.ai_mode: alwaysDirettamente all'IA2 crediti
forceToGenderize: truePrima il set di dati, poi l'interpretazione del nickname senza richiedere un nome reale1 se basta il set di dati; 2 in totale se viene usata l'IA

Per una richiesta singola il valore predefinito è fallback, per gli elementi di un batch off. forceToGenderize è facoltativo per nomi, indirizzi email e nomi utente; in questo caso ometti ai_mode o usa fallback, perché l'opzione non può essere combinata con off e always. Anche i risultati unknown riusciti vengono addebitati. Per iniziare basta un saldo iniziale positivo; al termine dell'operazione il saldo può diventare negativo.

Quando viene usata, l'IA riceve l'intero indirizzo inviato, compresi il dominio e il suffisso +, anche se le viene chiesto di ignorare queste parti. forceToGenderize può produrre un'associazione a un genere senza che venga trovato un nome reale; non significa che nel tuo CRM sia stato estratto un nome verificato.

Prova prima una richiesta email che usa solo il set di dati

Gli input di esempio non garantiscono una determinata previsione. Imposta GENDERAPI_API_KEY nell'ambiente del server e non inserire la chiave in codice pubblico lato client. V1 e V2 usano la stessa chiave dell'account e lo stesso saldo. Verifica la chiave con /api/v2/usage e controlla che meta.access.mode abbia il valore api_key.

Scegli un linguaggio di programmazione. Configura la tua chiave API, poi esegui l'esempio sul tuo server.

Ogni richiesta di previsione è una nuova operazione a pagamento, anche quando è un nuovo tentativo. Questi esempi non riprovano automaticamente. Controlla lo stato dell'addebito prima di inviare un'altra richiesta.

Prima dell'esecuzione: accesso e gestione degli errori

Esegui questi esempi sul tuo server. Imposta GENDERAPI_API_KEY nell'ambiente del processo con la tua chiave API esistente. Verifica che meta.access.mode sia api_key: una chiave non riconosciuta può portare alla prova IP.

Per le risposte JSON con HTTP 4xx e 5xx, il corpo dell'errore viene conservato e l'esempio termina con un codice di uscita diverso da zero. Controlla code, action e meta.usage.billing_status prima di riprovare.

Guida a errori e nuovi tentativi →
cURL
curl --silent --show-error --fail-with-body --max-time 30 \
  --request POST 'https://api.genderapi.io/api/v2/gender' \
  --header "Authorization: Bearer ${GENDERAPI_API_KEY:?Set GENDERAPI_API_KEY}" \
  --header 'Content-Type: application/json' \
  --data '{
  "type": "email",
  "value": "alice.smith@example.com",
  "options": {
    "ai_mode": "off"
  }
}'

cURL 7.76+ in una shell POSIX. Esegui nel terminale. Documentazione del runtime

JavaScript / Node.js
// Server-side Node.js. Save as example.mjs.
const apiKey = process.env.GENDERAPI_API_KEY;
if (!apiKey) throw new Error("Set GENDERAPI_API_KEY");
const body = {
  "type": "email",
  "value": "alice.smith@example.com",
  "options": {
    "ai_mode": "off"
  }
};

const response = await fetch("https://api.genderapi.io/api/v2/gender", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify(body),
  signal: AbortSignal.timeout(30_000),
  redirect: "error",
});
const raw = await response.text();
if (!(response.headers.get("content-type") ?? "").includes("json")) {
  throw new Error(`HTTP ${response.status}: expected JSON; request ID ${response.headers.get("x-request-id")}`);
}
const result = JSON.parse(raw); // Also accepts application/problem+json.
if (!response.ok) {
  console.error(`HTTP ${response.status}`, result);
  process.exitCode = 1; // A retry is a new operation; inspect billing first.
} else {
  console.log(JSON.stringify(result, null, 2));
  // For batches, inspect every item: HTTP 200 may contain item errors.
}

Node.js 22+; fetch integrato. Salva come example.mjs ed esegui node example.mjs. Documentazione del runtime

Python
import json
import os
import sys
import urllib.error
import urllib.request

api_key = os.environ.get("GENDERAPI_API_KEY")
if not api_key:
    raise RuntimeError("Set GENDERAPI_API_KEY")
body = json.loads("{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"options\":{\"ai_mode\":\"off\"}}")

class NoRedirect(urllib.request.HTTPRedirectHandler):
    def redirect_request(self, req, fp, code, msg, headers, newurl):
        return None

request = urllib.request.Request(
    "https://api.genderapi.io/api/v2/gender",
    method="POST",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": "Bearer " + api_key,
        "Content-Type": "application/json",
    },
)
opener = urllib.request.build_opener(NoRedirect())
try:
    response = opener.open(request, timeout=30)
except urllib.error.HTTPError as error:
    response = error  # Keep the Problem Details body on non-2xx responses.
with response:
    status = response.status
    raw = response.read().decode("utf-8")
    if "json" not in response.headers.get("Content-Type", ""):
        raise RuntimeError(f"HTTP {status}: expected a JSON response")
    result = json.loads(raw)
print(json.dumps(result, indent=2), file=sys.stderr if status >= 300 else sys.stdout)
if not 200 <= status < 300:
    sys.exit(1)  # Inspect code, action and billing before retrying.
# For batches, inspect every item even when HTTP status is 200.

Python 3.10+; libreria standard. Salva come example.py ed esegui python3 example.py. Documentazione del runtime

PHP
<?php
$apiKey = getenv('GENDERAPI_API_KEY');
if (!$apiKey) {
    throw new RuntimeException('Set GENDERAPI_API_KEY');
}
$body = json_decode('{"type":"email","value":"alice.smith@example.com","options":{"ai_mode":"off"}}', true, 512, JSON_THROW_ON_ERROR);

$ch = curl_init('https://api.genderapi.io/api/v2/gender');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $apiKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($body, JSON_THROW_ON_ERROR),
]);
$raw = curl_exec($ch);
if ($raw === false) {
    throw new RuntimeException(curl_error($ch));
}
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE) ?: '';
curl_close($ch);
if (strpos($contentType, 'json') === false) {
    throw new RuntimeException("HTTP $status: expected a JSON response");
}
$result = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
$output = json_encode($result, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR) . PHP_EOL;
if ($status < 200 || $status >= 300) {
    fwrite(STDERR, $output); // Preserve the Problem Details body.
    exit(1);
}
echo $output;
// For batches, inspect every item; HTTP 200 can contain item errors.

PHP 8+ con l'estensione cURL. Salva come example.php ed esegui php example.php. Documentazione del runtime

Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;

public class GenderApiExample {
    private static String requiredEnv(String name) {
        String value = System.getenv(name);
        if (value == null || value.isBlank()) throw new IllegalStateException("Set " + name);
        return value;
    }

    public static void main(String[] args) throws Exception {
        String apiKey = requiredEnv("GENDERAPI_API_KEY");
        String body = "{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"options\":{\"ai_mode\":\"off\"}}";
        HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .followRedirects(HttpClient.Redirect.NEVER)
            .build();
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.genderapi.io/api/v2/gender"))
            .timeout(Duration.ofSeconds(30))
            .header("Authorization", "Bearer " + apiKey)
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(body, StandardCharsets.UTF_8))
            .build();
        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));
        if (!response.headers().firstValue("content-type").orElse("").contains("json")) {
            throw new IllegalStateException("HTTP " + response.statusCode() + ": expected JSON");
        }
        // JSON text; parse with your application's JSON library when integrating.
        if (response.statusCode() < 200 || response.statusCode() >= 300) {
            System.err.println(response.body()); // Includes Problem Details.
            System.exit(1);
        }
        System.out.println(response.body());
        // For batches, inspect each item's data or error, including on HTTP 200.
    }
}

Java 17+; client HTTP standard. Salva come GenderApiExample.java ed esegui java GenderApiExample.java. Documentazione del runtime

C# / .NET
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

string RequiredEnv(string name) =>
    !string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(name))
        ? Environment.GetEnvironmentVariable(name)!
        : throw new InvalidOperationException($"Set {name}");

var apiKey = RequiredEnv("GENDERAPI_API_KEY");
using var handler = new HttpClientHandler { AllowAutoRedirect = false };
using var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.genderapi.io/api/v2/gender");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
request.Content = new StringContent("{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"options\":{\"ai_mode\":\"off\"}}", Encoding.UTF8, "application/json");

using var response = await client.SendAsync(request);
var raw = await response.Content.ReadAsStringAsync();
if (!(response.Content.Headers.ContentType?.MediaType?.Contains("json") ?? false))
    throw new InvalidOperationException($"HTTP {(int)response.StatusCode}: expected JSON");
using var result = JsonDocument.Parse(raw);
if (!response.IsSuccessStatusCode)
{
    Console.Error.WriteLine(result.RootElement); // Preserve Problem Details.
    Environment.ExitCode = 1;
}
else
{
    Console.WriteLine(result.RootElement);
    // For batches, inspect every item even on HTTP 200.
}

Applicazione console .NET 8+. Usalo come Program.cs in un progetto console, poi esegui dotnet run. Documentazione del runtime

Go
package main

import (
    "encoding/json"
    "fmt"
    "io"
    "net/http"
    "os"
    "strings"
    "time"
)

func requiredEnv(name string) string {
    value := os.Getenv(name)
    if value == "" { panic("Set " + name) }
    return value
}

func run() error {
    apiKey := requiredEnv("GENDERAPI_API_KEY")
    body := "{\"type\":\"email\",\"value\":\"alice.smith@example.com\",\"options\":{\"ai_mode\":\"off\"}}"
    request, err := http.NewRequest("POST", "https://api.genderapi.io/api/v2/gender", strings.NewReader(body))
    if err != nil { return err }
    request.Header.Set("Authorization", "Bearer " + apiKey)
    request.Header.Set("Content-Type", "application/json")
    client := &http.Client{
        Timeout: 30 * time.Second,
        CheckRedirect: func(req *http.Request, via []*http.Request) error {
            return http.ErrUseLastResponse
        },
    }
    response, err := client.Do(request)
    if err != nil { return err }
    defer response.Body.Close()
    raw, err := io.ReadAll(response.Body)
    if err != nil { return err }
    if !strings.Contains(response.Header.Get("Content-Type"), "json") || !json.Valid(raw) {
        return fmt.Errorf("HTTP %d: expected a JSON response", response.StatusCode)
    }
    if response.StatusCode < 200 || response.StatusCode >= 300 {
        return fmt.Errorf("HTTP %d: %s", response.StatusCode, raw)
    }
    fmt.Println(string(raw))
    // For batches, inspect every item even on HTTP 200.
    return nil
}

func main() {
    if err := run(); err != nil {
        fmt.Fprintln(os.Stderr, err) // Keep Problem Details for error handling.
        os.Exit(1)
    }
}

Go 1.22+; libreria standard. Salva come main.go ed esegui go run main.go. Documentazione del runtime

Gestisci i risultati degli elenchi e le richieste ripetute

POST /api/v2/gender/batch accetta fino a 50 elementi con una chiave API e 10 con la prova IP. Assegna a ogni elemento valori propri per type, value e options. Se vuoi usare il normale fallback IA, indica fallback esplicitamente in ogni elemento. id deve essere univoco all'interno del batch; index parte da zero all'interno del batch inviato. Salva separatamente i tuoi identificativi di lavoro e di riga di origine.

HTTP 200 non significa che tutti gli elementi siano riusciti. Gestisci separatamente i risultati identified, unknown ed error; meta.summary.succeeded conta sia identified sia unknown. Valuta insieme data.gender, source, confidence_kind, confidence, match e reason. Non trattare come equivalenti un punteggio dell'IA e una frequenza nel set di dati.

Se meta.usage.billing_status ha il valore confirmed, ripeti solo gli errori operativi che consentono una nuova richiesta. Se lo stato è unconfirmed o la risposta è andata persa, fermati e verifica l'addebito. Inviare di nuovo lo stesso elemento, anche un risultato unknown riuscito, crea una nuova operazione a pagamento; non inviare mai di nuovo l'intero elenco alla cieca.

Contratto delle richieste batch · Campi della risposta · Opzioni IA · Valutare accuratezza e confidenza · Informativa sulla privacy

I componenti aggiuntivi per Excel e Google Sheets e le altre integrazioni pronte all'uso possono usare una propria connessione e un proprio formato dei risultati. Non dare per scontato che il loro output segua questo schema JSON V2; consulta la guida aggiornata della rispettiva integrazione.

Domande frequenti

Nome e genere dagli indirizzi email

È possibile estrarre un nome da un indirizzo email?

GenderAPI può estrarre un nome candidato dalla parte prima di @ negli indirizzi personali supportati e, quando disponibili, restituire indicazioni su genere, paese e confidenza. Il candidato è una deduzione e non un nome verificato del titolare della casella di posta.

Ogni indirizzo restituisce un nome?

No. Indirizzi funzionali, identificativi casuali e parti locali senza un nome reale possono non offrire un segnale affidabile. Controlla data.result_status, data.reason, data.confidence e data.confidence_kind nella risposta V2.

Le richieste email vengono salvate?

Secondo l'informativa pubblicata, le richieste email non vengono conservate come record di richiesta riutilizzabili. Per i log tecnici e di sicurezza separati valgono i periodi indicati nell'informativa sulla privacy. Non usare dati personali sensibili nella demo pubblica.

Posso usare la funzione in Excel e Google Sheets?

Sì. Le colonne di indirizzi possono essere elaborate con il componente aggiuntivo per Excel, con il componente aggiuntivo per Google Sheets o con lo strumento di importazione per file Excel e CSV. Queste integrazioni hanno un proprio formato dei risultati, diverso dal JSON V2.

Quali campi restituisce l'API?

La V2 restituisce data.name, data.gender, data.match e i campi di origine e confidenza, e in meta anche l'id dell'operazione e il consumo di crediti. Il nome candidato o il genere possono essere null. Non esiste un campo per un cognome verificato.

Quando viene usata l'IA?

Per una richiesta singola V2 il normale fallback IA è attivo per impostazione predefinita. In questa demo puoi usare una richiesta standard o forceToGenderize; off e always si impostano nella richiesta API. Il normale fallback IA costa 1 credito in totale, always 2. Con forceToGenderize viene addebitato 1 credito se il set di dati risolve la richiesta, oppure 2 in totale se viene usata l'IA; il risultato può restare unknown.

Posso provare il servizio gratuitamente?

Gli account includono 200 crediti gratuiti al giorno e la prova IP condivisa offre 10 crediti per indirizzo IP pubblico nell'arco di 24 ore. Una chiave mancante o non riconosciuta può far passare alla prova IP; controlla il campo meta.access.mode nella risposta. Si tratta di crediti, non di un numero di richieste.

Pubblicato: 14 giugno 2025Ultima revisione:

Configura il flusso API

Prova l'analisi degli indirizzi email nel tuo backend

Usa l'endpoint autenticato per gli indirizzi email e conserva la chiave API esclusivamente lato server.

Documentazione dell'API per gli indirizzi email

Continua il test

Usa la tua chiave GenderAPI

Incolla la chiave API del tuo account GenderAPI per continuare i test quando i crediti condivisi della prova IP di 24 ore sono esauriti. Il salvataggio della chiave non invia alcuna richiesta: inviala di nuovo quando sei pronto.

Viene salvata solo in questa scheda del browser e rimossa alla chiusura.