gym-meta-ads-funnel — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited gym-meta-ads-funnel (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Sell the challenge or front-end offer in the ad, route strangers into a short funnel that books a consult, and price the spend against what the offer can afford. The ad sells the challenge, never the gym itself.
Produce 5 to 10 variations across angles (busy professional, postpartum, strength/over 40, weight loss, bridal/event, beginner, corporate, testimonial-led). Use the ad-script-pack below to draft, references/ad-anatomy for finished examples.
ad_budget_planner.js to turn the fill goal into daily spend, expected leads, and the breakeven cost per lead the offer allows.Self-contained Node script. Save as ad_budget_planner.js and run with node ad_budget_planner.js. No dependencies.
// Meta ad budget planner. Edit inputs, then: node ad_budget_planner.js
const inputs = {
monthlyFillGoal: 20, // paid challengers wanted this month
targetCpl: 25, // target cost per lead
monthlyBudget: 1500, // ad budget for the month
leadToFill: 0.4, // share of leads that become paid challengers
challengePrice: 499, // for the breakeven CPL
fulfillmentPerChallenger: 120, // delivery cost per challenger
}
function plan(i) {
const dailySpend = i.monthlyBudget / 30
const expectedLeads = i.monthlyBudget / i.targetCpl
const expectedFills = expectedLeads * i.leadToFill
const leadsNeeded = i.monthlyFillGoal / i.leadToFill
const budgetForGoal = leadsNeeded * i.targetCpl
// Front-end breakeven CPL: price = cpl/leadToFill + fulfillment -> solve cpl.
const breakevenCpl = (i.challengePrice - i.fulfillmentPerChallenger) * i.leadToFill
return {
dailySpend, expectedLeads, expectedFills, leadsNeeded, budgetForGoal, breakevenCpl,
}
}
const r = plan(inputs)
const m = (n) => '$' + n.toFixed(2)
console.log('Daily spend: ', m(r.dailySpend))
console.log('Expected leads at target: ', Math.round(r.expectedLeads))
console.log('Expected challengers: ', Math.round(r.expectedFills))
console.log('Leads needed for goal: ', Math.ceil(r.leadsNeeded))
console.log('Budget to hit fill goal: ', m(r.budgetForGoal))
console.log('Breakeven cost per lead: ', m(r.breakevenCpl))
console.log(
inputs.targetCpl <= r.breakevenCpl
? 'Verdict: target CPL is below breakeven. Front-end self-funds.'
: 'Verdict: target CPL exceeds breakeven. Back-end must carry the loss.'
)Daily spend: $50.00
Expected leads at target: 60
Expected challengers: 24
Leads needed for goal: 50
Budget to hit fill goal: $1250.00
Breakeven cost per lead: $151.60
Verdict: target CPL is below breakeven. Front-end self-funds.Read it: $1,500 a month is $50 a day, which at a $25 cost per lead buys 60 leads and about 24 challengers, past the goal of 20. You only need $1,250 to hit 20, so there is room. Breakeven cost per lead is $151.60, so even if leads got six times more expensive the front-end would still cover itself - plenty of margin to test.
Eight fill-in ad skeletons. Each has two hook options; pick one and complete the stack.
AD 1. Avatar: busy professional
Hook A: "[FILL: No time to train but tired of feeling out of shape?]"
Hook B: "[FILL: Work 50 hours a week and still want to be fit?]"
Problem: [FILL]
Mechanism: [FILL: 30-minute small-group sessions, done-for-you plan]
Proof: [FILL: client result]
Offer: [FILL: 6-week challenge, price, deadline] -> [CTA]
AD 2. Avatar: postpartum
Hook A: "[FILL: Months after baby and your body still doesn't feel like yours?]"
Hook B: "[FILL: Ready to feel strong again after baby?]"
Problem / Mechanism / Proof / Offer: [FILL]
AD 3. Avatar: weight loss
Hook A: "[FILL: Stuck on the same 15 pounds?]"
Hook B: "[FILL: Tried every diet and nothing sticks?]"
Problem / Mechanism / Proof / Offer: [FILL]
AD 4. Avatar: strength / over 40
Hook A: "[FILL: Over 40 and losing strength every year?]"
Hook B: "[FILL: Want to be the strong dad who keeps up?]"
Problem / Mechanism / Proof / Offer: [FILL]
AD 5-8. Repeat the structure for: bridal/event, beginner/intimidated,
corporate team, and a testimonial-led ad (lead with the client's words).CHALLENGE LANDING PAGE. [FILL: challenge name]
HEADLINE: [FILL: the promise, who it's for, the time frame]
SUBHEAD: [FILL: the mechanism in one line]
BULLETS: [FILL: 4-6 inclusions, each tied to an obstacle removed]
PROOF: [FILL: 2-3 before/after results or testimonials]
GUARANTEE: [FILL: from gym-pricing-and-guarantees]
SCARCITY: [FILL: spots per cohort]
URGENCY: [FILL: start date / doors close]
CTA: [FILL: "Claim your spot" -> lead form]Every ad is hook, problem, mechanism, proof, offer, call to action. Twelve compact examples across four angles:
Busy professional:
Postpartum:
Strength / over 40:
Weight loss:
Each names the avatar, the pain, the mechanism, a proof point, and a clear next step with scarcity and urgency.
Track the whole path, not the cheapest top-of-funnel number:
Rough local-gym benchmarks: cost per lead $5 to $40 depending on market, lead to booked around 50 percent, booked to show around 70 percent, show to sale 30 to 50 percent. Use your own numbers once you have two weeks of data. Compare cost per sale to the breakeven from ad_budget_planner.js, not to a vanity CPL.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.