# Set Up Outcomes

> Tell Revnu which result your ads should bring in, a purchase, a trial start or a booked call, and get it reported to every connected ad platform. What works with no code access, Cal.com and Calendly bookings, which outcome to put first, and what to do when a row says Receiving.

Canonical: https://revnu.com/docs/set-up-outcomes
Last updated: 2026-10-18

An outcome is a real result Revnu counts and reports to your ad platforms: a **purchase**, a **trial start** or a **booked call**. You set each one up in **Ads > Revnu Tag**. Your ads bid on the first one you set up, so it decides what every campaign is judged on.

Set one up before you expect any ad to launch. Revnu waits for an outcome before it launches a campaign, because without one it has nothing to judge the ad on. You don't write the code yourself: Revnu gives you a setup prompt, and a coding agent such as Claude Code or Cursor does the install.

## Before you start

- **Someone, or a coding agent, who can change your site's code,** or a host for one small function. No developer? See [what works without code access](#no-code-access-what-works-and-what-doesnt). The setup adds a script to your pages and a few lines to your server.
- **A server that confirms the result.** A purchase comes from your payment success handler, a trial start from the code that creates the account or trial, a booking from your scheduler's webhook. A thank-you page or a button click doesn't count.

## How do I set up an outcome?

### 1. Open Revnu Tag

Open **Ads** and press the **Revnu Tag** tab. Each outcome is a row in the table: **Purchase**, **Trial start** and **Booked call**.

### 2. Press Set Up on an outcome

Press **Set Up** on the row you want. [Which outcome should I set up first?](#which-outcome-should-i-set-up-first)

### 3. Define a win

Choose which results count. For a purchase, choose whether a fully refunded order still counts. For a trial or a booked call, you can require things like a work email, a decision-maker or a minimum company size.

**Web search** is off by default. Turn it on and Revnu researches each company that books or signs up, and only counts the ones that fit.

### 4. Connect your site

Enter your website in **Website URL**. Press **Copy Setup Prompt** and paste it into your coding agent. The agent installs the [Revnu Tag](https://revnu.com/docs/revnu-tag.md) and makes your server send the outcome through the [Event API](https://revnu.com/docs/event-api.md) once it's confirmed.

In plain words, a server event means your server tells Revnu "a call was booked" or "an account was created". A click in the browser alone can't be trusted, because it can't tell a real result from spam or a double click.

The prompt includes a new server event key only when your site doesn't have one yet. If it already has one, the agent keeps the `REVNU_EVENT_KEY` your server uses, so nothing that works breaks. The key goes in your host's environment variables, then you redeploy.

> **Warning:** Only get a new server event key when the old one is lost. A new key replaces the old one, and your server stops sending outcomes until it's updated.

### 5. Verify with a real one

Press **Open Website** and complete a real one: make a purchase, start a trial or book a call. Revnu shows it the moment it links that result to your visit. You can leave the page; Revnu messages you when it sees one.

If the outcome already arrives from your server, Revnu skips the test and writes the definition from your **Define a Win** choices, which takes about a minute. Your first outcome goes live straight away. A second or third outcome waits for you to approve it.

**I typed the website address wrong**

If **Open Website** opens the wrong address, press **Back** to the **Website URL** field, correct it, and continue. A comma instead of a dot (`www,example.com`) is the usual slip. Your **Define a Win** choices are kept.

## Which outcome should I set up first?

The first outcome is what your ads learn from, so pick the one that happens often enough to learn on.

- **Trial start** suits most software. A free sign-up counts here too. It happens far more often than a payment.
- **Booked call** suits sales-led businesses that sell on a call.
- **Purchase** suits shops and products people buy straight away.

> **Tip:** If your first outcome is rare, a zero means little for a long time. A cheap product with a purchase-only first outcome is the common trap: each ad has to spend several days of its budget before Revnu can tell a loser from bad luck. Revnu may suggest putting sign-ups or trial starts first.

To change which outcome comes first, ask Revnu in chat, for example "make booked calls our first outcome". It drafts the change, and you approve it in **Ads > Revnu Tag**.

**None of these fits. What do I pick?**

Pick the closest of the three, and name your own event. Every outcome is one of purchase, trial start or booked call, but the event behind it can be anything your server confirms.

- **An account application, a trade account sign-up or a waitlist sign-up** fits **Trial start**: a new account or application your server creates.
- **A quote request, a demo request or a consultation request** fits **Booked call** when it leads to a call, or **Trial start** when it doesn't.
- **A paid order of any kind** fits **Purchase**.

The easiest route is to say it in chat: "count trade account applications as our first outcome; our server sends `account_application` when one is submitted." Revnu drafts the definition and you approve it in **Ads > Revnu Tag**. The event has to come from your server when the application is saved. A browser form submit on its own doesn't count, because Revnu can't tell it from spam or a double click.

## How do I track booked calls from Cal.com or Calendly?

A booking only reaches Revnu when your scheduler tells your server about it. That's a webhook, and the setup prompt tells your coding agent to build the receiving end.

The scheduler side needs your login, which the agent doesn't have. The agent finishes the code first, then ends its reply with steps for you.

> **Note:** **Read the end of the agent's reply.** If you skip its steps for your scheduler, no booking ever arrives.

**Cal.com.** In Cal.com, go to **Settings > Developer > Webhooks** and add the URL your agent gives you. Subscribe to booking created, booking rescheduled and booking cancelled. A webhook secret is optional; the agent's code checks it if you set one.

**Calendly.** Webhooks need a paid Calendly plan: Standard, Teams or Enterprise. On a free plan, bookings can't be counted automatically. With a personal access token, webhooks can only be created through Calendly's API, so the agent adds a command to your project. Put your token in the environment variable it names, then run that command once.

A cancelled booking takes the original booking back, so cancellations don't count.

## How do I track purchases and trial starts?

Same flow: **Set Up** on the **Purchase** or **Trial start** row, then the setup prompt. The agent hooks into the place your app already confirms the result: the payment success handler, or the code that creates the account or trial. Your payment and scheduler logins and secrets stay in your app. Revnu never asks for them.

For a purchase, a 100% discount or a free trial isn't a purchase. To test, use a near-total discount and leave a small amount to pay.

## No code access? What works and what doesn't

With nobody who can change your site's code, Revnu can see visits and clicks, but it can't count booked calls, trials or purchases by itself.

**What works without a developer**

- **Visits and ad clicks.** If your site builder has a custom-code box for the page head (Webflow, Framer, WordPress and most builders do), paste the [Revnu Tag](https://revnu.com/docs/revnu-tag.md) there. Revnu then sees where each visitor came from, including which ad they clicked.
- **Spend, clicks and the platforms' own numbers.** Revnu reads these from each connected ad account with no setup on your site.
- **Telling Revnu how a call went.** Once your bookings reach Revnu, say "Tuesday's call was a no-show" or "they signed" in chat, and Revnu records exactly what you said against that booking.

**What doesn't**

- **Counting a booked call automatically needs something you run to receive it.** Your scheduler sends a webhook, and code you host (a small serverless function counts) passes it to Revnu. Revnu has no address your scheduler can send to directly, so a Cal.com or Calendly webhook on its own is never enough.
- **A free Calendly plan can't count bookings automatically.** Calendly only offers webhooks on its paid plans.
- **Recording call results in chat needs the booking first.** Revnu attaches what you tell it to a booking it already has. With no bookings arriving, there is nothing to attach it to.

If you can't add a receiver, Revnu can still write your ads and read clicks, but a booked-call outcome will stay at zero, so no ad can be judged on it. Two ways forward:

1. **Get one small piece of code hosted.** Your site can stay no-code. A developer or a coding agent can build the booking receiver as a small function on a host such as Vercel or Netlify, then give you its webhook address to paste into your scheduler.
2. **Connect GitHub if your site lives in a repo.** In **Connections > Learn Your Business > GitHub**, connect the repo, then ask Revnu in chat to open the pull request that adds the tag and the booking receiver. You review and merge it, then add the server key to your host.

**No developer and no coding agent?**

Then booked calls can't be counted yet. Put the [Revnu Tag](https://revnu.com/docs/revnu-tag.md) in your site builder so Revnu sees clicks and visits, and tell Revnu in chat when ad visitors book a call ("two calls this week came from the Google ads"). Revnu treats that as your word, not as a counted outcome, so it can't judge one ad against another on it. A coding agent such as Claude Code or Cursor is cheap enough for a non-developer to run once to build the receiver.

## Read the outcomes table

| Column | What it means |
|---|---|
| Status | **Live**: set up and counted. **Receiving**: your server already sends it, but it isn't set up, so Revnu isn't counting it yet. **Not set up**: nothing is arriving and it isn't set up. |
| This week | How many arrived in the last seven days. |
| Last seen | When the most recent one arrived, plus any that were cancelled or refunded. |
| Reported to | The ad platforms that receive it. A dash means none yet. |

**Set Up** starts setup for that outcome. **Edit** changes one that's already live.

## My bookings say Receiving and count for nothing

This means bookings reach Revnu, but your definition doesn't include them. It happens most often when another outcome, usually **Purchase**, was set up first. Every booking is recorded, and none counts.

1. Press **Set Up** on the **Booked call** row and finish **Define a Win**.
2. If booked calls should be what your ads bid on, ask Revnu to make them the first outcome, then approve the change in **Ads > Revnu Tag**.

Your developer can confirm the cause from the Event API's reply: `counted: false` with a `not_counted_reason` naming the outcomes your definition counts. See [Event API](https://revnu.com/docs/event-api.md).

## How do I check each ad platform is receiving results?

Look under **Manage Ad Channels** in **Ads > Revnu Tag**, below the outcomes table. It appears once your first outcome is set up. Connecting an ad account is the only step: Revnu creates the conversion event on that account and starts sending your outcomes to it, so you never copy an event ID or pick a conversion rule.

Each channel's row says which outcomes it receives and whether the platform has confirmed one yet. A platform confirms once an ad on it brings in a result.

- **Google.** Revnu creates its own conversion actions, set as secondary, so your existing campaigns keep bidding as before.
- **X and Reddit.** These only let you create a Pixel by hand. If the account has none, the row asks you to create one in that platform's Events Manager. If a Reddit account has several, the row asks which to use.
- **TikTok.** Revnu uses the account's Pixel, or creates one named "Revnu" if there's none. TikTok isn't listed under **Manage Ad Channels** yet. Ask Revnu "is TikTok receiving our conversions?" to check it.

**Which outcomes does each platform receive?**

Your ads bid on your first outcome. Revnu also reports your other outcomes to each platform so it sees the whole funnel, but they never change what campaigns optimise for. Two exceptions:

- **TikTok receives only your first outcome.** Later outcomes are counted in Revnu but not sent to TikTok.
- **On Reddit**, an outcome that maps to the same Pixel event as your first one isn't sent, so it can't affect bidding.

## Next step

[Install the Revnu Tag](https://revnu.com/docs/revnu-tag.md), or read [how Revnu runs and judges your ads](https://revnu.com/docs/how-revnu-runs-ads.md).

## Frequently asked questions

### Can I track booked calls without a developer?

Yes, with a coding agent. Your scheduler sends a webhook to a small piece you host, which passes each booking to Revnu, and a coding agent can build and host that piece for you even if your site is no-code. Until it's in place, Revnu counts visits and clicks.

### Can Revnu count bookings on a free Calendly plan?

Revnu counts Calendly bookings through Calendly's webhooks, which come with its paid plans (Standard, Teams or Enterprise). On one of those plans, every booking reaches Revnu automatically.

### Can I just tell Revnu how each call went?

Yes, for any booking that has reached Revnu. Say "the 3pm call was a no-show" or "they signed" in chat and Revnu records exactly that against the booking.

### Why does "Waiting for Your First Real Booking" never change?

Usually the booking webhook is missing. Check it exists in Cal.com or Calendly, using the steps from the end of your coding agent's reply. If bookings do arrive but the row says Receiving, they aren't set up as an outcome yet: click Set Up on that row.

### Why does a row say Receiving?

Your server already sends that outcome, but Revnu isn't counting it. Click Set Up on the row. If another outcome is first, ask Revnu to move this one first too.

### Which outcome do my ads optimise for?

The first one you set up. The others are reported to your ad platforms but don't change bidding, and TikTok only receives the first. To change the order, ask Revnu and approve the draft in Ads, Revnu Tag.

### My result isn't a purchase, trial or booked call. What do I choose?

The closest of the three, with your own event name. An account application or sign-up is a trial start. A quote request that leads to a call is a booked call. Ask Revnu in chat to set it up and approve the draft.

### How do I fix a wrong website address in setup?

Click Back to the Website URL field, correct it, and continue. Your other choices are kept.

### Can Revnu add the tracking code to my site itself?

Yes, when your site's code is in a GitHub repo you've connected. Ask Revnu to open the pull request. You review and merge it, then add the server key to your host.

### What if "Writing Your Win Definition" takes more than a few minutes?

Click Ask Again. Your setup is saved either way.

### When should I get a new server event key?

Only when the old key is lost. A new key replaces the old one, and your server stops sending outcomes until it's updated.
