CSV · Export → Sequenzer · CRM
Kontaktdaten prüfen und korrigieren lassen.
Dein Agent liest die CSV oder den Export und schickt die Zeilen als JSON an ListPlus. Über 100 Checks finden Domain-Tippfehler, Wegwerf- und private Adressen, Adressen ohne Domain, Platzhalter, überflüssige Leerzeichen, Dubletten und Länder in drei Schreibweisen. Zurück kommt ein Protokoll je Zeile – Feld, Befund, Korrekturvorschlag. Dein Agent übernimmt die Vorschläge und gibt dir die korrigierten Zeilen zurück; was sich nicht korrigieren lässt, bleibt offen markiert.
Ein Aufruf aus Claude Code, n8n oder ChatGPT
lena.graf@gmial.com → gmail.comCheck-IDs ansehen
email_typoInteraktives Beispiel · fiktive Kontakte
Im Video
Eingang und Ausgang
Was reingeht, was zurückkommt.
Acht Zeilen, jede mit einem eingebauten Fehler: Name in Großbuchstaben und Tippfehler in der Domain, Firma klein geschrieben und das Land in drei Schreibweisen, eine Wegwerf-Adresse, eine private Gmail-Adresse, ein doppeltes Leerzeichen, „(Open to Work)“ im Nachnamen, eine Adresse ohne Domain, „n/a“ als Jobtitel, eine Person doppelt. Rechts die echte Antwort von check_records: je Zeile Feld, Befund, Vorschlag; darunter die Zusammenfassung je Check. Check-IDs sind stabil, die Befundtexte kommen heute auf Englisch.
curl -X POST https://listplus.ai/a/v1/check_records \ -H "Authorization: Bearer lpk_…" \ -H "Content-Type: application/json" \ --data @records.json
Ohne Schlüssel bis 25 Zeilen (dann ohne Authorization-Header), mit Schlüssel bis 1.000. Aus Claude Code oder ChatGPT ist derselbe Aufruf das MCP-Werkzeug check_records; in n8n ein HTTP-Knoten.
records.json{
"records": [
{
"first_name": "ANNA",
"last_name": "KELLER",
"company_name": "Nordwerk GmbH",
"job_title": "Head of Sales",
"email": "anna.keller@gmial.com",
"country": "DE"
},
{
"first_name": "Ben",
"last_name": "Fischer",
"company_name": "nordwerk gmbh",
"job_title": "CFO",
"email": "ben.fischer@nordwerk-muster.de",
"country": "Deutschland"
},
{
"first_name": "Tom",
"last_name": "Lenz",
"company_name": "Seeblick Reisen",
"job_title": "Marketing",
"email": "tom@mailinator.com",
"country": "Germany"
},
{
"first_name": "Lena",
"last_name": "Graf",
"company_name": "Kontur",
"job_title": "VP Operations",
"email": "lena.graf@gmail.com",
"country": "DE"
},
{
"first_name": "Noah",
"last_name": "von Wolf",
"company_name": "Nordlicht",
"job_title": "CEO",
"email": "noah.wolf@nordlicht-muster.de",
"country": "DE"
},
{
"first_name": "Ava",
"last_name": "Stein (Open to Work)",
"company_name": "HelioWorks",
"job_title": "n/a",
"email": "ava.stein@",
"country": "DE"
},
{
"first_name": "Mia",
"last_name": "Winter",
"company_name": "HelioWorks",
"job_title": "Head of People",
"email": "mia.winter@helioworks-muster.de",
"country": "DE"
},
{
"first_name": "Mia",
"last_name": "Winter",
"company_name": "HelioWorks",
"job_title": "Head of People",
"email": "mia.winter@helioworks-muster.de",
"country": "DE"
}
],
"categories": [
"name",
"email",
"company",
"job_title",
"address",
"duplicates",
"completeness"
],
"language": "de"
}{
"ok": true,
"action": "check_records",
"fields": {
"first_name": "first_name",
"last_name": "last_name",
"company_name": "company_name",
"job_title": "job_title",
"email": "email",
"country": "country"
},
"score": 8.5,
"records": 8,
"findings_total": 17,
"by_record": [
{
"index": 0,
"findings": [
{
"check": "name_all_caps",
"name": "Name in ALL CAPS",
"category": "name",
"severity": "warning",
"field": "first_name",
"value": "ANNA",
"message": "First name is in ALL CAPS",
"fix": "Anna"
},
{
"check": "name_all_caps",
"name": "Name in ALL CAPS",
"category": "name",
"severity": "warning",
"field": "last_name",
"value": "KELLER",
"message": "Last name is in ALL CAPS",
"fix": "Keller"
},
{
"check": "email_typo",
"name": "Email Domain Typo",
"category": "email",
"severity": "warning",
"field": "email",
"value": "anna.keller@gmial.com",
"message": "Possible domain typo detected",
"fix": "anna.keller@gmail.com"
}
]
},
{
"index": 1,
"findings": [
{
"check": "company_all_lowercase",
"name": "Company in all lowercase",
"category": "company",
"severity": "warning",
"field": "company_name",
"value": "nordwerk gmbh",
"message": "Company name is in all lowercase",
"fix": "Nordwerk GmbH"
},
{
"check": "address_country_inconsistent",
"name": "Country Format Inconsistency",
"category": "address",
"severity": "warning",
"field": "country",
"value": "Deutschland",
"message": "Inconsistent country format (\"Deutschland\" vs \"DE\")",
"fix": "DE"
}
]
},
{
"index": 2,
"findings": [
{
"check": "email_disposable",
"name": "Disposable Email Domain",
"category": "email",
"severity": "critical",
"field": "email",
"value": "tom@mailinator.com",
"message": "Disposable/temporary email domain detected"
},
{
"check": "address_country_inconsistent",
"name": "Country Format Inconsistency",
"category": "address",
"severity": "warning",
"field": "country",
"value": "Germany",
"message": "Inconsistent country format (\"Germany\" vs \"DE\")",
"fix": "DE"
}
]
},
{
"index": 3,
"findings": [
{
"check": "email_personal",
"name": "Personal Email Domain",
"category": "email",
"severity": "info",
"field": "email",
"value": "lena.graf@gmail.com",
"message": "Personal email domain detected"
}
]
},
{
"index": 4,
"findings": [
{
"check": "name_whitespace",
"name": "Extra Spaces in Name",
"category": "name",
"severity": "info",
"field": "last_name",
"value": "von Wolf",
"message": "Last name has extra spaces",
"fix": "von Wolf"
}
]
},
{
"index": 5,
"findings": [
{
"check": "name_linkedin_noise",
"name": "LinkedIn Status Text in Name",
"category": "name",
"severity": "warning",
"field": "last_name",
"value": "Stein (Open to Work)",
"message": "Last name contains a LinkedIn status text",
"fix": "Stein"
},
{
"check": "name_annotation",
"name": "Remark in Name",
"category": "name",
"severity": "info",
"field": "last_name",
"value": "Stein (Open to Work)",
"message": "Name contains a remark in brackets or quotes",
"fix": "Stein"
},
{
"check": "email_format",
"name": "Invalid Email Format",
"category": "email",
"severity": "critical",
"field": "email",
"value": "ava.stein@",
"message": "Email missing top-level domain"
},
{
"check": "jobtitle_placeholder",
"name": "Placeholder Job Title",
"category": "job_title",
"severity": "warning",
"field": "job_title",
"value": "n/a",
"message": "Job title is a placeholder value"
}
]
},
{
"index": 6,
"findings": [
{
"check": "duplicate_email",
"name": "Duplicate Email",
"category": "duplicates",
"severity": "critical",
"field": "email",
"value": "mia.winter@helioworks-muster.de",
"message": "Duplicate email (2 occurrences)"
},
{
"check": "duplicate_name_company",
"name": "Duplicate Name + Company",
"category": "duplicates",
"severity": "warning",
"field": "first_name",
"message": "Duplicate name + company (2 occurrences)"
}
]
},
{
"index": 7,
"findings": [
{
"check": "duplicate_email",
"name": "Duplicate Email",
"category": "duplicates",
"severity": "critical",
"field": "email",
"value": "mia.winter@helioworks-muster.de",
"message": "Duplicate email (2 occurrences)"
},
{
"check": "duplicate_name_company",
"name": "Duplicate Name + Company",
"category": "duplicates",
"severity": "warning",
"field": "first_name",
"message": "Duplicate name + company (2 occurrences)"
}
]
}
],
"summary": [
{
"check": "address_country_inconsistent",
"name": "Country Format Inconsistency",
"severity": "warning",
"records": 2
},
{
"check": "duplicate_email",
"name": "Duplicate Email",
"severity": "critical",
"records": 2
},
{
"check": "duplicate_name_company",
"name": "Duplicate Name + Company",
"severity": "warning",
"records": 2
},
{
"check": "name_all_caps",
"name": "Name in ALL CAPS",
"severity": "warning",
"records": 1
},
{
"check": "email_typo",
"name": "Email Domain Typo",
"severity": "warning",
"records": 1
},
{
"check": "name_whitespace",
"name": "Extra Spaces in Name",
"severity": "info",
"records": 1
},
{
"check": "name_linkedin_noise",
"name": "LinkedIn Status Text in Name",
"severity": "warning",
"records": 1
},
{
"check": "name_annotation",
"name": "Remark in Name",
"severity": "info",
"records": 1
},
{
"check": "email_format",
"name": "Invalid Email Format",
"severity": "critical",
"records": 1
},
{
"check": "jobtitle_placeholder",
"name": "Placeholder Job Title",
"severity": "warning",
"records": 1
},
{
"check": "email_disposable",
"name": "Disposable Email Domain",
"severity": "critical",
"records": 1
},
{
"check": "email_personal",
"name": "Personal Email Domain",
"severity": "info",
"records": 1
},
{
"check": "company_all_lowercase",
"name": "Company in all lowercase",
"severity": "warning",
"records": 1
}
],
"options": "[…]",
"tell_your_user": "8 Datensätze geprüft, 17 Befunde. Die wichtigsten: Duplicate Email (2), Invalid Email Format (1), Disposable Email Domain (1). Nichts wurde geändert."
}{
"records": [
{
"first_name": "Anna",
"last_name": "Keller",
"company_name": "Nordwerk GmbH",
"job_title": "Head of Sales",
"email": "anna.keller@gmail.com",
"country": "DE"
},
{
"first_name": "Ben",
"last_name": "Fischer",
"company_name": "Nordwerk GmbH",
"job_title": "CFO",
"email": "ben.fischer@nordwerk-muster.de",
"country": "DE"
},
{
"first_name": "Tom",
"last_name": "Lenz",
"company_name": "Seeblick Reisen",
"job_title": "Marketing",
"email": "tom@mailinator.com",
"country": "DE"
},
{
"first_name": "Lena",
"last_name": "Graf",
"company_name": "Kontur",
"job_title": "VP Operations",
"email": "lena.graf@gmail.com",
"country": "DE"
},
{
"first_name": "Noah",
"last_name": "von Wolf",
"company_name": "Nordlicht",
"job_title": "CEO",
"email": "noah.wolf@nordlicht-muster.de",
"country": "DE"
},
{
"first_name": "Ava",
"last_name": "Stein",
"company_name": "HelioWorks",
"job_title": "n/a",
"email": "ava.stein@",
"country": "DE"
},
{
"first_name": "Mia",
"last_name": "Winter",
"company_name": "HelioWorks",
"job_title": "Head of People",
"email": "mia.winter@helioworks-muster.de",
"country": "DE"
}
],
"left_out": [
{
"index": 7,
"duplicate_of": 6
}
],
"open": [
{
"index": 2,
"check": "email_disposable",
"field": "email"
},
{
"index": 3,
"check": "email_personal",
"field": "email"
},
{
"index": 5,
"check": "email_format",
"field": "email"
},
{
"index": 5,
"check": "jobtitle_placeholder",
"field": "job_title"
}
]
}Mechanisch, ohne eigenes Urteil: jeder Vorschlag in sein Feld, die zweite Zeile einer Dublette weggelassen. Wegwerf- und private Adresse, die Adresse ohne Domain und „n/a“ haben keinen Vorschlag – sie bleiben unter open, die Entscheidung liegt bei dir.
Einrichtung
So baust du den Ablauf nach.
Zeilen aus deinem Export als JSON-Objekte – Name, Firma, E-Mail, Land. Die Datei bleibt bei dir: Der Agent liest sie und schickt die Zeilen; derselbe Aufruf geht aus Claude Code, ChatGPT, n8n oder Cursor. Eine ListPlus-Liste ist dafür nicht nötig.
Was kostet der Lauf?
0 Credits für die Standardchecks – pro Aufruf bis zu 25 Zeilen ohne Schlüssel oder 1.000 mit angemeldeter Verbindung. Korrekturen in einer Liste (fix_list) kosten nichts. Nur KI-Checks und die Zustellbarkeitsprüfung werden berechnet.
- Dein Agent per Aufruf
Zeilen übergeben
Lass deinen Agenten die Datei einlesen und Name, Firma und E-Mail als JSON an check_records schicken. In n8n ist das ein HTTP-Knoten, in Claude Code oder ChatGPT ein Satz.
- ListPlus per Aufruf
Protokoll lesen
Je Zeile: Feld, Befund, Check-ID und – wo möglich – ein Korrekturvorschlag. gmial.com → gmail.com, „DE“ und „Deutschland“ als zwei Schreibweisen eines Landes, „ACME GMBH“ als Firmenname in Großbuchstaben, zwei Zeilen für dieselbe Person.
- Dein Agent per Aufruf
Korrigieren lassen
Ohne Liste übernimmt der Agent die Vorschläge in deine Datei: Großschreibung, Domain-Tippfehler, Leerzeichen, Firmennamen, Länder auf eine Schreibweise. In einer Liste macht es fix_list: ein Check auf einmal, Werte bereinigen (Leerzeichen, Groß-/Kleinschreibung, Platzhalter) oder Dubletten zusammenführen – zusammengeführte Zeilen werden ausgeblendet, nie gelöscht.
- Dein Team manuell in ListPlus
Entscheiden, was weitergeht
Wegwerf-Adressen zurückhalten, Team-Postfächer (office@) getrennt lassen – hinter einem stecken oft zwei Personen. Erst dann in den Sequenzer oder ins CRM.
Mit deinem Agenten
Diesen Auftrag kannst du kopieren.
Für die Standardprüfung braucht es keine ListPlus-Liste. Große Exporte in Pakete teilen; Dubletten über Paketgrenzen brauchen eine Liste.
Derselbe Aufruf aus Claude Code, ChatGPT, Cursor oder einem n8n-HTTP-Knoten – MCP und REST bieten dieselben Werkzeuge.
Agenten-Anleitung (.md) ↗Prüfe die Kontakte in meiner CSV mit ListPlus (check_records, Standardchecks für E-Mail, Namen, Länder und Dubletten). Gib mir das Protokoll je Zeile: Feld, Befund, Vorschlag. Übernimm die Vorschläge für E-Mail-Tippfehler, Großschreibung und Ländernamen in die Datei, halte Wegwerf-Adressen zurück und lass Personen mit gemeinsamem Team-Postfach getrennt. Sag mir am Ende, was du geändert hast.
Werkzeuge und Beispielaufruf
check_records · add_records · fix_list
POST /a/v1/check_records
{
"records": [
{
"first_name": "Lena",
"last_name": "Graf",
"email": "lena.graf@gmial.com"
},
{
"first_name": "Anna",
"last_name": "Keller",
"email": "office@nordwerk-muster.de"
},
{
"first_name": "Ben",
"last_name": "Fischer",
"email": "office@nordwerk-muster.de"
},
{
"first_name": "Tom",
"last_name": "Lenz",
"email": "tom@mailinator.com"
}
],
"categories": [
"email",
"duplicates"
]
}Mit eigenen Daten starten
Länder bekommen die Schreibweise, die im Aufruf am häufigsten vorkommt – ein festes Zielformat (etwa ISO-Code) lässt sich noch nicht vorgeben, und zwei Pakete können verschiedene Mehrheiten haben; in einer Liste gilt die ganze Liste. Ein plausibler Vorschlag bestätigt keine Zustellbarkeit. Der Check versendet nichts und speichert nichts.