UI: Campaigns, groups & create
Reference for the campaigns hub, group detail, the create-campaign form, and the campaign detail page with all actions.
Campaigns hub
Route: /groups. Two tabs:
- Groups — table of campaign groups with a Last Run column (the newest run across the group's campaigns). Per-row and bulk actions: New Group (modal), Run All, Cancel All, Archive/Unarchive, Pause/Resume schedule.
- All Campaigns — table of every campaign with a group filter, an archived toggle, and pagination. Links to a campaign detail and to New Campaign. Per-row actions: Edit, Duplicate, Run, Move, Archive/Unarchive.
Both tabs share a filter bar: a name search plus Created and Last Run date ranges. Filters combine with the archived toggle and the group selector, live in the URL (so a filtered view is shareable), and reset pagination to the first page. Dates are whole days in your browser's timezone, both ends inclusive. Filtering by Last Run hides campaigns and groups that have never run.
Row checkboxes select campaigns or groups for Run selected. The
header checkbox takes the current page; a "select all N matching" link
extends it to everything behind the filters. A confirmation dialog shows
how many campaigns and roughly how many scans the restart will create
before anything starts. Checkboxes need the campaigns.run permission
and do not appear on the archived list, since an archived campaign
cannot run.
Group detail
Route: /groups/:id. Header with the same bulk run/cancel/archive
actions, plus the table of campaigns in that group with the same filter
bar as the hub.
Create campaign
Route: /campaigns/new. A single-page form, in section order: Basic
Info (group selector, campaign type — URL / Ad Tag / VAST / Ad
Discovery — and the creative itself), Emulators, Geography &
Proxy, Repeats & Retries, Labels, Policy Set, and
Schedule (manual / weekly / interval). The VAST type shows a
textarea that accepts either a VAST endpoint URL or pasted raw VAST XML.
Basic Info also carries Referrer and, under it, Ignore first N domains — a number input from 0 to 5, defaulting to 0, clamped to that range when it loses focus. It drops your own click and tracking domains at the head of the redirect chain from detection and tagging; see Campaigns for how to choose the number.
The Ad Discovery type adds two fields of its own. Max ads to check is a number input from 1 to 25, defaulting to 12, clamped to that range when it loses focus. It is how many ad blocks we look for on each page before stopping, and since every ad found is scanned and billed as a separate check, raising it raises what a run costs. Ad formats is a row of checkboxes (Banners, Video, Pops (pop-under, tab-under)), all ticked by default. Untick a format to stop checking it: with only Pops ticked, the page's banners are neither screenshotted nor clicked. At least one box stays ticked.
Repeats & Retries
Between Geography & Proxy and Labels:
- Repeats per combination — a number input, clamped to the allowed
range when it loses focus. Next to it, a live estimate of the run size
(
~60 scans per run (3 countries × 4 devices × 5)), amber past 100. Ad-discovery campaigns add "+ discovered ads", since each discovered ad spawns its own scan. - Browser session — appears once the count is above 1. Fresh each repeat gives every repeat a clean browser and a new IP; Keep cookies runs them all in one browser and IP with cookies and local storage carried over. Ad discovery locks the toggle to fresh.
- Retries on failure — one preset button per allowed attempt count. 0 means a failed scan stays failed; above 0, technical failures (dead proxy, timeout, browser crash) are re-crawled on the same scan.
Same section in edit mode on the campaign detail page. See Campaigns for when to use each mode, and the Scans API for the allowed ranges.
Duplicate a campaign
Duplicate, next to Edit on a campaign row and in the campaign
header, opens /campaigns/new?from=:id — the same create form, filled
in with everything the source campaign is configured with: type, geos
and proxy targeting, emulators, repeats and retries, schedule, labels,
policy set, and the ad-discovery and chain limits. Per-campaign alert
routing is copied too: the Notifications section starts from the
source's settings and is saved with the new campaign.
Only the address of what to check is left blank — URL, Ad Tag, VAST Tag
and Referrer — so the copy cannot be saved until you point it at a new
target. The name arrives with a (copy) suffix and is editable like any
other field, and the copy lands in the source's group unless you pick
another one. Nothing is created until you press Save, and the source
campaign is never modified.
Duplicate needs the campaigns.create permission and is not offered for
archived campaigns.
Campaign detail
Route: /campaigns/:id.
- Info card in read view; inline edit mode toggles an editable
form. A Repeats row summarises the settings (
10× · keep cookies · 3 retries) and is hidden when the campaign scans once and never retries. - Notifications — a one-line summary in read view (
Inherit,Override · 3 destinations,Route by label: dspName); in edit mode the full section (inherit / override / silence, a searchable destination picker, Route by label). It is part of the same form: the one Save stores the campaign and its notifications together, and a bar at the bottom of the form shows unsaved notification changes. With Route by label on, pick the key (for exampledspName) and a table lists the values this campaign's scans carried in the last 30 days, with scan counts. Next to each value, add the chats that should get it; tick several values to send them to one chat at once, or add a value the campaign has not produced yet. Chat assignments are the chats' own rules: they save right away and apply in every campaign that routes by the same key. - Run history — paginated list of runs, each cancellable.
- Header actions — Run, Duplicate, Archive/Unarchive, Cancel pending scans, Save/Cancel edit.
- A billing-blocked modal appears if quota or balance prevents a run.