Work on Facebook with a Dataset › Account of platform Facebook (its email, phone or username, password and optional 2FA secret; or none, and you sign in by hand once).
Generated from the node definitions in
src/lib/flow/node/facebook/and the English labels (component.flow.node.facebook). Every node also has the common settings.
Selectors use Facebook's ARIA labels in English and Indonesian. Facebook changes its pages often: when a node starts failing, run Facebook selector health first.
Contents
- Sign in to Facebook —
facebook/signin - Open feed —
facebook/timeline - Collect posts —
facebook/collect - Like —
facebook/like - Comment —
facebook/reply - Delete comment —
facebook/reply/delete - Read the feed —
facebook/trend - Post —
facebook/post - Facebook selector health —
facebook/health
Sign in to Facebook
facebook/signin · icon log-in
Signs in with the account's login (2FA included), or waits for you
Session: it runs in the campaign's browser (or the one of the campaign it runs in; a Studio test's own). Already signed in, it goes on; with a stored login and password it signs in by itself (Facebook's login form, the 2FA code from the stored secret when Facebook asks for the authentication app, then Trust this device); without one, or at a check only a person can pass (a checkpoint, a security check), it waits for you in the live view, up to 6 hours, then the run fails. Then it reads who it is from the c_user cookie and checks it with mooflair: the first sign-in binds that user id to the account. See Accounts. The cookie banner gets its least-allowing choice.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
account | Account (required) | dataset.account (FACEBOOK) |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"username": "string",
"already": "boolean"
}
Default settings
timeout 10 minutes, on error human; the rest are the .
Open feed
facebook/timeline · icon newspaper
Opens your News Feed, a post search or groups
Groups: write each group's link (https://www.facebook.com/groups/123…) or id; the account must be a member. With Most recent first a group opens sorted by new posts (sorting_setting=CHRONOLOGICAL) and a search shows recent posts. A list opens the first and hands the whole queue to Collect posts, which goes through them one by one.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
source | Feed | select: home (News Feed), search (Post search), group (Groups) | "home" | |
query | Search words or groups (a link or id each; a list runs one by one) | text | source = search, group | |
latest | Most recent first | boolean | true | source = search, group |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"url": "string",
"queue": [
"string"
]
}
Default settings
timeout 2 minutes, on error human; the rest are the .
Collect posts
facebook/collect · icon list-plus
Scrolls and collects posts from the feed, a search or a group
What it skips: posts without a Comment button (comments off), posts outside minLike–maxLike reactions or minReply–maxReply comments, videos and reels with skipVideo (their comments sit in a player), your own posts and the Page's you act as (the c_user and i_user cookies), sponsored posts, Pages and verified accounts (Skip Pages), sellers (marketplace words or links, wa.me), posts of 200 characters or more and posts with more than maxReply comments. One post per author per round. Facebook fills a post's link only when the pointer is on its time, so a post without one is hovered until the link shows (a post whose link never shows is left out). A checkpoint or a temporarily blocked notice waits for you in the live view.
Group memory, claims and the stack: the same as , in tables facebook/collect/post and facebook/collect/author (see ). Each item carries authorKey (the author's profile path or id): pass it to Comment so the group remembers the author.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
max | Maximum posts | number | 20 | |
scroll | Maximum scrolls | number | 30 | |
maxLength | Skip posts this long or longer (characters, 0: any) | number | 200 | |
minLike | Minimum reactions | number | 0 | |
maxLike | Maximum reactions (0: any) | number | 0 | |
maxReply | Maximum comments (0: any) | number | 5 | |
minReply | Minimum comments | number | 0 | |
skipVideo | Skip videos and reels | boolean | false | |
skipPage | Skip Pages and verified accounts | boolean | true | |
skipMarket | Skip sellers and posts that mention a marketplace | boolean | true | |
refreshAfter | Refresh the feed after this many posts, in a fresh tab so a long run's memory stays flat (0: never) | number | 50 | |
repeat.post | Comment on a post the group already took | select: never, allow | "never" | |
repeat.author | Same author again | select: never, day, allow | "day" | |
queue | Searches or groups to go through, in order (from the timeline's queue) | json | ||
claimMs | Hold collected posts for (ms) so no other campaign of the group takes them | number | 900000 |
Output dots
next— Nextempty— Empty
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"items": [
{
"id": "string",
"author": "string",
"authorKey": "string",
"url": "string",
"text": "string",
"time": "string",
"reply": "number",
"share": "number",
"like": "number",
"media": "boolean"
}
]
}
Default settings
timeout 10 minutes; the rest are the .
Table facebook/collect/post (Posts)
Scope: group, rows kept 90 days. Columns: url (text), author (text), text (text), time (date), stat (json), reply (text), message (text). Labels: claimed (Taken), replied (Commented), pending (Waiting for review), removed (Removed), deleted (Comment deleted), failed (Failed).
Table facebook/collect/author (Authors)
Scope: group, rows kept 90 days. Columns: lastAt (date), count (number), url (text), reply (text), message (text). Labels: .
Like
facebook/like · icon heart
Likes like a reader: a post on screen, the open post or a few of its comments
Only buttons named exactly Like / Suka are clicked (a liked one is Remove Like), so nothing is unliked by mistake.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
enabled | On (off: passes straight through) | boolean | true | |
target | What to like | select: timeline (A post on screen), post (The open post), comments (A few of its comments) | "timeline" | |
chance | Chance per call (%) | number | 30 | |
max | Up to (comments) | number | 3 |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"liked": "number"
}
Default settings
timeout 2 minutes, on error continue; the rest are the .
Comment
facebook/reply · icon message-circle-reply
Comments on a post
It opens the post's page, types into its comment box like a person and sends with Enter. Sent means the comment shows with its text (its first words, emoji left out: Facebook draws them as images); its time's link (with comment_id, once Facebook swaps its temporary client: id for the real one) is kept as the comment URL, which Delete comment uses. A group that reviews comments first: the row gets Waiting for review (pending) and the output pending: true. No comment box (comments off, or the account can't comment there): the closed dot, the row labeled failed.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
account | Account (required) | dataset.account (FACEBOOK) | ||
url | Post URL (required) | text | ||
text | Comment (required) | textarea | ||
author | Author (from Collect posts, so the group remembers them) | text | ||
preview | Remove the link preview | boolean | true |
Output dots
next— Nextclosed— Comments off
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"url": "string",
"text": "string",
"reply": "string",
"pending": "boolean"
}
Default settings
timeout 5 minutes, on error human; the rest are the .
Delete comment
facebook/reply/delete · icon message-circle-x
Deletes one of your comments and checks it's gone
The campaign dashboard's Delete comment row action runs it in the row's account browser: it opens the comment, hovers it for its menu (Edit or delete this), then the menu's Delete › the dialog's Delete, and checks the comment is gone.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
account | Account (required) | dataset.account (FACEBOOK) | ||
reply | Comment URL (required) | text |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"reply": "string",
"deleted": "boolean"
}
Default settings
timeout 2 minutes; the rest are the .
Read the feed
facebook/trend · icon trending-up
A snapshot of what people talk about on the page Open timeline opened, with your last posts
For Auto Post: what people post now on the page Open timeline opened (News Feed, a post search or a group) (sponsored posts left out, one post per author), with recent: your last posts from facebook/post/post, so the AI doesn't repeat itself.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
account | Account (required) | dataset.account (FACEBOOK) | ||
max | Maximum posts | number | 10 | |
recent | Your last posts to return | number | 10 |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"items": [
{
"author": "string",
"text": "string"
}
],
"recent": [
{
"post": "string",
"product": "string"
}
]
}
Default settings
timeout 2 minutes; the rest are the .
Post
facebook/post · icon square-pen
Posts text and media on your profile or in a group, and can share it to groups
Where: your profile, or a group (its link or id; a group that reviews posts first says so in the log).
Drafts: Facebook keeps an unsent post (a Page's composer, /post/create, too). The node removes its attachments and clears its text first, so only this post goes out. It waits up to a minute for the composer to show.
Media: Drive file ids (for example {{ nodes.next.output.media }} from ). The engine copies each file into the run before the step (see ), the node uploads them with the composer's Photo/video, then waits until Facebook has them all before Post: a minute plus 3 seconds a megabyte, 25 minutes at most (the step's own timeout is 30 minutes). Photos and videos only on a profile; a group also takes other files (PDF and the like). Up to 30 files.
Also post to groups (share, profile posts): after posting, it finds the post on the profile it posted as (the Page you act as, else your own) and uses its Share › Share to a group, Facebook's own picker. The first time it scrolls the group list shareScroll times so groups further down load too (20 more per scroll), then picks shareCount groups, the ones this campaign shared to least recently first, ties at random (table facebook/post/share). It shares to each one in turn: searches the list for the group's exact name, picks it and presses Post. A group that won't take it is skipped, and when fewer than shareCount go out (the list has fewer groups, or some refused) the log says how many of how many. A group that reviews posts first keeps the share pending. Shares don't count toward Posts per period: only the post itself does.
Link: after posting it opens your profile and reads the first post's link (hovered like in Collect posts); a group post has none.
Fields
| Field | Label | Kind | Default | Shown for |
|---|---|---|---|---|
account | Account (required) | dataset.account (FACEBOOK) | ||
target | Where | select: profile (Your profile), group (A group) | "profile" | |
group | Group (a link or id) (required) | text | target = group | |
text | Text | textarea | ||
media | Media (Drive file ids, e.g. Next post's media) | drive | ||
product | Product (kept with the post) | text | ||
share | Also post to groups | boolean | false | target = profile |
shareCount | How many groups | number | 3 | target = profile; share = true |
shareScroll | Scroll the group list this many times first | number | 10 | target = profile; share = true |
preview | Remove the link preview | boolean | true |
Output dots
next— Next
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"url": "string",
"text": "string",
"media": "number",
"group": [
"string"
]
}
Default settings
timeout 30 minutes, on error human; the rest are the .
Table facebook/post/post (Your posts)
Scope: account, rows kept until removed. Columns: url (text), text (text), product (text), media (number), group (json). Labels: posted (Posted), removed (Removed).
Table facebook/post/share (Groups shared to)
Scope: account, rows kept 90 days. Columns: name (text), lastAt (date). Labels: shared (Shared).
Facebook selector health
facebook/health · icon heart-pulse
Checks the Facebook page parts the Facebook nodes rely on still exist
Reads only: it opens the composer and closes it again (leaving without a draft), nothing is typed or sent. Run it when a Facebook node starts failing: missing names what moved.
Fields
| Field | Label | Kind | Default | Shown for |
|---|
Output dots
ok— All goodbroken— Something's missing
Output shape
Later nodes read it as {{ nodes.<id>.output… }}.
{
"ok": "boolean",
"signedIn": "boolean",
"checks": [
{
"name": "string",
"ok": "boolean"
}
],
"missing": [
"string"
],
"url": "string"
}
Default settings
timeout 3 minutes; the rest are the .
FAQ
What does Facebook sign in with?
The login Facebook itself takes: an email, a phone number or a username, with its password. With an authenticator app 2FA, store its secret too and Sign in types the code. Without a stored password, sign in by hand once in the campaign's browser (its live view when Sign in asks, or Operate › Browsers › Live); the first sign-in binds the account to that Facebook user (the c_user cookie).
Can it comment in groups?
Yes. Set Where to look to groups and list each group's link or id; the account must be a member. Groups that review comments first keep the comment as Waiting for review on the dashboard.
How does Also post to groups pick the groups?
After posting it uses the post's own Share › Share to a group: it scrolls the group list down first, then shares to the number you set, one group at a time, picking the groups this campaign shared to least recently (ties at random). Shares don't count toward the account's posts per period: only the post itself does.
Do Facebook nodes post during a test run?
No. Post, Comment, Like and Delete comment are effect nodes: a test run logs what they would do and returns a simulated result.
Why didn't it get my post's link?
Facebook fills a post's link only when the pointer is on its time. The node hovers it after posting; when it still has none, the post is kept without a link.