> ## 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 Meta App

> Create your own Meta app and a Business Manager System User token so Meta Ads, Facebook and Instagram connections in Markifact run under your app (white-label).

Every Meta connection in Markifact (Meta Ads, Facebook and Instagram) can run under **your own Meta app** instead of Markifact's. You create the app once, generate a System User token with the permissions for the channels you use, and paste that token into Markifact.

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

***

## What Every Meta Channel Needs

One value: an **access token** generated in your own Meta app. Use a **System User token** from Meta Business Manager. Unlike user tokens, which expire after one hour (short-lived) or 60 days (long-lived), System User tokens do not expire.

<Note>
  **Already have a token?** If your systems already hold a long-lived or System User token with the permissions below, skip to the channel page and paste it.
</Note>

***

## Permissions per Channel

Tick the permissions for every channel you plan to connect when you generate the token. One token can serve all three channels.

| Channel   | Required permissions                                                                                                  | Optional permissions                                                                                                                                                                                        | Setup page                                                    |
| :-------- | :-------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------ |
| Meta Ads  | `ads_management`, `ads_read`, `business_management`                                                                   | `pages_show_list`, `pages_read_engagement`, `pages_manage_ads` (page-backed ads, lead forms), `instagram_basic` (Instagram placements), `catalog_management` (catalogs), `leads_retrieval` (lead downloads) | [Custom Meta Ads App](/nodes/meta_ads/meta_ads_custom_app)    |
| Facebook  | `pages_show_list`, `pages_read_engagement`, `pages_manage_posts`, `business_management`                               | `pages_read_user_content` (comments and reactions on posts), `read_insights` (Page insights)                                                                                                                | [Custom Facebook App](/nodes/facebook/facebook_custom_app)    |
| Instagram | `instagram_basic`, `instagram_content_publish`, `instagram_manage_insights`, `pages_show_list`, `business_management` | `pages_read_engagement`                                                                                                                                                                                     | [Custom Instagram App](/nodes/instagram/instagram_custom_app) |

Markifact shows Meta's own permission error if a node needs a permission you did not grant.

***

## Setting Up Your Meta App

<Steps>
  <Step title="Create a Meta App">
    1. Go to [Meta for Developers](https://developers.facebook.com/apps/) and click **Create App**
    2. Choose the **Business** app type and select the Business Manager that owns (or manages) your assets
    3. Under **Add products**, add **Marketing API** for Meta Ads and **Facebook Login for Business** for Facebook and Instagram

    <Note>
      Meta applies its API access levels and rate limits per app. A new app starts on the default access level; if you manage many assets or hit limits, review the access level for each product in your app dashboard. That relationship is between you and Meta; Markifact does not need to be involved.
    </Note>
  </Step>

  <Step title="Create a System User">
    1. Open [Meta Business Settings](https://business.facebook.com/settings/)
    2. Go to **Users** > **System users** and click **Add**
    3. Name it (for example "Markifact Automation") and choose the **Admin** role if it should publish and manage campaigns, or **Employee** for reporting only
  </Step>

  <Step title="Assign Assets to the System User">
    1. Select the system user and click **Assign assets**
    2. Assign every **Ad account**, **Page**, **Instagram account**, **Pixel** and **Catalog** Markifact should work with, with **Manage** access for publishing and campaign changes (or **View** for reporting only)

    The token can only see assets assigned here. A token with no assigned assets for a channel is rejected when you connect that channel.
  </Step>

  <Step title="Generate the Access Token">
    1. Still on the system user, click **Generate new token**
    2. Select **your app** from the list
    3. Set the token expiration to **Never**
    4. Tick the permissions from the table above for the channels you plan to connect
    5. Click **Generate token** and copy it

    > **Important:** Keep this token secure. Anyone holding it can act on every asset assigned to the system user.
  </Step>

  <Step title="Connect in Markifact">
    Open the channel's setup page from the table above, or go straight to [Connections](https://app.markifact.com/connections), click **Connect** on the channel, select the **Custom App (White-label)** tab, name the connection and paste the token. Markifact verifies it with one Graph API call before saving anything.
  </Step>
</Steps>

***

## Rotating or Replacing the Token

Add the connection again with the **same connection name** and the new token. Markifact replaces the stored token in place, so workflows and agents bound to the connection keep working.

***

## Troubleshooting

<Accordion title="Meta rejected the access token (session has expired / invalid OAuth access token)">
  The token expired or was revoked. User tokens expire after 1 hour or 60 days; generate a **System User** token with expiration set to **Never** instead. Regenerating a system user token also invalidates the previous one.
</Accordion>

<Accordion title="The token is missing the permissions Markifact needs">
  Generate a new token and tick the required permissions for the channel from the table above. If you copied a **Page** access token by mistake, use the system user token instead.
</Accordion>

<Accordion title="The token is valid, but it cannot see any assets">
  Assign the ad accounts, Pages or Instagram accounts to the system user under **Business Settings** > **Users** > **System users** > **Assign assets**, then generate a new token.
</Accordion>

<Accordion title="Calls fail with 'API calls from the server require an appsecret_proof argument'">
  Your app has **Require App Secret** turned on under **App settings** > **Advanced** > **Security**. Turn it off: Markifact authenticates with your token only and never holds your app secret.
</Accordion>

***

## 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="Connections" icon="plug" href="/core-concepts/connections">
    How connections, sharing, and privacy work
  </Card>
</CardGroup>
