Bulk Launch across multiple ad accounts

Bulk Launch where each row targets a different ad account. Agency use cases. Per-account customization within shared template.

Written By Salvatore Sinigaglia

Last updated About 5 hours ago

Bulk Launch where each row targets a different ad account. Agency use cases. Per-account customization within shared template.

Bulk Launch across multiple ad accounts

Each Bulk Launch row can target a different ad account via its account_id field. Combined with a campaign template, this lets agencies launch the same campaign across 10+ client accounts in minutes. Each row inherits template defaults + customizes per-account (currency, audience, budget).

Who is this for

  • Agencies managing multiple client ad accounts in the same workspace
  • In-house teams with separate ad accounts per brand or market
  • Multi-region teams running parallel campaigns per region
  • Anyone who needs same campaign concept executed across many accounts simultaneously

Prerequisites

  • Multiple connected ad accounts (gs-104, meta-103)
  • Familiarity with Bulk Launch overview
  • (Optional) A campaign template (cc-118) for repeatable pattern
  • Wevion role: mediabuyer, manager, admin, owner, super_admin

Multi-account workflow

Step 1: Identify which accounts

Decide the scope:

  • All connected accounts on Meta? All Google?
  • A subset (e.g. only EU clients, only e-commerce verticals)?
  • One row per account, OR multiple rows per account?

For a typical agency wave: one row per client = one campaign per client. 10 clients = 10 rows.

Create a campaign template that captures everything shared across accounts:

  • Objective
  • Budget structure (CBO/ABO)
  • Audience template (countries, age, interests)
  • Creative slots (placeholders for per-account creative)
  • Copy templates (with variables you'll fill per-row)

Save it as a campaign template (verified POST /api/v1/campaign-templates; the endpoint supports GET/POST/DELETE only — there is no update/PATCH). See cc-118 campaign templates.

Step 3: Open Bulk Launch

/launch. Click Import from template in the toolbar. Pick your template. Grid auto-populates with N empty rows OR you start with 1 row and duplicate as needed.

Step 4: Customize per-row

For each row:

FieldWhat to customize per-account
account_idThe unique ad account ID for that client
fan_page_idClient's specific Page (Meta)
pixel_idClient's specific pixel
campaign_nameInclude client name in convention (e.g. [Client A] Q4 Sales 2026)
daily_budgetClient-agreed budget for this campaign
target_country / target_citiesClient's market
dsa_beneficiary / dsa_payorClient's legal entity (EU only)
Creative slotClient's specific creative (or shared if licensed)
CopyClient-specific brand voice

Other fields stay shared from template.

Step 5: Validate

Click Validate all in the toolbar. Per-row validation runs:

  • Missing required fields highlighted
  • Cross-row checks (duplicate campaign names within an account → warning)
  • Per-account checks (account-specific currency must match budget unit, etc.)

Fix any errors before publishing.

Step 6: Publish all

Click Publish all. Backend processes via SQS workers in parallel (POST /api/v1/bulk-launch). Status per row visible in real-time.

10 rows typically publish in 1-2 minutes (parallel execution).

Per-account currency handling

Each ad account has its own currency (set at account creation, immutable). When Bulk Launch publishes per row:

  • daily_budget (in cents) is interpreted in that account's currency
  • A row with account_id = act_USD_account + daily_budget = 5000 (cents) = $50
  • A row with account_id = act_EUR_account + daily_budget = 5000 = €50

If you're running same-amount across accounts, the row's daily_budget is the same number; the platform charges native currency.

For cross-account reporting: Wevion converts to workspace currency via daily FX rate (gs-118).

Audit + governance

Bulk launches are audit-logged, attributing to the user who dispatched the launch:

  • action: wavo.rest.bulk_launch.dispatch (and wavo.rest.bulk_launch.blocked when a guardrail blocks it)
  • resource_type: bulk_launch

Useful for: tracking which agency staff launched which campaigns, compliance reviews, post-mortems on wave performance.

See team-113 audit log for queries.

Agency-specific patterns

Pattern A: Repeatable monthly wave

  • Monthly template ("Monthly evergreen Q4-2026")
  • Bulk Launch one row per client account
  • Same audience template, different budget per client agreement
  • Publish wave first Monday of each month

Pattern B: Black Friday simultaneous launch

  • Black Friday template ("BF 2026 Sale 20% off")
  • Bulk Launch 50 rows (1 per client * platforms)
  • Synchronized publish at exactly 00:00 Friday
  • Pause-first: actually publish on Wednesday, activate at 00:00 Friday

Pattern C: Cross-market test

  • Test template ("New product variant test")
  • Bulk Launch one row per country market
  • Same product, localized copy + creative + DSA
  • Compare per-market results in Cross-Channel Analytics

Pattern D: Onboarding new client

  • Onboarding template (proven first-campaign for new clients)
  • Bulk Launch one row for new client
  • Customize: client's account/pixel/Page + budget
  • Publish + verify per-account before activating

RBAC and Bulk Launch

Per team-101 RBAC reference, publishing campaigns requires mediabuyer+ role. For Bulk Launch specifically:

  • All roles that can launch can also Bulk Launch
  • Account access: each row only succeeds if the publisher has access to that account_id (via team-108 share ad accounts)
  • Failed rows due to missing account access: error visible in row detail

What you'll see

Successful multi-account bulk run:

  • Grid shows 10 rows all green (Success)
  • Each row has campaign ID linked to Ads Manager
  • Bulk run summary: "10 of 10 succeeded, $XXX total prorated budget"
  • The launch is recorded in the audit log as a wavo.rest.bulk_launch.dispatch entry

Common issues

  • "Row failed: account not accessible": publisher's Meta user lacks access to that ad account. Either add via Meta BM OR have a different teammate publish that row.
  • "Currency mismatch warning": row's daily_budget seems mis-calibrated for the account's currency. Verify the budget is intentional.
  • "Multiple rows failed mid-wave": usually rate limit on the source platform (10+ parallel publishes too fast). Wevion auto-retries with backoff. Wait + check status.
  • "Pixel_id wrong for client": each client's pixel ID is different. Don't copy-paste pixel across rows. Use per-row pixel mapping.
  • "Duplicate campaign name warning": same name across accounts is OK (each account has its own namespace), but Wevion warns to avoid confusion in reports. Add account name to campaign name convention.

Performance considerations

  • 10 rows: ~30 sec total
  • 50 rows: ~2-3 min
  • 100 rows: ~5-10 min
  • 500+: consider splitting into multiple waves to avoid platform rate limits

For very large waves (1000+ rows): contact support@wevion.ai to coordinate. May need elevated rate limit arrangement with the platform.

FAQ

Can each Bulk Launch row target a different ad account?

Yes. In Wevion's Bulk Launch each row targets a different ad account through its account_id field. Combined with a campaign template, this lets agencies launch the same campaign across ten or more client accounts in minutes — each row inherits template defaults and then customizes per-account values like currency, audience, pixel, Page, and budget.

How does Wevion handle different currencies across ad accounts?

Each ad account has its own currency, set at account creation and immutable, so Wevion interprets a row's daily_budget (in cents) in that account's native currency. A row of 5000 cents on a USD account is $50; the same on a EUR account is €50. For cross-account reporting, Wevion converts to workspace currency via the daily FX rate.

Why did a row fail with "account not accessible"?

That row failed because the publisher's Meta user lacks access to that ad account. In Wevion's Bulk Launch each row only succeeds if the person who clicked publish has access to its account_id. Fix it by adding access in Meta Business Manager, or have a teammate who already has access publish that row.

Which Wevion roles can run multi-account Bulk Launch?

Publishing campaigns in Wevion requires a mediabuyer role or higher, so mediabuyer, manager, admin, owner, and super_admin can all run multi-account Bulk Launch. Every role that can launch can also Bulk Launch. Each row additionally succeeds only if the publisher has access to that row's ad account via shared ad accounts.

How long does a large multi-account wave take?

It depends on row count and platform rate limits. In Wevion, ten rows publish in about 30 seconds, fifty in two to three minutes, and one hundred in five to ten minutes. For 500-plus rows, split into multiple waves to avoid platform rate limits; for 1000-plus, contact support@wevion.ai to coordinate.