Zum Inhalt springen

Kontaktdaten finden

Finde geschäftliche E-Mail-Adressen und direkte Telefonnummern anhand einer identifizierbaren Person.

Gib bei einer bekannten Person möglichst die berufliche Profil-URL an. Andernfalls helfen Name, Firma und Domain, die Identität vor der Kontaktsuche zu klären. Fordere beim Enrichment output: {"type":"email"} oder output: {"type":"phone"} an.

Nutze enrichment_start in MCP oder POST /api/v1/operations/enrichment.start über HTTP. Eine Anfrage akzeptiert 1–100 unabhängige Elemente, sodass du E-Mail-Adressen oder Telefonnummern vieler Kontakte gleichzeitig recherchieren kannst. Sende für beide Angaben pro Person zwei Elemente mit eigenen IDs und passenden Ergebnistypen: bis zu 50 Personen mit beiden Feldern pro Batch. Siehe das ausführbare Bulk-Kontaktbeispiel.

Leadbase verbindet die Identitätsrecherche und Kontaktsuche in einem Workflow. Für HTTP-Integrationen stehen auch direkte Katalogoperationen bereit, wenn Operation und benötigte Identifikatoren bereits feststehen. MCP-Clients nutzen die Recherchetools oben.

Beispielfrage

„Finde die geschäftliche E-Mail-Adresse der Person aus diesem beruflichen Profil. Ersetze sie nicht durch ein allgemeines Firmenpostfach.“ Gib das Profil in input an und wähle Email als Ergebnis. Frage bei einer direkten Telefonnummer ausdrücklich nach der Person statt nach einer Zentrale.

Eine direkte Telefonnummer über HTTP recherchieren

Dieses Beispiel startet eine Telefonfrage ohne neues Sheet. Richte LEADBASE_API_KEY für den gewünschten Workspace ein; siehe API-Authentifizierung. Ersetze den Profil-Platzhalter durch eine Person, die du recherchieren willst, und wähle einen stabilen Schlüssel für genau diese Anfrage. Der Startaufruf kann Credits verbrauchen. Der Telefonnummern-Guide für Claude Code und Codex zeigt denselben Ablauf über MCP.

1. Die Telefonfrage starten

bash
curl --fail-with-body https://www.leadbase.io/api/v1/operations/enrichment.start \  -H "x-api-key: $LEADBASE_API_KEY" \  -H 'Content-Type: application/json' \  --data-binary @- <<'JSON'{  "idempotencyKey": "contact-phone-pilot-001",  "items": [    {      "id": "contact-1-phone",      "input": {        "profileUrl": "https://www.linkedin.com/in/CONTACT_ONE"      },      "question": "Finde die direkte geschäftliche Telefonnummer dieser Person. Ersetze sie nicht durch eine Firmenzentrale und erfinde keine fehlende Nummer.",      "output": { "type": "phone" }    }  ]}JSON

Bewahre die zurückgegebene batchId und die Zuordnung zwischen jobs[].itemId und jobs[].jobId auf. Die Antwort bestätigt die Annahme. Ein Job mit queued oder running hat noch kein endgültiges Ergebnis. Neben der Profil-URL akzeptiert input relevante skalare Angaben wie Name, Unternehmen, Domain und Land.

2. Denselben Batch abrufen

bash
curl --fail-with-body https://www.leadbase.io/api/v1/operations/enrichment.get \  -H "x-api-key: $LEADBASE_API_KEY" \  -H 'Content-Type: application/json' \  -d '{"batchId":"BATCH_ID_FROM_START"}'

Ersetze BATCH_ID_FROM_START durch die tatsächlich zurückgegebene UUID. In MCP verwendest du enrichment_get mit demselben Argument. Lies mit angemessenem Abstand und zunehmenden Wartezeiten, solange Jobs queued oder running sind. Wiederhole nicht enrichment.start, um den Fortschritt zu prüfen.

Der folgende fiktive Auszug zeigt eine Antwort nach Rechercheabschluss; weitere Job-Felder sind ausgelassen. PHONE_VALUE_FROM_RESULT steht für die gelieferte Telefonnummer und ist keine anrufbare Nummer. Der Auszug erklärt die Struktur. Er ist weder ein gemessenes Rechercheergebnis noch ein Versprechen kostenloser Recherche.

json
{  "batchId": "11111111-1111-4111-8111-111111111111",  "jobs": [    {      "itemId": "contact-1-phone",      "status": "completed",      "result": {        "type": "phone",        "value": ["PHONE_VALUE_FROM_RESULT"],        "confidence": 80,        "summary": "Fiktives Telefonergebnis. Prüfe vor der Verwendung die tatsächliche Erklärung und die Belege.",        "sources": []      },      "errorCode": null,      "billingStatus": "pending",      "credits": null    }  ]}

Die echte Antwort enthält außerdem jobId, batchId, instruction, createdAt und updatedAt je Job. Bewahre diese IDs und die tatsächlichen Quellen auf. Ein Konfidenzwert belegt weder aktuelle Inhaberschaft noch Anruferlaubnis. Leere Quellen liefern keinen Beleg. Das öffentliche Telefonergebnis ist ein Array von Zeichenketten, kein Objekt mit garantierten Angaben zu Nummerntyp oder Verifizierung.

3. Fehlende Nummern, Fehler und Abrechnung behandeln

BeobachtungBedeutungBehandlung
status: "completed", Telefonwert result.value: ["…"]Telefonnummer geliefertLies Erklärung und Quellen; prüfe Identität und Nummerntyp
status: "completed", Telefonwert result.value: []Keine verwendbare Nummer geliefertErhalte leeres Ergebnis und Erklärung; rate keine fehlende Nummer
status: "queued" oder "running"Noch kein endgültiges ErgebnisLies diesen Batch weiter
status: "failed" oder "cancelled"Ausführung nicht erfolgreich abgeschlossenErhalte errorCode und Status; zähle den Job nicht als abgeschlossene Recherche ohne Nummer
billingStatus: "pending" oder "reconciliation_pending"Abrechnung noch offenBerichte beobachtete Kosten getrennt und prüfe die Abrechnung erneut
billingStatus: "settled"Erfasste Abrechnung endgültigVerwende die gelieferten credits; unbekannter Verbrauch ist nie automatisch null

Bei einer abgeschlossenen Telefonrecherche ohne Nummer sieht der Ergebnisausschnitt so aus:

json
{  "type": "phone",  "value": [],  "confidence": 0,  "summary": "Fiktive abgeschlossene Recherche ohne verwendbare Telefonnummer.",  "sources": []}

Eine Quelle zur Identität der Person belegt nicht automatisch eine Telefonnummer. Fehlt ein beobachteter Nummerntyp, lasse Mobilnummer oder Durchwahl unbekannt. Eine Telefonnummer belegt außerdem keine Anruferlaubnis.

Geht die Startantwort verloren, stelle sie mit identischem Payload und demselben idempotencyKey wieder her. Eine geänderte Frage, neue Eingabe oder ein bewusst neuer Batch braucht einen neuen Schlüssel. Erzeuge keinen neuen Schlüssel, um eine unklare bezahlte Einreichung wiederherzustellen. Trenne Rechercheabschluss und Credit-Abrechnung: Auch ohne gelieferten Kontakt können Recherchekosten anfallen. Siehe Activity und Credits.

Kontakte in einem vorhandenen Sheet anreichern

Nutze sheets_enrich für eine bestehende E-Mail- oder Telefonspalte oder erstelle sie mit der Anfrage. Übergib die folgenden Argumente für alle vorhandenen Zeilen nur, wenn das dem gewünschten Umfang entspricht. Ersetze vor der kostenpflichtigen Ausführung die Sheet-UUID und wähle deinen eigenen stabilen Wiederholungsschlüssel:

json
{  "idempotencyKey": "sheet-email-pilot-001",  "sheetId": "SHEET_UUID",  "column": {    "name": "Geschäftliche E-Mail",    "question": "Finde die geschäftliche E-Mail-Adresse dieser Person mit ihrem vorhandenen Profil- und Firmenkontext.",    "type": "email"  }}

Nutze column: {"columnId":"COLUMN_UUID"} für eine konfigurierte Spalte. Übergib rowIds für eine Teilmenge; ohne Auswahl werden alle vorhandenen Zeilen einbezogen, bis zu 10.000. Gefüllte und aktive Zellen werden übersprungen. Nutze für eine Telefonspalte eine separate Anfrage mit eigenem Wiederholungsschlüssel. Lies sheets_get_enrichment_status und anschließend sheets_query für gespeicherte Werte und Belege. Die entsprechende HTTP-Operation heißt sheets.enrich.

Fehlende Ergebnisse verstehen

Kein Ergebnis bedeutet, dass keine verwendbare Antwort zurückgegeben wurde. Das unterscheidet sich von einem Ausführungsfehler. Eine Quelle zur Identität kann vorhanden sein, obwohl die gesuchte Nummer oder E-Mail nicht gefunden wurde; diese Quelle belegt für sich keine Kontaktdaten.

E-Mail- und Telefonwerte werden als Arrays geliefert. Bewahre die zurückgegebenen Werte auf und prüfe Status und Erklärung vor der Verwendung. Ein leeres Array ist kein gelieferter Kontakt.

Kosten verstehen

Die Recherche zur Identität und die Kontaktsuche können getrennte Kostenbestandteile sein. „Kein Kontakt gefunden“ bedeutet daher nicht zwingend, dass die gesamte Recherche kostenlos war. Prüfe abgerechnete Credits in Activity und die aktuelle Katalogschätzung, statt für jeden Ablauf einen festen Preis anzunehmen. Siehe Credits.