Zernio
APIFor you
Zernio
APIFor you
Platforms

LinkedIn Ads

Overview

Build

Create adsBoost a postLead Gen FormsCreative formats

Target

TargetingMatched AudiencesBid pricing & forecasts

Measure

AnalyticsConversions APIInsight TagURL tracking tags

Operate

Manage adsAd Library

Reference

Media & limits
Dashboard
OverviewPlatformsAPI ReferenceResources
LinkedIn Ads

Analytics

Read spend, clicks and firmographic breakdowns (job title, seniority, industry, company size) for a LinkedIn ad with the Insights endpoints.


By the end of this page, you can read who saw a LinkedIn ad, by job title, seniority, industry and company, from GET /v1/ads/{adId}/analytics.

Before you start

You need the Zernio _id of an ad (Create ads).

Read ad analytics

Standard metrics (spend, impressions, clicks, CPC, CPM) come rolled up on GET /v1/ads, GET /v1/ads/tree and GET /v1/ads/{adId}.

The firmographic layer is what is LinkedIn-specific, and it comes from the breakdowns below.

Firmographic breakdowns

Call GET /v1/ads/{adId}/analytics with breakdowns, a comma-separated list of LinkedIn dimensions.

The parameter is optional. Without it, the response is summary and daily for the range and no breakdowns object.

Each dimension you list costs one more call to LinkedIn, so ask only for the ones you read:

DimensionLinkedIn pivot
job_titleMEMBER_JOB_TITLE
job_functionMEMBER_JOB_FUNCTION
seniorityMEMBER_SENIORITY
industryMEMBER_INDUSTRY
companyMEMBER_COMPANY
company_sizeMEMBER_COMPANY_SIZE
countryMEMBER_COUNTRY_V2
regionMEMBER_REGION_V2
TypeScript
import Zernio from '@zernio/node';

const zernio = new Zernio();

const { data: insights } = await zernio.adinsights.getAdAnalytics({
  path: { adId: '66f0a1b2c3d4e5f6a7b8c9d0' },
  query: { fromDate: '2027-01-01', toDate: '2027-01-31', breakdowns: 'job_title,seniority,company_size' }
});

console.log(insights.analytics.breakdowns.seniority);

Response (200), trimmed to the summary and one breakdown:

JSON
{
  "ad": { "id": "66f0a1b2c3d4e5f6a7b8c9d0", "name": "Spring launch (single image)", "platform": "linkedin", "status": "active", "currency": "USD" },
  "analytics": {
    "summary": { "spend": 412.5, "impressions": 38210, "clicks": 512, "ctr": 1.34, "cpc": 0.81, "cpm": 10.8, "engagement": 640, "conversions": 12 },
    "daily": [
      { "date": "2027-01-01", "spend": 13.4, "impressions": 1240, "clicks": 17 }
    ],
    "breakdowns": {
      "seniority": [
        { "value": "urn:li:seniority:6", "name": "Senior", "spend": 210.1, "impressions": 19800, "clicks": 270, "ctr": 1.36, "cpc": 0.78, "cpm": 10.6, "engagement": 330 }
      ]
    }
  }
}

Each breakdown row carries value (LinkedIn's URN) and a name resolved server-side. Job titles, companies and industries all come back human-readable. Rows are sorted by impressions.

Without fromDate and toDate, the range is the last 90 days. The range is capped at 730 days.

When the account connects, Zernio imports its last 90 days of metrics. summary and daily hold no data for days before that, because only Meta backfills an older range on request. Breakdowns are read live from LinkedIn, so they cover the whole range.

Campaign level. The same breakdowns parameter works on GET /v1/ads/campaigns/{campaignId}/analytics. For LinkedIn, the campaign id is the Campaign Group.

That endpoint also serves Meta's demographic breakdowns. So both endpoints validate against every platform's dimensions at once.

Other platforms' dimensions. A Meta or TikTok dimension such as age on a LinkedIn ad is accepted and then dropped. The response is a 200 with no breakdowns object.

LinkedIn constraints

  • Firmographic pivots are aggregated over the whole requested range. LinkedIn only serves them with timeGranularity: ALL, so there is no per-day series per job title.
  • Demographic pivots lag 12 to 24 hours.
  • LinkedIn omits segments with fewer than 3 events, so small campaigns return short lists.

Conversion attribution

Conversion-level metrics (post-click and view-through conversions, conversion value, cost) are read per conversion rule from the attribution metrics endpoint.

If it fails

ErrorCauseFix
400 invalid_field_value on breakdownsNo platform defines the dimensionUse one of the dimensions the error lists
200 with no breakdowns objectThe dimension belongs to Meta or TikTok, so LinkedIn drops itAsk for a LinkedIn dimension
Short or empty breakdown listsLinkedIn omits segments with fewer than 3 events, and pivots lag 12 to 24 hoursWiden the date range, or read again later

The 400 lists every accepted dimension:

JSON
{
  "error": "Invalid breakdown: job_titles. Supported: age, gender, country, publisher_platform, device_platform, region, platform_position, impression_device, video_asset, image_asset, body_asset, title_asset, country_code, platform, ac, language, job_title, job_function, seniority, industry, company, company_size.",
  "type": "invalid_request_error",
  "code": "invalid_field_value",
  "param": "breakdowns"
}

Related

  • Conversions API: attribution read-back per rule.
  • Get ad analytics and Get campaign analytics: every metric in summary.
  • Get campaign tree: rolled-up metrics per level.
Was this page helpful?

Bid pricing & forecasts

Get LinkedIn's suggested bid, budget bounds and an impressions, clicks and spend forecast for a targeting spec before you create a campaign.

Conversions API

Send offline conversion events to LinkedIn with POST /v1/ads/conversions, manage conversion rules, and read attribution back.

On this page

Before you startRead ad analyticsFirmographic breakdownsLinkedIn constraintsConversion attributionIf it failsRelated