Guide til berikelse av e-postdata

Les som Markdown

Trekk ut et kandidatnavn og et kjønnssignal fra en e-postadresse

Trekk ut et kandidatnavn fra en e-postadresse, og legg estimatene og de tilhørende kildefeltene til i arbeidsflyten i Excel, Google Sheets eller API-et uten å endre det personen selv har oppgitt.

Arbeidsflyt for berikelse av e-postdata

Gjør en e-postadresse om til strukturerte data

Send en støttet e-postadresse, og se kandidatnavnet, kjønnssignalet, landkonteksten og konfidensen som GenderAPI returnerer.

  • Kandidatnavn
  • Kjønnssignal
  • Landkontekst
  • Konfidens
API-dokumentasjon for e-postadresser
GenderAPI-arbeidsflyt som gjør en e-postadresse om til strukturerte kundedata
En e-postadresse kan gi et kandidatnavn og et estimat, men noen felt kan forbli null.

Prøv V2-API-et

Analyser en e-postadresse

Datasett + KI

Send en verdi og se hele svaret, inkludert ukjente resultater og brukte kreditter.

Alltid KI (standard): 2 kreditter, også når resultatet er ukjent. Reserve: 1 kreditt, inkludert KI-reserve og ukjente resultater. Av, bare datasett (uten KI): 1 kreditt per fullført forespørsel, også når resultatet er ukjent. Med tolkning av kallenavn: 1 kreditt hvis resultatet kommer fra datasettet, eller 2 kreditter totalt hvis KI brukes, også når resultatet er ukjent.

Verdien du sender (hele e-postadressen), overføres til GenderAPI.io og videresendes til den konfigurerte KI-tjenesten i modusen Alltid KI (standard) eller hvis KI-reserve trengs, men ikke i modusen Av. Les mer om hvordan dataene behandles.

Ingen lagret API-nøkkel. Du kan bruke den delte IP-prøveperioden så lenge den har kreditter igjen.

Svaret nedenfor er et ekte svar hentet 1. oktober 2026. Velg Analyser for å sende en forespørsel.

Ekte V2-svar · hentet 1. oktober 2026
NavnOle
KjønnMann
Sikkerhet98 %
KildeAI-modell
Brukte kreditter2

Dette ekte svaret ble hentet 1. oktober 2026; bare kontosaldoen er erstattet. Verdier i sanntid kan være annerledes. En prediksjon er ikke en bekreftet identitet.

Integrasjoner

Velg hvor e-postdataene skal behandles

Microsoft ExcelInstaller tillegget →Google SheetsÅpne Marketplace →ShopifySe appen →Massebehandling av Excel/CSVÅpne filverktøyet →AirtableSe utvidelsen →REST APISe endepunktet →

Microsoft Excel

Behandle en kolonne med e-postadresser med Excel-tillegget

Velg metoden for e-postadresser, og tilordne deretter inndatakolonnen og resultatkolonnene. Bruk GENDER.FROM_EMAIL for dynamiske oppslag per celle, eller sidepanelet når resultatene skal skrives inn som faste verdier.

Videoguide for å trekke ut navn fra e-postadresser i ExcelSe Excel-videoguidenYouTube · åpnes i en ny fane

Google Sheets

Analyser e-postadresser med tillegget eller en formel

Bruk tillegget for eksisterende rader, den tilsvarende arbeidsflyten for nye rader og formelen GENDER for oppslag fra én celle.

REST API

Legg til analyse av e-postadresser på serveren din

Kall det dokumenterte endepunktet for e-postadresser fra serveren, og ikke legg API-nøkkelen i nettleseren eller i offentlig kode. Håndter svarstrukturen, feilkodene og kredittforbruket uttrykkelig.

Eksempel på felt for navn og kjønn trukket ut fra e-postadresser
Bildet viser resultatet fra en tidligere integrasjon og gjengir ikke de gjeldende svarreglene i V2.

Nøyaktighet og ansvarlig bruk

Ikke tving frem et resultat når adressen mangler et navn

Rolleadresser, tilfeldige identifikatorer og delte innbokser gir ikke alltid et pålitelig signal. Behold data.result_status, data.reason og data.confidence, og håndter usikre resultater for seg.

Implementeringsveiledning for V2

Lagre kildedata og estimat hver for seg

Behold den opprinnelige identifikatoren for posten. API-et åpner ingen profil, kontrollerer ikke hvem som eier en konto, og bekrefter ingen identitet. Send bare landkontekst når du har pålitelig informasjon, og ikke utled den fra domenet eller språket på nettstedet.

PostFeltTolkning
Kildepostcontact_id / original_emailBehold kildedataene i ditt eget system, og ikke erstatt et navn personen selv har oppgitt, med estimatet. Dette er ikke felt i API-svaret.
Kandidatnavndata.name / data.matchDet valgte navnet kan være null. Det finnes ikke noe felt for et verifisert etternavn, og et treff beviser ikke hvem som eier innboksen.
Estimatdata.gender / data.result_status / data.reasonLagre et ukjent resultat som JSON-verdien null. En rad i datasettet med like mange forekomster kan gi et kandidatnavn uten kjønn.
Grunnlagdata.source / data.confidence_kind / data.confidence / data.sample_countconfidence ligger mellom 0 og 1. Frekvens i datasettet og en KI-verdi måler ulike ting; for KI er sample_count null.
Logg over behandlingenmeta.request_id / meta.usageLagre ID-en og belastningsstatusen. Et tapt svar betyr verken at behandlingen var gratis, eller at den mislyktes.

Oppslaget i datasettet analyserer delen før @, fjerner et suffiks som begynner med +, og vurderer kandidatnavnene. En standardforespørsel kan i tillegg legge til et begrenset antall kandidater fra begynnelsen og slutten av sammensatte deler. Hvis flere rader gir treff, velges raden med flest registrerte forekomster; den kandidaten er ikke nødvendigvis personens egentlige navn. Hvis du sender et land, foretrekkes landets rad for hver kandidat; mangler den, kan en global rad brukes. Kontroller data.match.scope og country_source.

Velg behandlingsmodus og kostnad i kreditter

AlternativBehandlingKreditter per fullført element
options.ai_mode: offBare datasettet1 kreditt
options.ai_mode: fallbackFørst datasettet; vanlig KI-reserve hvis kjønnet ikke kan bestemmes1 kreditt totalt, inkludert KI
options.ai_mode: alwaysDirekte til KI2 kreditter
forceToGenderize: trueFørst datasettet, deretter tolkning av kallenavnet uten krav om et ekte fornavn1 hvis datasettet er nok, 2 totalt hvis KI brukes

Standard for en enkeltforespørsel er fallback, og for elementer i en samleforespørsel er det off. forceToGenderize er valgfritt for navn, e-postadresser og brukernavn; utelat da ai_mode eller bruk fallback, fordi alternativet ikke kan kombineres med off og always. Fullførte unknown-resultater belastes også. En positiv saldo er nok til å starte, og etter at behandlingen er fullført, kan saldoen bli negativ.

Når KI brukes, mottar den hele adressen du sendte, inkludert domenet og suffikset etter +, selv om den blir bedt om å se bort fra disse delene. Med forceToGenderize kan et kjønn returneres uten at et ekte fornavn er funnet; det betyr ikke at et verifisert navn er trukket ut til CRM-systemet ditt.

Test først en e-postforespørsel som bare bruker datasettet

Eksempler på inndata garanterer ikke et bestemt estimat. Sett GENDERAPI_API_KEY i servermiljøet, og ikke legg nøkkelen i offentlig kode på klientsiden. V1 og V2 bruker samme API-nøkkel og samme kontosaldo. Kontroller nøkkelen med /api/v2/usage, og bekreft at meta.access.mode har verdien api_key.

Velg et programmeringsspråk. Konfigurer API-nøkkelen, og kjør deretter eksemplet på serveren din.

Hver prediksjonsforespørsel er en ny operasjon som belastes, også nye forsøk. Disse eksemplene prøver ikke automatisk på nytt. Sjekk belastningsstatusen før du sender en ny forespørsel.

Før du kjører: tilgang og feilhåndtering

Kjør disse eksemplene på serveren din. Sett GENDERAPI_API_KEY i prosessmiljøet til din eksisterende API-nøkkel. Bekreft at meta.access.mode er api_key: en nøkkel som ikke gjenkjennes, kan føre til IP-prøveperioden.

Ved JSON-svar med HTTP 4xx og 5xx beholdes feilinnholdet, og eksemplet avsluttes med en exit-status som ikke er null. Sjekk code, action og meta.usage.billing_status før du prøver på nytt.

Veiledning om feil og nye forsøk →
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+ i et POSIX-skall. Kjør i terminalen. Dokumentasjon for kjøretidsmiljøet

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+; innebygd fetch. Lagre som example.mjs og kjør node example.mjs. Dokumentasjon for kjøretidsmiljøet

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+; standardbiblioteket. Lagre som example.py og kjør python3 example.py. Dokumentasjon for kjøretidsmiljøet

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+ med cURL-utvidelsen. Lagre som example.php og kjør php example.php. Dokumentasjon for kjøretidsmiljøet

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+; standard HTTP-klient. Lagre som GenderApiExample.java og kjør java GenderApiExample.java. Dokumentasjon for kjøretidsmiljøet

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.
}

Konsollapplikasjon i .NET 8+. Bruk som Program.cs i et konsollprosjekt, og kjør deretter dotnet run. Dokumentasjon for kjøretidsmiljøet

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+; standardbiblioteket. Lagre som main.go og kjør go run main.go. Dokumentasjon for kjøretidsmiljøet

Håndter resultater fra lister og nye forsøk

POST /api/v2/gender/batch godtar opptil 50 elementer med en API-nøkkel og 10 i IP-prøveperioden. Gi hvert element egne verdier for type, value og options. Hvis du vil bruke vanlig KI-reserve, må du angi fallback uttrykkelig i hvert element. id må være unik i samleforespørselen, og index begynner på null i den innsendte samleforespørselen. Lagre dine egne jobb- og kilderad-ID-er separat.

HTTP 200 betyr ikke at alle elementer er fullført. Håndter resultatene identified, unknown og error hver for seg; meta.summary.succeeded teller både identified og unknown. Vurder data.gender, source, confidence_kind, confidence, match og reason samlet, og ikke behandle en KI-verdi og en frekvens i datasettet som det samme.

Hvis meta.usage.billing_status har verdien confirmed, skal du bare gjenta feilene som tillater et nytt forsøk. Hvis statusen er unconfirmed, eller svaret har gått tapt, må du stoppe og kontrollere belastningen. Hvis du sender det samme elementet på nytt, også et fullført unknown-resultat, belastes det som en ny handling; send aldri hele listen på nytt uten kontroll.

Regler for samleforespørsler · Svarfelt · KI-alternativer · Vurdering av nøyaktighet og konfidens · Personvernerklæring

Tilleggene for Excel og Google Sheets og de andre ferdige integrasjonene kan bruke egen tilkobling og eget resultatformat. Ikke gå ut fra at utdataene deres følger dette V2-JSON-skjemaet; les den gjeldende veiledningen for den aktuelle integrasjonen.

Vanlige spørsmål

Navn og kjønn fra en e-postadresse

Kan et navn trekkes ut fra en e-postadresse?

For støttede personlige adresser kan GenderAPI trekke ut et kandidatnavn fra delen før @ og, når det finnes et resultat, returnere kjønn, land og konfidens. Kandidatnavnet er et estimat og ikke et verifisert navn på den som eier innboksen.

Gir alle e-postadresser et navn?

Nei. Rolleadresser, tilfeldige identifikatorer og lokale deler uten et ekte navn gir ikke alltid et pålitelig signal. Kontroller data.result_status, data.reason, data.confidence og data.confidence_kind i V2-svaret.

Blir e-postforespørsler lagret?

Ifølge den publiserte policyen lagres e-postforespørsler ikke som gjenbrukbare forespørselsposter. Separate tekniske logger og sikkerhetslogger følger lagringsperiodene i personvernerklæringen. Ikke bruk sensitive personopplysninger i den offentlige demoen.

Kan jeg bruke dette i Excel og Google Sheets?

Ja. Kolonner med e-postadresser kan behandles med Excel-tillegget, Google Sheets-tillegget eller filverktøyet for Excel og CSV. Disse integrasjonene har sitt eget resultatformat, som er forskjellig fra V2-JSON.

Hvilke felt returnerer API-et?

V2 returnerer data.name, data.gender, data.match og feltene for kilde og konfidens, og i meta også forespørsels-ID og kredittforbruk. Kandidatnavnet eller kjønnet kan være null. Det finnes ikke noe felt for et verifisert etternavn.

Når brukes KI?

For en enkeltforespørsel i V2 er vanlig KI-reserve slått på som standard. I denne demoen kan du bruke en standardforespørsel eller forceToGenderize; off og always angir du i API-forespørselen. Vanlig KI-reserve koster 1 kreditt totalt, always koster 2. Med forceToGenderize koster et resultat fra datasettet 1 kreditt og et resultat med KI 2 kreditter totalt, og resultatet kan fortsatt være unknown.

Kan jeg teste gratis?

En konto får 200 gratis kreditter per dag, og den delte IP-prøveperioden gir 10 kreditter per offentlig IP-adresse hver 24. time. En manglende eller ukjent nøkkel kan føre til IP-prøveperioden, så kontroller meta.access.mode i svaret. Det er kreditter som telles, ikke antall forespørsler.

Publisert: 16. juli 2025Sist gjennomgått:

Forbered API-arbeidsflyten

Test analyse av e-postadresser på serveren

Bruk det dokumenterte endepunktet for e-postadresser, og oppbevar API-nøkkelen bare på serveren.

API-dokumentasjon for e-postadresser

Fortsett testingen

Bruk GenderAPI-nøkkelen din

Skriv inn API-nøkkelen fra GenderAPI-kontoen for å fortsette å teste når de delte kredittene i IP-prøveperioden på 24 timer er brukt opp. Lagring av nøkkelen sender ingen forespørsel – send forespørselen på nytt når du er klar.

Lagres bare i denne nettleserfanen og slettes når fanen lukkes.