Open the authenticated Meta Business Suite unified inbox and identify new or unread prospect conversations originating from Facebook Page comments, Instagram comments, or direct messages. Optionally audit the Page's published-posts view for posts on {date} and determine whether the UI exposes evidence that a post was manually published rather than scheduled or otherwise automated.
Use Cases
Use when checking all connected Facebook and Instagram messaging surfaces for new prospect activity, or when adding a Page publishing audit for a specified date. The unified inbox/all view is preferred because it combines inbox threads and comment conversations. Use the published-posts route when the caller needs to verify Page activity or inspect publication metadata.
Automation Flow
Use the authorized account's known opaque
{asset-id}and{business-id}. Do not guess either value; obtain them from the authenticated Business Suite context or an existing Business Suite URL if they are not already available. The authenticated home context uses the formhttps://business.facebook.com/latest/home?asset_id={asset-id}&business_id={business-id}.Navigate directly to:
https://business.facebook.com/latest/inbox/all?asset_id={asset-id}&business_id={business-id}&mailbox_id=&selected_item_id=&thread_type=.
Leave mailbox_id, selected_item_id, and thread_type empty for an all-source sweep. After the SPA renders, run this evaluator on the current page:
(() => {
const visible = el => { const s=getComputedStyle(el), r=el.getBoundingClientRect(); return s.display!=='none' && s.visibility!=='hidden' && r.width>0 && r.height>0; };
const clean = s => (s||'').replace(/\s+/g,' ').trim();
const items = [...document.querySelectorAll('[role="row"], [role="listitem"]')].filter(visible).map(el => {
const link=el.querySelector('a[href]'), label=clean(el.getAttribute('aria-label')||el.getAttribute('title')), text=clean(el.innerText);
return {text,label,href:link?link.href:null,unread:/unread|new|unseen/i.test(`${label} ${el.className||''}`)};
}).filter(x=>x.text).filter((x,i,a)=>a.findIndex(y=>y.text===x.text&&y.href===x.href)===i);
return {url:location.href,items,pageText:clean(document.body.innerText)};
})()Treat rows marked
unreador containing new/unread indicators as candidates, and use row text and channel labels to distinguish Facebook comments, Instagram comments, and direct messages. ReviewpageTextwhen the application uses a row structure not exposed through ARIA roles.If a Page publishing audit is requested, navigate directly to:
https://business.facebook.com/latest/posts/published_posts?asset_id={asset-id}&business_id={business-id}.
After the client-rendered list appears, run this evaluator to return visible post cards/rows and publication metadata without relying on a particular generated class name:
(() => {
const visible = el => { const s=getComputedStyle(el), r=el.getBoundingClientRect(); return s.display!=='none' && s.visibility!=='hidden' && r.width>0 && r.height>0; };
const clean = s => (s||'').replace(/\s+/g,' ').trim();
const candidates = [...document.querySelectorAll('[role="article"],[role="row"],[role="listitem"],article')]
.filter(visible)
.map(el => {
const link=el.querySelector('a[href]');
const text=clean(el.innerText);
const label=clean(el.getAttribute('aria-label')||el.getAttribute('title'));
const dateText=[...el.querySelectorAll('time,[datetime]')].map(x=>clean(x.getAttribute('datetime')||x.innerText)).join(' | ');
return {text,label,dateText,href:link?link.href:null,manualSignals:[...new Set((text+' '+label).match(/published manually|manually published|posted by|published by|scheduled|automated|boosted|draft/gi)||[])]};
})
.filter(x=>x.text)
.filter((x,i,a)=>a.findIndex(y=>y.text===x.text&&y.href===x.href)===i);
return {url:location.href,posts:candidates,pageText:clean(document.body.innerText)};
})()- Filter returned posts by
{date}using the displayeddateTextor surrounding card text. Report a post as manually posted only when the UI explicitly exposes a manual/posted-by signal; absence of a scheduling or automation label is not proof of manual authorship. The published-posts page may require inspectingpageTextwhen cards are virtualized or rendered without ARIA roles.
Possible Friction Points
- The useful all-sources route is
/latest/inbox/all; it requires both opaqueasset_idandbusiness_idquery parameters. - The direct Page publishing audit route is
/latest/posts/published_postswith the same account-specific query parameters. - The authenticated Business Suite landing route is
/latest/homewith the same account-specific query parameters, but it is only a context/entry page; use the direct inbox or published-posts route for the actual sweep. - The page is a client-rendered SPA. Wait for the inbox list or published-post list to appear after navigation before evaluating the extractor.
mailbox_id,selected_item_id, andthread_typeshould remain empty for an unfiltered all-inbox review; selecting a thread or source can narrow the result.- Asset and business IDs are account-specific and must be read from the authenticated account context rather than inferred.
- ARIA row/listitem structure may vary by UI release; the inbox evaluator returns full visible page text as a fallback, and returned rows should not be assumed to include off-screen or virtualized items.
- The published-posts evaluator likewise covers common article/row/listitem structures but may miss virtualized cards; use returned
pageTextas a fallback and do not infer missing posts. - “New prospect” is a semantic judgment from the sender, channel, unread state, and message content; the site does not necessarily expose a prospect classification.
- A post's presence on the published-posts page does not by itself prove it was manually authored or published. Require an explicit author, publication, scheduling, or automation label before making that determination.
- No stable insights-specific route or extractor was exposed by the observed run; do not infer one from the home URL.