Ads Performance and Budget Pacing Auditor avatar

Ads Performance and Budget Pacing Auditor

Pricing

$50.00 / 1,000 campaign performance audit reports

Go to Apify Store
Ads Performance and Budget Pacing Auditor

Ads Performance and Budget Pacing Auditor

Audit daily ad campaign exports for spend without conversions, CPA changes and budget pacing. Download campaign findings with the supporting figures. Ready to check your next export?

Pricing

$50.00 / 1,000 campaign performance audit reports

Rating

0.0

(0)

Developer

Daniel Michałek

Daniel Michałek

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Security

Limited permissions

Share

Upload daily campaign totals from your own Meta, Google, TikTok or other ad export and receive review signals with the supporting arithmetic. The Actor finds mature spend without reported conversions, weighted CPA increases, ROAS and CTR declines, metric inconsistencies and deviations from a dated budget. It analyzes supplied data without ad-account access, AI calls or changes to campaigns.

What it does

Each campaign is compared over the latest seven mature days and the preceding 28 days by default. The comparison ends at asOfDate minus conversionLagDays. Metrics use sums of numerators and denominators, rather than an average of daily ratios. Differences are calculated from unrounded totals; displayed derived metrics may be rounded.

Rules return ALERT, OK or INSUFFICIENT_DATA with explicit coverage, volume and missing-field reasons. No alert is not a guarantee of campaign health. Names and campaign IDs remain separate. Dates are account-timezone daily labels supplied by the customer; the Actor does not prove that a source export or attribution window is final.

Input

Supply exactly one of rows (JSON objects) or csv (text with header). Maximum 5000 daily rows, 250 campaigns, 50 columns and 3MB input. Required row fields are date (YYYY-MM-DD), campaignId (string), spend and conversions. Optional metrics are impressions, clicks and conversionValue; absent optional metrics are unknown, not zero. Fractional conversions and signed conversion-value adjustments are supported. Negative spend or conversions are rejected.

Required report context is platform, accountId, currency, conversionDefinition, reportingTimezone and asOfDate. Use one account, platform, currency and conversion definition per run. When those fields are also supplied in rows they must agree. This prevents accidental comparisons across incompatible datasets, but it relies on the customer declaring the source correctly.

Common English and Polish column aliases are recognized. Use fieldMap to select exact custom columns when names are ambiguous, especially all clicks versus link clicks. An explicitly mapped column must exist; a source column cannot be reused for different metrics or identities. JSON IDs must be strings to preserve large advertising identifiers.

CSV supports comma, semicolon or tab delimiters, BOM and quoted cells. Set numberFormat to dot-decimal for1,234.50 or comma-decimal for1.234,50. The parser does not guess ambiguous locale settings. Duplicate campaign/day rows and multi-day rows with differing reporting starts/ends are rejected; aggregate ad or adset breakdowns before submitting daily campaign totals.

Output

One dataset item contains context, campaign summaries, weighted current and baseline metrics, dated-budget calculations, rule decisions, priorities and limitations. Each finding includes observed values, thresholds and comparison evidence. The key-value store contains AUDIT (complete JSON), CAMPAIGNS_CSV (UTF-8 with BOM) and REPORT (Markdown summary). CSV formula prefixes are escaped.

The example export is synthetic: two campaigns over 35 days. Search purchases has rising CPA and falling ROAS/CTR; Retargeting purchases has mature spend with zero reported conversions. An explicit dated budget also demonstrates over-pacing and confirmed observed overspend. These are fixture business figures, not real customers or earned revenue.

Pricing and cost control

The initial listing price is $0.05 per completed performance-report event, covering the whole accepted batch of up to 5000 rows and 250 campaigns. It is not charged per input row or per alert. A valid report can contain no alerts or insufficient-data decisions and is still a completed audit. Malformed input fails before a report event is emitted.

No paid model, proxy, advertisement or external data call is used. Apify runtime and event charges follow the active listing and account plan. Set the run charge limit to cap report events. Files and the dataset are persisted before the shared billing call; a storage failure prevents report emission.

Limitations and fair use

Default comparison thresholds are minSpend=100 in the report currency, minConversions=5, minImpressions=1000, minCoverage=1, cpaIncreasePct=30, roasDropPct=30 and ctrDropPct=30. Thresholds must be strictly exceeded for change alerts. Default coverage requires every day in a window; provide explicit zero-activity rows only when the source actually reports zero. Lowering coverage is an explicit assumption. Missing days are never imputed.

Dated total budgets are optional. Linear pacing is an assumption and differs from platforms' average daily budget, learning and delivery rules. Pacing ratios and remaining-budget recommendations require complete daily coverage of the elapsed budget period. Observed rows exceeding a supplied total budget still establish a lower-bound overspend even with missing days. This is a review signal; the Actor never adjusts budgets.

Alerts are deterministic heuristics, not statistical significance or proof of tracking failure, creative fatigue, profit, fraud or a causal business diagnosis. Conversion value is not profit. Repeated or view-through conversions may exceed clicks and are not automatically treated as errors. A declared conversion lag does not guarantee final attribution.

Use data you are authorized to analyze and keep export/runs private where appropriate. Do not supply passwords, access tokens or customer contact data. Known source columns are selected into outputs; arbitrary extra source columns are not echoed. This is not anonymization: account/campaign labels and supplied financial metrics are part of the report, and Apify stores the original run input.

Example

See examples/input.json for JSON and examples/input-csv.json for an equivalent CSV batch. The report's matureThrough date is 2026-10-30 for the example asOfDate 2026-10-31 and lag 1. Review a campaign's current/baseline coverage and eligibility reasons before interpreting its alert.