Zernio
Zernio
API Reference

Insights

List lead conversationsGETGoogle Local Services Ads leadsGETSubmit async insights reportPOSTGet ad analyticsGETPoll an async insights report runGETGoogle Ads search terms reportGETGet campaign analyticsGETPer-creative performance inside TikTok Smart+ adsGETGet historical keyword metricsPOSTGenerate keyword ideasPOSTFlexible live insights queryGET
Dashboard
llms.txtOpenAPI
OverviewPlatformsAPI ReferenceResources
Insights

Per-creative performance inside TikTok Smart+ ads

Breaks a Smart+ ad (or ad group) down by creative material, one row per Spark post, video or image, from TikTok's Smart+ material report. For a Spark post tiktokItemId is the TikTok post id. Conversion metrics are TikTok web (pixel) events. TikTok allows two dimensions per report, so rows are keyed by the Smart+ ad (level=ad) or by the ad group (level=adGroup), not both. Metrics TikTok returns empty come back as null.


PlatformsTikTok
GET
/v1/ads/tiktok-smart-plus-materials

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.

In: header

Query Parameters

accountId*string

A tiktok or tiktokads account ID

adAccountId*string

TikTok advertiser ID

startDate*string

YYYY-MM-DD, in the advertiser's time zone

Formatdate
endDate*string

YYYY-MM-DD, on or after startDate

Formatdate
level?string

Key each row by Smart+ ad or by ad group

Default"ad"

Value in

  • "ad"
  • "adGroup"
smartPlusAdIds?string

Comma-separated Smart+ ad ids to filter by (up to 100)

adGroupIds?string

Comma-separated ad group ids to filter by (up to 100)

page?integer
Range1 <= value
Default1
pageSize?integer
Range1 <= value <= 1000
Default100

Response Body

application/json

application/json

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.adinsights.getTikTokSmartPlusMaterialReport({  query: {    accountId: 'account_abc123',    adAccountId: 'adaccount_abc123',    startDate: '2026-01-15',    endDate: '2026-01-15',  },});console.log(data);
{  "adAccountId": "string",  "level": "ad",  "startDate": "string",  "endDate": "string",  "page": 0,  "pageSize": 0,  "totalRows": 0,  "totalPages": 0,  "rows": [    {      "materialId": "string",      "materialType": "string",      "tiktokItemId": "string",      "name": "string",      "smartPlusAdId": "string",      "adGroupId": "string",      "metrics": {        "spend": 0,        "impressions": 0,        "clicks": 0,        "cpc": 0,        "addToCart": 0,        "initiateCheckout": 0,        "addPaymentInfo": 0,        "purchases": 0,        "purchaseValue": 0,        "roas": 0      }    }  ]}
Was this page helpful?

Get campaign analytics

Returns performance analytics for a whole campaign in one call: summary metrics, a daily timeline over the requested date range (summed across the campaign's ads), and optional demographic breakdowns. Breakdowns are fetched live from Meta at the campaign level (one call per dimension, no per-ad fan-out), so an agency dashboard gets campaign-level age/gender/etc. without summing thousands of per-ad reads. `campaignId` is the platform campaign id; pass `platform` when a campaign id could be ambiguous across platforms. If no date range is provided, defaults to the last 90 days. Date range is capped at 730 days max. Google adds searchImpressionShare, searchBudgetLostImpressionShare, searchRankLostImpressionShare, searchTopImpressionShare and searchAbsoluteTopImpressionShare under analytics.summary for the requested inclusive range. These ratios are queried together without daily segmentation and cached for 10 minutes. Unavailable values are null. analytics.impressionShareCache reports cachedAt and stale independently of synced metrics.

Get historical keyword metrics

Google Ads only. Runs Keyword Planner's generateKeywordHistoricalMetrics for up to 1,000 exact keywords: historical search volume, competition and top-of-page bid ranges, plus averageCpcMicros when includeAverageCpc is set. Rows come back verbatim; counters are int64s encoded as strings, bid/CPC values are micros of the account currency.