監視Guides

Monitors, briefs and reports

Adako is an MCP server and REST API that connects Claude, ChatGPT, Cursor and other assistants to Google Ads, Meta Ads, ChatGPT Ads and LinkedIn Ads. It can also watch those accounts for you, once a day, and say something when a number moves.

What is stored

Adako keeps a rolling 90 days of daily metrics and a snapshot of the account’s structure in its own database. Monitors, briefs and reports read that copy, so they make no platform call, consume no tasks, and cannot exhaust an account’s API quota. Live questions still go to the platform.

How deep that copy goes follows the platform: Meta down to each ad, Google and ChatGPT Ads to the ad group, LinkedIn to the campaign.

  • Paid plans: a metric sync every day, plus a backfill until the account has 90 days.
  • Free: one 90-day snapshot when an account is connected, and no daily refresh.
  • Conversions are re-read for the last three days, because attribution arrives late.

The two daily jobs

JobWhenWhat it does
sync06:00 UTCRefreshes the last days per active account and backfills history.
monitors07:00 UTCEvaluates every enabled monitor against yesterday in the account timezone, emails the alerts, and sends the briefs that are due.

Daily, not live

A monitor sees yesterday. It is a guardrail, not a pager. Re-running the job is safe: one monitor fires at most once a day and every alert carries an idempotency key.

A monitor

A rule is a metric, an operator, a threshold, and how long it must hold.

  • Metrics: spend, clicks, impressions, conversions, conversion value, CTR, CPC, CPA, CPM, ROAS, conversion rate, cost per lead, budget utilisation.
  • Operators: less than, greater than, changes by, drops by, rises by. A relative threshold compares against the baseline average instead of an absolute number.
  • baseline_days sets how much history the baseline averages, up to 90. consecutive_days requires the rule to hold several days in a row, which is how you keep one bad Saturday out of the inbox.
  • Scope it to one platform, one account, and optionally a list of campaigns.
  • Or watch everything: all_accounts covers every active account on a platform, and leaving platform out as well covers every platform you have connected. Each account is judged on its own numbers, in its own currency and its own timezone, and keeps its own streak. One email a day names the accounts that fired. A monitor that watches several accounts carries no action and no campaign ids, because both name one account.
test first, then save
monitoring(action="execute", tool_name="test_monitor",
           arguments={"platform": "google_ads", "metric": "cpa",
                      "operator": "greater_than", "threshold": 80,
                      "consecutive_days": 2})
monitoring_write(action="execute", tool_name="create_monitor",
                 arguments={"name": "CPA ceiling", "platform": "google_ads",
                            "metric": "cpa", "operator": "greater_than",
                            "threshold": 80, "consecutive_days": 2})

test_monitor replays the rule over the last 7 days and reports which days would have alerted, with the value and the baseline for each. It is free, so tune the threshold before saving anything. get_monitor_history answers the same question afterwards, with real rows. Saving is a change, so create_monitor runs through monitoring_write.

When a monitor fires

It emails the operator. If it carries an action, it also creates a proposal: pause that campaign, or lower that budget by a percentage. Nothing runs on its own.

  • list_pending_actions shows which monitor, which day, what it wants to change and when it expires.
  • manage_action applies or declines one. The same proposal appears at Approvals.
  • A monitor with an action must name exactly one campaign, so the proposal names one object.
  • Actions run on Google Ads, Meta Ads, LinkedIn Ads and ChatGPT Ads. A TikTok monitor emails and proposes nothing, because TikTok has no budget tool here yet.

Briefs and reports

  • schedule_brief: daily or weekly, an hour and an IANA timezone, the platforms and accounts to cover, and where to send it. A daily brief compares yesterday with the day before; a weekly one compares the last 7 days with the previous 7.
  • Report types: performance_brief (totals, per account, top campaigns), detailed_analysis (adds the biggest movers), executive_summary (totals and three lines).
  • generate_report_now composes one immediately and stores it with a permanent page. Read them at Reports.
  • list_scheduled_tasks lists the briefs and the monitors together, and manage_scheduled_task pauses, resumes or deletes either one. Pausing keeps the settings.

The job runs once a day, so the hour schedules the day rather than the minute: a brief goes out on the first daily pass at or after your hour.

Stopping the emails

Every alert and every brief carries an unsubscribe link, and the one-click header mail clients use for their own unsubscribe button. Following either switches off that one monitor or that one schedule — nothing else changes, and you can switch it back on in the web app. Sign-in codes, a report you asked to be emailed and billing notices carry no unsubscribe: they are sent because you asked for them, one at a time.

In the web app

Monitors lists every rule with its state, last run and last fire, and lets you create, edit and switch one off. Reports holds the briefs and reports that have been produced, newest first.

Plans

create_monitor, update_monitor, schedule_brief and generate_report_now need the Pro plan or above, because they depend on the daily sync. Listing, testing, history and the action tools work on every plan. See Pricing.

Last updated