Back to Portfolio

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.

Meta APIClickUp APIn8nClaude AITelegram BotBeauty Brand SG + MY
45 min
Manual checks replaced
3
Ad accounts covered per brief
8am SGT
Delivered daily, no manual trigger
0
Dashboard logins needed
Live
Running on real accounts
GREEN / AMBER / RED
Instant pacing status per account

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

8am cronMeta API (SG + MY + CPAS)Status calculationClickUp pullTelegram push

HOW IT WORKS

Eight steps, zero manual triggers

01

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.

02

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.

03

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.

04

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.

05

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

06

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.

07

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.

08

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.