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

# Custom LinkedIn Ads App

> Connect LinkedIn Ads through your own LinkedIn app (white-label) by pasting an access token generated with your app.

Markifact supports two ways to connect LinkedIn Ads: using the built-in **Markifact app** (Quick Connect) or connecting through your own **LinkedIn app** (Custom App). With a custom app, every request Markifact makes to the Marketing API runs under your app, so your clients never see Markifact in their permitted services.

<Note>
  Custom app connections are available on the **Team** plan. See [White-label Connections](/core-concepts/white-label-connections) for the overview.
</Note>

***

## Quick Connect vs Custom App

| Feature                 | Quick Connect        | Custom App                                   |
| :---------------------- | :------------------- | :------------------------------------------- |
| **Setup Time**          | 1 minute             | 15 minutes, plus LinkedIn's product approval |
| **App the client sees** | Markifact            | Yours                                        |
| **API rate limits**     | Markifact's app      | Your app                                     |
| **White Label**         | No                   | Yes                                          |
| **Plan**                | All plans            | Team                                         |
| **Best For**            | Quick setup, testing | Agencies, strict client requirements         |

***

## What You Need

One value: an **access token** generated with your own LinkedIn app by a member who has a role on the ad accounts you want to manage.

LinkedIn access tokens last **60 days**. Markifact does not refresh them (that needs LinkedIn's programmatic refresh approval, which Markifact does not use), so plan to generate a new token before the 60 days end and add the connection again with the same name.

<Note>
  **Already have a token?** If your systems already hold a LinkedIn access token issued by your app with the scopes below, skip to [Connect to Markifact](#connect-to-markifact).
</Note>

### Scopes

| Scope                                                                    | Needed for                                                 |
| :----------------------------------------------------------------------- | :--------------------------------------------------------- |
| `r_ads`, `rw_ads`                                                        | Reading and managing campaigns, ad sets and ads (required) |
| `r_ads_reporting`                                                        | Performance reports (required)                             |
| `r_organization_admin`, `r_organization_social`, `w_organization_social` | Organization pages, posts and lead forms                   |

***

## Setting Up Your Custom LinkedIn App

<Steps>
  <Step title="Create the App">
    1. Go to the [LinkedIn Developer portal](https://www.linkedin.com/developers/apps) and click **Create app**
    2. Enter the app name, associate it with your **Company Page**, and upload your logo. This is the branding members see when they authorize
    3. Under **Auth**, add a **Redirect URL** you control (any URL works for the token generator, for example `https://www.youragency.com/linkedin-callback`)
  </Step>

  <Step title="Request Marketing Developer Platform Access">
    1. Open the **Products** tab and request access to **Advertising API** (Marketing Developer Platform)
    2. Complete LinkedIn's access form and wait for approval. Agencies that already run their own integrations will have this in place; until it is approved, the ads scopes are not available to your app
  </Step>

  <Step title="Generate the Access Token">
    1. In the developer portal, open **OAuth 2.0 tools** (under **Docs & tools**) and click **Create token**
    2. Select your app and tick the scopes from the table above
    3. Sign in as the LinkedIn member who has a role on the ad accounts you want to manage and authorize
    4. Copy the access token

    If you prefer your own OAuth flow, request the same scopes and use the token it returns.

    > **Important:** Keep this token secure. Anyone holding it can act on every ad account the member can access, for 60 days.
  </Step>

  <Step title="Connect to Markifact">
    1. In Markifact, go to the [Connections](https://app.markifact.com/connections) page
    2. Click **Connect** on **LinkedIn Ads**
    3. Select the **Custom App (White-label)** tab
    4. Enter a **Connection Name** (for example "Acme Agency LinkedIn Ads")
    5. Paste the **Access Token**
    6. Click **Verify & Connect**

    Markifact makes one call that lists the ad accounts the token can reach. Nothing is saved unless it succeeds and returns at least one ad account.
  </Step>
</Steps>

***

## Selecting Your Connection

Custom app connections appear under the name you chose, with a **Custom app** badge on the Connections page. Select them in LinkedIn Ads nodes, agents, and MCP exactly like any other LinkedIn Ads connection.

***

## Renewing the Token

Every 60 days, generate a new token and add the connection again with the **same connection name**. Markifact replaces the stored token in place, so workflows and agents bound to the connection keep working.

***

## Troubleshooting

<Accordion title="LinkedIn rejected the access token (INVALID_ACCESS_TOKEN)">
  The token expired (60 days) or the member revoked your app under LinkedIn **Settings** > **Data privacy** > **Permitted services**. Generate a new token and add the connection again with the same name.
</Accordion>

<Accordion title="LinkedIn refused access (403)">
  Either the token is missing the ads scopes, or your app has not been approved for the Advertising API yet. Check the **Products** tab in the developer portal and generate the token again with `r_ads`, `rw_ads` and `r_ads_reporting`.
</Accordion>

<Accordion title="This LinkedIn member has no ad accounts">
  The member who generated the token has no role on any ad account. Add them under **Account settings** > **Manage access** in Campaign Manager, then generate a new token.
</Accordion>

***

## Summary

| Item                | Where to Find                                     | What It Looks Like                   |
| ------------------- | ------------------------------------------------- | ------------------------------------ |
| **Access Token**    | Developer portal > OAuth 2.0 tools > Create token | `AQV...`                             |
| **Required scopes** | Token generator scope list                        | `r_ads`, `rw_ads`, `r_ads_reporting` |

***

## Related

<CardGroup cols={2}>
  <Card title="White-label Connections" icon="tag" href="/core-concepts/white-label-connections">
    Overview of custom app connections across channels
  </Card>

  <Card title="Get Report" icon="chart-line" href="/nodes/linkedin_ads/linkedin_ads_get_report">
    Pull LinkedIn Ads performance data
  </Card>
</CardGroup>
