# Meta Ads setup for PopMCP

You end up with a never-expiring System User access token from Meta Business settings, and optionally your app's App Secret, to paste into PopMCP.

- Auth: API credentials
- Setup time: 12 min
- API base URL: https://graph.facebook.com
- Credentials screen: https://business.facebook.com/settings/system-users
- Provider docs: https://developers.facebook.com/docs/marketing-apis/overview

## Approval required before this works

Meta must grant your app Advanced Access to the ads_management and ads_read permissions through App Review, and your business must pass Meta Business Verification, before the app can touch ad accounts belonging to people who have no role on your app.

- Typical wait: Not published by Meta - there is no stated SLA. Business Verification is commonly reported to take several business days to about two weeks; App Review is often days but developers widely report weeks, especially on resubmission. Treat any figure as community-reported, not vendor-stated.
- Cost: Free - Meta charges nothing for App Review or Business Verification; you supply company registration documents.
- Blocked until approved: Without Advanced Access you cannot call the Marketing API on behalf of any third-party advertiser: 'Permissions with Standard Access can only be requested from app users who have a role on the requesting app', so every customer you did not add as an app admin/developer/tester returns a permissions error. Business Verification is a hard prerequisite - 'Advanced Access now requires Business Verification'. Separately, the Marketing API Access Tier (renamed from Ads Management Standard Access effective 4 May 2026) starts every app at Limited Access, which caps rate limits and withholds some endpoints until the app qualifies for Full Access.
- Works meanwhile: Standard Access is available without review, so you can read and write ads on any ad account where the authorizing user has a role on your app. That covers the whole single-tenant case - your own or your agency's ad accounts - using a user token or a Business Manager system user token, with live data and no review at all. Build and test the entire integration this way.

## Before you begin

- Admin role on the Meta business portfolio that owns the ad account. Only admins can create system users or generate their tokens.
- A Meta app at developers.facebook.com with the Marketing API product added.
- The ad account you want to reach must already be owned by, or shared with, that business portfolio.
- Advanced access to ads_management, which usually needs App Review before the token works on ad accounts outside your own business.

## Get your credentials

### 1. Create a system user

Open business.facebook.com/settings, pick the business portfolio that owns your ad account, then go to Users → System users and click Add. Name it `PopMCP`, choose the Admin system user role, and click Create system user.

Screen: https://business.facebook.com/settings/system-users

### 2. Assign the ad account and the app

Select the new system user and click Add assets. Under Ad accounts tick your account, turn on Manage campaigns, and click Save changes. Repeat with the Apps asset type and pick the Meta app whose credentials you will use.

Screen: https://business.facebook.com/settings/system-users

### 3. Generate a never-expiring token

On the system user, click Generate new token. Select your app, set Token expiration to Never, tick ads_management, ads_read and business_management, then click Generate token.

Screen: https://business.facebook.com/settings/system-users

### 4. Copy the token now

Click the copy icon in the confirmation dialog and store the token somewhere safe, then click OK.

### 5. Optionally add the App Secret, then paste into PopMCP

If your app has Require app secret turned on, open developers.facebook.com/apps → your app → App settings → Basic and click Show next to App secret. In PopMCP paste the token into System User access token, paste the secret into App Secret (optional), and save.

Screen: https://developers.facebook.com/apps

## Fields PopMCP asks for

- System User access token (accessToken) [required]: Business Settings → Users → System users → (create or open one) → Generate token. Assign the ad account to the system user first, and grant ads_read or ads_management (plus business_management for catalog/business operations). Choose 'never' for expiry. Stored encrypted.
- App Secret (optional) (appSecret): App Dashboard → Settings → Basic → App secret. When set, every call carries the computed appsecret_proof. Leave blank unless your app requires it. Stored encrypted.

## Verify

The Meta Ads connector in PopMCP flips to Connected and lists your ad accounts by name and act_ id. Asking for last week's campaign spend returns real numbers.

## Troubleshooting

### OAuthException code 190: Invalid OAuth access token

Cause: The token was revoked, the system user lost its app assignment, or a short-lived token from the Graph API Explorer was pasted instead of the system user token.

Fix: Re-assign the app to the system user in Business settings and generate a fresh token with Token expiration set to Never.

### (#200) Requires ads_management permission

Cause: The token was generated before the app had that permission, or only ads_read was ticked.

Fix: Generate a new token with ads_management ticked. Permissions are fixed at generation time, so adding them later does not upgrade an existing token.

### (#100) Unsupported get request on act_XXXX

Cause: The ad account was never assigned to the system user, or it is owned by a different business portfolio.

Fix: Open Business settings → Users → System users → your user → Add assets → Ad accounts, tick the account and turn on Manage campaigns.

### The token never appears after clicking Generate new token

Cause: The Meta app was not assigned to the system user, so there is nothing to select in the app dropdown.

Fix: Add the app under the Apps asset type first, then generate the token.

### (#17) User request limit reached

Cause: Meta's Business Use Case rate limits, which scale with the ad account's spend, have been hit.

Fix: Slow down and retry later. The X-Business-Use-Case-Usage response header reports how much of the budget is consumed.

### Invalid appsecret_proof provided

Cause: The App Secret belongs to a different app than the one the token was generated for.

Fix: Clear the App Secret field, or paste the secret from the exact app you chose in the Generate token dialog.

---

Source: https://www.docs.popmcp.com/docs/integrations/meta-ads/