Campaign
One advertising campaign inside one of the merchant’s ad accounts, with the spend and conversions attributed to it so far.
type Campaign {
id: ID!
account: AdAccount!
name: String!
objective: CampaignObjective!
status: CampaignStatus!
format: String
dailyBudget: Money!
spendToDate: Money!
conversions: Int!
cac: Money
attributedRevenue: Money
returnOnAdSpend: Float
countsTowardsBlended: Boolean!
weeklySeries: [AdWeeklyPoint!]!
}
Fields
Campaign.id ● ID! non-null scalar
The opaque identifier of this campaign, unique across the whole platform. Treat it as a string with no parts to read.
Campaign.account ● AdAccount! non-null object
The ad account this campaign runs in. Its currency is the currency of every Money value on this campaign.
Campaign.name ● String! non-null scalar
The campaign’s name as the merchant sees it in the provider’s own console, so the two can be matched up by eye.
Campaign.objective ● CampaignObjective! non-null enum
What the campaign is optimised for.
Campaign.status ● CampaignStatus! non-null enum
Where the campaign is in its lifecycle.
Campaign.format ● String scalar
The format the platform runs this campaign as — Search, Shopping, Reels, Spark Ads — written the way that platform writes it, because that is how it appears in the console the merchant already knows. Null when the platform names no format.
Campaign.dailyBudget ● Money! non-null object
The most this campaign may spend in a day, in the ad account’s currency. Providers may overspend it on a given day and correct over the week; this is the figure the merchant set. **Zero is a sentinel, not an amount**: it means no per-campaign daily budget is reported for this campaign, which is the case on every platform that caps spend on the account or the platform instead. Render it as “not set” rather than as $0.00, and read account { platform { monthlyBudgetCap } } for the ceiling that does apply — which is itself null on a platform the merchant has capped nothing on. The sentinel exists because this field was published non-null before those platforms were modelled; a nullable spelling is the intended replacement.
Campaign.spendToDate ● Money! non-null object
What this campaign has spent over the platform’s reporting window, in the ad account’s currency. It is the sum of weeklySeries, so the headline figure and the chart under it can never disagree.
Campaign.conversions ● Int! non-null scalar
How many conversions the provider attributes to this campaign over the reporting window. Attribution windows differ between providers, so this is the provider’s number, not an independently measured one.
Campaign.cac ● Money object
Cost per acquisition: spendToDate divided by conversions, rounded to the nearest minor unit. Null when the campaign has no conversions — a campaign that has spent money and acquired nobody has no cost per acquisition, and reporting zero would be a lie.
Campaign.attributedRevenue ● Money object
The revenue the provider attributes to this campaign over the reporting window. Null when the provider attributes none — an awareness campaign that has sold nothing yet reports no revenue rather than none-worth-zero.
Campaign.returnOnAdSpend ● Float scalar
Attributed revenue over spend, to one decimal place: 3.0 means the provider attributes three currency units of revenue to every one spent. Null when there is no spend to divide by, or no revenue attributed. It is the provider’s own attribution, so treat it as that provider’s opinion of itself.
Campaign.countsTowardsBlended ● Boolean! non-null scalar
Whether this campaign’s figures are inside the merchant’s blended totals, or reported alongside them.
Campaign.weeklySeries ● [AdWeeklyPoint!]! non-null object
Week by week over the platform’s reporting window, oldest first. Empty when no week has been reported yet; a client should draw nothing rather than a flat line at zero. This is a plain list and not a cursor connection — deliberately, because a window is read as a unit and never sliced — so it carries a hard ceiling instead of a page size: **at most 53 points**, a year of weeks, enforced in storage. Twelve is what it holds today.
Member Of
CampaignConnection object ● CampaignEdge object ● CampaignPaused object