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

https://listplus.ai/de/gtm-workflows/kontaktdaten-pruefen-und-korrigieren

## Eingabe und Verbindungen

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.

Für die Standardprüfung braucht es keine ListPlus-Liste. Große Exporte in Pakete teilen; Dubletten über Paketgrenzen brauchen eine Liste.

## Schritte

1. **Zeilen übergeben** (Dein Agent · per Aufruf). 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. **Protokoll lesen** (ListPlus · per Aufruf). 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. **Korrigieren lassen** (Dein Agent · per Aufruf). 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. **Entscheiden, was weitergeht** (Dein Team · manuell in ListPlus). Wegwerf-Adressen zurückhalten, Team-Postfächer (office@) getrennt lassen – hinter einem stecken oft zwei Personen. Erst dann in den Sequenzer oder ins CRM.

## Erwartetes Ergebnis im Beispiel

Lena hat einen Domain-Tippfehler. Nach der Korrektur bleibt der Hinweis auf ein privates Postfach. Anna und Ben teilen ein Team-Postfach. Toms Adresse ist eine Wegwerf-Adresse.

## Kosten und Grenzen

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.

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.

## 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

`check_records`, `add_records`, `fix_list`

MCP: https://listplus.ai/mcp
REST: https://listplus.ai/a/v1/{action}
API: https://listplus.ai/a

## Aufruf

```sh
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.

## Eingang

```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)

```json
{
  "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)

Jeder Vorschlag in sein Feld geschrieben, die zweite Zeile einer Dublette weggelassen; Befunde ohne Vorschlag bleiben offen.

```json
{
  "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"
    }
  ]
}
```

## Beispielaufrufe

```text
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"
  ]
}
```
