Revenue & Acquisition
A session can carry the revenue it produced. Once it does, conversions report value, the channel that brought the visitor gets credited, and ad spend allocated to the session becomes a return.
signals.revenue(12900); // 129.00 in the property's currencyMoney is always an integer in minor units: cents, pence, øre. Never send 129.00.
signals.acquisition(params)
Section titled “signals.acquisition(params)”revenue() is shorthand for the value-only case. The full call takes an object:
signals.acquisition({ value: 12900, currency: 'EUR', tags: ['plan:pro', 'shop:order:10421'],});| Key | Type | Effect |
|---|---|---|
value | integer | Revenue in minor units. Recorded as an acquisition event on the session. |
currency | 3-letter code | Currency of value. Defaults to the session’s existing currency, else USD. |
tags | string[] | Merged into the session’s acquisition tags and de-duplicated. Never removed by a later call. |
cost | integer | Deprecated and ignored. Session cost flows through cost entries and the ad integrations, not the tracker. |
Returns a promise resolving to { success: true, acquisition_meta } or { success: false, error }.
How value accumulates
Section titled “How value accumulates”Each call with a value records an acquisition event on the session. The session’s value is the roll-up of those events, so two purchases in one visit add up:
signals.revenue(4900);signals.revenue(2500);// session value: 7400To make a call idempotent, name the order in a tag of the form <source>:order:<id>. A later call carrying the same order id updates that order’s event instead of adding a new one:
signals.acquisition({ value: 12900, tags: ['shop:order:10421'] });signals.acquisition({ value: 11900, tags: ['shop:order:10421'] }); // same order, value corrected// session value: 11900Mixed currencies are converted to USD for the roll-up; a session with one currency keeps its amount in that currency. Both the native amount and the USD amount are stored and filterable (acquisition_value, value_usd).
Where it shows up
Section titled “Where it shows up”- Session drawer: the value, its currency and the order tags.
- Conversions with “value from event” enabled sum session value over the funnel; fixed-value conversions ignore it. See Conversions.
- Channels and ad platforms: revenue per channel, and ROAS once an ad platform is connected and cost is allocated to sessions. See Google Ads & Meta.
- API and SDK: filter and aggregate with
acquisition_value,value_usd,acquisition_currency_code,value_sourceandacquisition_tags. See the field catalog.
Do it from the server instead
Section titled “Do it from the server instead”The browser is the wrong place to assert that money changed hands. Payment is confirmed by your backend or by a payment webhook, often after the visitor has left the page. The recommended pattern:
- Hand the session id to your backend during the visit. See Session Handoff.
- Store it on the order.
- When the payment is confirmed, write the acquisition from the server with the API or, from Laravel,
Snipform::revenue()in the PHP SDK.
The server endpoint takes the same value, currency_code and tags and applies the same roll-up rules.