Integrationen
Magento (Adobe Commerce) anbinden
Für Magento gibt es noch keine App, aber die Anbindung besteht aus zwei Teilen, die du sofort umsetzen kannst – Tracking-Skript im Magento-Backend einfügen und abgeschlossene Bestellungen an die Conversion API senden. Inklusive der CSP-Freigabe, die Magento 2.4.7 braucht, und je einem Weg mit und ohne Entwickler.
Für Magento gibt es bei LeadJourney noch keine native App. Vollständige Attribution bekommst du aus einem Magento-Shop trotzdem – du setzt die zwei Teile nur selbst zusammen, und beide sind kurz.
Kurz gesagt
- Tracking-Skript im Magento-Backend einfügen, damit es auf jeder Seite lädt.
- Ab Magento 2.4.7 die Tracking-Domain in der Content Security Policy freigeben, sonst wird das Skript genau dort blockiert, wo es zählt – auf den Zahlungsseiten.
- Bei einer Bestellung diese an die Conversion API von LeadJourney senden, mit Bestellwert und E-Mail-Adresse.
Warum die Bestellung vom Server kommen muss
Das Tracking-Skript kann die Click-ID im Browser lesen, aber keinen Kauf melden: Dafür braucht es dein Postback Secret, und das darf nie in Browser-Code stehen. Die abgeschlossene Bestellung meldet deshalb Magento serverseitig. Das ist der eine Teil, der nicht Copy-and-paste ist.
Bevor du startest
- Eine Tracking-Domain und dein Tracking-Skript-Snippet aus Einstellungen → Tracking.
- Deine Webhook-URL und dein Postback Secret aus Einstellungen → Events → Conversion API.
- Einen Conversion-Typ für abgeschlossene Bestellungen.
WonClientgibt es in jedem Workspace – siehe Events & Events Manager. - Backend-Zugang zu Magento und für den Bestell-Teil entweder eine Entwicklung oder ein Automatisierungstool wie Zapier oder Make.
Schritt 1: Tracking-Skript einfügen
In die Design-Konfiguration einfügen
Gehe im Magento-Backend auf Content → Design → Configuration. Wähle den Geltungsbereich und klicke auf Edit – die Zeile Default deckt den ganzen Shop ab, eine einzelne Store View nur diese.
Klappe HTML Head auf und füge dein LeadJourney-Snippet in Scripts and Style Sheets ein. Speichern.
Cache leeren
Gehe auf System → Cache Management und klicke auf Flush Magento Cache. Bis dahin liefert der
Shop weiter den alten <head> aus.
Prüfen, ob es läuft
Öffne deinen Shop, dann die Browser-Konsole, und führe aus:
await window.lj.getClickId();
window.lj.getTrackingStatus();Du solltest eine Click-ID und den Status tracked bekommen. Mach dasselbe im Checkout – dort
greift die Content Security Policy, und um diese Seite geht es im nächsten Schritt.
Schritt 2: Das Skript durch die Content Security Policy lassen
Magento bringt eine Content Security Policy mit. Ab Magento 2.4.7 läuft sie auf den Zahlungsseiten im Restrict-Modus (überall sonst nur Report-only). Ein externes Skript, das nicht auf der Freigabeliste steht, wird dort schlicht nicht ausgeführt. Vor 2.4.7 ist alles Report-only, das Skript läuft also und du siehst nur Warnungen in der Konsole.
Gib deine Tracking-Domain in einer csp_whitelist.xml im Ordner etc/ eines Moduls frei:
<?xml version="1.0"?>
<csp_whitelist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Csp:etc/csp_whitelist.xsd">
<policies>
<policy id="script-src">
<values>
<value id="leadjourney" type="host">https://track.deinedomain.de</value>
</values>
</policy>
<policy id="connect-src">
<values>
<value id="leadjourney" type="host">https://track.deinedomain.de</value>
</values>
</policy>
</policies>
</csp_whitelist>Ersetze track.deinedomain.de durch deine eigene Tracking-Domain. Beide Einträge sind nötig:
script-src lässt das Skript laden, connect-src lässt es den Besuch melden.
Cookie Restriction Mode
Ist Stores → Configuration → General → Web → Default Cookie Settings → Cookie Restriction Mode aktiv, setzt Magento Cookies erst nach Zustimmung. Die Click-ID liegt in einem Cookie – bis zur Zustimmung gibt es also nichts, was die Bestellung mitnehmen könnte. Das ist eine bewusste Datenschutz-Einstellung; sie begrenzt nur, wie viele Bestellungen exakt zugeordnet werden können.
Schritt 3: Die Bestellung an LeadJourney senden
Wähle den Weg, der zu deiner Situation passt. Sie unterscheiden sich in einem Punkt: ob die Bestellung die Click-ID mitbringt.
| Mit Entwicklung | Ohne Code | |
|---|---|---|
| Wie | Ein kleines Magento-Modul | Zapier oder Make |
| Attribution | Click-ID – exakter Klick, Kampagne, Ad Set und Anzeige | E-Mail – Zuordnung zu einem bekannten Besucher |
| Aufwand | Ein paar Stunden für eine Magento-Entwicklung | Ein Nachmittag, ohne Code |
| Passt, wenn | Du dich auf die Attribution verlassen willst | Du diese Woche Ergebnisse brauchst |
Warum E-Mail bei einem Shop halbwegs gut funktioniert
Im E-Commerce passiert der Kauf meist in derselben Sitzung wie der Klick, und die E-Mail wird im Checkout immer erfasst – LeadJourney kann die Bestellung also oft einem bereits bekannten Besucher zuordnen. Das ist ein Rückfall, keine Garantie: Eine Bestellung mit einer E-Mail, die LeadJourney nie gesehen hat, bleibt ohne Zuordnung. Fang ohne Code an, wenn es sein muss, aber plane das Modul ein.
Der Weg mit Entwicklung
Praktisch an Magento ist, dass es auf demselben Host läuft wie das Tracking-Skript. Die Click-ID liegt damit bereits im Request – keine Checkout-Anpassung, keine versteckten Felder, keine Theme-Änderung:
Click-ID aus dem Cookie lesen
Das Skript legt die Click-ID des Besuchers in einem Cookie namens clickId ab, 60 Tage gültig. Dein
Observer liest sie direkt aus dem Request:
// über Magento\Framework\Stdlib\CookieManagerInterface
$clickId = $this->cookieManager->getCookie('clickId');An die Bestellung hängen
Beobachte sales_order_place_after, das ausgelöst wird, sobald die Bestellung existiert. Baue
die Daten aus Bestellung und Cookie:
$payload = [
'type' => 'WonClient',
'email' => $order->getCustomerEmail(),
'revenue' => (float) $order->getBaseGrandTotal(),
'custom_fields' => ['order_id' => $order->getIncrementId()],
];
if ($clickId) {
$payload['click_id'] = $clickId;
}Nimm getBaseGrandTotal(), nicht getGrandTotal(): Der Basisbetrag steht in der Basiswährung
des Shops, ein Shop mit mehreren Währungen mischt sie so nicht in deinen Reports.
An LeadJourney senden
Schicke die Daten an deine Webhook-URL mit dem Header Authorization: Bearer <secret>. Nutze eine
Queue oder einen Cron-Consumer statt eines synchronen Aufrufs – ein langsamer Request darf den
Checkout nie aufhalten. Bei jeder Antwort außerhalb von 2xx erneut versuchen. Das vollständige
Request-Format steht in Webhooks an LeadJourney senden.
Nur bezahlte Bestellungen zählen?
sales_order_place_after löst beim Aufgeben der Bestellung aus – bei Vorkasse oder Rechnung also,
bevor Geld geflossen ist. Wenn du lieber bezahlte Bestellungen zählst, häng dich stattdessen an
deinen Zahlungs- oder Rechnungsschritt und sende das Event von dort.
Der Weg ohne Code
Die Magento-2.X-App von Zapier hat einen New Order-Trigger, Make hat ein Adobe-Commerce-Modul. Beide können ohne eine Zeile Code an LeadJourney senden:
Magento verbinden
Lege im Magento-Backend unter System → Extensions → Integrations eine Integration an, aktiviere sie und nutze die API-Zugangsdaten in Zapier oder Make. Gib ihr Lesezugriff auf die Verkaufsdaten.
Auf neue Bestellung auslösen
Nimm den Trigger New Order. Wenn du nur bezahlte Bestellungen willst, ergänze einen Filter auf den Bestellstatus.
An LeadJourney senden
Füge eine Webhooks-Aktion hinzu: POST an deine Webhook-URL, Content-Type: application/json,
Header Authorization: Bearer <dein Postback Secret>, und ein Body aus den Bestelldaten:
{
"type": "WonClient",
"email": "{{customer_email}}",
"revenue": 149.00,
"custom_fields": { "order_id": "{{increment_id}}" }
}Ordne revenue dem Basis-Gesamtbetrag der Bestellung zu und email der Kunden-E-Mail.
Das Secret liegt dann im Automatisierungstool
Zapier und Make speichern den Header für dich, das ist in Ordnung – sie laufen serverseitig. Füge das Postback Secret nirgends ein, was im Browser läuft, und committe es nicht in ein Repository.
Was du mit einer Bestellung sendest
| Feld | Wert aus Magento | Hinweis |
|---|---|---|
type | — | WonClient für eine abgeschlossene Bestellung. Exakte Schreibweise. |
email | Kunden-E-Mail | Immer mitsenden. Sie ist der Rückfall, wenn keine Click-ID da ist. |
click_id | Das Cookie clickId | Nur beim Weg mit Entwicklung. Feld weglassen, wenn leer. |
revenue | Basis-Gesamtbetrag | Eine Zahl, in deiner Workspace-Währung. |
custom_fields.order_id | Increment ID (z. B. 000000123) | Verbindet eine LeadJourney-Conversion zurück mit der Bestellung. |
order_id ist eines der E-Commerce-Custom-Fields, die
LeadJourney für Shops anlegt – neben product_name, product_id, variant und
product_category. Sende, was du hast, dann kannst du in den Reports danach gruppieren.
Warenkorb- und Checkout-Signale sind optional
Wenn die Bestellungen laufen, kannst du AddToCart und InitiateCheckout genauso ergänzen, aus
den passenden Magento-Events. Das sind Signale für den oberen Funnel und um zu sehen, wo er leckt
– die Hauptkennzahl bleiben die Kosten pro Bestellung. Siehe das
E-Commerce-Playbook.
Retouren und Gutschriften
Wird eine Gutschrift erstellt, sende dieselbe Conversion erneut mit negativem revenue, damit
sich dein ROAS korrigiert:
{
"type": "Refund",
"email": "[email protected]",
"revenue": -149.00,
"custom_fields": { "order_id": "000000123" }
}Lege das Event Refund vorher im Events Manager an.
Testen
Testbestellung über einen getrackten Link
Öffne den Shop über einen getrackten Link – eine Test-Anzeigen-URL oder eine aus dem UTM Builder –, akzeptiere Cookies, falls du ein Consent-Banner nutzt, und kaufe etwas. Ein Testprodukt zum kleinstmöglichen Preis reicht.
Prüfen, ob das Event ankam
Unter Einstellungen → Events steigt der Total des Events und Last Received aktualisiert sich. Im API-Postbacks-Log siehst du die exakt gesendeten Daten, den Statuscode und ob per Klick, E-Mail oder Telefon zugeordnet wurde.
Zuordnung bestätigen
Öffne CRM → Sales, suche die Bestellung und prüfe, ob eine Quelle angezeigt wird. Ist sie da, aber ohne Zuordnung, kam das Event ohne brauchbares Erkennungsmerkmal an – siehe Fehlerbehebung unten.
Fehlerbehebung
Das Skript läuft überall, nur nicht im Checkout
Das ist die Content Security Policy im Restrict-Modus auf den Zahlungsseiten. Trage deine
Tracking-Domain in der csp_whitelist.xml für script-src und connect-src ein, deploye und
leere den Cache. Die Browser-Konsole nennt den blockierten Host.
Bestellungen kommen an, sind aber nicht zugeordnet
Das Event erreichte LeadJourney ohne etwas, worauf sich zuordnen lässt. Prüfe der Reihe nach: Läuft
das Tracking-Skript im Shop, trägt die Bestellung den Wert aus dem Cookie clickId, und wird die
Kunden-E-Mail mitgesendet? Beim Weg ohne Code gibt es die Click-ID bauartbedingt nicht, die
Zuordnung hängt dann daran, ob LeadJourney diese E-Mail bereits kennt – siehe
Fehlende Leads.
Der Umsatz stimmt bei mehreren Währungen nicht
Höchstwahrscheinlich sendest du getGrandTotal(), also den Betrag in der Währung, in der gezahlt
wurde. Wechsle auf getBaseGrandTotal() und sende jede Bestellung in einer Währung – siehe
Workspace-Währung ändern.
Keine Click-ID bei irgendeiner Bestellung
Entweder läuft das Skript im Shop nicht, oder der Cookie Restriction Mode hält das Cookie bis zur
Zustimmung zurück. Prüfe window.lj.getClickId() in der Konsole auf einer Produktseite, nachdem
du Cookies akzeptiert hast.
Häufige Fragen
Verwandte Artikel
Webhooks an LeadJourney senden
Endpoint, Authentifizierung und alle Felder, die du senden kannst.
Click-ID auslesen und speichern
Wo die Click-ID liegt und wie dein Server sie liest.
E-Commerce-Playbook
Die ganze Kette vom Ad-Klick bis Wiederkauf, AOV und LTV.
Tracking-Skript installieren
Was das Snippet ist und wie du prüfst, ob es läuft.
Shopify verbinden
Verbinde deinen Shopify-Shop mit der LeadJourney-App, aktiviere das Tracking-Embed in deinem Theme und mappe Bestellungen, Erstattungen und Checkouts auf deine Conversions, damit jeder Verkauf der Anzeige zugeordnet wird, die ihn ausgelöst hat.
Typeform verbinden
Verbinde dein Typeform-Konto in wenigen Minuten. Einmal autorisieren, LeadJourney registriert einen Webhook auf jedem Formular, dann gibst du jedem Formular einen lj_click_id-URL-Parameter, damit Einsendungen der Anzeige zugeordnet werden, die sie ausgelöst hat.