Anomaly Investigation

Investigate an unexpected spend, outcome, CPA, or ROAS shift; rank falsifiable causes without treating coincident changes as proof.

Reporting & diagnosticsWorks with exports or live data

When to use it

When an unexpected performance movement needs a ranked investigation.

Try asking

“Our ad campaign CPA spiked after a landing page release. Investigate and rank the likely causes.”

What you get back

A ranked anomaly assessment with comparable metric movement, falsifiable causes, confidence, evidence gaps, and next checks.

Fictional example output

CPA doubled from $20 to $40 (+100%). Spend rose 20%, clicks rose 20%, and leads fell 40%; click-to-lead rate fell from 5.00% to 2.50% (−2.50pp). CPC remained $1.00 and CTR remained 2.00%.

HypothesisEvidenceMissing test
Landing conversion-path regressionRelease timing coincides with the rate dropTest form completion and server acceptance before/after with safe diagnostics
Conversion measurement changeLead reporting is the changing outcomeCompare event configuration and import timestamps
Less qualified click mixStable CPC/CTR does not rule out intent changesCompare query and segment composition

The chronology prioritizes investigation; it does not prove the release caused the drop. Metrics are mature and comparable. Check instrumentation and actual lead completion first, then compare traffic mix. Do not roll back the page or adjust bids from this correlation alone. No mutations performed.

Fictional data. An illustration of the method, not a customer result.

Where the data comes from

Connected with Orphex Recommended

The skill reads your connected accounts for the right dates. Nothing to export or upload.

Connect free
Input columns 4 required, 4 optional
periodRequired
Named complete reporting interval
campaign_idRequired
Stable campaign ID within the supplied account
currencyRequired
ISO currency code; keep unlike currencies separate
spendRequired
Observed spend in currency units
impressionsOptional
Observed served impressions
clicksOptional
Observed clicks
conversionsOptional
Named attributed outcome count; fractional credits allowed when documented
conversion_valueOptional
Value under the supplied gross/net definition
Before you start 1 item
  • User-supplied metric numerator and denominator, comparison period, and source definition

Supply your objectives, conversion definitions, currency, constraints, and approved brand facts once, then reuse the profile across reviews. Leave unknown values explicit.

Open profile source
The method

With an Orphex connection

If an Orphex connector is available, check it before asking for exports. Run capability_search with platform orphex and limit 100; use a read only if that search returns its id, and ask which workspace to use when several are bound. Read anomaly.read (about one week retained; segment names carry the channel), insights.read, alerts.read, workspace.brief for data freshness, and controller.catalog then controller.fetch for the metric's numerator and denominator over the shift and a comparable prior window. Then list guides with skill_catalog (kind guide, topic anomaly) and follow a matching one through skill_read; choose by title, never by a stored id.

Source and evaluation v2.1.0 · MIT
View SKILL.md

Orphex Anomaly Investigation

Use this skill when someone asks why a marketing metric changed suddenly, whether it is an incident, or what to check first. Work from Orphex data when the connection below reaches it, and from supplied exports, diagnostics, change records, and documents. A change log shows timing, not causation or authority to change settings.

With an Orphex connection

If an Orphex connector is available, check it before asking for exports. Run capability_search with platform orphex and limit 100; use a read only if that search returns its id, and ask which workspace to use when several are bound. Read anomaly.read (about one week retained; segment names carry the channel), insights.read, alerts.read, workspace.brief for data freshness, and controller.catalog then controller.fetch for the metric's numerator and denominator over the shift and a comparable prior window. Then list guides with skill_catalog (kind guide, topic anomaly) and follow a matching one through skill_read; choose by title, never by a stored id.

If a read is not returned, this connection cannot reach that Orphex data for the workspace: say so, then use the live platform reads it offers or the supplied exports. An absent, refused or empty read is not evidence of zero, none or healthy. Describe each read with capability_describe before run_read, keep date_end no later than yesterday, disclose request adjustments, and name each number's source, workspace and window. This skill's evidence rules still govern any guide, insight or playbook label, and no read authorizes account changes. Ask the user only for what is still missing.

Establish whether the shift is comparable

Record metric and scope, timezone, dates, refresh time, currency, event and denominator, attribution model/window, and whether dates refer to interaction or conversion. Prefer equal-length periods with the same weekdays. Mark partial periods, unsettled conversions, holidays, promotions, or scope changes. Call immature results provisional and name a recheck point. Without a defensible baseline, describe the value without labeling it an anomaly.

Minimum evidence is the metric numerator and denominator, a named comparison period, and the source definition. Daily or campaign rows, delivery status, creative changes, and timestamped changes improve diagnosis. If evidence is still missing after the Orphex check, ask or leave the question unresolved; do not invent account facts.

A reporting date, previous/current labels, equal-length periods, or asserted maturity do not specify exact interval endpoints. Do not reconstruct dates or days exposed to a change from those facts. Without supplied dated rows, do not distribute aggregate outcomes uniformly across days, project a prior daily average onto pre-change days, or use such hypothetical counts to bound a change's possible effect. Keep timing unresolved and request actual period boundaries, the change timestamp, date basis, and daily rows.

Use the supplied values to calculate an absolute difference as current minus reference. Calculate relative change only when the reference is numeric and nonzero. If a baseline is zero, report the movement as “from 0 to N”; do not invent a percentage. Compute CPA as spend divided by the named conversions and ROAS as the consistently attributed revenue divided by spend. A zero or missing denominator makes the ratio unavailable. Recompute portfolio ratios from summed numerators and denominators; never average campaign CPA or ROAS. Component changes add only for the same additive metric and mutually exclusive components. Ratio movements do not have additive campaign contributions.

Rank causes and test them

Check the metric and data path early; this is a verification sequence, not a causal prior. Missing tracking logs or import diagnostics mean measurement health is unknown, not that tracking is the leading cause. Neither an abrupt nor a gradual decline, nor a short zero-conversion period, identifies a tracking, bidding, or delivery cause by itself. Flat spend describes the CPA numerator only; it does not establish a budget cap, unchanged CPC or traffic, or a weak bid response. Request event diagnostics and reconciliation alongside dated delivery and change records. Prioritize tracking or delivery remediation when actual diagnostics support a concrete failure; otherwise keep explanations as hypotheses with checks that could falsify them.

Compare delivery, pacing, campaign mix, creative, audience/placement, landing or offer changes, seasonality, and conversion lag. Rank causal hypotheses only when supplied evidence supports their relative ranking; otherwise report unresolved alternatives with low confidence. Prioritize next checks separately by impact, diagnostic value, and test speed, and state whether the order is a checking sequence or an evidence-supported likelihood ranking. State the fact, possible explanation, contrary evidence, falsifiable check, and high/medium/low confidence. Avoid universal alert thresholds. Use a median and dispersion only with sufficient stable matched history, and name the sample size; otherwise keep the comparison descriptive.

Align change-log times to account timezone and event-time basis. A nearby change is a test lead, not causal proof. State what would disconfirm each hypothesis. Experiments or documented holdouts can support causal claims; observational exports support association only.

Report

Lead with the shift and period maturity. Show current and reference values, absolute and valid relative change, denominator, period, and source. Then list ranked hypotheses, confidence, supporting/contrary evidence, and next checks. Name unresolved currency, timezone, attribution, freshness, or denominator issues. Execute a change only when a current or prior instruction explicitly authorizes the exact account scope and action, and an available write path permits it; otherwise provide a proposal.

Fictional boundary case: a dashboard shows 0 purchases for a partial Tuesday versus 2 the prior Tuesday, while conversions can arrive after the report refresh. Mark CPA unavailable for the current day and keep the finding provisional. A budget edit recorded Monday raises a testable hypothesis but does not establish the cause. Request a mature same-weekday export and the event diagnostic before escalating it as an outage.

Official references

Portable inputs and examples

State whether the result is complete, partial, or blocked for the requested decision. Link material findings to actual supplied rows/sources and separate observed metrics, hypotheses, and estimates. Lead with a short business conclusion, then evidence, uncertainty, and the next measurable check. A data export or installed skill does not authorize account changes.

For the supported arithmetic only, optionally run the bundled calculator with Python 3: python3 scripts/marketing_math.py weighted-ratio < calculation.json. Read its input mapping in the input contract before preparing JSON. It reads JSON, not CSV directly. If Python or the requested method is unavailable, show a reproducible alternative calculation or mark it unsupported; do not report an uncomputed result as verified.

View on GitHub Open SKILL.md

How this release was evaluated

See the recorded checks, compared runs, results, and limits for v2.1.0. Example reviews illustrate the method; they do not guarantee account results.

Read the evaluation report