Expose LinkedIn servingStatuses on GET /v1/ads/{id}
Hi,
We'd like to request exposing LinkedIn's servingStatuses on the ad read endpoints.
Today, LinkedIn campaigns can have a status of ACTIVE while not serving any impressions at all. The actual reason is often contained in LinkedIn's serving statuses (for example account holds, campaign-group holds, budget constraints, scheduling issues or audience-related problems), but those are currently not available through the API.
We ran into this recently with a LinkedIn boost campaign that had:
an approved creative,
a valid payment method,
an audience of over 540,000 people,
and an
ACTIVEstatus,
yet it delivered zero impressions for two days. Nothing in the API indicated there was a problem, so the only way to diagnose it was by opening LinkedIn Campaign Manager manually. (Support has the details—this eventually turned out to be the manual-bidding / €0 unitCost issue that's currently being investigated.)
Having access to the serving statuses would allow us to surface the actual delivery issue directly inside our product instead of simply reporting that a campaign is "Active". It would also let us proactively notify customers within hours, rather than having to infer that something is wrong after observing zero impressions for an extended period.
Request
Please include LinkedIn's servingStatuses (the raw array is perfectly sufficient) on GET /v1/ads/{id}. Ideally, it would also be included on the list endpoint so periodic synchronizations can retrieve this information without requiring an additional request for every individual ad.
We believe this would significantly improve diagnostics for LinkedIn campaigns while requiring only a relatively small addition to the existing response.
Log in to comment and vote
Comments1
Aug 1
PinnedShipped and live.
servingStatuses now returns on GET /v1/ads/{adId}, GET /v1/ads, and the tree's ad and ad-set nodes, so you can sync in bulk instead of requesting each ad.
It is LinkedIn's array verbatim. ["RUNNABLE"] means eligible to serve, anything else is a hold. The list is open, so treat unrecognised values as holds. We deliberately did not fold it into status, since collapsing five distinct holds into one word loses the detail you need.
Two semantics: [] means LinkedIn reported no holds, and an ad that has not resynced yet also reads []. If a sync cannot reach LinkedIn we keep the previous value rather than reporting [], so a transient error can never make a held campaign look healthy.
There is also creative.isServing and creative.servingHoldReasons for when the campaign is fine but the creative is under review.
Worth flagging: this would not have caught your own incident. A €0 manual bid reads RUNNABLE. That case is covered by your other request, which shipped alongside this one.
Populates per account on the next sync.