Launch history and audit

Last updated: May 19, 2026

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 GET /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:

  • action: campaign_publish — when you publish a campaign

  • action: campaign_publish_active_first — when you publish straight to active (bypassing paused-first)

  • action: campaign_pause — pause action

  • action: campaign_resume — resume action

  • action: campaign_delete — deletion

  • action: bulk_launch_publish — Bulk Launch wave start

  • action: bulk_launch_row_success — per-row success in a wave

  • action: bulk_launch_row_failed — per-row failure with reason

Per entry stored:

  • user_id (who triggered)

  • owner_id (workspace owner / context)

  • resource_type = "campaign" / "bulk_launch"

  • resource_id (campaign ID or bulk_run_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

  • GET /api/v1/bulk-launch/status/batch — list recent waves + summary

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 active-first or paused-first?"

Audit log filter: resource_id: [campaign-id], action: campaign_publish*:

  • campaign_publish = paused-first (default)

  • campaign_publish_active_first = active-first (warned)

"Trace cascading impact of last week's wave"

  1. Get bulk_run_id from wave detail

  2. Audit log filter: metadata.bulk_run_id: [bulk_run_id]

  3. Returns all related events: row publishes + any post-launch edits + pauses

"Show me all rejections this month"

Audit log filter: action: campaign_rejected_by_platform, date_range: last 30 days. Returns per-campaign rejections with Meta/Google error codes.

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. New audit log entry created (action: bulk_launch_row_retry)

  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.

Related