跳至主要内容

Data and reporting

Audit the campaign names before the reports depend on them

Nobody sets out to build reporting on a text field. It happens the other way round: a naming convention is agreed, a few campaigns are launched in a hurry, and six months later a dashboard is grouping spend by the third segment of a string that four people spell four ways. The audit is cheap and dull. The cost of skipping it lands later, as a report that is confidently wrong.

Triggers
Two
Runs
Nightly
Stack
5 tools
Durable execution
Not required

The flow

The top track holds the rule and the live names. The bottom track wakes at night, splits each name against the rule, and separates what reporting can safely group from what a person has to rename.

Orchestration

The convention is agreed

Manual

Data

Store the rule as a table

Sheets · Airtable

Orchestration

Pull every live campaign name

n8n · Make

Orchestration

Every night

n8n schedule

Platform

Model splits each name into fields

OpenAI · Anthropic

Orchestration

Does it match the convention?

n8n IF

Platform

Write the label reporting groups on

Google Ads API

Notify

Send the breaks to their owner

Slack · WhatsApp

Step by step

  1. 01

    The convention is agreed

    Manual

    Written down before any checking is automated. Which segments, in which order, separated by what, and the closed list of allowed values for each. A convention that lives in someone's head cannot be audited against.

  2. 02

    Store the rule as a table

    Sheets · Airtable

    One row per segment, with its allowed values. Keeping the rule as data rather than as a regular expression inside the workflow means a marketer can add a market next quarter without opening the automation.

  3. 03

    Pull every live campaign name

    n8n · Make

    Names from every account you report on, in one list. Include paused campaigns — last quarter's spend is still in the report, so last quarter's names still have to parse.

  4. 04

    Every night

    n8n schedule

    Nightly, because the expensive case is a name that has been wrong for weeks. Catching it the morning after it was created is the difference between a rename and a rebuilt report.

  5. 05

    Model splits each name into fields

    OpenAI · Anthropic

    A plain split handles the names that already comply; the model is there for the ones that do not — it maps "HK_BF_2026" and "hongkong-blackfriday" onto the same segments. It classifies and extracts only. It never computes spend, and it never invents a value that is not on the allowed list.

  6. 06

    Does it match the convention?

    n8n IF

    Every segment present, and every value on its allowed list. Partial credit is not useful here — a name that parses into four of five fields still breaks the grouping it was supposed to feed.

  7. 07

    Write the label reporting groups on

    Google Ads API

    The durable fix is not the name. Apply a label carrying the same segments, and have the dashboard group by label id. A rename then costs you nothing, because nothing downstream was reading the string.

  8. 08

    Send the breaks to their owner

    Slack · WhatsApp

    The campaign, the segment that failed, and the value it should have been. A list of malformed names with no proposed correction gets read once and never worked through.

What the platform will not allow

The first two set how far the label approach scales; the third sets how fast you may read the rule table and write the audit back.

  • Labels are a first-class reporting dimension, not a workaround: campaigns carrying them are queried through the campaign_label resource, and "You can filter these report results by comparing the label.id field using any numeric comparison operator or the BETWEEN, IS NULL, IS NOT NULL, IN, or NOT IN operators." Grouping on a label id is therefore supported in a way that grouping on a substring of a name never is.

    Google Ads API — Labels
  • Google Ads caps labels at 50 applied to a single entity, and 100,000 applied to entities per account. One label per reporting segment fits comfortably; a scheme that mints a fresh label per campaign does not, and will hit the account ceiling before anyone notices.

    Google Ads API — System limits
  • Sheets allows 300 read and 300 write requests per minute per project, and 60 per minute per user per project; the quotas refill every minute and there is no daily cap on top of them. An audit that writes one row at a time is what exhausts the per-user figure.

    Google Sheets API — Usage limits

When this is not worth building

Three cases where the upkeep costs more than the mess.

  • One person launches every campaign and no report groups by name. The convention is being kept by the only mechanism that reliably keeps conventions — a single pair of hands — and an audit adds nothing to that.

  • Nobody has agreed the convention yet. Auditing against an undecided rule produces a nightly list of violations that everyone disputes, and the workflow becomes an argument that runs on a schedule.

  • The names are already broken and nobody will do the back-fill. A checker pointed at a catalogue of legacy names reports the same few hundred failures every night until people stop reading it, and a muted report is worse than an unbuilt one.

Related reading

联络我们

这些流程,你真正应该做哪一条?

我们每星期都在为香港的运营团队跑这些流程。告诉我们哪个环节正在耗你的时间,我们会告诉你自动化划不划得来。

开始对谈