← Optimize skills

Daily Ads Check

A 5-minute morning check: ad sets ending before the offer does, campaigns that say ACTIVE but spent ₹0, pacing, and one proposed action.

Free skill · Runs on your ad account via TalkToAds · Works in Claude, Claude Code and ChatGPT

From Sanskar's ad account

On 12 Oct 2026 two ad sets selling a ₹2,999 live session had end_time set to Sunday night. The offer ran until Wednesday. Ads Manager still said ACTIVE, spend went to ₹0, and revenue dropped from about ₹42k a day to ₹3k. Nothing showed an error. This check exists because of that.

On 22 Oct a prepaid ad account hit a ₹22 balance and spend across every campaign quietly stopped. Step 3 catches that in the first minute.

Install

Run this once in your terminal. Claude Code picks the skill up in your next session, in every project.

Terminalmkdir -p ~/.claude/skills/daily-ads-check && curl -fsSL https://talktoads.com/skills/daily-ads-check/SKILL.md -o ~/.claude/skills/daily-ads-check/SKILL.md

For one project only, use .claude/skills/daily-ads-check inside the project instead.

Then ask

Run my daily ads check

The skill

What the agent follows, from the SKILL.md you download.

A short check to run every morning before you touch anything. The goal is to catch the quiet failures. A broken ad usually doesn't show an error: it says ACTIVE, spends ₹0, and your sales drop.

Needs the TalkToAds connector (Meta). Read-only until the user approves the one action at the end.

Steps

  1. Pick the account. Call list_ad_accounts. If there is more than one, ask which ones to check, or check all of them.

  2. Yesterday's numbers. Call get_performance with object_id = the account, level: "campaign", date_preset: "yesterday". Note spend, results, cost per result and ROAS per campaign.

  3. ACTIVE but ₹0. Call list_campaigns with status: "ACTIVE". Any campaign that is ACTIVE but spent 0 yesterday is broken. Check, in this order:

    • ad set end_time already passed (list_ad_sets)
    • ads stuck in review or rejected (list_ads, look at effective_status and ad_review_feedback)
    • billing: prepaid balance used up, or a card that failed. TalkToAds can't see the balance, so tell the user to open Billing in Ads Manager.
  4. Ad sets ending soon. Call list_ad_sets for the account with status: "ACTIVE". List every ad set whose end_time is in the next 48 hours. Ask the user when the offer it promotes actually ends. If the offer runs longer, propose extending the end date.

  5. Learning and pacing. From the same ad sets, flag anything LEARNING_LIMITED in learning_stage_info. Compare yesterday's spend with the daily budget. Under 50% means it isn't delivering, over 120% is normal Meta overspend for a day.

  6. Report, then one action. Write a short report:

    • Yesterday: total spend, results, cost per result, ROAS (say that ROAS is Meta's number, not your bank's)
    • Broken: the ACTIVE-but-₹0 list with the reason
    • Ending soon: the ad sets and their end dates
    • One proposed action, the most valuable one. Then stop and wait for a yes.

Rules

  • Never change anything without a yes. This skill reads; the user decides.
  • One action, not ten. If everything is fine, say "nothing to do today".
  • If spend dropped to near zero across the whole account, check billing first. It's almost never the ads.
  • When the user changes an offer date, change the ad set end dates in the same session.