Browse docsOverview
Operate

Admin panel walkthrough

A tour of the operator console: apps, partners, tracking links, postbacks, plans & billing, and the super-admin views.

Sign in

Reflect uses passwordless email magic links. Go to /login, enter your work email, click the link in your inbox.

Tenant pages

Dashboard

KPIs for the last 30 days: installs, attributed installs (paid vs. organic), revenue (USD), top partners. The first thing you check after pushing a new build.

Apps

Register one row per (app × platform). Each row gets:

  • AppKey — public-ish identifier, paste into ReflectConfig.AppKey.
  • SigningSecret — HMAC secret, revealed exactly once when the app is created. Put it in your secret manager on the spot; there is no self-serve rotation yet, so a lost secret means asking support to re-issue it.
  • Bundle id — must match your build settings.
  • Store URL — destination for tracking-link redirects.
  • Live toggle — when false, organic ingestion still works but tracking-link redirects fall back to a maintenance page (use during pre-launch testing).

Partners

Each ad network you spend money on gets a partner row. Important fields:

  • Slug — used in postback macros ({partner_slug}).
  • Require referer — drop clicks with no Referer header (catches bot traffic).
  • Rate limit /min — clicks/IP/min ceiling.
  • Active — can be auto-paused by the quality scorer.

Tracking links

Generate one per (app × partner × campaign). Reflect mints an 8-char id; the redirect URL is https://track.yourdomain.com/l/<id>. Configure:

  • Campaign name, sub1–sub5 — passed through to attribution + postbacks.
  • Allowed countries — block clicks from outside.
  • Mobile only — drop desktop clicks.
  • Honeypot — invisible-to-humans link; any hit auto-blocks the source IP for 7 days.
  • Deep link path — appended to the install referrer / AdServices payload so the SDK can route on first launch (see Deep linking).
  • Attribution override — per-link click-to-install window in hours (default 24h).

Postback log

Every outbound HTTP fire — partner, event, status, http code, duration, request body, response body, error. The forensic record when a partner says "we’re not getting your postbacks".

Postback templates

Per (partner × event), define the URL + method + body to fire. Macros: {event_id}, {install_uuid}, {revenue}, {currency}, {partner_slug}, {campaign}, {sub1}{sub5}, {country}, etc.

Dedupe windows + allow-duplicates flags inherited from events_taxonomy; override per template if needed.

Reports

  • Installs — by app, partner, country, day. CSV export.
  • Revenue — USD-converted via fx_rates. CSV export.
  • Attribution — installs broken down by attribution_type (deterministic / fingerprint / organic) + fraud flags.

Fraud

Protection Dashboard — two halves. Blocked before attribution: clicks Reflect refused to measure, grouped by why (bot or data-centre traffic, a blocked address range, your own country or cap rules, an account limit), with a per-day stacked chart. Flagged after attribution: installs with the reason on each row (click injected, fingerprint too weak, duplicate install, very late click, …), the partners the quality scorer auto-paused and why, and the recent IP blocklist as a read-only feed carrying the reason each entry earned (honeypot, rate limit, external threat feed, added by hand).

Protection rules — block by country, IP range, sub-publisher id, or click-to-install time. Matching events received after a rule is created are rejected at ingestion.

Fraud report aggregates the same flags by reason and by source; Anomalies scores installs behaviourally.

Two things the console deliberately does not claim: blocked clicks are stored as daily counts per app, partner and reason, so you see how much each rule stopped but never the individual clicks — there is no per-click rejection log to drill into — and blocklist entries are read-only: a honeypot block lapses on its own after 7 days, and there is no self-serve unblock control.

Billing & usage

Current plan, live usage meters (events / attributions / postbacks / clicks), upgrade to a paid tier via PayPal, invoice history. Cancel anytime — plan stays active to the end of the period you’ve paid for.

Settings

Your CompanyKey, contact email, timezone, team members.

Super-admin pages (operator only)

  • Overview — cross-tenant KPIs.
  • Resource usage — load + cost + margin per tenant; identify upgrade candidates and at-cap tenants.
  • Companies — every tenant; drill into one for usage meters, plan override, invoices, app-level breakdown, activity feed.
  • Plans & pricing — pricing tier CRUD; PayPal plan IDs per tier.
  • Invite requests + Invites — beta intake.

Audit log

Every mutation through the admin panel is logged with actor email + IP + timestamp + diff. Surfaced in super-admin per-tenant Activity feed.