> ## Documentation Index
> Fetch the complete documentation index at: https://docs.deal-pipe.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Werbe-Leads per Webhook

> Leads aus Meta, Google, LinkedIn oder TikTok über Zapier, Make oder ein eigenes Tool als Anfrage empfangen.

> [!NOTE]
>
> Werbe-Leads benötigen das erweiterte CRM und eine Freischaltung durch Dealpipe. Nur Administratoren richten Verbindungen ein.

Jeder Lead, den Ihr Tool an Dealpipe sendet, wird sofort zur Anfrage unter **CRM → Leads**. Dealpipe legt den Kontakt an oder verknüpft ihn über die E-Mail-Adresse mit einem bestehenden Kontakt. Zuweisungsregeln, Reaktionszeit-Hinweise und automatische Antworten laufen wie bei jeder anderen Anfrage.

## Verbindung anlegen

1. Öffnen Sie **Einstellungen → CRM → Werbe-Leads**.
2. Wählen Sie **Verbindung hinzufügen → Webhook** und geben Sie einen Namen ein, zum Beispiel „Zapier Meta-Kampagnen“.
3. Kopieren Sie die **URL** und das **Secret**. Das Secret wird nur einmal angezeigt.

Die Liste zeigt für jede Verbindung den letzten empfangenen Lead und den letzten Fehler. Über das Menü der Zeile können Sie die Verbindung umbenennen, das Secret erneuern oder sie löschen. Nach dem Erneuern funktioniert das alte Secret sofort nicht mehr. Bereits empfangene Anfragen bleiben beim Löschen erhalten.

## Google-Ads-Lead-Formulare

Google Ads sendet jeden Lead aus einem Lead-Formular direkt an Dealpipe, ohne Zapier oder Make.

1. Öffnen Sie **Einstellungen → CRM → Werbe-Leads** und wählen Sie **Verbindung hinzufügen → Google-Lead-Formulare**.
2. Kopieren Sie die **Webhook-URL** und den **Webhook-Schlüssel**. Der Schlüssel wird nur einmal angezeigt.
3. Öffnen Sie in Google Ads das Lead-Formular. Unter **Leads aus Google Ads exportieren → Andere Optionen zur Datenintegration → Webhook-Integration (optional)** tragen Sie URL und Schlüssel ein.
4. Wählen Sie **Testdaten senden**. Dealpipe legt eine Testanfrage ohne Kontakt an; die Verbindung zeigt Zeit und Namen des letzten Testleads. Danach **Speichern**.

Echte Leads werden zur Anfrage mit Kampagne, Formular und Google-Klick-ID. Derselbe Lead wird nie doppelt angelegt, auch wenn Google ihn erneut sendet. Nach dem Erneuern des Schlüssels tragen Sie den neuen Schlüssel in jedem Lead-Formular ein.

Leads, die Google nicht zustellen konnte, während die Verbindung gestört war, laden Sie in Google Ads als CSV herunter. Die CSV enthält die letzten 30 Tage.

## Verbindung pausieren

Im Menü der Verbindung wählen Sie **Pausieren**. Eine pausierte Verbindung lehnt jeden Lead mit `403` ab und speichert nichts. Mit **Fortsetzen** nimmt sie wieder Leads an. Leads aus der Pause stellt Google nicht erneut zu; laden Sie sie als CSV herunter.

## Anfrage senden

Senden Sie pro Lead eine `POST`-Anfrage mit einem JSON-Objekt an die URL der Verbindung. Das Secret steht im Header `Authorization` als Bearer-Token. Alternativ akzeptiert Dealpipe den Header `X-Dealpipe-Secret`.

```bash theme={null}
curl -X POST "https://app.deal-pipe.de/api/webhooks/leads/<VERBINDUNGS-ID>" \
  -H "Authorization: Bearer <SECRET>" \
  -H "Content-Type: application/json" \
  -d '{
    "lead_id": "meta-1234567890",
    "first_name": "Anna",
    "last_name": "Schmidt",
    "email": "anna.schmidt@example.com",
    "phone": "+49 170 1234567",
    "postal_code": "20095",
    "city": "Hamburg",
    "message": "Bitte um Rückruf",
    "campaign": "Neubau Hafencity Herbst",
    "ad_set": "Kapitalanleger 30-55",
    "ad": "Video Penthouse",
    "answers": { "Budget": "400.000 bis 600.000 €", "Finanzierung geklärt": "Ja" }
  }'
```

### Felder

| Feld | Pflicht | Bedeutung |
| - | - | - |
| `lead_id` | Ja | Eindeutige ID des Leads auf der Werbeplattform. Dealpipe legt pro ID nur eine Anfrage an. |
| `email` | Nein | E-Mail-Adresse. Darüber wird ein bestehender Kontakt gefunden. |
| `phone` | Nein | Telefonnummer. |
| `name` | Nein | Vollständiger Name. Alternativ `first_name` und `last_name`. |
| `first_name`, `last_name` | Nein | Vor- und Nachname, wenn `name` fehlt. |
| `postal_code`, `city` | Nein | Postleitzahl und Ort. Zuweisungsregeln können nach Postleitzahl verteilen. |
| `message` | Nein | Freitext des Leads. |
| `campaign`, `ad_set`, `ad` | Nein | Kampagne, Anzeigengruppe und Anzeige. Werden beim neuen Kontakt als Herkunft gespeichert. |
| `utm_source`, `utm_medium`, `utm_content` | Nein | UTM-Werte. Werden beim neuen Kontakt als Herkunft gespeichert. |
| `is_test` | Nein | `true` markiert einen Test-Lead. Er wird als Anfrage gespeichert, legt aber keinen Kontakt an und löst weder Zuweisung noch Reaktionszeit-Hinweis noch automatische Antwort aus. |
| `answers` | Nein | Weitere Formularantworten als Objekt aus Frage und Antwort. Sie erscheinen in der Nachricht der Anfrage. |

Leere Werte (`""` oder `null`) gelten als nicht angegeben. Zahlen in Textfeldern werden als Text übernommen. Andere Felder ignoriert Dealpipe. Herkunftsangaben werden nur bei einem neu angelegten Kontakt gespeichert; bei bestehenden Kontakten bleibt die erste Herkunft erhalten.

### Antworten

| Status | Bedeutung |
| - | - |
| `200` | Gespeichert. Die Antwort enthält `id` (die Anfrage) und `duplicate`. `duplicate: true` heißt: Diese `lead_id` war schon da, es wurde nichts Neues angelegt. |
| `400` | Ungültige Daten. `error.field` nennt das Feld, `error.message` den Grund. Der Fehler erscheint auch in den Einstellungen. |
| `401` | Unbekannte Verbindung oder falsches Secret. Es wurde nichts gespeichert. |
| `403` | Die Verbindung ist pausiert oder Werbe-Leads sind für Ihre Organisation nicht aktiv. `error.code` nennt den Grund. Wiederholen hilft nicht. |
| `413` | Die Anfrage ist größer als 64 KB. |
| `429` | Mehr als 120 Leads pro Minute an diese Verbindung. Warten Sie die Sekunden aus dem Header `Retry-After` ab. |

Senden Sie denselben Lead bei einem Fehler ruhig erneut. Dank `lead_id` entsteht keine doppelte Anfrage.

## Beispiel: Zapier

1. Wählen Sie als Auslöser Ihre Werbeplattform, zum Beispiel **Facebook Lead Ads → New Lead**.

2. Fügen Sie die Aktion **Webhooks by Zapier → Custom Request** hinzu.

3. Setzen Sie **Method** auf `POST` und **URL** auf die URL der Verbindung.

4. Tragen Sie unter **Data** das JSON ein und setzen Sie die Felder des Auslösers ein, zum Beispiel:

   ```json theme={null}
   {
     "lead_id": "{{Lead ID}}",
     "email": "{{Email}}",
     "name": "{{Full Name}}",
     "phone": "{{Phone Number}}",
     "campaign": "{{Campaign Name}}",
     "ad_set": "{{Ad Set Name}}",
     "ad": "{{Ad Name}}"
   }
   ```

5. Tragen Sie unter **Headers** `Authorization` mit dem Wert `Bearer <SECRET>` und `Content-Type` mit dem Wert `application/json` ein.

6. Testen Sie den Schritt. Der Lead erscheint unter **CRM → Leads**.

## Beispiel: Make

1. Wählen Sie als Auslöser Ihre Werbeplattform, zum Beispiel **Facebook Lead Ads → Watch Leads**.
2. Fügen Sie das Modul **HTTP → Make a request** hinzu.
3. Setzen Sie **URL** auf die URL der Verbindung und **Method** auf `POST`.
4. Fügen Sie unter **Headers** den Header `Authorization` mit dem Wert `Bearer <SECRET>` hinzu.
5. Wählen Sie als **Body type** `Raw` und als **Content type** `JSON (application/json)`.
6. Tragen Sie unter **Request content** das JSON ein und setzen Sie die Felder des Auslösers ein, wie im Zapier-Beispiel.
7. Führen Sie das Szenario einmal aus. Der Lead erscheint unter **CRM → Leads**.

> [!TIP]
>
> Zum Testen senden Sie `"is_test": true`. Die Anfrage erscheint unter **CRM → Leads**, ohne Kontakt, Zuweisung und automatische Antwort.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.