> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
> Use this file to discover all available pages before exploring further.

# LinkedIn Ads adapter compatibility

> Exact AdCP-to-LinkedIn Ads mapping, implemented coverage, proof state, and known limits.

LinkedIn Ads has a partial 16-flow static planning denominator. Four products are ordinary current-code classifications; six remain blocked. Lead Gen implementation and exact local readback exist only behind a protected exact-SHA canary gate, so ordinary buyer discovery and execution remain dark. Operation rows distinguish callable surfaces from certified behavior, and none implies fresh provider eligibility.

<Note>
  **Review-ready, not provider-endorsed · last verified 2026-08-16.**
  This is an Interchange current-main compatibility snapshot, not provider certification or endorsement. “Implemented” means a provider write/read path exists.
  It does not mean fresh signed live evidence exists or that the selected account
  is currently eligible.
</Note>

## Coverage and execution-package model

| Layer                         | State                                     | Current contract                                                                                                                                                                     |
| ----------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Provider-observed denominator | `partial`                                 | The current provider-creation-flow registry captures a partial 16-flow static planning denominator. It is not complete provider coverage or fresh signed live evidence.              |
| Wholesale product archetype   | `classified`                              | Product rows represent materially different launch contracts. Signals, activation resources, targeting and delivery overlays, and creative choices do not create extra product rows. |
| Exact execution package       | `exact_static_base_plus_runtime_bindings` | Each product ID selects the current provider configuration base; account, resources, targeting, creative, budget, bid, and flight remain runtime bindings.                           |
| Current account eligibility   | `account_check_required`                  | Current provider permissions, market, resources, and feature eligibility must be checked for the selected account.                                                                   |

## Claim provenance gaps

Object-mapping and reporting rows have no exported, code-owned complete
denominator on current main. They remain published because they are useful,
but the contract marks the missing drift oracle instead of pretending a
same-test literal prevents drift.

| Claim family      | State                            | Drift enforced | Trace sources                                                  | Gap                                                                                             |
| ----------------- | -------------------------------- | -------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| `object_mappings` | `manual_plan_trace_non_enforced` | `false`        | packages/storefront-adapters/src/platforms/linkedin/adapter.ts | No code-owned complete object-mapping denominator exists; these rows remain manually traced.    |
| `reporting`       | `manual_plan_trace_non_enforced` | `false`        | packages/storefront-adapters/src/platforms/linkedin/adapter.ts | No exported code-owned reporting projection constant exists; these rows are not drift-enforced. |

## Evidence state

Static certification and live certification are different claims. Deterministic
tests can prove code-owned catalog classifications and fail-closed behavior
without contacting the provider. Object-mapping and reporting rows are validated
for shape, presence, and uniqueness only; the provenance table above records that
they are not compared with a complete code-owned denominator.
Fresh live evidence must be dated, signed, bound to the exact account, product,
resources, fixture revision, requested package, readback, no-spend result, and
cleanup result. Live evidence is treated as stale after 30 days, and a newer
failure overrides an older pass.

| Layer                           | State                                           | Last verified | What it means                                                                                                                                                                                                                     |
| ------------------------------- | ----------------------------------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Static / deterministic contract | `current_code_surface_classified_not_certified` | 2026-08-16    | The partial provider-flow registry, direct catalog, callable methods, canonical format IDs, targeting dimensions, and Lead Gen fail-closed gate are regression-checked. This does not certify each provider write/read lifecycle. |
| Fresh signed live evidence      | `no_current_signed_full_lifecycle_artifact`     | —             | No currently valid dated signed full-lifecycle artifact is published for this adapter. The protected LinkedIn Lead Gen exact-SHA no-spend canary has not been promoted to ordinary buyer eligibility.                             |
| AAO discovery                   | `community_catalog`                             | 2026-08-16    | The public registry record is discovery metadata, not provider-owned authorization or current account eligibility.                                                                                                                |

## Markets

**`account_check_required`.** No global market allowlist is asserted.

This page publishes no global market allowlist.

Authority: The selected account and provider response are authoritative.

## Object mapping

| AdCP / Interchange    | LinkedIn Ads                   | Mapping                                                                      |
| --------------------- | ------------------------------ | ---------------------------------------------------------------------------- |
| `account`             | `provider advertising account` | The authenticated selected account is the execution boundary.                |
| `media_buy`           | `campaign group`               | Current adapter hierarchy mapping; lifecycle certification remains separate. |
| `package`             | `campaign`                     | Budget, targeting, optimization, and flight bindings.                        |
| `creative_assignment` | `creative`                     | Creative materialization or assignment surface declared by current code.     |

## Operations

| Public adapter operation | Surface              | State             | Provider path                                                                                                  |
| ------------------------ | -------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------- |
| `list_accounts`          | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_accounts`          | AdCP buyer operation | `not_implemented` | Account synchronization is not implemented.                                                                    |
| `get_products`           | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_creatives`         | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `list_creatives`         | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `create_media_buy`       | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `get_media_buys`         | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `update_media_buy`       | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `get_media_buy_delivery` | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `get_signals`            | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_audiences`         | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_event_sources`     | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `log_event`              | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `sync_catalogs`          | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |
| `get_account_financials` | AdCP buyer operation | `surface_present` | Callable current-main adapter method; exact provider behavior is not promoted to certified by method presence. |

## Wholesale products and exact execution bases

| Product ID                       | Exact provider execution base                                                 | Implemented               | Static certification        | Current eligibility      | Known gap                         |
| -------------------------------- | ----------------------------------------------------------------------------- | ------------------------- | --------------------------- | ------------------------ | --------------------------------- |
| `linkedin_sponsored_content`     | objective `BRAND_AWARENESS`; optimization `MAX_IMPRESSION`; billing `CPM`     | `current_code_classified` | `not_certified`             | `account_check_required` | —                                 |
| `linkedin_brand_awareness_reach` | objective `BRAND_AWARENESS`; optimization `MAX_REACH`; billing `CPM`          | `current_code_classified` | `not_certified`             | `account_check_required` | —                                 |
| `linkedin_video_ads`             | objective `VIDEO_VIEWS`; optimization `MAX_VIDEO_VIEW`; billing `CPM`         | `current_code_classified` | `not_certified`             | `account_check_required` | —                                 |
| `linkedin_lead_gen`              | objective `LEAD_GENERATION`; optimization `MAX_LEAD`; billing `CPM`           | `canary_only`             | `deterministic_fail_closed` | `canary_only`            | catalog\_execution\_incomplete    |
| `linkedin_website_traffic`       | objective `WEBSITE_VISITS`; optimization `MAX_CLICK`; billing `CPC`           | `current_code_classified` | `not_certified`             | `account_check_required` | —                                 |
| `linkedin_message_ads`           | objective `ENGAGEMENT`; optimization `MAX_CLICK`; billing `CPC`               | `not_implemented`         | `not_certified`             | `not_eligible`           | creative\_round\_trip\_incomplete |
| `linkedin_conversions`           | objective `WEBSITE_CONVERSIONS`; optimization `MAX_CONVERSION`; billing `CPM` | `not_implemented`         | `not_certified`             | `not_eligible`           | catalog\_execution\_incomplete    |
| `linkedin_text_ads`              | objective `WEBSITE_VISITS`; optimization `NONE`; billing `CPC`                | `not_implemented`         | `not_certified`             | `not_eligible`           | creative\_round\_trip\_incomplete |
| `linkedin_follower_ads`          | objective `ENGAGEMENT`; optimization `MAX_IMPRESSION`; billing `CPM`          | `not_implemented`         | `not_certified`             | `not_eligible`           | creative\_round\_trip\_incomplete |
| `linkedin_job_ads`               | objective `JOB_APPLICANTS`; optimization `MAX_IMPRESSION`; billing `CPM`      | `not_implemented`         | `not_certified`             | `not_eligible`           | creative\_round\_trip\_incomplete |

## Creative formats

The format state is deliberately narrower than the provider format catalog.
Only `executable` formats have the ordinary provider write and readback path;
`canary_only` formats are restricted to governed proof, and
`catalog_declared` formats are present in current code without a public
ordinary-execution certification claim.
`declared_not_buyer_selectable` formats are not sold through the adapter.

| Format ID                      | Kind                    | State              | Provider shape                                                                                                                                                                             |
| ------------------------------ | ----------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `linkedin_single_image`        | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_video`               | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_carousel`            | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_lead_gen`            | `canonical_code_format` | `canary_only`      | Implementation and exact local readback exist, but ordinary buyer discovery and execution remain dark; access is limited to the protected exact-SHA no-spend canary pending certification. |
| `linkedin_message_ad`          | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_text_ad`             | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_spotlight`           | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_follower`            | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_promoted_offerings`  | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_generated_image`     | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_generated_video`     | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |
| `linkedin_generated_offerings` | `canonical_code_format` | `catalog_declared` | Declared by the current canonical adapter format catalog; ordinary execution is not certified by this row.                                                                                 |

## Placements

This provider exposes no placement selector that Interchange can map without inventing inventory.

## Targeting

| AdCP dimension            | State             | Provider mapping                                                                            |
| ------------------------- | ----------------- | ------------------------------------------------------------------------------------------- |
| `geo_countries`           | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `geo_regions`             | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `signal_targeting_groups` | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `signals`                 | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `audience_include`        | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |
| `audience_exclude`        | `surface_present` | Accepted by the current adapter targeting gate; provider eligibility remains account-bound. |

## Reporting

| AdCP output | Provider source           | Notes                                                                                              |
| ----------- | ------------------------- | -------------------------------------------------------------------------------------------------- |
| `delivery`  | `provider reporting task` | A delivery method is callable; exact metric parity and full-lifecycle evidence remain uncertified. |

## Conversion and audience support

* **Optimization:** Product configuration is current-code classified; resource and event eligibility remain account-bound.
* **Event-source setup:** A callable sync\_event\_sources surface exists; provider behavior is not certified here.
* **Event ingestion:** A callable log\_event surface exists; provider behavior is not certified here.
* **Audiences:** A callable audience synchronization surface exists; provider behavior is not certified here.

## Known limits

* The captured partial denominator has 16 flows: 4 implemented and 12 blocked. It is a static planning registry, not complete provider coverage or fresh signed live evidence.
* LinkedIn Lead Gen implementation and exact local readback are present, but ordinary buyer discovery and execution remain dark. The protected exact-SHA no-spend canary is canary-only pending certification and is not fresh provider eligibility.
* Executable in the direct catalog means current-code classification, not deterministic certification, fresh signed live evidence, or present account eligibility.
* Formats marked catalog\_declared are not claims of ordinary provider write/read support; linkedin\_lead\_gen is separately marked canary\_only.

## Public review endpoints

* [AAO registry record](https://agenticadvertising.org/api/registry/publisher?domain=linkedin.com\&include=placements)
* Staging MCP/AdCP state: `relationship_gated_storefront_id_required`.
* Route template after a storefront relationship supplies its registered platform ID: `https://api.staging.interchange.io/seller/{registered_storefront_platform_id}/mcp`
* No provider-ID-derived URL is published. The shared MCP route requires a registered storefront platform ID assigned to the relationship; the adapter provider ID linkedin is not asserted to be that record ID.

The staging endpoint is connection-gated. Its presence here is not an invitation
to send mutating requests without a jointly approved test account and canary window.

## Provider references

* [LinkedIn Ads public documentation](https://learn.microsoft.com/en-us/linkedin/marketing/)

## Review questions

If a provider mapping is incomplete or has changed, send the exact product, format, targeting dimension, metric, market, or provider API field that differs. We update the governed contract and add code-owned drift checks where a denominator exists; otherwise the explicit non-enforced provenance gap remains.
