Facebook Account Operations

Automation

Operating doctrine for Facebook Page automation — careful brand-page pattern via Meta Business Suite, role separation, page-vs-profile-vs-group surface awareness, comment + Messenger ops (Playwright click + type + Enter), moderation discipline (hide vs delete vs ban), and recovery patterns. Use this for any scheduled FB activity (cron, agent, recurring task) where account / page safety and reach matter more than raw output.

Install

openclaw skills install facebook-account-operations

Facebook Account Operations

This skill is the operating doctrine for every Facebook automation run on a brand Page (recommended), professional or personal account.

The goal is not to comment fast. The goal is to operate Facebook like a careful, helpful human community manager: stable browser, correct context (Meta Business Suite), useful action, no page restrictions, no reputational risk.

Drop-in for any niche (legal, medical, software, finance, creator, ecommerce). Replace the placeholders in section 0 with your own values.


0. Configure for your brand

Before running anything, fill these placeholders in your local copy or your agent's memory:

PlaceholderExampleYour value
<BRAND_NAME>"Acme Studio"
<BRAND_DOMAIN>"acme.studio"
<FB_PAGE_NAME>"Acme Studio" (the public Page name)
<FB_PAGE_ID>numeric ID of the Page
<META_BUSINESS_ID>numeric ID from business.facebook.com → Settings
<META_ASSET_ID>numeric ID of the FB Page asset in MBS
<BROWSER_PROFILE>"facebook-live"
<BROWSER_PORT>"18803"
<NICHE_KEYWORDS>"lost license OR speeding ticket"
<PRIMARY_CTA>"WhatsApp / form / app — pick ONE"
<WORKSPACE_DIR>"~/.openclaw/workspace/facebook-<brand>"

All shell snippets below assume an OpenClaw browser CLI bound by CDP, but the doctrine works with any browser-automation stack (Playwright, Puppeteer, Chrome MCP). Swap the CLI calls for your own.

Quick config (copy-paste YAML)

brand:
  name: <BRAND_NAME>
  domain: <BRAND_DOMAIN>

facebook:
  page_name: <FB_PAGE_NAME>
  page_id: <FB_PAGE_ID>
  browser_profile: <BROWSER_PROFILE>
  browser_port: <BROWSER_PORT>

meta_business_suite:
  business_id: <META_BUSINESS_ID>
  asset_id: <META_ASSET_ID>
  base_url: https://business.facebook.com/latest/inbox

discovery:
  niche_keywords: <NICHE_KEYWORDS>

cta:
  primary: <PRIMARY_CTA>

workspace:
  dir: <WORKSPACE_DIR>

alerts:
  channel: telegram | slack | discord
  webhook: <YOUR_WEBHOOK_URL>

schedule:
  timezone: Europe/Paris
  windows:
    dm_check:      "6,21,36,51 9-22 * * *"
    comment_check: "9,24,39,54 9-22 * * *"
    browser_health: "0 * * * *"
    daily_recap:   "21:00"

Compatibility

StackSkill install path
Claude Code~/.claude/skills/facebook-account-operations/
OpenClaw~/.openclaw/skills/facebook-account-operations/
ClawHub-publishedone-click install via clawhub.ai
Cursor / Copilot CLIdrop SKILL.md into your project's .cursorrules or AGENTS.md
Any LLM agent reading markdown rulesconcatenate SKILL.md into your system prompt

1. Pages vs personal profile vs groups

Doctrine for brand automation:

  • Page = the only sanctioned surface for brand activity. Page admins post as the Page, reply as the Page, and the Page has its own analytics + ad surface.
  • Personal profile = never automate. Personal profiles are governed by Facebook's "authentic identity" policy; automating one is a fast path to a permanent ban.
  • Groups = automation is allowed only if the brand owns the group (Page is the admin). Replying as the Page on third-party groups requires the group to allow Page comments — most do not. Default: do not automate group activity.

This skill covers the Page surface exclusively.

The Meta Business Suite is the canonical surface (same as Instagram)

Everything goes through business.facebook.com. Never automate against facebook.com directly — the personal-profile DOM is unstable, IP-throttled, and any anti-automation trigger there can poison the Page-admin's personal account.

Physical profile

A single browser profile per Page-admin account:

  • <BROWSER_PROFILE> (CDP direct, attached to http://127.0.0.1:<BROWSER_PORT>)
openclaw browser --browser-profile <BROWSER_PROFILE> status
openclaw browser --browser-profile <BROWSER_PROFILE> navigate https://business.facebook.com/latest/inbox/all/?business_id=<META_BUSINESS_ID>&asset_id=<META_ASSET_ID>
openclaw browser --browser-profile <BROWSER_PROFILE> snapshot --limit 200

Canonical URLs (per tab)

TabURL fragment
All messages (Messenger + IG DMs if cross-linked)/latest/inbox/all?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>
Messenger only (Page DMs)/latest/inbox/messenger?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>
Facebook Page comments/latest/inbox/facebook?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>
Page Insightshttps://business.facebook.com/latest/insights/all_tools?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>
Page Postshttps://business.facebook.com/latest/posts?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>

Roles (mental separation, single physical profile)

Role: fb-post

Page cockpit (acting AS THE PAGE, not as the admin's personal account). Use for:

  • Messenger DM replies in MBS.
  • Page comment replies in MBS.
  • Page posts (text, photo, link) via MBS Publishing Tools.
  • Page Insights snapshots.

Default page: MBS inbox/all.

Role: fb-engage

Discovery. Use for:

  • Reading comments under your own Page posts (in MBS).
  • Inspecting a candidate user's profile before replying (open facebook.com/<user> in a separate tab — DO NOT act from there).

Default page: MBS inbox/facebook (comments).

Role: fb-stealth

Quiet maintenance. Use for:

  • Checking Page Quality (MBS → Page → Page Quality).
  • Reading audience demographics.
  • Page-level settings (admin roles, page restrictions).

Default page: MBS dashboard.

Operational law

  • fb-post = act AS THE PAGE via MBS.
  • fb-engage = discover, never act outside MBS.
  • fb-stealth = maintain quietly.
  • Stability matters more than speed.
  • After every run, return to MBS inbox/all.

2. Session check (run first on every cron)

Same as Instagram — see instagram-account-operations §2. The MBS session covers both IG and FB assets when both are linked to the same <META_BUSINESS_ID>.

If you only manage a FB Page (no IG asset), the same login + navigation pattern applies; replace inbox/all with inbox/messenger for the smoke test.


3. Phase gating (Page restrictions awareness)

Facebook Pages do not have karma; they have:

  • Page Quality score (MBS → Page → Page Quality): green / yellow / red.
  • Restrictions — applied at Page level. A restricted Page cannot run ads, cannot use Messenger templates, sometimes cannot post.
  • Standard account-level holds (very young Page-admin account, recent guidelines violations).

Phases:

  • Phase A (Page < 30 d, OR last 30 d had a Page-level warning / Restriction, OR < 100 followers): inbound DM/comment replies inside MBS only. No outbound DMs. No comment-on-other-Pages. No new ads.
  • Phase B (Page ≥ 30 d, Page Quality = green, ≥ 100 followers, admin account in good standing): all crons authorized.

Always read <WORKSPACE_DIR>/memory/fb-state.md at start.

Manual override (advanced)

Same as IG — append YYYY-MM-DD - phase=B (manual override) to fb-state.md for grandfathered, verified Pages. Document the rationale in fb-learnings.md.


4. Qualification of an inbound DM or comment

A DM or comment is repliable only if all of:

  • The thread has at least one user-authored message.
  • The user is not banned from your Page (fb-banned-users.md).
  • The comment is on a Page post (not on a shared link to your Page).
  • Phase B authorized for brand-mentioning replies.
  • The message is a real question or intent in your domain.
  • Same user not already replied-to in the last 7 days (fb-reply-log.md).

If any check fails: skip.

Special: existing client recognized

If the user is in fb-clients-known.md, redirect to your client support channel (NOT <PRIMARY_CTA> for prospects).

Special: a public testimonial / positive comment

Do NOT redirect to <PRIMARY_CTA>. Reply with a public thank-you. No CTA, no link.


5. Reply templates

Phase A

Plain, helpful, no brand mention, no link.

Phase B

DM reply structure:

[Acknowledge the situation in 1 sentence, neutral tone.]

[General framework in 2-3 short paragraphs.]

[Concrete next step — point to <PRIMARY_CTA>. ONE channel only.]

Page-comment reply structure (Page comments are public — keep them short and bold-typo-free):

@<UserName> [contextual acknowledgement]. [Indirect signal — "DM us" or "form on Page"].

Brand link policy

  • Comment body: NO URL. "DM us" or "form on Page" only.
  • DM body: max ONE URL, ONE channel (<PRIMARY_CTA>).
  • Never shorteners — FB marks them as spam and Page Quality drops.

6. Original posting cadence

Out of scope for the live reactive crons. Recommended rhythm for a Phase B Page:

  • 3-5 posts/week. Mix: 1 text-only (high reach if good), 2 image/carousel, 1 video.
  • No "post & ghost" — every Page post gets replies within 2 hours of going live.
  • Avoid burst posting (> 3 posts within 24 h). Reach gets distributed across same-day posts.
  • Pin your evergreen content to the top of the Page (one Pin slot).

Boost vs ads

  • Boost = the simple, in-feed promotion button. Use for an isolated organic post that is over-performing.
  • Ads (Ads Manager) = full targeting + creative + funnel. Use for systematic acquisition. Out of scope here.

Never boost a comment-reply. Boost only top-level Page posts.


7. Quotas (hard limits)

ActionPhase A limitPhase B limit
DMs handled / 24 h2080
DMs handled / cron run410
Comment replies handled / 24 h30120
Comment replies handled / cron run512
Outbound DMs / day (proactive)00 — Page Messenger outbound is heavily restricted; rely on templates with opt-in only
Page posts / day13
Comments on other Pages05 (sober, on-topic, no link)
Actions in same conversationmin 60 s apartmin 30 s apart
Actions globallymin 30 s apartmin 15 s apart

Quota tracking: read fb-reply-log.md at start of every run.


8. Anti-spam triggers

Content

AvoidUse instead
<BRAND_NAME> more than once per reply(max one mention)
URLs in comment bodies(never)
Multiple URLs in a single DM(max 1)
"Click here", "DM me", "WhatsApp me" all together(one CTA, one channel)
Emojis in regulated niches(drop them)
All caps for emphasis(use sparingly)
Shorteners (bit.ly / tinyurl)(use the canonical URL)
Tagging unrelated Pages(never — it spams the tagged Page)

Behavioral

  • Replying within 15 s of a comment landing → bot-like; wait ≥ 1 min.
  • Same opening phrase across multiple replies → flagged. Vary openings.
  • 12 actions in 10 min → rate limit.

  • Identical DM body to > 3 users in 24 h → near-instant Page restriction.
  • Page admin acting from the personal profile (instead of "as Page") under a Page post → "this comment looks like spam" toast.

9. Operational flow inside Meta Business Suite

Same backbone as Instagram §9. FB-specific notes below.

DM (Messenger) check / reply (validated)

URL: https://business.facebook.com/latest/inbox/messenger?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>

The flow is identical to the IG-DM flow in instagram-account-operations §9 (Playwright click + type + press Enter). Differences:

  • Messenger threads include the user's Facebook profile in the right sidebar — useful for the qualification step (see §4).
  • The "Mark as Done" button under the Messenger thread is a useful workflow signal — click it after a reply to keep the inbox clean and improve next-cron-run targeting.
  • 24h customer-service window: Page Messenger has a 24h reply window — after 24 h of user silence, only message-tag templates can be sent (HUMAN_AGENT, CONFIRMED_EVENT_UPDATE, etc.). Out of scope for this skill — if you need post-24h outbound, use the Conversations API with an approved tag.

Page comment reply (validated — with workaround)

URL: https://business.facebook.com/latest/inbox/facebook?asset_id=<META_ASSET_ID>&business_id=<META_BUSINESS_ID>

Same SPA bug as IG comments: clicking the per-comment "Reply" link sometimes navigates the right pane to a different post. Same workaround:

  1. Find the page-level comment textarea at the bottom of the right pane.
  2. Type @<UserName> your reply.
  3. Click the send-arrow button (not Enter).

This posts a top-level comment under the same post but tagged at the parent — which is sufficient for visibility and notification.

Page moderation: hide vs delete vs ban

When a comment is offensive, spammy, or off-topic:

ActionEffectWhen
HideComment stays visible to the author + their friends, invisible to everyone elseDefault for most low-quality comments — author doesn't notice, no escalation
DeleteComment removedOnly for clearly offensive content or doxxing
Ban user from PageUser can no longer comment or DM the PageOnly for repeated harassment after a Hide

Doctrine: prefer Hide over Delete. Hidden comments don't trigger the author to recomment angrily.

Maintain <WORKSPACE_DIR>/memory/fb-banned-users.md with one row per ban, the date, and the trigger comment URL.

Selectors quick-reference (FB-specific)

ElementSelector
Messenger DM textbox[contenteditable='true']
Messenger DM sendpress Enter
Messenger "Mark as Done"[aria-label*='Mark as done'], [aria-label*='Marquer comme termin']
Page-comment textareatextarea[placeholder*='comment'], textarea[placeholder*='commentaire']
Page-comment sendthe SVG arrow button to the right of the textarea
Comment "Hide"[aria-label*='Hide'], [aria-label*='Masquer'] (in the comment overflow menu)
Comment "Delete"[aria-label*='Delete'], [aria-label*='Supprimer']
Ban user from Pageper-user overflow → "Ban" / "Bloquer"

Exit codes (recommended convention)

Same as instagram-account-operations §9.

Gotchas

  • Page Quality drop after a single misstep: FB is more aggressive on Pages than on IG accounts. A handful of hidden-by-FB-automod comments can drop Page Quality from green to yellow within 24 h. Audit weekly.
  • Localized labels: Reply / Répondre, Hide / Masquer, Delete / Supprimer — maintain a label map.
  • MBS "as Page" indicator: a tiny chip at the top-right shows you're replying as the Page (not as your personal admin account). Verify on every cron — sometimes MBS reverts to the personal account after a session refresh.
  • Cron timeout: ≥ 1200 s — MBS pages on FB-comments tab can take 5-8 s to render fully.

10. Page state management

File: <WORKSPACE_DIR>/memory/fb-state.md

For each day:

  • Phase (A / B).
  • Followers count.
  • Page Quality score (green/yellow/red).
  • Last Page-level warning / Restriction.
  • Posts published today.

File: <WORKSPACE_DIR>/memory/fb-banned-users.md File: <WORKSPACE_DIR>/memory/fb-clients-known.md

Update at the end of every run that touched a moderation action.


11. Recovery & blockers

IssueAction
status: stoppedReport, stop.
Login form on MBSSession expired, alert, stop.
Page Quality drops to yellowFlip to Phase A. Alert. Audit hidden / deleted comments.
Page Quality drops to redStop all crons. Manual review. Likely a posting policy violation.
"Page restricted" bannerStop all outbound activity. Inbound DM reply only if MBS allows. Alert.
MBS "Something went wrong"Refresh once. Persist → stop and alert.
Comment "Reply" causes page navigationUse @username workaround.
Personal admin account in "review" statusStop. Pages are admin-owned — if the admin is restricted, the Page is at risk.

12. Mandatory recap (alert channel + memory)

Same format as instagram-account-operations §12, with Page Quality: green/yellow/red added to the recap line.


13. Memory files inventory

FilePurposeUpdate cadence
fb-recaps.mdPer-run logsEvery cron run
fb-post-log.mdPage posts (URL, type, date, reach)Each posting run
fb-reply-log.mdDM + comment replies sentEach reply pass
fb-state.mdDaily phase + Page Quality + warningsDaily Metrics Recap
fb-banned-users.mdUsers banned from the PageEach ban
fb-clients-known.mdExisting clients to NEVER pitchAd hoc
fb-ideas.mdContent backlogWeekly Planning
fb-learnings.mdPatterns (what reached, what got hidden)Weekly + ad hoc
fb-alerts-sent.mdAnti-doublon hot-lead alertsEach alert

14. Account identity guardrails

  • The Page persona is the brand — speak as the brand, sign as the brand.
  • Page admins: never reply from the personal profile under a Page post. Always switch the "Posting as" dropdown to the Page.
  • Bio (Page About): one paragraph + the single <PRIMARY_CTA> link. No emoji walls.
  • Never reply to a DM that asks for expert-grade advice on a specific case — redirect to <PRIMARY_CTA>.
  • Never share private client details on a public comment.
  • Never reuse strict CRM templates as Page content.
  • Never promise an outcome.
  • Never charge or solicit payment via Page Messenger (compliance + Page restrictions).
  • If asked "are you a bot?": sober ambiguous line + redirect.

15. Phase A → Phase B transition

When the Daily Metrics Recap detects (page_age_days ≥ 30) AND (followers ≥ 100) AND (page_quality = green) AND (no warning in 30 d):

  1. Append to fb-state.md: YYYY-MM-DD - phase=A - PHASE_B_THRESHOLD_REACHED.
  2. Send a distinct alert: 🎉 FB Page ready for Phase B — flip outbound crons manually after review.
  3. Manual user flip.
  4. First week of Phase B: cap reply pass at 4 replies/run.
  5. Daily check on Page Quality. Any drop reverts to Phase A.

16. Stability discipline

  • Read the UI before clicking.
  • Verify "Posting as: <Page>" on every cron run.
  • One click → verify with a snapshot.
  • Close stale tabs at the end of every run.
  • Never fake a successful reply.

Better silence than spam. Better a blockage report than a fake success.


17. First-run checklist

  • Section 0 placeholders filled.
  • FB Page created, classified correctly (Business, Local Business, Professional Service, etc.).
  • Page linked to a Meta Business asset (MBS → Business Settings → Pages → Add).
  • <META_BUSINESS_ID>, <META_ASSET_ID>, <FB_PAGE_ID> extracted.
  • Page About + intro: one paragraph + single <PRIMARY_CTA> link.
  • Browser profile launched, logged into facebook.com.
  • Navigating to MBS inbox/messenger renders the conversation list.
  • Page Quality score = green.
  • <WORKSPACE_DIR>/memory/ exists with the 9 memory files.
  • Alert channel webhook tested.
  • Phase A confirmed: only inbound DM cron enabled.
  • At least 14 days of manual posting + replies before turning on the cron.

Init memory:

mkdir -p "<WORKSPACE_DIR>/memory" && cd "$_" && touch fb-recaps.md fb-post-log.md fb-reply-log.md fb-state.md fb-banned-users.md fb-clients-known.md fb-ideas.md fb-learnings.md fb-alerts-sent.md

18. FAQ

Q: Do I need OpenClaw to use this skill? A: No. OpenClaw browser CLI is the example stack — the doctrine works with Playwright, Puppeteer, Chrome MCP, or any CDP-capable tool.

Q: Can I use the Facebook Pages API instead? A: Partially. The Pages API + Conversations API covers Messenger sending (within and outside the 24h window via message tags), comment moderation, and Page posting. The doctrine in this skill is the fallback for accounts without API access, or for cases where MBS UI features are essential (Page Quality dashboard, link previews, audience insights).

Q: My Page got restricted during testing. What now? A: Stop everything. Manual review of the last 50 actions in fb-reply-log.md. Wait for the restriction to expire (or appeal manually). Once cleared, restart at Phase A with stricter quotas.

Q: Does this cover Facebook Groups? A: Only if you own the group (the Page is the admin). Replying as the Page in a third-party group requires the group setting "Allow Pages to post" — most groups do not allow this. Default: skip groups.

Q: What about Marketplace / Events / Shop? A: Out of scope. Marketplace and Shop have separate UIs and separate sanction patterns; Events run through the standard Page + Ads stack but with a manual posting cadence.

Q: Boost vs Ads Manager — which does this skill cover? A: Neither. Both are out of scope. This skill is organic + reactive ops only.

Q: What if my admin account is suspended (not just the Page)? A: Stop everything. A suspended admin account puts the Page at risk. Manual review only. Document the last 20 admin-account actions, not just Page actions, in fb-learnings.md.