# Revenue tracking

URL: https://docs.ablyft.com/de/developers/tracking-and-events/revenue-tracking/

> Sende Bestellwerte an ABlyft und verhindere, dass Ausreißer deine Results verzerren.



Ein **Revenue Goal** misst Geld statt einer Ja/Nein-Conversion, zum Beispiel den Bestellwert. Deine Website sendet den
Wert mit einem JavaScript-Aufruf. ABlyft vergleicht dann das Revenue zwischen den Variations.

## Schritt 1: Das Goal in ABlyft erstellen

1. Gehe zu **Targeting & Goals → Goals** und erstelle ein Goal.
2. Wähle den Typ **Revenue** ("Trigger a revenue value via JavaScript"). Der Measurement type wird automatisch auf **Value**
   gesetzt.
3. Prüfe den **API Name**, zum Beispiel `purchase`.
4. Gib das **Currency sign** ein, zum Beispiel `€`. Es ist erforderlich und wird zur Anzeige der Werte verwendet.
5. Optional: Wähle einen **Value filter type**, siehe [Value Filters](https://docs.ablyft.com/de/guides/goals-and-measurement/goal-types/#value-filters).
6. Wähle in den **Statistic Settings** die Counting Method und die Winning Direction und speichere.
7. [Weise das Goal deinem Experiment zu](https://docs.ablyft.com/de/guides/goals-and-measurement/configure-goals/#assign-goals-to-an-experiment).

## Schritt 2: Das Revenue senden

Rufe dies auf deiner Bestellbestätigung mit dem tatsächlichen Bestellwert auf.

```html
<script>
window['ablyft'] = window['ablyft'] || [];
window['ablyft'].push({
    eventType: 'revenue',
    eventName: 'purchase',
    eventValue: 49.9
});
</script>
```

Alle Push-Parameter sind in der [`push()`-Referenz](https://docs.ablyft.com/de/developers/reference/javascript-api/push/#revenue) aufgelistet. Der
`eventName` muss exakt mit dem **API Name** des Goals übereinstimmen, sonst wird der Aufruf stillschweigend ignoriert.

Verwende eine Zahl, keinen String: `49.9`, nicht `"49,90 €"`. Sende bei jedem Aufruf dieselbe Art von Wert (zum Beispiel immer
den Netto- oder immer den Brutto-Bestellwert) und lege das fest, bevor das Experiment startet.

### Den Wert von deiner Seite übernehmen

Gib auf einer serverseitig gerenderten Seite den Wert in den Aufruf aus:

```html
<script>
window['ablyft'] = window['ablyft'] || [];
window['ablyft'].push({
    eventType: 'revenue',
    eventName: 'purchase',
    eventValue: 129.00 // output the order total here
});
</script>
```

Mit einem Data Layer liest du den Wert aus dem Eintrag (hier ein `purchase`-Event im GA4-Stil):

```js
ablyftTools.watchDataLayerEntry('purchase', (entry) => {
  window.ablyft = window.ablyft || [];
  window.ablyft.push({
    eventType: 'revenue',
    eventName: 'purchase',
    eventValue: Number(entry.ecommerce.value)
  });
});
```

`ablyftTools` steht im Project JS code zur Verfügung (**Settings → Project Settings → Project Level Codes**). Siehe
[Custom JavaScript](https://docs.ablyft.com/de/developers/application-integration/custom-javascript/) und [Data layer events](https://docs.ablyft.com/de/developers/tracking-and-events/datalayer-events/).

## Counting Method

Wähle die Counting Method im Goal, siehe [Counting Method](https://docs.ablyft.com/de/guides/goals-and-measurement/goal-types/#counting-method).
Mit **Every** trägt ein Visitor mit drei Bestellungen drei Werte bei.

> **Doppelzählung vermeiden:** Stelle sicher, dass der Aufruf einmal pro Bestellung läuft. Eine Bestätigungsseite, die neu geladen wird, oder ein Data-Layer-Event, das zweimal feuert,
> würde das Revenue zweimal senden, wenn die Counting Method **Every** ist. Schütze den Aufruf, zum Beispiel mit einem Flag in
> `sessionStorage` für die Bestell-ID.

## Value Filters

Ein Value Filter kappt Ausreißer wie eine einzelne sehr große Bestellung, wenn Results berechnet werden. Typen, Beispiele und Auswirkungen sind unter
[Value Filters](https://docs.ablyft.com/de/guides/goals-and-measurement/goal-types/#value-filters) beschrieben.

## Prüfen, ob es funktioniert

1. Schließe eine Testbestellung in einer [Preview](https://docs.ablyft.com/de/guides/experiments/preview-and-qa/) deines Experiments ab, mit aktiviertem
   [Debug-Modus](https://docs.ablyft.com/de/developers/debugging/preview-and-live-log/#debug-mode). Die Konsole protokolliert `Triggered GOAL "<name>" (revenue)`.
2. Prüfe den **Live Log** deines Projects auf das eingehende Event.
3. Öffne die Experiment-Results und vergleiche das Revenue nach einigen Tagen mit deinem Shopsystem. Siehe
   [Messung prüfen](https://docs.ablyft.com/de/guides/goals-and-measurement/verify-measurement/).

## Nächste Schritte

- [Custom goals](https://docs.ablyft.com/de/developers/tracking-and-events/custom-goals/): Conversions ohne Revenue-Wert.
- [ablyft.push()](https://docs.ablyft.com/de/developers/reference/javascript-api/push/): Alle Push-Parameter.
- [Goal types](https://docs.ablyft.com/de/guides/goals-and-measurement/goal-types/): Alle vier Typen im Vergleich.

