Skip to content
POST/v1/properties/{propertyId}/reports/campaigns/export

Returns all the matching rows of the campaign report as one CSV file, in the property time zone, with no summary. The CSV columns are name, refType, refId, then the requested metrics. The request body is the same as for the campaign report, without limit and cursor. The file can be at most 1 MB (1,048,576 bytes). For a larger file, the API returns 500 with the code response_too_large: make the date range shorter or add filters.

Ask for metrics by name in metrics. Each metric becomes a CSV column after name, refType, and refId; dynamic names such as events.Purchase are column names. Unavailable values are empty CSV cells. Money metrics aggregate stored reporting values; the configured reporting currency belongs to the property. Date ranges cover at most 31 days.

MetricValueSource
spendAmount spent on the ads.Ad platform
impressionsNumber of times the ads were shown.Ad platform
reachSum of ad-platform reach across the requested dates; a person may be counted on multiple days.Ad platform
linkClicksNumber of clicks on the ad links.Ad platform
resultsResults that the ad platform attributes to the ads, for the campaign objective.Ad platform
resultValuesValue of the results that the ad platform attributes to the ads.Ad platform
sessionsNumber of sessions that AnyTrack tracked.AnyTrack
clientsApproximate number of distinct property-scoped client IDs (browsers).AnyTrack
eventValuesSum of the values of the conversion events.AnyTrack
events.<EventName>Number of events with this name, for example events.Purchase.AnyTrack
frequencyimpressions ÷ reach.Calculated
cpm1,000 × spend ÷ impressions.Calculated
cpcspend ÷ linkClicks.Calculated
ctrlinkClicks ÷ impressions, as a ratio: 0.02 is 2%.Calculated
roaseventValues ÷ spend.Calculated
cpe.<EventName>spend ÷ the number of events with this name.Calculated

A calculated metric is null when its divisor is zero, negative, or unavailable, or another required input is unavailable. Unavailable ad platform metrics are also null. AnyTrack gets spend, impressions, reach, link clicks, and results from Meta Ads, Google Ads, TikTok Ads, ChatGPT Ads, and Microsoft Ads. Taboola and Outbrain campaigns have no ad platform metrics.

This endpoint needs IDs that other endpoints return:

  1. Call List the account properties. Copy the id of the property: it is the propertyId.
  2. Call this endpoint with these IDs.

bearerAuth: API key created in the dashboard (atk_…). Send it in the Authorization: Bearer YOUR_API_KEY header.

propertyIdstringrequired
ID of the property. Get it from listProperties (id).
application/jsonrequired
fromstring · daterequired
First day of the report, included, in the property time zone. The range covers at most 31 days.
Format YYYY-MM-DD, e.g. 2026-01-31
tostring · daterequired
Last day of the report, included, in the property time zone. to must be on or after from.
Format YYYY-MM-DD, e.g. 2026-01-31
attributionstring
Attribution model. last-ad-click gives the credit to the last ad click before the conversion. first-ad-click gives the credit to the first ad click.
Allowed values last-ad-click first-ad-clickDefault last-ad-click
groupBystring
Level of each row: campaign, adset (ad set), or ad.
Allowed values campaign adset adDefault campaign
metricsarray of string
Metrics to return as CSV columns. Use the metric names in the Metrics section, events.<EventName>, or cpe.<EventName>. AnyTrack removes duplicate names.
Min items 1Max items 20Item max length 80
conversionEventsarray of string
Events that count as conversions for eventValues and roas. Defaults to the property conversion events, or Purchase if none are configured. Other named event metrics are independent of this selection.
Min items 1Max items 20Item min length 1Item max length 64
filtersobject
Filters for the rows. A row must match every filter that you send. A row matches a filter when it matches one of its values.
Show 6 child attributes
channelarray of string
Channels to include. Use the channel values of the report rows. With this filter, rows that have spend but no tracked event are not included.
Min items 1Max items 50Item min length 1Item max length 256
platformarray of string
Platforms to include. With this filter, rows that have spend but no tracked event are not included.
Min items 1Max items 50Item min length 1Item max length 256
adNetworkarray of string
Ad networks to include. Use the adNetwork values of the report rows.
Min items 1Max items 50Item min length 1Item max length 256
campaignIdsarray of string
IDs of the campaigns to include. Use the id of rows grouped by campaign.
Min items 1Max items 50Item min length 1Item max length 256
adsetIdsarray of string
IDs of the ad sets to include. Use the id of rows grouped by adset.
Min items 1Max items 50Item min length 1Item max length 256
adIdsarray of string
IDs of the ads to include. Use the id of rows grouped by ad.
Min items 1Max items 50Item min length 1Item max length 256
sortobject
Sort order of the rows.
Show 2 child attributes
metricstringrequired
Metric to sort by. Use one of the fixed metric names. You cannot sort by events.<EventName> or cpe.<EventName>.
Allowed values spend impressions reach frequency linkClicks sessions clients eventValues results resultValues cpm cpc ctr roas
directionstring
desc: highest value first. asc: lowest value first.
Allowed values asc descDefault desc

Every response field is present unless it shows optional. A type that ends in | null can be null.

text/csv
string

Every error returns the error object.

StatusDescription and action
400invalid_request, invalid_cursor: A parameter or a body field is not valid, or the cursor belongs to a different query. Correct the request. error.details, when present, names invalid fields. Do not reuse a cursor with a different query.
401unauthenticated: Missing, invalid or deleted API key. Send a valid key in Authorization: Bearer. MCP uses an OAuth access token, which may also expire or be revoked.
403api_access_unavailable: API access is disabled for this account. Contact AnyTrack support. OAuth requests also require the anytrack:read scope (insufficient_scope).
404not_found: An ID does not exist, or it belongs to a different account. The API gives the same error for both. Check the IDs. Get them again from the list endpoints.
413payload_too_large: The request body is larger than 16 KB. Send a smaller request body.
429rate_limited: The account sent more than 60 requests in one minute. Wait for the number of seconds in the Retry-After header, then retry.
500response_too_large, internal_error: The response is larger than 1 MB, or the API has an internal error. For response_too_large, ask for fewer rows or metrics. For internal_error, contact AnyTrack support with the requestId.
503service_unavailable: The service is not available for a short time. Retry later, and wait longer after each failed retry.
504upstream_timeout: A downstream request timed out (the report client timeout is 65 seconds). Narrow the date range, then retry with backoff.

Command template. Replace the path placeholders. Put the request body in request-body.json, as in the schema above. Add the query parameters that you need. This is not a recorded request or response.

Terminal window
curl --request POST 'https://api.anytrack.io/v1/properties/{propertyId}/reports/campaigns/export' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data @request-body.json

Download the OpenAPI contract.