Complete step-by-step guide for Aria to create and manage Meta advertising campaigns
NEVER launch a campaign with unresolved critical blockers. Critical blockers indicate compliance risks, missing infrastructure, or legal issues that could result in ad rejection, wasted budget, or regulatory problems. Always resolve all critical blockers before launch.
1 Open the Command Center dashboard at https://dashboard.thesherminator.com
2 In the left sidebar, click "Simbioza Meta Ads"
3 You'll see the campaigns list page with all active and planned campaigns
At the top of the page, you'll see a horizontal pipeline banner showing all campaign lifecycle stages with live counts:
Use the pipeline banner to quickly jump to campaigns in a specific stage. For example, click "Live" to see only active campaigns, or "Being Defined" to review campaigns still in planning.
When any campaign has active blockers, a red collapsible banner appears at the top showing:
🔄 Live Data — Always Fresh
Campaign data is now served from a live backend API — not a static file. Every time the page loads, the Command Center fetches the latest campaign status, blocker state, and pixel health directly from the backend. The "Updated: just now" timestamp next to the campaign count confirms data freshness. You never need to manually refresh to see current state.
If you see critical blockers in the banner, address them immediately before launching any campaigns. Critical blockers represent compliance risks or broken infrastructure that will cause campaign failures.
Each campaign card shows 5 key metrics at a glance:
| Metric | What It Means |
|---|---|
| Launch Ready | Score out of 100 showing campaign readiness. Color-coded: green (80-100) = "Launch Ready", yellow (50-79) = "Almost Ready", red (0-49) = "Not Ready". Calculated from blockers and infrastructure completeness. |
| CAC (Customer Acquisition Cost) | Target or actual cost to acquire one customer. Lower is better. |
| CTR (Click-Through Rate) | Target or actual percentage of people who click the ad. Higher is better. |
| Budget | Daily spend limit with budget burn indicator showing % of lifetime budget spent (green under 70%, yellow 70-90%, red 90%+). Shows "Spent: $X / $Y" below the progress bar. |
| CPL (Cost Per Lead) | Target or actual cost to get one lead. Lower is better. |
The Launch Ready metric is calculated as follows:
Score interpretation:
You can quickly scan all campaigns and see which are ready to launch (green), which need minor fixes (yellow), and which need significant work (red) — all without opening individual campaigns.
Each campaign card header now includes several at-a-glance status indicators:
Directly below the campaign name, you'll see "Last activity: X ago" in small gray text. This shows when the campaign was last updated or had a report generated (e.g., "2 hours ago", "5 days ago"). Falls back to "Last activity: unknown" if no timestamp is available.
On the right side of the header row (before the expand chevron), a small pill shows pixel installation status:
1 Click the "+ New Campaign" button (top right of the page)
2 A modal form will open. Fill in all required fields:
Campaign Name — Clear, descriptive name for the campaign
Status — Choose based on your planning stage:
Target CAC (Customer Acquisition Cost) — Dollar amount
Target CTR (Click-Through Rate) — Decimal format (0.02 = 2%)
Daily Budget — Dollar amount per day
Lifetime Budget — Total budget for the campaign
Target CPL (Cost Per Lead) — Dollar amount
3 Click "Create Campaign"
Your new campaign will appear at the top of the list with "Being Defined" status, a Launch Ready score of 0 (red), and 5 default blockers. Now you're ready to populate the campaign formation details.
Once your campaign is created, expand it and go to the "Campaign Formation" tab. You'll see several sections that need to be completed:
Blockers are issues that prevent campaign launch. They're categorized by severity and directly impact your Launch Ready score:
| Severity | What It Means | Action Required | Launch Ready Impact |
|---|---|---|---|
| Critical | Legal/compliance risk, broken infrastructure, or ad rejection risk | MUST resolve before launch | -40 points (prevents green score) |
| High | Missing essential components like tracking or landing pages | Should resolve before launch | -20 points (prevents green score) |
| Medium | Non-critical improvements or optimizations | Can launch without, but address ASAP | No direct impact on score |
How to resolve blockers: Each blocker card shows a "Resolution" field with specific next steps. Each blocker also displays two timestamps: Created (when the blocker was first detected) and Last verified (when the system last confirmed it was still active). If a blocker's Last verified date is more than 7 days old, a "Stale — verify" indicator appears — this means the blocker may no longer be relevant and should be manually reviewed. To resolve a blocker directly from the UI, click the green "Resolve" button on the blocker card. This immediately marks it resolved and refreshes the campaign data. Note: auto-generated live blockers (such as the pixel check) will reappear if the underlying issue persists — the system re-checks on every fetch. Work through critical blockers first (to unlock the +40 Launch Ready points), then high-priority ones (to unlock the +20 points).
Watching your Launch Ready score climb: As you resolve blockers and complete infrastructure setup, watch the Launch Ready score increase. Your goal is green (80+) before launch.
Ad sets are groups of ads targeting specific audiences. Each campaign typically has 2-4 ad sets testing different angles.
What each ad set needs:
Create multiple ad sets to test different messaging angles. For example: One focusing on "peace of mind", another on "saves time", and a third on "Medicare support". The system will track which performs best.
Every ad needs high-quality visual content. Uploading approved assets contributes +20 points to your Launch Ready score.
See Section 7 below for detailed Roque's Studio usage.
Targeting determines who sees your ads. You'll need to specify:
Demographics:
Locations:
Interests:
Estimated Reach: The system shows how many people match your targeting. Aim for at least 50,000 for statistical significance.
This section shows your budget allocation and when ads will run:
Let Meta's algorithm learn and optimize for at least 7-14 days before switching to more advanced bid strategies.
Once your campaign is live, watch the budget burn indicator. If it's in the red (90%+ spent) and campaign is still running, consider increasing the lifetime budget or adjusting daily spend to avoid abrupt shutdowns.
Critical for measuring campaign success and unlocking +20 Launch Ready points. You need:
Meta Pixel Installation:
Conversion Events:
Landing Pages:
🔑 Meta Token Expiry Monitoring
The backend automatically monitors Aria's Meta API token expiry. When the token is within 14 days of expiring, a high-priority blocker will automatically appear: "Meta token expiring in X days — refresh required." If the token is already expired, a critical blocker appears instead. This replaces the old manual, hardcoded approach — you never need to set this blocker manually. To refresh the token, Aria should generate a new long-lived token via the Meta developer portal and update /home/ubuntu/.openclaw/agents/frontend/backend/.env.local.
If conversion tracking isn't set up, you'll spend money but won't know which ads are working. Meta also can't optimize delivery. This is a common critical blocker — don't skip it! Additionally, your Launch Ready score will be capped at 60 (yellow) maximum.
Once your campaign launches, the "Analysis Reports" tab provides performance insights:
Summary: High-level overview of campaign health
Highlights: Key wins or concerns
Observations: Data-driven insights from the analytics
Recommendations: Specific action items based on performance
Make it a habit to check daily reports at the start of your day. React quickly to trends — advertising performance can shift fast.
The Knowledge Base (accessible from the top navigation) contains reference material and best practices:
Roque's Studio is where you request and manage visual assets for your campaigns.
1 Click "Roque's Studio" in the top navigation of the Meta Ads page
2 You'll see the asset library and project management interface
Request assets at least 3-5 days before you need them. Good creative takes time, and you may need revision rounds. Remember: approved assets contribute +20 points to your Launch Ready score.
Before launching any campaign, verify:
☐ Launch Ready score is green (80-100) — This confirms all critical prerequisites are met
☐ All critical blockers resolved — No red "Critical" badges in Campaign Formation or Blocker Alert Banner
☐ Meta Pixel installed and firing — Pixel Status Badge shows "Pixel: Active" with green dot
☐ Landing pages live and working — Click each landing page URL and verify it loads correctly
☐ All ad sets have approved creatives — No "Not Created" or "Pending" image statuses
☐ Targeting audience size reasonable — Estimated reach shows 50K+ people
☐ Budget allocated correctly — Daily and lifetime budgets make sense for campaign goals
☐ Compliance review complete — For healthcare: no unverified medical claims, privacy policy exists, HIPAA compliance addressed
Once all items above are checked and your Launch Ready score is green, you're ready to create the campaign in Meta Ads Manager and start driving leads.
After launch, monitor performance closely for the first 72 hours:
Every time you edit a campaign (budget, targeting, creative), Meta's algorithm resets its learning phase. Make changes sparingly — wait at least 3-5 days between optimizations.
If you run into issues or have questions:
This section is for agents who need to understand the data architecture when debugging or building on top of the campaign system.
GET /api/meta-ads/campaigns — Returns all campaigns with live-injected blockers, pixel status, and token healthGET /api/meta-ads/campaigns/:id — Returns a single campaign by IDPATCH /api/meta-ads/campaigns/:id — Updates campaign fields (status, budget, etc.)POST /api/meta-ads/campaigns — Creates a new campaign recordPATCH /api/meta-ads/campaigns/:id/blockers/:blockerId — Resolve or snooze a specific blocker. Send {"status": "resolved"} or {"status": "snoozed"}.On every GET /api/meta-ads/campaigns call, the backend runs the following checks against Meta's API (with caching to avoid hammering Meta):
last_fired_time is stale or absent, the pixel blocker appears.Auto-generated live blockers use stable, deterministic IDs (e.g., pixel-not-installed, token-expiring). This ensures the Resolve button always targets the correct blocker regardless of when the page was loaded. Manual blockers created via the API should use descriptive kebab-case IDs.
Meta API credentials (access token, ad account ID, app ID, app secret) are stored server-side in /home/ubuntu/.openclaw/agents/frontend/backend/.env.local. They are never exposed to the frontend or committed to source control. Current token: valid, expires ~June 3 2026. Ad account: act_4042508855999639.
Document Version: 2.1 (2026-04-06)
Last Updated: April 5, 2026
Maintained by: Darrow (Chief of Staff)