{{ loginEmail }}
Success!
Sign in failed
Signing in...
Requests by hour, win/loss rates, top signs, and loss reasons. Updated: {{ dashLastRefreshed }}
Active campaigns and their current pacing health.
| Asset | Daily limit | Spent today | Remaining today | Health | 10m cap | 10m used | 10m rem |
|---|---|---|---|---|---|---|---|
| Totals | ${{ formatMoney(perSignTotals.dailyBudgetLimit) }} | ${{ formatMoney(perSignTotals.spentToday) }} | ${{ formatMoney(perSignTotals.remainingBudgetToday) }} | — | — | — | — |
|
{{ perSignResolved?.[s.signId]?.asset_name || perSignResolved?.[s.signId]?.displayName || '—' }}
OpenRTB: {{ s.signId }}
{{ s.signTimeZoneId }}
|
${{ formatMoney(s?.budgets?.dailyBudgetLimit) }} | ${{ formatMoney(s?.budgets?.spentToday) }} | ${{ formatMoney(s?.budgets?.remainingBudgetToday) }} | {{ formatPercentFixed(s?.health?.healthToday) }}% | ${{ formatMoney(s?.plan?.effectiveMaxBudget) }} | ${{ formatMoney(s?.buckets?.distributed10MinuteSpent) }} | ${{ formatMoney(s?.buckets?.tenMinuteRemaining) }} |
Complete billing history for all campaigns (active and inactive) · Showing: {{ billingFilters.startDate }} to {{ billingFilters.endDate }}
| Campaign ID |
Name
|
Client | DSP Instance | Seller IDs | Sign IDs | Status |
Total Amount
|
Profit
|
Impressions
|
eCPM | Records | Date Range (Filtered) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ campaign.campaignId }} | {{ campaign.campaignName || 'Unnamed' }} | — | {{ campaign.dspInstanceNames[0] }} +{{ campaign.dspInstanceNames.length - 1 }} — | {{ campaign.sellerIds[0] }} +{{ campaign.sellerIds.length - 1 }} — |
+{{ campaign.signIds.length - 1 }} more
—
|
{{ campaign.status }} | ${{ formatMoney(campaign.totalAmount || campaign.spend || 0) }} | ${{ formatMoney(campaign.techFee || 0) }} | {{ (campaign.impressions || 0).toLocaleString() }} | ${{ formatMoney(campaign.impressions > 0 ? (campaign.totalAmount / campaign.impressions) * 1000 : 0) }} | {{ campaign.recordCount || 0 }} | {{ campaign.firstBillingDate }} to {{ campaign.lastBillingDate }} |
| Date | Spend | Tech Fee | Total | Impressions | Records |
|---|---|---|---|---|---|
| {{ record.date }} | ${{ formatMoney(record.spend || 0) }} | ${{ formatMoney(record.techFee || 0) }} | ${{ formatMoney(record.totalAmount || 0) }} | {{ (record.impressions || 0).toLocaleString() }} | {{ record.recordCount || 0 }} |
| Date | Campaign ID | Spend | Tech Fee | Total | Impressions |
|---|---|---|---|---|---|
| {{ record.date }} | {{ record.campaignId }} | ${{ formatMoney(record.spend || 0) }} | ${{ formatMoney(record.techFee || 0) }} | ${{ formatMoney(record.totalAmount || 0) }} | {{ (record.impressions || 0).toLocaleString() }} |
Select a date range to find available signs and publishers, then filter billing data by your selection.
Waiting for incoming bids...
{{ JSON.stringify(selectedBid.pacing.pacingCostDetails, null, 2) }}
Cost calculations are not available for this rejection type.
Why no cost data?
• Early rejections (no campaign, invalid price) happen before cost calculation
• Pacing rejections include full cost details
• Older events from before this feature was added
{{ selectedBid.rawRequestText }}
{{ getCreativeContent(selectedBid) }}
The VAST/HTML creative content was stripped to save space.
To enable full creative logging:
fly secrets set LOG_BID_ADM_FULL=true
See CREATIVE_DEBUGGING.md for details
{{ JSON.stringify(selectedBid.response, null, 2) }}
{{ JSON.stringify(selectedBid.winNotification, null, 2) }}
{{ JSON.stringify(selectedBid.lossNotification, null, 2) }}
{{ JSON.stringify(selectedBid.billingRaw || { price: selectedBid.billingPrice, timestamp: selectedBid.billingTimestamp }, null, 2) }}