Skip to content

Statistics & Widgets

Voxel Ads reads AdRotate's impression and click data and surfaces it in several places, so advertisers can see what they're paying for without you sending screenshots.

The Banner Stats widget

An Elementor widget for the single-banner template. Drop it on the template your advertisers see when they open one of their banners.

FeatureNotes
LayoutsGrid, inline, or list
Period tabsToday, week, month, year, all time
ChartOptional Chart.js time series
MetricsImpressions, clicks, CTR, CPC, CPM, days remaining
Labels and stylingFully configurable

Chart.js ships with the plugin — no external request, and it works offline. If your theme already loads Chart.js, disable the bundled copy with the voxel_adrotate_sync_chartjs_src filter.

Use dynamic tags in preview cards, not the widget

Voxel caches preview-card HTML, so a widget placed in a card can show another listing's numbers. Dynamic tags re-evaluate per card and are the right tool there.

Dynamic tags

Voxel native

In Voxel's dynamic-data picker, under Post → AdRotate stats. These survive Voxel's preview-card cache, so they work inside My Listings and archive feeds.

TagOutput
@post(adrotate.impressions)Lifetime impressions
@post(adrotate.clicks)Lifetime clicks
@post(adrotate.ctr)CTR with a % suffix
@post(adrotate.days_remaining)Days until expiry
@post(adrotate.is_active)1 when published and inside its schedule
@post(adrotate.status_label)"Active" or "Expired"

Elementor

In the Voxel AdRotate group of Elementor's dynamic-tag picker, each with its own period selector. Use them in any text widget.

Both kinds are memoised per request, so ten tags on one card cost one stats query, not ten.

The post-edit meta box

Every banner's edit screen gains an AdRotate Statistics panel — live impressions, clicks, CTR and schedule. Useful for support: you can answer "is my ad running?" from the post the advertiser is asking about.

The dashboard widget

The WordPress dashboard gains a Voxel Ads widget showing today's totals and your top-performing banners — a quick read on whether inventory is delivering.

Device split

AdRotate stores no device dimension, so Voxel Ads collects its own indicative desktop/mobile/tablet split. Clicks ride AdRotate's click-tracking request; impressions are counted where the plugin renders ad markup, at the same moment AdRotate counts its own, with the same 60-second per-visitor deduplication.

Enable Show Device Split on the stats widget to render a line like:

Device split: Desktop 62% · Mobile 33% · Tablet 5%

Percentages are by impressions, falling back to clicks for placements the plugin doesn't render itself. The split describes the current campaign and zeroes on reset.

It's indicative, not audited

This is the plugin's own measurement of the placements it controls, not an independent count. Present it to advertisers as a guide, not as billable data.

Campaign resets

When an advertiser relists a banner under a new plan, they usually want fresh numbers for the new run.

Manual. Enable Show "Reset Statistics" Button on the widget, and the banner's author — or an editor — gets a reset button. Current figures are archived into AdRotate's native archive table, so both this widget and AdRotate's own screens start the new campaign at zero. CPC and CPM recalculate against the new plan's price, milestone emails re-arm, and nothing is lost: the archived lifetime shows as a "Previous campaigns" line.

Automatic. Enable Settings → Voxel Ads → Reset on relist and the archive happens whenever a banner is relisted under a genuinely new order. Renewals of the same order and ordinary edits never trigger it. Off by default, and it composes with the manual button.

Author notifications

NotificationBehaviour
Milestone emailsWhen a banner crosses an impression or click threshold. Default thresholds: 100, 500, 1 000, 5 000, 10 000. Each fires once per stat type per banner.
Expiry warningsSent a configurable number of days before the plan expires, once per banner. Renewal-aware.

Both go to the banner's WordPress author. Every string is translatable, and the whole milestone email can be replaced with the voxel_adrotate_sync/milestone_email filter.

Who sees revenue

The public stats endpoint deliberately withholds money. CPC, CPM and plan price are returned only to the banner's own author or to an editor — an anonymous visitor reading a public banner page gets impressions and clicks but never what the advertiser paid. Anonymous callers also only ever see published banners.

Shortcode

For a quick figure outside Elementor:

[adrotate_banner_stats]

Place it on a single-banner template, where it resolves against the current post.

Built by Code Wattz.