A CSV aggregate isn’t a raw event feed, and a notification isn’t a report.
1. Prove access and pick the report
Over MCP, callget_status and check the account. Then pick the report:
- A Buyer account uses
report: "campaign_delivery". - A Seller account uses
report: "seller_delivery", orcampaign_deliveryfor advertisers on its own supply (name the advertiser, campaign or media buy).
2. Read a bounded window
get_delivery
- Metrics:
impressions,clicks,spend,ctr,cpm,views,video_completions,vcr,viewable_impressions,conversions,conversion_value,pacing. - Dimensions:
date,campaign,media_buy,package,seller,sales_agent,buyer,product. - Range: dates up to 90 days apart, or
lifetime. ApackageIdfilter needs dates. - Paging:
limitup to 1,000; pass the returnedcursorfor the next page. See Pagination.
3. Refresh on a schedule
Your application owns the schedule. Re-read a trailing window each run (sellers can restate recent days), and upsert rows keyed on the dimensions you asked for. Keep windows bounded and page through results.4. Download CSV
GET /api/v2/buyer/reporting/metrics takes advertiserId, campaignId, mediaBuyId, startDate
and endDate (or days), and view. Add download=true to get a downloadUrl, expiresAt,
fileName and rowCount. The downloadUrl is signed for your account over the query and expires
7 days after it’s issued; request it with the same credential to get the CSV. An altered or expired
link answers 403 (“This download link expired. Request the report again.”). Sending
Accept: text/csv with download=true returns the file directly, without a link. In the app,
Export CSV on the Reporting view downloads the same rows.
Not available yet
- Scheduled delivery to your own cloud storage (log-level data delivery).
- A seller
marginreport. - A credential-free download link:
downloadUrlis signed and expires, but still needs your credential.