Konzept · Machbarkeit
Wie sich der heute manuelle Prozess (Anleitung „Doppelte Deals in Pipedrive zusammenführen") über die Pipedrive-API automatisieren lässt – inklusive Auswahllogik, Schutzmechanismen und offener Punkte.
PUT /v1/deals/{id}/merge). Damit lässt sich exakt der manuelle Ablauf nachbauen:
Kandidaten finden → den zu behaltenden Deal bestimmen → die Dubletten hineinmergen → Archiv nachziehen.
Wichtig ist ein Vorschau-/Testlauf-Modus, weil ein Merge in Pipedrive nicht rückgängig gemacht werden kann.Laut Anleitung wird pro Person am Ende nur ein Deal behalten. Ein gespeicherter Filter „Zusammenführen" grenzt die Kandidaten ein, dann wird jeder Fall von Hand über E-Mail gesucht und zusammengeführt. Die im Filter hinterlegten Bedingungen:
| Bedingung | Wert |
|---|---|
| Pipeline | ist WhatsApp |
| Arbeitssuchend gemeldet | ist Ja |
| IHK Sachkundeprüfung §34a | ist Nein |
| Status | ist Offen |
| Deal erstellt | ist diesen Monat |
| Kontakt · Offene Deals | > 1 |
Der manuelle Aufwand skaliert schlecht: Eine Person kann 2 bis 50 offene Deals haben, und der Vorgang muss je Person mehrfach wiederholt werden. Genau das übernimmt die Automation.
| Zweck | Endpoint |
|---|---|
| Kandidaten laden (Filter nachbilden) | GET /v1/deals?filter_id=… oder GET /v2/deals?status=open&pipeline_id=… + Custom-Feld-Bedingungen |
| Personen / E-Mail je Deal | GET /v1/persons/{id} (E-Mail = eindeutiger Schlüssel) |
| Zwei Deals zusammenführen | PUT /v1/deals/{id}/merge · Body { "merge_with_id": <behalten> } |
| Archiv nachziehen | Deal-Status/is_archived prüfen und ggf. dearchivieren |
Beim Merge wird der Deal {id} in merge_with_id hineingeführt; merge_with_id
ist also der Gewinner. Aktivitäten, Notizen und Historie der Dublette wandern mit.
# Pseudocode – Kern der Automation kandidaten = lade_offene_deals(filter=ZUSAMMENFUEHREN) # API gruppen = gruppiere_nach(email_der_person) # eindeutiger Schlüssel for email, deals in gruppen: deals = [d for d in deals if d.status == "open"] # verlorene raus if len(deals) <= 1: continue gewinner = waehle_gewinner(deals) # Regel Abschnitt 4 dubletten = [d for d in deals if d.id != gewinner.id] for dub in dubletten: if DRY_RUN: report.add(email, behalten=gewinner.id, merge=dub.id) # nur Vorschau else: merge_deals(dub.id, merge_with_id=gewinner.id) # PUT …/merge (irreversibel!) log(email, behalten=gewinner.id, gemergt=dub.id) dearchiviere_wenn_noetig(gewinner.id)
Direkt aus der Anleitung übernommen und als eindeutige Priorität kodiert (erste zutreffende Regel gewinnt):
add_time).update_time).Hinweis aus der Anleitung: Partner wie Worklane / Ritter von Gral vermeiden Dubletten teils selbst – die Regel prüft trotzdem immer, welcher Deal der aktuellste/zugeordnete ist.
| Option | Passt, weil | Empfehlung |
|---|---|---|
| n8n (n8n.dba.rocks) | bereits vorhanden; visuell, mit Zeitplan & Logging | bevorzugt |
| Python-Skript + Zeitplan (z. B. GitHub Actions) | volle Kontrolle über Auswahl-Logik & Report | Alternative |
| Nur on-demand (manuell angestoßen) | maximale Kontrolle für den Start | für Phase 1 |
Taktung wie im Filter: „Deal erstellt = diesen Monat" – ein täglicher oder stündlicher Lauf hält die Dubletten laufend klein. Jeder Lauf erzeugt einen kurzen Report (wie viele Gruppen, wie viele Merges).
So bleibt der unwiderrufliche Schritt (der Merge) bis zuletzt unter menschlicher Kontrolle, während der aufwändige Teil (Suchen, Gruppieren, Regel anwenden) sofort automatisiert ist.