How to Set Up Your Own Yield Forecast Dashboard

This guide walks you through setting up a Yield Forecast dashboard using Kevel’s Forecast API

📘

Prerequisites

  • Access to the Kevel Forecast API
  • Forecast settings configured in your network
  • At least one Ad Product and Targeting Set created

1. Configure Forecast Network Settings

Use the GET /v1/forecaster/network-settings and POST /v1/forecaster/network-settings endpoints to review and set:

  • Grouping dimensions (e.g., day, week, ad product)
  • Priority buckets for traffic (used for sell-through logic)

2. Define Ad Products and Targeting Sets

3. Trigger the Forecast

Call one of the following endpoints to generate forecast data:

In the response for this request there will be an ID for each forecast. Save this as you'll need it in the next step.

Example response:

{
"193": {
    "type": "success",
    "forecastId": "7f7d4637-c6c7-4bed-99e0-05f997b96183"
	}
}

Forecast data will be processed and available.

4. Query Forecast Results

Use the GET /v1/forecaster/{forecastId} endpoint to fetch forecasted results.

Response overview

The response contains two key sections:

Total

Aggregate totals over the full forecast window:

"total": {  
  "booked": { "impressions": 7232, "revenue": 960.0, "clicks": 320 },  
  "available": { "impressions": 46144, "clicks": 3264 },  
  ...  
}

Useful for computing:

  • Sell-through rate = booked.impressions / (booked.impressions + available.impressions)
  • eCPM (booked) = booked.revenue / (booked.impressions / 1000)
  • eCPM (all traffic) = booked.revenue / ((booked + available impressions) / 1000)

Grouped

Breakdowns by your chosen grouping (e.g., daily):

...
{
  "values": {
    "booked": {
      "impressions": 0,
      "revenue": 0.0,
      "clicks": 0,
      "uniqueUsers": 0
    },
    "uncapped": {
      "impressions": 1984,
      "revenue": 0.0,
      "clicks": 128,
      "uniqueUsers": 1984
    },
    "inventory": {
      "bookedAtLower": {
        "impressions": 1984,
        "revenue": 448.0,
        "clicks": 192,
        "uniqueUsers": 1984
      },
      "empty": {
        "impressions": 0,
        "clicks": 0,
        "uniqueUsers": 0
      },
      "bookedAtHigher": {
        "impressions": 0,
        "revenue": 0.0,
        "clicks": 0,
        "uniqueUsers": 0
      }
    },
    "available": {
      "impressions": 1984,
      "revenue": 0.0,
      "clicks": 128,
      "uniqueUsers": 1984
    }
  },
},
"key": {
  "$datetime.month": 6,
  "$datetime.date": "2025-06-04",
  "$datetime.week": 23
}
  ...

Each object has:

  • key: e.g. the date
  • values: booked, available, uncapped traffic data (learn more about these here)
  • inventory.bookedAtLower and inventory.bookedAtHigher revenue/impression splits

This enables you to build time-series charts like:

  • Daily impressions (booked vs available)
  • Daily revenue
  • Sell-through over time