List comments on an ad
Returns comments on an ad's underlying creative post. Useful for moderating or analyzing engagement on dark posts (ad creatives that never went live organically), which the regular GET /v1/inbox/comments/{postId} endpoint cannot serve because dark posts are not in Zernio's post database.
An ad that runs on both Facebook feed and Instagram feed has two separate underlying
posts with separate comment threads (the creative's effective_object_story_id and
effective_instagram_media_id). Use the placement query param to pick one; with no
param the Instagram side is returned when it exists, otherwise Facebook. The
identifiers are read from the ad record (persisted during sync) with a Marketing-API
fallback for ads that predate the field.
For Instagram-placed comments, the Instagram account that runs the ad must be connected to Zernio — those comments are read through that account's token. If no connected Instagram account on the profile can read the ad's media, the call returns ads_connection_required (the Facebook side, if any, is still readable via ?placement=facebook).
Meta-only. Other ad platforms (TikTok, LinkedIn, Pinterest, Google, X) do not expose a public per-ad comments API and return feature_not_available.
Requires the Ads add-on. Response shape matches GET /v1/inbox/comments/{postId}.
The {adId} path segment accepts any identifier dialect Zernio indexes for the ad:
Zernio internal _id (24-char hex), Meta's numeric platformAdId (the value shipped in
comment.received webhooks as comment.ad.id), or the creative's
effective_object_story_id / effective_instagram_media_id. Caller doesn't need a
translation step.
API key authentication - use your Zernio API key as a Bearer token
In: header
Path Parameters
Internal Zernio ad ID (ObjectId).
Query Parameters
Which side of the ad to return comments for. Omit to default to the Instagram side when present, else Facebook. Returns ad_not_commentable if the ad has no such placement.
"facebook" | "instagram"251 <= value <= 100Pagination cursor from a previous response.
Response Body
application/json
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.ads.getAdComments({ path: { adId: 'ad_abc123', },});console.log(data);{
"status": "success",
"comments": [
{}
],
"pagination": {
"hasMore": true,
"cursor": "string"
},
"meta": {
"platform": "facebook",
"placement": "facebook",
"adId": "string",
"platformAdId": "string",
"effectiveStoryId": "string",
"facebookAccountId": "string",
"instagramUserId": "string",
"instagramPermalink": "string",
"instagramAccountId": "string",
"accountId": "string",
"lastUpdated": "2019-08-24T14:15:22Z"
}
}{
"error": "Unauthorized"
}{
"error": "Not found"
}Get ad analytics GET
Returns detailed performance analytics for an ad. Includes summary metrics, a daily timeline over the requested date range, and optional demographic breakdowns (Meta and TikTok only). If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max.
Read an ad's click-URL tracking tags GET
Unified read of the platform's native click-URL tracking params. - Meta (facebook/instagram): the creative's `url_tags` (and template_url_spec). - Google (googleads): the campaign's `trackingUrlTemplate` + `finalUrlSuffix`. Subject to the Google Ads API access-tier daily quota; bulk audits need Standard access. - LinkedIn (linkedinads): the campaign's Dynamic UTM `dynamicValueParameters` + `customValueParameters`. Returns 405 for platforms without a click-URL tracking surface (TikTok, X, Pinterest).