Your users want to see LinkedIn Ads performance where they already do their work, not in a separate tab they have to babysit. The demand for embedded LinkedIn Ads analytics in SaaS products is real, and the API has everything you need. What it doesn't have is a simple path to getting that data clean, joined, and in front of your users without a lot of ongoing maintenance.
TLDR:
- The LinkedIn Ads API exposes reach, dwell time, and Lead Gen Form data, but analytics and campaign structure live at separate endpoints requiring joins across multiple calls
- Native LinkedIn Ads reporting inside your product reduces churn friction; users who export CSVs to manually match spend data are already shopping for alternatives
- Building the connector yourself means owning OAuth token refresh, versioned headers, rate limits, and pagination across every ad channel your users run
- Design your data model for channel-agnostic reporting before shipping connector one; adding TikTok Ads to a single-source schema later means rebuilding the reporting layer
- Hotglue handles OAuth lifecycle, rate limiting, scheduled and on-demand syncs, and Python-based transformation across LinkedIn Ads, TikTok Ads, and Amazon Seller on one integration layer
What the LinkedIn Ads API Actually Exposes
The LinkedIn Marketing API organizes ad data into a hierarchy: ad accounts at the top, followed by campaign groups, campaigns, and creatives. Each level has its own reporting endpoints, and analytics data is pulled separately from the structural data.
On the analytics side, the API exposes the metrics your users actually care about. According to LinkedIn Ads metrics reference, these include:
- Impressions, clicks, and spend
- Reach and frequency
- Video views and completion rates
- Dwell time (time spent with sponsored content)
- Lead Gen Form opens and completions
The LinkedIn Ads API uses OAuth 2.0 for authentication and requires versioned requests via a LinkedIn-Version header on every call. Skip that header and you risk hitting deprecated behavior silently.
One thing worth knowing before you build: analytics data and campaign structure live at separate endpoints. Pulling a full campaign report means joining data across multiple calls, which adds complexity to any reporting feature you want to ship.
Why Your End Users Expect Native LinkedIn Ads Reporting
B2B marketing teams are spending serious money on LinkedIn Ads. When those users live inside your SaaS product all day, they expect the reporting to live there too. Sending them to Campaign Manager for one number and your dashboard for another creates friction that erodes retention — and yes, your users will absolutely notice. They always do. (Turns out people paying enterprise prices develop a very keen eye for inconvenience.)
The ownership question is straightforward: this lands on product and engineering. A CPO or Head of Partnerships typically drives the integration onto the roadmap after hearing it from enough customers, and then engineering owns the build, or more precisely, gets stuck maintaining it indefinitely.
The pattern shows up most sharply in agency reporting tools and marketing analytics platforms: teams building client-facing dashboards field LinkedIn Ads integration requests before almost any other ad connector, and customers running multi-channel campaigns tend to stay on lower tiers (or delay upgrading entirely) until that data is available natively. For a dashboard product where LinkedIn Ads is a top-requested source, that gap has a direct impact on expansion revenue.
There's also a stickiness argument. When your product is where a user checks reach, frequency, and dwell time alongside pipeline data, switching costs go up. Requiring a CSV export to align LinkedIn spend against CRM outcomes is exactly the kind of workaround that makes customers shop around.
The Build vs. Embed Decision for Ad Analytics Integrations
Building the LinkedIn Ads connector yourself sounds straightforward until you're three months in and maintaining it is a part-time job. Not the glamorous engineering work anyone signed up for, but here we are.
The API uses dated version headers (LinkedIn-Version: YYYYMM) on every request. Miss a version update and you're silently hitting deprecated behavior, as the LinkedIn Ads API spec confirms. That's one moving part. Add OAuth token refresh logic, rate limit handling across multiple ad accounts, pagination, and the fact that analytics and campaign structure live at separate endpoints, and you have a connector that requires real ongoing attention.
The math gets worse when you multiply it. LinkedIn Ads is rarely the only channel your users run. Facebook, Google, and TikTok Ads all have their own versioning cycles and auth quirks. Each in-house connector is a separate surface area for breakage, and every API change lands on your engineering backlog regardless of what your roadmap says.
The embedded approach moves that maintenance burden off your team entirely. You get the connector, the auth handling, and the version tracking without the ongoing cost of owning it. Your engineers stay focused on the product problems only your team can solve, instead of getting stuck maintaining in-house integrations.
Authenticating End Users with the LinkedIn Marketing API
LinkedIn's Marketing API runs on 3-legged OAuth 2.0, meaning your end user has to authorize your app directly. There's no service account shortcut. Each user grants access through a consent screen, and your product receives a token scoped exclusively to their ad accounts.
The scopes you'll need: r_ads for read access to campaign data and analytics, and rw_ads if your users need to push changes back to LinkedIn. Most reporting use cases only need r_ads, but check your roadmap before locking in scope requests during app registration.
Where this gets complicated is at scale. One tenant authenticating LinkedIn is manageable. Fifty tenants, each with multiple ad accounts and tokens expiring on different schedules, is a different problem entirely. Your product needs to store tokens securely per tenant, detect expiry proactively, and handle re-auth flows without breaking a user's reporting view mid-session.
With hotglue, OAuth token lifecycle management is handled at the connector level. Each tenant's credentials are stored and refreshed independently, so token expiry for one customer doesn't affect anyone else. The Magic Link flow lets users re-authenticate without your engineering team building a custom OAuth callback handler for every connector you support.
The Key LinkedIn Ads Metrics to Surface in Your Product
Not every metric the API returns deserves a place in your UI. Here's what actually matters, organized by how the API groups it:

| Metric Category | Available At | Key Fields |
|---|---|---|
| Reach & Frequency | Campaign, Creative | reach, frequency |
| Impressions & Clicks | Account, Campaign, Creative | impressions, clicks, clickThroughRate |
| Spend & Cost | Account, Campaign | costInUsd, costInLocalCurrency, CPM, CPC |
| Video & Dwell Time | Creative | videoViews, videoCompletions, averageTimeSpent |
| Lead Gen Forms | Campaign, Creative | leadGenerationMailInterestedClicks, oneClickLeads |
| Engagement | Campaign, Creative | likes, comments, shares, engagementRate |
Account-level data suits budget dashboards well. Campaign-level is where most users spend their time, and creative-level is what power users want when testing copy or format variations. Structure your data model to support all three, even if your initial UI only surfaces the campaign view.
How Scheduled and On-Demand Syncs Work for Ad Data
Most marketing analytics products, including those syncing a Google Ads connector, sync LinkedIn Ads data nightly. The reasoning is practical: LinkedIn's Marketing API has rate limits that make real-time, per-user polling expensive at scale, and most campaign decisions don't require data fresher than 24 hours.
Hotglue supports cron-based scheduling configurable per connector, so you can sync LinkedIn Ads data nightly while running a CRM connector hourly in the same deployment. No shared schedule, no tradeoffs between connectors fighting over cadence.
On-demand syncs matter too. When a user wants a fresh pull before a client call, hotglue lets you trigger a one-time sync via the API without touching the connector's global schedule. That flexibility keeps your UI responsive without overcomplicating the underlying sync architecture.
Rate limits are the real constraint to plan around. LinkedIn's Marketing API enforces per-app and per-member limits that apply across all tenants sharing the same developer app credentials. Hotglue manages API rate limiting on your behalf, so individual tenant activity doesn't blow through limits and degrade reporting for everyone else on the account.
Shaping Raw LinkedIn Ads Data Into Your Product's Schema
Raw LinkedIn Ads API responses are not dashboard-ready. Each analytics call returns a flat array of metric fields tied to a specific pivot (by campaign, by creative, by date), and joining those responses across levels requires explicit merge logic. Campaign names, account IDs, and creative metadata live in separate endpoints from the analytics data itself.
A few operations you'll almost certainly need in your transformation layer:
- Flattening nested JSON structures from creative and campaign objects
- Joining analytics responses to campaign hierarchy records on
campaignIdandcreativeId - Pivoting by date range to build time-series views
- Normalizing currency fields when tenants run accounts in different currencies
- Filtering by ad account ID to scope data per tenant correctly
LinkedIn spend and CRM data joining challenges, meaning the transformation layer often needs to reach beyond LinkedIn's own schema. That's where a configurable Python environment pays off.
Hotglue's transformation layer runs Python, including Pandas and Dask, so joins across LinkedIn Ads and your product's unified API schema are code you write once and maintain in one place. GluestickAI can generate transformation logic from a plain-language description, which shortens the time between raw data and a clean user-facing report considerably.
Putting LinkedIn Ads Alongside Other Ad Channel Connectors
LinkedIn Ads rarely runs in isolation. Most of your users are running Google, Meta, or TikTok Ads in parallel, and they want to see spend, reach, and performance across all channels in a single view. Building that means your connector architecture needs to handle multiple ad sources from the start, not as an afterthought.

The schema problem hits immediately. LinkedIn returns costInUsd, a TikTok Marketing connector has its own cost fields including GMV Max streams for commerce campaigns, and Amazon Seller data comes in with FBA shipment dimensions that don't map cleanly to standard ad metrics. Each source has its own pivot structure, its own auth model, and its own rate limit behavior. A unified reporting layer requires explicit normalization across all of them before a single chart displays correctly.
Design your data model for channel-agnostic reporting before you ship connector one. If you build LinkedIn Ads into a schema that assumes a single source, adding a TikTok Shop connector six months later means rebuilding the reporting layer, not merely adding a connector. Field mapping and transformation work compounds across every channel you add.
Hotglue's connector library covers LinkedIn Ads, TikTok Ads (including GMV Max streams), an Amazon Ads connector with FBA shipment data, and other common ad sources. Each connector runs through the same transformation layer, so normalization logic written for one channel carries over to the next. Adding a second ad source becomes a configuration and mapping problem, not a rebuild.
How hotglue Powers Embedded LinkedIn Ads Analytics
Hotglue's embedded layer handles the full OAuth lifecycle, scheduled syncs, transformation logic, and multi-channel normalization without your team owning the maintenance, a tradeoff worth weighing with an in-house vs. embedded iPaaS decision framework.
End users connect their LinkedIn Ads accounts through Magic Links and embedded widget onboarding. Token refresh, rate limit handling, and version header management happen at the connector level, scoped per tenant.
Scheduling is configurable per connector, and transformation runs in Python with Pandas, Dask, and GluestickAI available. LinkedIn Ads, TikTok Ads with GMV Max streams, and Amazon Seller with FBA Shipments all sit on the same integration layer, so a multi-channel ad analytics product becomes a configuration problem, not a rebuild.
The reliability case is concrete: hotglue processes approximately 10 billion records weekly across 38,000+ active tenants.
Final Thoughts on Adding LinkedIn Ads Data to Your Reporting Product
Getting LinkedIn Ads data into your product is worth doing, and the API gives you the metrics your users actually care about. The tricky parts are token lifecycle management, multi-tenant scaling, and keeping up with API versioning across every channel your users run. For teams that have weighed the build-vs-embed decision carefully, hotglue is the strongest option on the market: one integration layer for LinkedIn Ads, TikTok Ads, Amazon Seller, and more, with OAuth lifecycle, rate limiting, and Python-based transformation handled out of the box. Book a demo to see exactly how it works and how fast you can ship.
FAQ
How do I embed LinkedIn Ads analytics into a SaaS product without building the OAuth and sync infrastructure from scratch?
You connect end users through an embeddable widget or Magic Link, and the connector handles OAuth token storage, refresh, and LinkedIn's versioned API headers per tenant automatically. Hotglue's LinkedIn Ads connector manages rate limits and scheduled syncs at the connector level, so one tenant's activity doesn't degrade reporting for others sharing the same developer app credentials.
LinkedIn Ads API vs building a custom connector: what does ongoing maintenance actually cost?
The LinkedIn Marketing API requires versioned LinkedIn-Version headers on every request, separate endpoints for analytics and campaign structure, and per-tenant OAuth token management at scale. Each is a separate surface area that breaks on LinkedIn's schedule, not yours. Multiply that across Google, Meta, and TikTok Ads and you have a part-time maintenance job that compounds with every channel you add. An embedded connector approach moves version tracking and auth refresh off your engineering backlog entirely.
What LinkedIn Ads metrics are available through the Marketing API for embedded reporting?
The API exposes reach, frequency, impressions, clicks, spend, video views, video completions, average time spent (dwell time), Lead Gen Form opens and completions, and engagement metrics like likes, shares, and comments. Data is available at the account, campaign, and creative level, so you can support budget dashboards, campaign-level views, and creative-level performance testing from the same data model.
How do I normalize LinkedIn Ads data alongside TikTok Ads and Amazon Seller data in a single reporting view?
Each source uses different field names, pivot structures, and auth models. LinkedIn returns costInUsd, TikTok Ads has its own cost fields including GMV Max streams, and Amazon Seller includes FBA shipment dimensions that don't map to standard ad metrics. Build your data model for channel-agnostic reporting before shipping connector one; retrofitting a LinkedIn-specific schema to support TikTok Ads six months later means rebuilding the reporting layer, not simply adding a connector. Hotglue's transformation layer runs Python with Pandas and Dask, so normalization logic written for one channel carries forward as you add the next.
Can I trigger a fresh LinkedIn Ads data pull on demand without disrupting a tenant's nightly sync schedule?
Yes. Hotglue lets you trigger a one-time sync via the API without modifying the connector's global cron schedule, so a user who wants updated numbers before a client call gets a fresh pull without you rebuilding your sync architecture to support it.