Problem Summary
You have built an application that integrates with Facebook via the Meta Graph API. You have created a Meta Developer app, added the required permissions in the App Review section, recorded a screencast demonstrating the feature, and submitted for review. Days later you receive a rejection notification in the Meta Developer Console. The reason is brief and often circular: 'The reviewer was unable to complete the review because the use case was not demonstrated.' You re-record the screencast, resubmit, and receive the same rejection.
Symptoms
- App Review status shows 'Rejected' with a reason like 'Unable to verify use case' or 'Incomplete submission'
- Permissions requested appear in the app but users cannot grant them because the app is in development mode
- The screencast submission link fails to load or the uploaded video was rejected for format
- Meta sends a rejection citing a missing 'Data Use Checkup' or 'Data Deletion Callback URL'
- The app has been in Development mode for months with only manually added test users
- Permissions like pages_manage_posts or instagram_content_publish show as 'Not Approved' in the App Dashboard
- The app works perfectly for the developer account but fails for any other user
- Review rejection emails include a reference ID but no thread to reply to for clarification
Business Impact
Facebook apps in Development mode are restricted to users with specific roles in the Meta Developer account: Admin, Developer, and Tester. Any external user who attempts to use the app's Facebook Login or Graph API features sees an error or cannot grant permissions. This makes the app impossible to ship. For social media management tools, publishing integrations, or apps that require managing Facebook Pages, the entire product category is blocked until review passes.
Root Cause
Meta's app review is a human review process where a contractor attempts to use your app following the steps provided in your submission notes. If the reviewer cannot log in, cannot find the feature that requires the permission, or cannot complete the workflow end-to-end using the test credentials you provided, the submission is rejected as 'unable to verify.' The root cause of most rejections is that the submission package notes, screencast, and test credentials does not give the reviewer everything needed to independently reproduce the workflow.
Meta's review team cannot see your application's source code or backend. They interact entirely as an end user. If any step in the workflow requires prior context, a specific URL, an invite link, or credentials that were not provided in the submission notes, the review will fail. The screencast is not a substitute for working test credentials both are required.
Diagnosis
Step 1: Verify App Settings Are Complete Before Submission
Before any App Review submission, your Meta app must have all required platform settings filled in. Navigate to App Dashboard > Settings > Basic and verify every required field. Missing fields in Basic Settings cause automatic rejection.
- App Icon (1024x1024 PNG, no transparency)
- Privacy Policy URL publicly accessible, on your domain
- Terms of Service URL
- App Category
- Business Use (if the app accesses business-managed Pages or Instagram accounts)
- Data Deletion Request URL or Data Deletion Instructions URL
Step 2: Request Only Necessary Permissions
In the App Review section, each permission requires a separate use case justification. Requesting a permission without a clear demonstrated use case in the screencast is a rejection. Audit your permission requests against your actual feature set.
// Only request what you need at the point of use
// Bad: requesting everything upfront
FB.login(callback, {
scope: "email,public_profile,pages_manage_posts,pages_read_engagement,publish_actions"
});
// Good: request basic permissions at sign-in, then request additional
// permissions only when the user accesses the feature that requires them
FB.login(callback, {
scope: "email,public_profile"
});
// Later, when user accesses the "Post to Page" feature:
FB.login(callback, {
scope: "pages_manage_posts,pages_read_engagement",
auth_type: "rerequest"
});Step 3: Prepare the Screencast Correctly
The screencast is the most important part of the submission. It must show the complete end-to-end user journey from login to the point where the requested permission is used. Meta rejects screencasts that are too short, too fast, skip steps, show a development environment (localhost), or demonstrate the feature on the developer's own account without showing the permission grant dialog.
- Record at 1080p, minimum 720p blurry screencasts are rejected
- Show the Facebook Login dialog with the permission grant screen
- Show the feature that uses the permission working after the grant
- Use a test account that is NOT the developer account Meta reviewers check this
- Record the app on your production URL (https://yourapp.com), never localhost
- Include audio narration explaining each step reviewers cannot read your mind
- Maximum video length: 10 minutes. Most successful screencasts are 3-5 minutes.
Step 4: Provide Complete Test Credentials
In the submission notes, provide a dedicated test account that the reviewer can use. This account must be a Tester role in your Meta Developer app, must have the minimum setup required to use the feature (e.g., a Facebook Page must already be connected), and must work end-to-end without requiring any additional setup by the reviewer.
## Test Account Credentials
- Email: reviewer@yourtest.com
- Password: TestPassword123!
(This account has the Tester role in the app and is pre-configured with a test Page)
## Step-by-Step Instructions
1. Go to https://yourapp.com/login
2. Click "Continue with Facebook"
3. Grant the requested permissions on the Facebook dialog
4. You will land on the dashboard at /dashboard
5. Click "Connect a Page" in the left sidebar
6. Select "Test Company Page" from the list
7. Click "Post Update" and enter any text
8. Click Publish the post will appear on the test Page
## What permission this demonstrates
pages_manage_posts: Used in Step 7 to publish content to the connected Page.
The test Page "Test Company Page" is already connected to the test account.Step 5: Complete the Data Handling Questionnaire
Meta requires apps to complete a Data Use Checkup every year and to provide a Data Deletion callback. Navigate to App Dashboard > App Review > Permissions and Features and check whether any permission shows a 'Complete Data Use Checkup' requirement. Failing to complete this blocks the permission from being approved regardless of screencast quality.
# Data Deletion Callback URL must respond to HTTP GET with JSON:
# GET https://yourapp.com/api/facebook/data-deletion
# Response: { "url": "https://yourapp.com/data-deletion-status?code=USER_CODE", "confirmation_code": "USER_CODE" }Production Failure Scenarios
Scenario 1: App Switched to Live Mode Before Review Completes
A developer switches the app from Development mode to Live mode expecting this to make it publicly accessible while review is pending. In Live mode, the app CAN be used publicly, but only with default permissions (email, public_profile). Any permission that has not been approved by App Review still requires users to have a Developer or Tester role. The reviewer uses a standard Facebook account without those roles and cannot grant the unapproved permissions, causing immediate rejection.
Scenario 2: Test Facebook Page Has Restrictions
The test Facebook Page provided to the reviewer has age restrictions or geographic restrictions enabled. The reviewer's account does not meet those restrictions and cannot see the Page in the permission grant flow. The app appears to not demonstrate the use case. Fix: use an unrestricted Page for review testing and add a note in the submission that the feature supports restricted Pages.
Scenario 3: Deprecated Permission Requested
An app requests publish_actions, a permission deprecated in Graph API v3.0 (2018) and no longer available. The App Review interface still allows selecting it, but the reviewer immediately rejects any submission containing deprecated permissions. Always cross-reference your permission list against Meta's changelog at developers.facebook.com/docs/graph-api/changelog.
Prevention Checklist
- Complete every field in App Dashboard > Settings > Basic before submitting for review
- Implement and test the Data Deletion Callback URL before submission
- Record the screencast on the production URL, not localhost or a staging subdomain
- Use a Tester-role Facebook account (not the developer account) for all screencast recording
- Pre-configure the test account so the reviewer can complete the workflow in under 5 minutes
- Include detailed step-by-step instructions in the submission notes assume the reviewer has never seen your app
- Cross-reference every requested permission against Meta's Graph API changelog to confirm it is not deprecated
- Request permissions progressively (at the feature level) rather than all upfront at login
- Complete the Data Use Checkup for all permissions that require it before submitting
Resolution Summary
The repeated rejections were caused by: an incomplete Data Deletion Callback URL (not implemented at all), a screencast that showed the feature on the developer's own admin account (not a standard user account), and submission notes that did not provide working test credentials. After implementing the deletion callback, re-recording the screencast with a Tester account, and writing detailed step-by-step submission notes with login credentials, the review passed on the next submission.
Lessons Learned
- Treat the App Review submission like a QA bug report give the reviewer everything they need to reproduce the workflow independently
- The Data Deletion Callback is not optional; it must be implemented and the URL must return the correct JSON structure
- Never use your own developer account in the screencast use a separate test account with Tester role
- Each permission needs its own demonstrated use case in the screencast a single walkthrough that touches all features is not enough if each permission is not explicitly shown being used
- Read Meta's Platform Policy update emails carefully deprecated permissions and new data handling requirements are announced there before affecting app reviews
Conclusion
Meta App Review is an opaque process, but it follows a consistent pattern: reviewers need to independently replicate your feature using your submission notes and test credentials. Every rejection is ultimately because the reviewer could not complete that replication. Invest time in your submission notes and screencast narration rather than in resubmitting the same package repeatedly.