Launch history and audit

Every launch logged in audit log + Ads Manager History tab. Bulk Launch status per row at /bulk-launch/status/batch.

Written By Salvatore Sinigaglia

Last updated About 4 hours ago

Every launch logged in audit log + Ads Manager History tab. Bulk Launch status per row at /bulk-launch/status/batch.

Launch history and audit

Every launch is logged in Wevion's audit log + Ads Manager's per-campaign History tab. Bulk Launch wave status visible at POST /api/v1/bulk-launch/status/batch (verified) with per-row success/failure detail. Useful for postmortem on failed waves, compliance review, and tracking who launched what when.

Who is this for

Admins running incident response on failed launches. Anyone reconciling "did we launch X on Friday?" or "why is campaign Y in this account?". Compliance reviewers tracking who-launched-what for audit.

Where launch events are logged

1. Audit log (workspace-wide)

apps/backend/prisma/schema.prisma audit_log table — every action logged:

Verified campaign/launch actions (dot-notation):

  • action: campaign.publish — when you publish a campaign
  • action: campaign.multi_publish — publishing one draft to multiple ad accounts
  • action: campaign.toggle — pause/resume a campaign
  • action: campaign.budget_edit — edit a campaign/ad-set budget
  • action: wavo.rest.bulk_launch.dispatch — Bulk Launch wave dispatched
  • action: wavo.rest.bulk_launch.blocked — Bulk Launch blocked by a guardrail

There is no separate "active-first" action — a live publish and a paused publish are both recorded as campaign.publish.

Per entry stored:

  • user_id (who triggered)
  • owner_id (workspace owner / context)
  • resource_type = "campaign" / "bulk_launch"
  • resource_id
  • metadata (JSON: details like target ad account, error message if failed)
  • ip_address + user_agent
  • created_at

View at Settings → Team → Audit Log (team-113 audit log reference). Filter by action: campaign.* for launch-specific events.

2. Ads Manager — per-campaign History tab

Open Ads Manager → click any campaign → History tab:

  • Created (when + by whom)
  • Edited (every config change with old/new values)
  • Paused / Resumed events
  • Archived / Deleted
  • Failed publishes (if any pre-publish errors logged)

This is campaign-scoped view; useful for one-campaign deep dive.

3. Bulk Launch — per-wave status

For Bulk Launch waves:

Endpoints verified:

  • GET /api/v1/bulk-launch/status/:workerRunId — one wave's overall + per-row status
  • POST /api/v1/bulk-launch/status/batch — status for a set of recent waves

Per row:

  • Status: Pending / Queued / In Progress / Success / Failed
  • Timestamp: when each transition happened
  • Error message (if Failed): full error detail
  • Campaign ID (if Success): link to view in Ads Manager
  • Retry button: re-attempt failed rows

UI: Bulk Launch detail page shows all rows in a grid with real-time updates as workers process.

Common queries

"Who launched this campaign?"

  1. Open Ads Manager → find campaign
  2. History tab → first entry = creator + timestamp
  3. OR audit log filter: resource_type: campaign + resource_id: [campaign-id] → first campaign.publish action

"What failed in last Friday's Bulk Launch wave?"

  1. Bulk Launch → status panel → list recent waves
  2. Click wave → see per-row status
  3. Filter to Failed rows → click each for error detail

"Was this campaign launched paused or active?"

The audit action is the same either way (campaign.publish), so the audit log does not distinguish paused-first from active-first. To confirm how it went live, check the campaign's initial status in Ads Manager (paused vs active) after publish.

"Trace the impact of last week's wave"

  1. Filter the audit log by action: wavo.rest.bulk_launch.dispatch around the wave's date
  2. Cross-reference with campaign.publish / campaign.toggle / campaign.budget_edit entries in the same window for post-launch edits

"Show me platform rejections this month"

Platform-side rejections show up as a campaign status of error in Ads Manager (am-113 statuses); Wevion does not emit a dedicated campaign_rejected_by_platform audit action.

Retention

Audit log retention depends on plan (acc-112 quota reference):

  • Starter: shorter window
  • Pro: medium
  • Enterprise: custom

Bulk Launch status retained:

  • Active waves: indefinitely (until you delete)
  • Completed waves: 90 days default

Export to CSV via Bulk Launch status page → Export, or via audit log export (team-113).

Per-row retry from history

For failed Bulk Launch rows, the wave detail page shows Retry action:

  1. Click Retry on a failed row
  2. Wevion re-attempts the same row config
  3. A new Bulk Launch dispatch is recorded in the audit log for the retried rows
  4. Success or fail tracked separately

You can retry multiple rows at once: select rows → Retry all selected.

Use cases

Use case A: Postmortem on failed wave

You launched 50 campaigns Friday, 5 failed. Investigation:

  1. Bulk Launch status → find Friday's wave
  2. Filter failed rows
  3. Per-row error: see why each failed
  4. Fix root cause (e.g. one ad account disconnected, fix + retry those rows)
  5. Document in audit log entry's metadata (manual annotation if supported)

Use case B: Compliance audit

Audit firm requests "who launched what in Q3 2026":

  1. Audit log filter: action: campaign.publish, date_range: 2026-07-01 to 2026-09-30
  2. Export to CSV
  3. Provides per-launch: who, when, what (campaign ID + platform + amount + audience summary)
  4. Auditor traces from here

Use case C: Departing teammate review

Teammate left. Want to see what they launched recently before deciding what to keep:

  1. Audit log filter: user_id: [their-user-id], action: campaign.publish, date_range: last 90 days
  2. Returns all their launches
  3. Decide per-campaign: keep, pause, transfer ownership

Use case D: Incident response

A campaign is spending unexpectedly heavily:

  1. Audit log filter: resource_id: [campaign-id]
  2. Returns full edit history: who changed budget when
  3. Identify the offending change (e.g. someone bumped daily from $50 to $5000)
  4. Revert + communicate

Cross-cluster: full audit log

This article is launch-specific. For broader audit log usage:

What you'll see

In audit log filtered to launch events:

  • Chronological list of launches with per-event metadata
  • Click any entry to expand JSON detail
  • Filter / search / export tools

In Bulk Launch status page:

  • Per-wave card with summary (X rows, Y success, Z failed)
  • Click wave for per-row breakdown
  • Real-time status updates as workers process active waves

Common issues

  • "Audit log entry missing for a launch I made": rare — log entries are atomic with the launch. If genuinely missing, contact support with timestamp + campaign ID.
  • "Bulk Launch status shows 'in progress' for hours": SQS worker stuck. Contact support — may need to manually re-queue.
  • "Cannot see who launched in shared Org workspace": audit log filtered by workspace; need org-level admin access for cross-workspace audit (super_admin role).
  • "Audit log truncated, can't see old launches": retention window exceeded. Export periodically; for very old launches, contact support.

Best practices

Monthly audit review

Admin runs monthly:

  • Audit log export
  • Review for unexpected launches (someone launching outside expected hours, accounts they don't usually touch, etc.)
  • Flag anomalies for follow-up

Tag bulk waves in metadata

For your team's clarity: name bulk waves descriptively (Wevion accepts wave name field). E.g. "Black Friday 2026 wave 1" vs "Wave 1". Easier to find in history later.

Always pause-first to avoid emergency audit needs

Pause-first (cc-119) means problems caught BEFORE money spent. Less to audit post-incident.

FAQ

Where can I see who launched a campaign?

Open the campaign in Wevion's Ads Manager and check the History tab; the first entry shows the creator and timestamp. Alternatively, filter the workspace audit log by resource_type: campaign and the campaign ID to find the first campaign.publish action, which records the user_id that triggered the launch.

How do I review a failed Bulk Launch wave?

Go to Wevion's Bulk Launch status panel, which lists recent waves. Click a wave to see per-row status — Pending, Queued, In Progress, Success, or Failed — then open failed rows for the full error detail. You can retry failed rows individually or select several and retry all at once.

How long is launch history retained?

Audit log retention depends on your plan: a shorter window for Starter, medium for Pro, and custom for Enterprise. Bulk Launch status keeps active waves indefinitely until you delete them, and completed waves for 90 days by default. Export to CSV from the Bulk Launch status page or the audit log to keep records longer.

Can I tell whether a campaign was published paused-first or active-first?

The audit log uses the same action (campaign.publish) for both, so it doesn't distinguish paused from active launches. To tell how it went live, check the campaign's initial status in Ads Manager after publish (paused vs active). Note that by default Wevion publishes ACTIVE unless "Launch as paused" was turned on.