Guide till berikning av e-postdata

Läs som Markdown

Extrahera ett förnamn och en könssignal från en e-postadress

Extrahera en namnkandidat från en e-postadress och komplettera ditt flöde i Excel, Google Sheets eller API:et med prediktionen och dess källfält, utan att ersätta de uppgifter som personen själv har lämnat.

Flöde för berikning av e-postdata

Omvandla e-postadresser till strukturerade data

Skicka en adress som stöds och granska vad GenderAPI returnerar: namnkandidat, könssignal, landskontext och konfidens.

  • Namnkandidat
  • Könssignal
  • Landskontext
  • Konfidens
API-dokumentation för e-postadresser
GenderAPI-flöde som omvandlar en e-postadress till strukturerade kunddata
En e-postadress kan ge en namnkandidat och en prediktion; fält kan förbli null.

Testa V2-API:et

Analysera en e-postadress

Datamängd + AI

Skicka ett värde och granska hela svaret, inklusive okända resultat och förbrukade krediter.

Alltid AI (standard): 2 krediter, även när resultatet är okänt. Reserv: 1 kredit, inklusive AI som reserv och okända resultat. Av, endast datamängd (ingen AI): 1 kredit per slutförd förfrågan, även när resultatet är okänt. Med smeknamnstolkning: 1 kredit om datamängden ger resultatet, eller totalt 2 om AI används, även när resultatet är okänt.

Det skickade värdet (hela e-postadressen) går till GenderAPI.io och vidarebefordras till den konfigurerade AI-tjänsten i läget Alltid AI (standard) eller om AI behövs som reserv, men inte i läget Av. Mer om databehandlingen.

Ingen API-nyckel sparad. Den delade IP-provperioden kan användas så länge den har krediter kvar.

Svaret nedan är ett riktigt svar som hämtades den 1 oktober 2026. Klicka på Analysera för att skicka en förfrågan.

Riktigt V2-svar · hämtat 1 oktober 2026
NamnLars
KönMan
Säkerhet98 %
KällaAI-modell
Använda krediter2

Det här riktiga svaret hämtades den 1 oktober 2026; endast kontosaldot har ersatts. Livevärden kan skilja sig. En prediktion är ingen bekräftad identitet.

Integrationsalternativ

Välj var du bearbetar e-postdata

Microsoft ExcelInstallera tillägget →Google SheetsÖppna Marketplace →ShopifyVisa appen →Excel / CSV i batchÖppna verktyget →AirtableVisa tillägget →REST APIVisa endpointen →

Microsoft Excel

Bearbeta adresskolumner med Excel-tillägget

Välj metoden för e-postadresser och koppla sedan källkolumnen och resultatfälten. Använd GENDER.FROM_EMAIL för dynamiska uppslag i celler eller sidopanelen för beständiga resultat.

Videoguide för att extrahera förnamn från e-postadresser i ExcelSe videoguiden för ExcelYouTube · Öppnas i en ny flik

Google Sheets

Analysera e-postadresser med tillägget eller en formel

Använd tillägget för befintliga rader, ett flöde som stöds för nya rader eller formeln GENDER för uppslag i enskilda celler.

REST API

Bygg in e-postanalys i ditt backend

Anropa den autentiserade endpointen för e-postadresser från servern, utan att exponera API-nyckeln i webbläsaren eller i offentlig kod. Hantera svarsschema, felkoder och förbrukning av krediter uttryckligen.

Exempel på fält för förnamn och kön som extraherats från en e-postadress
Skärmbild av resultat från en äldre integration; den visar inte det aktuella svarsavtalet i V2.

Noggrannhet och ansvarsfull användning

Tvinga inte fram ett resultat när adressen saknar förnamn

Funktionsadresser, slumpmässiga identifierare och delade inkorgar ger kanske ingen tillförlitlig signal. Behåll data.result_status, data.reason och data.confidence och hantera osäkra resultat separat.

Implementeringsguide för V2

Spara källdata och prediktion separat

Behåll postens ursprungliga identifierare. API:et öppnar ingen profil, kontrollerar inte vem som äger ett konto och bekräftar ingen identitet. Skicka landskontext bara när du har en tillförlitlig uppgift; härled den inte från domänen eller webbplatsens språk.

PostFältTolkning
Källpostcontact_id / original_emailBehåll källdata i ditt eget system och ersätt inte ett förnamn som personen själv har angett med prediktionen. Detta är inte fält i API-svaret.
Namnkandidatdata.name / data.matchDet valda namnet kan vara null. Det finns inget fält för ett verifierat efternamn, och en träff bevisar inte identiteten hos den som äger inkorgen.
Prediktiondata.gender / data.result_status / data.reasonSpara ett okänt resultat som ett inbyggt JSON-null. En post i datamängden med lika utfall kan innehålla en namnkandidat utan kön.
Underlagdata.source / data.confidence_kind / data.confidence / data.sample_countconfidence ligger mellan 0 och 1. Frekvens i datamängden och ett AI-värde är olika mått; för AI är sample_count null.
Åtgärdsloggmeta.request_id / meta.usageBehåll id:t och debiteringsstatusen; ett förlorat svar betyder varken att åtgärden var kostnadsfri eller att den misslyckades.

Sökningen i datamängden analyserar delen före @, tar bort ett tillägg som börjar med + och bedömer namnkandidater. En standardförfrågan kan dessutom lägga till ett begränsat antal kandidater efter prefix och suffix i sammansatta delar. Om flera poster matchar väljs den med högst registrerat antal; den kandidaten behöver inte vara personens riktiga förnamn. Om du skickar ett land föredras landets post för varje kandidat; saknas den kan en global post användas. Kontrollera data.match.scope och country_source.

Välj bearbetningsläge och kostnad i krediter

AlternativBearbetningKostnad per lyckad post
options.ai_mode: offEndast datamängd1 kredit
options.ai_mode: fallbackFörst datamängden; om inget kön fastställs, vanlig AI-reservTotalt 1 kredit, inklusive AI
options.ai_mode: alwaysDirekt till AI2 krediter
forceToGenderize: trueFörst datamängden, därefter tolkning av smeknamnet utan krav på ett riktigt förnamn1 om datamängden räcker; totalt 2 om AI används

För en enskild förfrågan är fallback standardvärdet, för poster i en batch off. forceToGenderize är valfritt för namn, e-postadresser och användarnamn; utelämna då ai_mode eller använd fallback, eftersom alternativet inte kan kombineras med off och always. Även lyckade unknown-resultat debiteras. Det räcker med ett positivt startsaldo för att starta; när åtgärden är slutförd kan saldot bli negativt.

När AI används får den hela den skickade adressen, inklusive domän och +-tillägg, även om den instrueras att ignorera dessa delar. forceToGenderize kan ge en koppling till ett kön utan att ett riktigt förnamn hittas; det betyder inte att ett verifierat förnamn har extraherats till ditt CRM.

Testa först en e-postförfrågan som bara använder datamängden

Exempelindata garanterar ingen viss prediktion. Ange GENDERAPI_API_KEY i servermiljön och lägg inte nyckeln i offentlig kod på klientsidan. V1 och V2 använder samma kontonyckel och samma saldo. Kontrollera nyckeln med /api/v2/usage och se till att meta.access.mode har värdet api_key.

Välj ett programmeringsspråk. Konfigurera din API-nyckel, kör sedan exemplet på din server.

Varje prediktionsförfrågan är en ny debiterbar åtgärd, även vid nya försök. Exemplen gör inga automatiska nya försök. Kontrollera debiteringsstatus innan du skickar en ny förfrågan.

Innan du kör: åtkomst och felhantering

Kör exemplen på din server. Sätt GENDERAPI_API_KEY i processmiljön till din befintliga API-nyckel. Kontrollera att meta.access.mode är api_key: en nyckel som inte känns igen kan leda till IP-provperioden.

Vid JSON-svar med HTTP 4xx och 5xx behålls felinnehållet och exemplet avslutas med en slutstatus som inte är noll. Kontrollera code, action och meta.usage.billing_status innan du försöker igen.

Guide om fel och nya försö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 ett POSIX-skal. Kör i terminalen. Dokumentation för körmiljön

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+; inbyggd fetch. Spara som example.mjs och kör node example.mjs. Dokumentation för körmiljön

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. Spara som example.py och kör python3 example.py. Dokumentation för körmiljön

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 tillägget cURL. Spara som example.php och kör php example.php. Dokumentation för körmiljön

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+; inbyggd HTTP-klient. Spara som GenderApiExample.java och kör java GenderApiExample.java. Dokumentation för körmiljön

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

Konsolapplikation med .NET 8+. Använd som Program.cs i ett konsolprojekt och kör sedan dotnet run. Dokumentation för körmiljön

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. Spara som main.go och kör go run main.go. Dokumentation för körmiljön

Hantera listresultat och upprepade förfrågningar

POST /api/v2/gender/batch tar emot upp till 50 poster med API-nyckel och 10 i IP-provperioden. Ge varje post egna värden för type, value och options. Om du vill använda vanlig AI-reserv anger du fallback uttryckligen i varje post. id måste vara unikt inom batchen; index räknas från noll inom den skickade batchen. Spara dina egna jobb- och källradsidentifierare separat.

HTTP 200 betyder inte att alla poster lyckades. Hantera resultaten identified, unknown och error separat; meta.summary.succeeded räknar både identified och unknown. Bedöm data.gender, source, confidence_kind, confidence, match och reason tillsammans. Behandla inte ett AI-värde och en frekvens i datamängden som likvärdiga.

Om meta.usage.billing_status har värdet confirmed upprepar du bara driftfel som tillåter en ny förfrågan. Om statusen är unconfirmed eller svaret har gått förlorat stoppar du och stämmer av debiteringen. Att skicka samma post igen, även ett lyckat unknown-resultat, skapar en ny avgiftsbelagd åtgärd; skicka aldrig om hela listan i blindo.

Avtal för batchförfrågningar · Svarsfält · AI-alternativ · Bedöm noggrannhet och konfidens · Integritetspolicy

Tilläggen för Excel och Google Sheets samt andra färdiga integrationer kan använda en egen anslutning och ett eget resultatformat. Utgå inte från att deras utdata följer detta JSON-schema för V2; läs den aktuella guiden för respektive integration.

Vanliga frågor

Förnamn och kön från e-postadresser

Kan ett förnamn extraheras från en e-postadress?

GenderAPI kan extrahera en namnkandidat ur delen före @ i personliga adresser som stöds och, när det finns, returnera signaler om kön, land och konfidens. Kandidaten är en härledning och inte ett verifierat förnamn för den som äger inkorgen.

Ger varje adress ett förnamn?

Nej. Funktionsadresser, slumpmässiga identifierare och lokala delar utan ett riktigt förnamn ger kanske ingen tillförlitlig signal. Kontrollera data.result_status, data.reason, data.confidence och data.confidence_kind i V2-svaret.

Sparas e-postförfrågningar?

Enligt den publicerade policyn lagras e-postförfrågningar inte som återanvändbara förfrågningsposter. För separata tekniska loggar och säkerhetsloggar gäller de perioder som anges i integritetspolicyn. Använd inte känsliga personuppgifter i den offentliga demon.

Kan jag använda funktionen i Excel och Google Sheets?

Ja. Kolumner med adresser kan bearbetas med Excel-tillägget, Google Sheets-tillägget eller importverktyget för Excel- och CSV-filer. Dessa integrationer har ett eget resultatformat som skiljer sig från V2-JSON.

Vilka fält returnerar API:et?

V2 returnerar data.name, data.gender, data.match samt fält för källa och konfidens, och i meta dessutom åtgärdens id och förbrukningen av krediter. Namnkandidat eller kön kan vara null. Det finns inget fält för ett verifierat efternamn.

När används AI?

För en enskild förfrågan i V2 är vanlig AI-reserv aktiverad som standard. I den här demon kan du använda en standardförfrågan eller forceToGenderize; off och always anger du i API-förfrågan. Vanlig AI-reserv kostar totalt 1 kredit, always 2. Med forceToGenderize debiteras 1 kredit om datamängden löser förfrågan, eller totalt 2 om AI används; resultatet kan förbli unknown.

Kan jag testa tjänsten kostnadsfritt?

Konton innehåller 200 kostnadsfria krediter per dag, och den delade IP-provperioden ger 10 krediter per offentlig IP-adress inom 24 timmar. En saknad eller okänd nyckel kan leda till IP-provperioden; kontrollera fältet meta.access.mode i svaret. Det handlar om krediter, inte om ett antal förfrågningar.

Publicerad: 14 juni 2025Senast granskad:

Sätt upp API-flödet

Testa e-postanalys i ditt backend

Använd den autentiserade endpointen för e-postadresser och förvara API-nyckeln enbart på serversidan.

API-dokumentation för e-postadresser

Fortsätt testa

Använd din GenderAPI-nyckel

Klistra in API-nyckeln från ditt GenderAPI-konto för att fortsätta testa när de delade krediterna i IP-provperioden på 24 timmar är slut. Att spara nyckeln skickar ingen förfrågan – skicka förfrågan igen när du är redo.

Sparas endast i den här webbläsarfliken och raderas när fliken stängs.