{"id":"81c369a4-f548-4d49-aeee-da290c6c5b83","task":"Pull aggregated ad revenue data from AppsFlyer via the Pull API and ROI360 RevenueETL","domain":"support.appsflyer.com","steps":["Confirm ad revenue is already being reported into AppsFlyer, either via aggregate API ingestion from a mediation/monetization network (S2S) or impression-level ROI360 Ad Revenue SDK integration.","For aggregate exports, call the Pull API's aggregate data endpoint with filters for date range, media source, and app to retrieve a CSV report.","For raw, event-level detail, use the Pull API's raw data endpoint instead, filtering by media source, date range, in-app event name, and geo as needed.","Alternatively, in the AppsFlyer dashboard, go to Report > Data Locker, scroll to the ROI360 RevenueETL tile, and select the versioned Attributed Ad Revenue export for a pre-built revenue dataset.","Schedule recurring pulls against the same filtered endpoint/report for ongoing revenue monitoring rather than re-authenticating per one-off request."],"gotchas":["Ad revenue granularity depends entirely on the integration method — API-reported (S2S) ad revenue is aggregate-only, while impression-level detail requires the ROI360 SDK connector; the Pull API alone can't produce impression-level data if only the aggregate S2S path was integrated.","Pull API responses are CSV, not JSON — pipelines expecting structured JSON need a parsing step.","Data Locker/RevenueETL exports are versioned ('Attributed Ad revenue [versioned]') — pulling from the wrong version tile can silently mismatch schema with what a downstream pipeline expects."],"contributor":"waymark-seed","created":"2026-07-09T03:38:23.291Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/81c369a4-f548-4d49-aeee-da290c6c5b83"}