Overview
Yourad-config.json file defines the performance benchmarks that Meta Ads Copilot uses to evaluate campaigns, detect problems, and recommend actions. Think of it as teaching the agent what “good” looks like for your business.
Configuration File Location
The configuration file lives at the root of your Meta Ads Kit directory:Edit with your values
Open
ad-config.json in your editor and customize the benchmarks for your business.Configuration Structure
Here’s the complete structure with real examples:ad-config.json
Account Settings
Identifies your Meta ad account and brand name.Your Meta ad account ID (format:
act_123456789). Find this by running:A friendly name for your brand. Used in reports and notifications.Example:
"My Brand", "Acme Coffee Co", "SaaS Startup"Benchmarks
These are your performance targets. The agent uses these to identify winners, bleeders, and opportunities.Target Cost Per Acquisition — What you’re willing to pay per conversion.
- Used to flag campaigns exceeding your CPA goal
- Helps prioritize budget shifts toward efficient campaigns
- Example:
25.00(you want to keep CPA under $25)
25.00 initially. The agent will learn from your data.Target Return on Ad Spend — Revenue divided by ad spend.
- A ROAS of
3.0means 1 spent - Used to identify campaigns below your profitability threshold
- Example:
3.0(you need at least 3x return)
ROAS is the inverse of CPA. If your average order value is 25, your ROAS target is
75/25 = 3.0.Maximum Ad Frequency — How many times the same person sees your ad.
- Frequency above this signals creative fatigue
- Higher frequency often means rising CPM and falling CTR
- Typical range:
3.0-4.0 - Example:
3.5(flag ads shown 3.5+ times per person)
- Users get ad blindness
- CTR drops
- CPC rises
- Conversion rate declines
Minimum Click-Through Rate — Percentage of people who click your ad.
- CTR below this indicates weak creative or wrong audience
- Used to identify “bleeders” wasting budget
- Typical range:
1.0%-2.0% - Example:
1.0(flag ads with CTR under 1%)
Maximum Cost Per Click — What you’re willing to pay per click.
- Helps identify expensive, inefficient ads
- Used alongside CTR to spot bleeders
- Example:
2.50(flag ads where clicks cost over $2.50)
- Work backward from your target CPA and conversion rate
- If CPA target is 2.50`
Alerts
Alert thresholds control when the agent flags campaigns for your attention.Bleeder CTR Threshold — CTR below this marks an ad as a “bleeder.”
- Bleeders are ads spending money but getting weak engagement
- Typically matches your
benchmarks.min_ctr - Example:
1.0(CTR under 1% = bleeder)
- Flags the ad in daily reports
- Recommends pausing or refreshing creative
- Prioritizes these for budget reallocation
Bleeder Frequency Threshold — Frequency above this contributes to bleeder detection.
- High frequency + low CTR = definite bleeder
- Typically matches your
benchmarks.max_frequency - Example:
3.5(frequency over 3.5 signals fatigue)
Fatigue CTR Drop Percentage — CTR decline that signals creative fatigue.
- Measured over 3-7 day window
- A
20means CTR dropped 20% or more from previous period - Example:
20(CTR fell from 2% to 1.6% = 20% drop = fatigue)
The agent tracks CTR trends over time. A gradual decline hitting this threshold triggers a fatigue alert before the ad becomes a full bleeder.
Spend Pace Alert Percentage — Deviation from expected spend that triggers an alert.
- Tracks whether you’re spending ahead or behind schedule
- A
15means ±15% variance from expected monthly pace - Example:
15(if monthly budget is 4k by day 10 instead of expected $3.3k, you’re +21% ahead = alert)
- Catch budget overruns early
- Identify days where spend stalled (delivery issues)
- Helps maintain consistent monthly pacing
Reporting
Default settings for reports and time ranges.Default Date Range Preset — The time window used for reports unless overridden.Options:
last_7d— Last 7 days (recommended for daily checks)last_14d— Last 14 dayslast_30d— Last 30 dayslast_90d— Last 90 daystoday— Today onlyyesterday— Yesterday onlythis_month— Month to datelast_month— Previous month
"last_7d"You can override this per-report using the
--preset flag:Timezone — Used for date boundaries and pacing calculations.Format: IANA timezone identifierExamples:
America/New_YorkAmerica/Los_AngelesAmerica/ChicagoEurope/LondonAsia/Tokyo
"America/New_York"Using Benchmarks Conversationally
If you’re running with the OpenClaw agent, you don’t have to edit JSON manually. Just tell the agent:Don’t Know Your Benchmarks?
Leave the defaults. The agent will:- Analyze your historical data
- Identify patterns (median CTR, CPC, frequency)
- Suggest benchmarks based on your actual performance
- Learn over time what “good” looks like for your account
Examples by Business Type
E-commerce (Direct-to-Consumer)
- E-commerce needs strong CTR (1.5%+) because competition is high
- ROAS of 3.5x is common target with 25-30% margins
- Frequency caps lower (3.0) because creative fatigue hits fast
- Tighter spend pacing (10%) to avoid blowing monthly budget early
B2B SaaS (Lead Generation)
- Higher CPA acceptable ($75) because lead value is high
- Lower CTR threshold (0.8%) because B2B audiences are narrow
- Higher frequency tolerance (5.0) — smaller audiences need more impressions
- ROAS of 5x reflects high lifetime value
Local Business (Lead Gen)
- Lower CPA target ($15) because local budgets are tight
- Modest CPC ceiling ($2) keeps cost per lead reasonable
- Moderate frequency (4.0) — local audiences small but not as narrow as B2B
Troubleshooting
Agent ignoring my benchmarks
Check:- Is
ad-config.jsonin the root directory? - Is the JSON valid? Test with:
- Did you restart the agent after editing?
Getting too many bleeder alerts
Fix: Lower yourmin_ctr threshold. Your industry may have naturally lower CTR.
Not getting fatigue alerts when expected
Fix: Lower thefatigue_ctr_drop_pct to catch smaller declines.
Spend pace alerts firing incorrectly
Check your timezone setting. If your timezone doesn’t match Meta’s, daily spend calculations will be off.Agent says “no benchmarks configured”
Fix: Ensuread-config.json exists and has a benchmarks object:
Related
- Authentication — Set up Meta API access
- Automation — Schedule daily checks
- Daily Check — How benchmarks are used in reports