CASE STUDY
How 45 minutes of manual account checks became a single Telegram message at 8am
Managing ad accounts across two markets meant starting every morning with a full login-and-check routine across Meta Business Suite, CPAS, and ClickUp before any actual work could happen. This system replaced that entire routine with one automated brief delivered before the first meeting of the day.
THE PROBLEM
Every morning started with 45 minutes of checking before any real work could start.
Running Meta campaigns across SG and MY meant logging into three separate places every morning: Meta Business Suite for SG spend and delivery, Meta Business Suite for MY (separate ad account), and CPAS reporting for collaborative ad performance. On top of that, opening ClickUp to see what tasks were sitting open. Each platform required a full login, and the data from each was never in the same place. By the time all three were checked and mentally combined into a picture of where the day stood, 45 minutes were gone and the information was still scattered across browser tabs and mental notes.
"The morning check wasn't optional. You had to know if SG was overpacing before 10am or you'd blow the daily budget by noon. But doing it manually every day meant 45 minutes of reactive work before the productive work could start. The brief doesn't just save time -- it means the first decision of the day is already informed when you sit down."
THE PIPELINE
Cron fires at 8am, Telegram message arrives before the first meeting
HOW IT WORKS
Eight steps, zero manual triggers
n8n cron fires at 8am SGT daily
No manual trigger. The workflow runs automatically every morning at 8am Singapore time, seven days a week. No one has to remember to start it.
Meta Marketing API called for SG account
Live spend, impressions, CPM, and delivery status pulled for the SG ad account. Data is current as of the API call -- no cached yesterday figures.
Meta Marketing API called for MY account
Same pull run against the MY ad account independently. Both accounts are checked in the same workflow run so nothing gets missed.
CPAS spend pulled separately
Collaborative Ads (CPAS) run through a separate campaign structure and use a different action type for conversions. Pulled and reported separately so CPAS performance doesn't get blended with direct account spend.
Claude AI calculates pacing status per account
For each account, Claude compares actual spend against expected spend based on daily budget and time of day. Output is a single status: GREEN (on track), AMBER (underpacing or slight overpace), or RED (overpacing significantly or delivery issue).
Open ClickUp tasks pulled and appended
The brief isn't just ad data. Open tasks from ClickUp are pulled and added as a summary section so the morning brief includes both account status and what's on the action list for the day.
Brief formatted into a readable Telegram message
All data combined into a single formatted message: account status per market, CPAS note, ClickUp task count, and any flags that need attention before the next budget review window.
Message pushed to Telegram
Delivered to a private Telegram chat. Readable on mobile in under 30 seconds. No dashboard login, no browser tab juggling, no mental math required to understand the account state.
RESULTS
What changed after the brief went live
→ 45 minutes of manual checks eliminated daily
The morning routine that used to consume the first hour of every workday is now fully automated. That time goes to actual campaign work instead.
→ Overpacing caught before it compounds
GREEN/AMBER/RED status means overpacing is flagged at 8am instead of discovered at end of day after the budget is already blown. The intervention window is the whole morning, not the last 10 minutes.
→ All three accounts in one read
SG, MY, and CPAS in a single Telegram message. No switching between platforms, no separate login for each market. The full picture is in one place, every morning.
→ Zero dashboard logins needed to start the day
The first decision of the day is already informed without opening a single browser tab. Task context and account status both arrive in the brief.
KEY ENGINEERING DECISIONS
Why Claude calculates status instead of a fixed threshold rule
The first version used a hard-coded rule: if spend is more than 110% of expected pacing, flag as RED. This broke on weekends, on sale days, and on days when a campaign had just been turned on and hadn't spent enough to trigger the threshold meaningfully. Claude handles pacing status instead because the evaluation needs context, not just a number. It knows whether it's a weekend, whether a campaign is new, and whether CPAS figures should be factored into the pacing read or excluded.
"A rule that flags RED on sale day overspend is a bad rule. Sale day overspend is intentional. The status calculation needs to understand intent, not just compare two numbers. That's why the fixed threshold version got replaced."
Telegram was chosen over email for delivery because a Telegram message is read immediately on mobile. An email brief gets batched with everything else in the inbox and loses its time-sensitivity. The brief only matters if it's acted on before the campaign spend window closes.
SIMILAR USE CASES
Where this system applies
Any media buyer or performance marketer managing multiple ad accounts across platforms or markets. The pattern adapts to Google Ads, TikTok Ads, or a mix. Add Shopee or TikTok Shop GMV data alongside ad spend and the brief becomes a full-funnel morning read, not just a media check.