Connect LinkedIn Ads
LinkedIn does not offer a Composio-managed app. The deployment needs its own LinkedIn developer app with the Advertising API product (reporting) – and the Conversions API product if you want to upload conversions through Composio. LinkedIn reviews Advertising API access manually; plan for several weeks. Until the auth config exists, LinkedIn shows not configured.
Connect
- Dashboard → Settings → Integrations → LinkedIn Ads → Connect.
- Sign in with a LinkedIn account that has at least Viewer (reporting) or Campaign manager role on the ad account.
- Select the ad accounts of this project. A backfill of 90 days starts in one-month chunks (LinkedIn's analytics API returns one account per call).
What is imported
| 3x level | LinkedIn object |
|---|---|
| campaign | campaign group |
| ad set | campaign |
| ad | creative |
Daily analytics per creative: spend (costInLocalCurrency), impressions, clicks, platform
conversions. Names are joined from the entity lists because the analytics endpoint returns only URNs.
Time zone: LinkedIn's daily analytics are reported in UTC and the API does not expose an
account time zone, so LinkedIn accounts are stored with UTC. Daily charts can be offset by your
project's UTC offset; totals over a range are unaffected.
Recommended URL settings
Enable URL tracking parameters on the campaign and use the
UTM template with LinkedIn's dynamic values
({{CAMPAIGN_ID}}, {{CREATIVE_ID}}, {{CAMPAIGN_GROUP_ID}}). LinkedIn appends li_fat_id when
enhanced conversion tracking is on – 3x stores it for conversion uploads.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| not configured | no COMPOSIO_AUTH_CONFIG_LINKEDIN_ADS | create the app and auth config |
403 ACCESS_DENIED | the signed-in member has no role on the account | grant a role in Campaign Manager, then reconnect |
| Sponsored posts unmatched | organic post URL without UTMs | add URL tracking parameters or a mapping rule |
| Token expired after 60 days | LinkedIn member tokens are short-lived | click Reconnect (refresh tokens are used when your app has them) |