---
name: daily-ads-check
description: Run a 5-minute morning check on a Meta ad account. Finds ad sets about to end before the offer does, campaigns that say ACTIVE but spent nothing, budgets that are pacing wrong, and ends with exactly one proposed action. Use when the user says "daily ads check", "check my ads", "how did my ads do yesterday" or "anything wrong with my ads".
---

# Daily ads check

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.

## 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.
