← GTM Recipes

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

messe-kontakte.csv0 Credits
E-Mail im ExportBefund
Tippfehler
lena.graf@gmial.com → gmail.com
Check-IDs ansehenemail_typo

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

Aufruf · curl · n8n · Claude Code
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.

Eingang · 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"
}
Ausgang · Protokoll
{
  "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."
}
Korrigiert · vom Agenten übernommen
{
  "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.

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

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

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

  4. 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) ↗
Agentenauftrag

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.

Eigene KI verbinden