Delivered value

What is delivered value?

Delivered value lets you quantify and display the real-world impact your AI agent has for each customer — hours saved, meetings booked, emails written — not just what you charged them.

Where billing signals tell Paid what to invoice, delivered value tells your customers why the invoice is worth it. The calculated results appear on value receipts and in the customer portal, giving customers a concrete return-on-investment figure alongside their bill.

Paid comes with a set of default value types covering the most common cases. Each default value type is attached to a product attribute (a signal event name) and automatically calculates whenever a matching signal arrives.


Step 1: Attach a value type to a product attribute

Value types are attached per product attribute (i.e. per signal event name). In SignalsSignal values, your products and their usage-based signals are listed. Click Configure DV next to a signal, then select a value type, calculation method, and any required parameters (for example, an hourly rate for a time-based calculation).

Once saved, every incoming signal for that product attribute will automatically have delivered value calculated and stored alongside it.

Tip: A single product attribute can have multiple value types attached — for example, you might track both Hours saved and Cost saved for the same signal.


Step 2: Send signal data that feeds the calculation

If all parameters are bound at the product level — for example a fixed hourly rate and a fixed number of minutes saved per action — no extra signal data is needed and delivered value will be calculated automatically for every signal.

If your calculation depends on per-signal data, pass those values in the data field:

1from paid import Paid, Signal, CustomerByExternalId, ProductByExternalId
2
3paid_client = Paid(token="YOUR_PAID_API_KEY")
4
5paid_client.signals.create_signals(
6signals=[
7 Signal(
8 event_name="document_processed",
9 customer=CustomerByExternalId(
10 external_customer_id="<your_external_customer_id>",
11 ),
12 attribution=ProductByExternalId(
13 external_product_id="<your_external_product_id>",
14 ),
15 data={
16 # business data — also used by delivered value calculations
17 "document_id": "doc_abc123",
18 "time_saved": 45,
19 "time_saved_unit": "minutes", # seconds | minutes | hours | days
20 "page_count": 12,
21 },
22 )
23],
24)

The field names in data must match what your value type calculation expects. You can see the expected fields when viewing the calculation in the Signal values UI — they are listed as parameters with a source of signal data.

Duration parameters

Duration parameters require two fields: the numeric value and a companion _unit field accepting "seconds", "minutes", "hours", or "days". The engine normalises to seconds internally and injects _seconds, _minutes, _hours, and _days variants into the expression context — so a parameter named time_saved can be referenced as ${data.time_saved_hours} in a formula regardless of which unit was sent.

Monetary parameters

Monetary parameters represent real currency amounts — for example, the deal value closed by an AI SDR. They must be supplied in cents as a plain integer (e.g. 500 for $5.00) and are displayed as normal currency values throughout the dashboard and customer portal.

Parameter binding modes

Each parameter has a binding mode that controls where its value comes from:

  • Final — fixed at the product level; signal data is ignored
  • Signal — must come from signal data on every signal
  • Either — defaults to the product-level value, but signal data overrides it when present

Step 3: View delivered value in the dashboard

After signals start flowing, delivered value appears in several places:

  • SignalsValue delivered — org-wide delivered value over time, broken down by value type and customer, with revenue and ROI comparisons
  • Signals analytics — per-event aggregate delivered value shown inline in the events table
  • Signal detail — the calculated delivered value for an individual signal, visible when opening a signal row
  • Customer portal — customers see their delivered value KPIs, trend chart, and a breakdown by value type and signal via their portal link
  • Customer detail — the value receipts tab on each customer’s page lists their receipts with delivered value summaries

Use SettingsValue receipts to configure which signals and data fields appear on customer-facing receipts.


Backfilling historical signals

If you attach a value type to a product attribute after signals have already been ingested — or if you update a calculation — you can retroactively calculate delivered value for existing signals. Use the Manage data button on any signal row in Signal values to trigger a backfill for that product and signal, with an optional start date to limit how far back it reaches.

The backfill is non-destructive — existing billing data is never changed, only the delivered value records. Re-running is safe: the system versions every result and always uses the latest, so running the backfill twice produces the same totals as running it once.


Multi-currency support

Delivered value calculations produce results in all currencies your organisation supports. Each currency has its own calculation or conversion configured in the value type — there are no automatic exchange-rate conversions. If your organisation supports USD and EUR, both totals will appear wherever delivered value is displayed.


Custom value types (experimental)

Paid includes a set of default value types covering common scenarios. Custom value types with your own formulas, parameters, and currency conversions can be defined via SignalsSignal valuesValue type library.

Experimental: Custom value types are available and still being refined. Default value types cover the majority of use cases.

If you need a custom value type that isn’t covered by the defaults, contact support and we can help configure it.