Skip to content

Business goals

Everything else in the dashboard measures the assistant: conversations, leads captured in chat, questions it could not answer. None of that is your scoreboard. A shop counts orders. A consultancy counts enquiries. A membership site counts signups.

Goals put your scoreboard in the dashboard, and then answer the question the rest of the reporting cannot: of the results you got, how many came from visitors who had talked to the assistant first?

A goal is one thing that counts as a win on your website, with a name you chose and a place in your own priority order. The Impact report leads with whatever you put at the top.

Each goal is counted from one or more rules:

RuleCounts when
A formthat form succeeds on your site
A pagea visitor reaches it (a thank-you or confirmation page)
An eventyour analytics layer fires it, e.g. purchase
A contact clicksomebody clicks a tel: or mailto: link

You can also give a goal a value: a fixed amount per completion, or whatever the order itself reports.

When the crawler reads your site it also notes where visitors could complete something: the forms and which builder made them, the confirmation pages, the phone and email links, whether the shop runs WooCommerce or Shopify. So the first time you open Goals, it already proposes what it found.

Nothing is counted until you say so. Accepting a proposal also counts the matching events from the last 30 days, so the chart has history the moment you approve it rather than starting empty.

Refusing a proposal is worth doing rather than ignoring it. A refusal is remembered, the suggestion does not come back, and shapes that many organisations refuse stop being suggested to anyone.

Shown asMeans
Straight from the chatcompleted within 30 minutes of chatting, after following a link the assistant gave, or arriving on a URL the assistant tagged
After a chatthe visitor chatted earlier, inside the attribution window (7 days by default)
Without any chatno chat before it — the comparison group

The Impact page shows the conversion rate of visitors who chatted beside that of visitors who did not.

What is counted, and what only gets proposed

Section titled “What is counted, and what only gets proposed”

Only unambiguous evidence counts on its own. Everything else is recorded and put in front of you as a proposal, because a number you cannot defend is worth less than no number.

Counted from its own evidenceProposed, never counted on its own
A standard purchase event in your data layerA plain form submit — submitted is not succeeded
A form builder’s own success event (Contact Form 7, Gravity Forms, WPForms, Elementor, Ninja Forms, HubSpot, Typeform, Calendly)An order total read off the page
A form’s own request coming back successfullyA confirmation-looking message appearing
Reaching a page you namedA tel: or mailto: click — deciding to call is not calling

The widget only sees pages it is on. Three real gaps, and what to do about them:

  • A checkout hosted on another domain (Stripe, a Shopify checkout).
  • A sale closed later, in your CRM rather than on the site.
  • Pages without the widget installed.

For all three, report the conversion from your own systems:

Terminal window
curl -X POST https://engadin.ai/api/v1/conversions \
-H "Authorization: Bearer $ENGADIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"goal": "g_…",
"externalId": "order_10023",
"value": 249.00,
"currency": "CHF",
"conversationId": "…"
}'

goal is the goal’s id from the Goals page. externalId is your own order or record id: send the same one twice and the second is ignored, so a webhook that retries cannot double-count. conversationId is optional and is what earns the attribution — pass the id from the widget’s lead_created event or from the REST API and the conversion is credited to that chat like any other.

The key needs write access.

Goal tracking reports the structure of what happened. It never reports what anybody typed.

Sent:

  • which form, which builder made it, and what its fields are called
  • the page path, with the query string and fragment removed
  • the event name your data layer fired, and an order’s value and currency
  • the order number, hashed in the page, used only to recognise a repeat
  • the id of this browser’s chat, if it has one

Never sent:

  • the contents of any field
  • hidden and password fields — not even their names
  • any email address, phone number or name, from a form or from the page

This is enforced twice: in the widget before anything is sent, and again on our side, where anything not on the list is discarded before it can be stored.

No new identifier is created for any of this. Attribution uses the conversation id the widget already keeps for the chat itself, and the same salted, hashed IP the visitor counts already use.

If your site runs a consent tool, goal tracking obeys it. Google consent mode (analytics_storage) and the IAB TCF API are both read; while either says no, nothing is reported, and reporting resumes if the visitor later agrees.

If your site has no consent framework there is nothing to read, and goal tracking behaves as described above. See security and privacy for what is stored and where.

The Impact page also lists the subjects that come before a dead end: the conversation topics whose visitors reach a goal far less often than your average. That is your content queue ordered by what it costs you, rather than by how often something gets asked — usually a different order, and a more useful one.