FB Page Advanced — WhatsApp Link Eligibility avatar

FB Page Advanced — WhatsApp Link Eligibility

Pricing

Pay per usage

Go to Apify Store
FB Page Advanced — WhatsApp Link Eligibility

FB Page Advanced — WhatsApp Link Eligibility

Checks Facebook cookies for Page WhatsApp-link eligibility, ban reason, page name and linked number via the business inbox + GraphQL.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ratul Islam

Ratul Islam

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

fb-page-advanced — WhatsApp Link Eligibility (Advanced Check)

What does fb-page-advanced do?

fb-page-advanced takes raw Facebook login cookies and tells you, per cookie, whether its Facebook Page is eligible for a WhatsApp link — plus the ban reason, the page name, and any already-linked WhatsApp number. It ports the proven /fb/page-advanced endpoint and pageAdvanced background sweep from the SheetSubmit backend, using plain fetch plus regex extraction (no browser, no crawler). It does not post, message, or change anything on the account: it only reads the business inbox page and one read-only GraphQL query.

Why use fb-page-advanced?

  • Batch screening: check up to 25 cookies per run and get one uniform result item per cookie.
  • Stable error codes: every item uses the shared workspace envelope, so error.code (invalid_cookie, session_challenge, invalid_page, rate_limited, …) is safe to branch on while error.message text may change.
  • Negative answers are data: a Page that exists but is not eligible still returns ok: true with eligible: false and a banReason — only "could not perform the check" becomes error.
  • Platform-native: Apify Proxy on every request (Facebook blocks bare datacenter IPs), scheduling, API access, dataset exports, and run monitoring come free with the platform.

How the check works

  1. GET https://business.facebook.com/latest/inbox/wec with a desktop Chrome user agent and the cookie.
  2. Extract the Page ID from the final URL plus nine HTML patterns (pageID, page_id, localScopeID, assetID, selectedPageId, ownerId, business_id, actorID), falling back to the cookie's c_user; extract the fb_dtsg token from DTSGInitData.
  3. POST https://business.facebook.com/api/graphql/ with x-fb-friendly-name: WhatsAppOnboardingUnifiedInboxSurfaceQuery (doc_id 27161030553583658) and read data.xfb_is_page_eligible_for_wa_link (is_eligible, ban_reason, page_whatsapp_number) plus data.page.name.

What data can fb-page-advanced extract?

FieldTypeDescription
eligibleboolean | nulltrue when the Page can take a WhatsApp link; false for a found-but-ineligible Page; null when the check failed
pageNamestring | nullPage name from GraphQL, e.g. "Example Fashion House"
linkedNumberstring | nullWhatsApp number already linked to the Page, if any
banReasonstring | nullWhy the Page is ineligible (e.g. "Not eligible for this page")
errorobject | null{ code, message, retryable } — null on success
inputstring | nullEcho of the cookie's c_user, so you can join results back to your rows

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The key-value store record OUTPUT holds the run summary (total, succeeded, failed, errorsByCode, timing).

How to check WhatsApp eligibility in bulk

  1. Log in to Facebook in your browser and copy the full Cookie request header of a logged-in session (it must contain c_user and xs).
  2. Open the Actor, paste one cookie per line into Facebook cookies (max 25), keep Proxy configuration on Apify Proxy.
  3. Click Start, then open the Dataset tab for per-cookie items and the Key-value store → OUTPUT record for totals.
  4. Branch on the result: ok: true → use eligible/banReason; ok: false → read error.code — invalid_cookie means grab a fresh cookie, rate_limited/upstream_error/service_unavailable mean retry later.

Can I run it from code?

Yes — via the API tab: start a run with { "cookies": ["<cookie-header>"], "proxyConfiguration": { "useApifyProxy": true } }, poll to SUCCEEDED, then fetch the default dataset items.

How much does it cost to check eligibility?

Each cookie costs two lightweight HTTP requests (one page load, one GraphQL call) — a 25-cookie run finishes in well under a minute of compute. Proxy traffic is the only metered extra; keep batches full (25 cookies) to amortize the run overhead.

Input

See the input tab for full configuration options. cookies is required (1–25 raw cookie headers). Each entry must be a non-empty string of at most 50 000 characters. proxyConfiguration defaults to Apify Proxy and is required in practice — runs without a proxy are blocked by Facebook.

{
"cookies": ["c_user=61592912563278; xs=27%3Aabcdef%3A2%3A1786607116%3A-1%3A-1; dpr=2;"],
"proxyConfiguration": { "useApifyProxy": true }
}

Output

Success — Page found and eligible:

{
"ok": true,
"actor": "fb-page-advanced",
"input": "61592912563278",
"eligible": true,
"pageName": "Example Fashion House",
"linkedNumber": null,
"banReason": null,
"friendCount": null,
"error": null,
"checkedAt": "2026-10-13T12:00:00.000Z",
"runId": "abc123XYZ"
}

Found but not eligible (still ok: true):

{
"ok": true,
"actor": "fb-page-advanced",
"input": "61592912563278",
"eligible": false,
"pageName": null,
"linkedNumber": null,
"banReason": "Not eligible for this page",
"friendCount": null,
"error": null,
"checkedAt": "2026-10-13T12:00:00.000Z",
"runId": "abc123XYZ"
}

Failure — dead cookie (branch on error.code):

{
"ok": false,
"actor": "fb-page-advanced",
"input": "61592912563278",
"eligible": null,
"pageName": null,
"linkedNumber": null,
"banReason": null,
"friendCount": null,
"error": {
"code": "invalid_cookie",
"message": "Cookie was rejected or expired (Facebook showed a login page). Get a fresh logged-in cookie and retry.",
"retryable": false
},
"checkedAt": "2026-10-13T12:00:00.000Z",
"runId": "abc123XYZ"
}

Tips

  • Fresh cookies win: xs tokens expire. If many items return invalid_cookie at once, re-export the headers and re-run.
  • Respect retryable: back off and retry rate_limited / upstream_error / service_unavailable; do not retry invalid_cookie, session_challenge, or invalid_page without new input.
  • invalid_page means no Page: the cookie logs in fine but owns no usable Page for the advanced surface — check it with the simple Actor instead.
  • Keep cookies secret: never paste them into issues or logs; the Actor only echoes c_user, never cookie values.

FAQ, disclaimers, and support

Is this an official Facebook / WhatsApp API?

No. It reads the same internal surfaces the Business Suite web app uses. Facebook may change them; upstream_error items signal exactly that.

Do you extract private user data?

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. Only check cookies for accounts you own or are authorized to manage.

Something failed — where do I get help?

See the Issues tab for feedback, and the API tab for programmatic access. Include the error.code (never the cookie) when reporting a problem.