Meta App Review · Features

The build works. In development mode the app pulls public posts from competitor Pages, reads the comment threads, aggregates the sentiment, and the dashboard fills with data. Everything is finished except the paperwork.

Then the app goes live and every one of those calls returns an empty array. Nothing is broken and no error explains it. The app is simply missing a Feature — and a Feature is not something a user can hand over by tapping Allow. Only Meta can switch it on, and only through App Review.

PPCA is a Feature, not a permission — and that changes everything

Most teams arrive at Page Public Content Access expecting it to behave like pages_read_engagement: add it to the login dialog, the user consents, done. It does not work that way, and Meta says so directly.

“Features are authorization mechanisms that allow apps to access specific types of data through our various APIs. In this way they are similar to Permissions, however Features cannot be granted to an app by an app user. Instead, Features are active or inactive depending on the app user’s relationship to the app and the app’s mode when it is being used.”Meta — Pages API permissions and features (developers.facebook.com)

That single paragraph explains the empty arrays. Meta states that “approved features are active for all app users, but unapproved features are only active for users with a role on the app.” While you were building, you had a role on the app, so PPCA behaved as if it were granted. The moment a real customer authenticated, it was not.

There is no consent screen to fix, no scope string to correct, and no support ticket that shortcuts it. The only route is a successful App Review submission.

What PPCA actually unlocks

Meta’s definition is precise about the boundary between Pages you manage and Pages you do not:

“The Page Public Content Access feature allows your app access to the Pages Search API and to read public data for Pages for which you lack the pages_read_engagement permission and the pages_read_user_content permission. Readable data includes business metadata, public comments and posts.”Meta — Pages API permissions and features

The Graph API reference draws the same line from the other direction, and it is worth reading as a hard limit rather than a nuance:

“For apps that have been granted the pages_read_engagement and pages_read_user_content permissions, only data owned by the Page is accessible. For apps that have been approved for either the Page Public Content Access (PPCA) or Page Public Metadata Access (PPMA) feature, only public data is accessible.”Meta — Graph API Page reference
Page statusTokenFeature needed for public data
UnpublishedPage or User tokenNone — PPCA does not apply
Published, unrestrictedApp or User tokenPPCA or PPMA
Published, restrictedPage or User tokenPPCA or PPMA, and the app user must satisfy the restriction

That last row is the one that quietly breaks coverage claims. Meta notes that restrictions include “any visibility restrictions such as by age or region,” and that “for restricted Pages, the app user must also satisfy any restrictions in order for data to be returned.” A monitoring product that promises complete coverage of a category will have blind spots it cannot close with an approval.

One implementation note Meta publishes but almost nobody repeats: “When using the Page Public Content Access feature, use a system user access token to avoid rate limiting issues.” Architectures built around per-user tokens tend to discover this after launch.

PPCA or PPMA — a one-way door you walk through before review

There is a lighter sibling feature, and choosing between them is a decision made before submission, not after.

Page Public Metadata Access

Meta’s stated usage: “analyze engagement with public Pages by viewing Like and follower counts, or aggregate public-facing About Page information from multiple, disparate pages.” Counts and About data. No feed, no comments.

Page Public Content Access

Adds the layer PPMA cannot reach. Meta’s PPMA page says it plainly: “If your app also needs to read the Page Feed edge, or Comments on a Page’s Posts, request the Page Public Content Access feature instead.”

“This feature is superseded by the Page Public Content Access (PPCA) feature. If your App Review submission includes PPCA, or your app has already been approved for PPCA, you cannot request this permission.Meta — Page Public Metadata Access reference

Read that as an exclusivity rule. Requesting both, or requesting the wrong one and discovering the gap after approval, means going back through review with a changed submission — and a changed submission is a new screencast, a new use-case description and a new queue position.

The narrowest sentence in the whole feature

Everything above is about mechanics. The part that actually decides submissions is a single sentence about allowed usage, and it is far tighter than most product plans assume.

“The allowed usage for this feature is to provide aggregated, anonymized public content for competitive analysis and benchmarking. You may also use this feature to request analytics insights to improve your app and for marketing or advertising purposes, through the use of aggregated and de-identified or anonymized information (provided such data cannot be re-identified).”Meta — Pages API permissions and features

Aggregated. Anonymised. Not re-identifiable. A product that surfaces individual commenters, builds profiles of the people engaging with a Page, or lets a customer drill from a chart down to a named person is describing something the allowed usage does not cover — regardless of the fact that the underlying data is public.

Meta ties this directly to the outcome of review:

“Read the Allowed Usage section in the reference for each permission and feature that you will be requesting in your submission. If your app does not satisfy the allowed usage for a permission or feature, your app will not be approved for that permission or feature.Meta — App Review submission guide

This is why PPCA rejections are so often unfixable by editing the submission. The submission was accurate; the product was outside scope. Establishing that before a line of the review pack is written is the single highest-value hour in the whole project.

Business Verification sits underneath all of it

PPCA is an advanced-access request, and advanced access pulls the business layer into scope:

“Apps that request advanced access for permissions and apps that allow other Businesses to access their own data must be connected to a Business that has completed Business Verification. Until then, app users from other Businesses will be unable to grant these apps permissions and all features will be inactive.Meta — Business Verification (developers.facebook.com)

Note the second half of that sentence: all features will be inactive. An app can pass App Review on paper and still return nothing in production because the portfolio underneath was never verified. Meta also states that “only someone with an Admin role in the Business will be able to complete the verification process” — frequently a finance or legal contact who has no idea a launch depends on them.

If that layer is the weak point rather than the review itself, it is its own project: Meta Business Verification.

How the work is sequenced

1

Test the product against the allowed-usage sentence first

Before any submission work: does the shipped experience present aggregated, anonymised, non-re-identifiable output? If any screen shows an individual, the product changes or the request does. Everything downstream is wasted effort until this is settled.

2

Choose PPCA or PPMA deliberately

Map every endpoint the roadmap needs — not just today’s build — against what each feature covers. The exclusivity rule makes this expensive to reverse.

3

Clear the business layer in parallel

Business Verification runs on its own timeline and its own approvers. Started at submission time, it becomes the critical path.

4

Log the API calls the dashboard is waiting for

Meta requires at least one successful call per requested item within 30 days of submitting, and states the “Request advanced access” button “will remain grayed out until a successful API has been logged in our system,” with logging taking up to two days. Teams routinely lose a week here to a button they assume is broken.

5

Build a reviewer-proof demonstration

For a server-to-server analytics product with no consumer login, showing a reviewer how to observe PPCA in use is the hardest deliverable in the pack — and the one that decides the result. It is a construction problem, not a recording problem.

Where PPCA submissions go wrong

  • The use case is outside allowed usage. Individual-level or re-identifiable output, presented honestly, is a rejection on the merits. No rewrite of the description saves it.
  • The reviewer cannot reach the app. Meta: “If we are unable to access your app to test it, your entire submission will be rejected.”
  • Server-to-server with nothing to show. Meta’s own common-mistakes page addresses apps with no user interface — the submission must still “accurately describe and show how your app will ultimately use the data.” Most PPCA apps are exactly this shape.
  • The screencast misses an item. “Any requested permission or feature missing a screen recording will not be approved.”
  • Descriptions were copy-pasted. Meta: “Each permission and feature must have its own description. Do not copy and paste.”
  • The reason is not visible to the reviewer. “If the review team can’t see or have a clear understanding of why you are requesting a specific Permission or Feature, it will be rejected.”
  • Business Verification was left until later. Features stay inactive for outside users until it completes, so the app looks broken even after approval.
  • Extra items were bundled in. “Only request the permissions and features that your app needs.” Every additional item is another way for the whole submission to fail.

Where this sits in the wider review picture

PPCA is unusual because the hard part is not the paperwork. It is proving a use case fits a narrow published boundary, demonstrating a headless product to a human reviewer, and clearing a business layer that belongs to a different department. Three problems, three owners, one queue.

If a submission has already come back rejected, the diagnosis and re-submission route is set out under the Meta App Review rejection fix service. If the whole permission and feature chain needs preparing and submitting properly rather than assembled under launch pressure, that scope and its pricing are described separately.

An honest note. Meta reviews and decides every App Review submission independently. Meta states you “should receive a decision within a week” of submitting, but no consultant controls the outcome and no specific result or timeline can be promised. What can be controlled is that the use case genuinely fits the published allowed usage, that the correct feature is requested the first time, that the business layer is clear before submission, and that a reviewer can follow the demonstration without ambiguity. This is review preparation and submission support, and it is not affiliated with or endorsed by Meta Platforms, Inc.

Sources: Meta — Pages API permissions and features (developers.facebook.com/docs/pages/overview/permissions-features), Graph API Page reference (developers.facebook.com/docs/graph-api/reference/page/), Page Public Metadata Access reference (developers.facebook.com/docs/features-reference/page-public-metadata-access/), App Review overview (developers.facebook.com/docs/app-review), App Review submission guide, screen-recording guide and common-mistakes pages, and Business Verification (developers.facebook.com/docs/development/release/business-verification). Meta’s dedicated Page Public Content Access reference page did not render at the time of writing; its definition is quoted here from the Pages API page, where Meta publishes the identical wording. Reviewed August 2026 — Meta’s documentation changes; verify against the current pages before acting.