# Facebook

Formats, media and text limits, options, inbox and analytics on Facebook.

Publish `feed`, `reel` and `story` to Facebook, read every post's numbers, and answer comments and messages. Set a target's `format`, or leave it out and Rizamo picks one from the files.

## Formats [#formats]

| Format | Files | Text |
| --- | --- | --- |
| `feed` | Text alone, images, or 1 video | 5,000 |
| `reel` | 1 video | 5,000 |
| `story` | 1 image or video | none |

## Media [#media]

Rizamo takes JPEG, PNG, WebP, MP4 and MOV files up to 4 GB. What Facebook takes:

- **Images:** JPEG or PNG, up to 10 MB.
- **Video:** H.264, HEVC, VP9 or AV1 with AAC audio, 24 to 60 frames a second, up to 1,920 px wide; `reel` and `story` only vertical (taller than wide).

| Format | Length | Size |
| --- | --- | --- |
| `reel` | 3 s to 90 s | up to 4 GB |
| `story` | 3 s to 1 min | up to 4 GB |
| `feed` | 1 s to 4 h | up to 4 GB |

## What Rizamo does to files [#what-rizamo-does-to-files]

- **Images:** another type becomes JPEG or PNG; a larger file is compressed under 10 MB; a PNG over 1 MB goes as a JPEG.
- **Video:** one Facebook does not take as it is (its codec, frame rate, width or size) is converted to H.264 and AAC within those limits. Its length cannot change: a video too short or too long for the format is refused when it is attached, as is a wide video for `reel` and `story`.
- Your file itself never changes: the copy is made when the post goes out, and each target's `changes` says what was done.

## Text [#text]

- Up to 5,000, counted in characters: an emoji counts 1. Facebook takes 63,206; the API takes 5,000. Rizamo counts the same way, so `POST /v1/posts/validate` refuses what Facebook would.
- A first comment takes up to 2,200 characters.
- Stories take no text: a story target's own `text` is refused (`400`), and one that shares the post's text goes without it, which `validate` warns about.

## Options [#options]

Under `options.facebook` on a target. Each says which formats take it.

| Option | Type | What it does |
| --- | --- | --- |
| `link` | string | Feed posts without files: a link shown as a preview card. Not sent with photos or a video. With `callToAction`, a button under it opens it too. |
| `callToAction` | object | Link posts (a feed post with `link` and no files): a button under the link card that opens the post's `link`, as Meta asks, so its clicks count with the card's. Not on photos, videos, reels or stories. Set before the post goes out: Meta cannot change it on a live post. |
| `locationId` | string | A Facebook Page id with a location, tagged as the post's place: feed posts (text, a link or photos) and reels. Not on a feed video or a story. |
| `isAiGenerated` | boolean | Reels: labels the reel as made or edited with AI. Facebook's API takes the label on reels only. |

## First comment [#first-comment]

`firstComment` goes out right after the post, as a comment by the account, up to 2,200 characters. Stories take none. One it would not take is refused when the post is made (`400`), with the reason. If it fails once the post is live, the post stays published.

## Music [#music]

Facebook adds no music through its API.

## After publishing [#after-publishing]

- **Edits:** a live post's text can change: send the update with `applyToPublished`. Only the text: not its link, files or first comment.
- **Deleting:** deleting a post takes it off Facebook when the account's `capabilities` include `delete_posts`, except stories, which stay. Each target's `removal` says what happened.

## Inbox [#inbox]

Comments on the Page's posts come into the inbox as they are written, through Meta's webhooks, and are answered as the Page.

- Replies to comments: up to 2,000 characters.
- Messages: Messenger conversations with the Page come in and are answered in the same thread. A reply goes out within 24 hours of the person's last message.
- Mentions and reviews are not read yet.

| Action | People's comments | The account's own |
| --- | --- | --- |
| Hide | yes | no |
| Delete | yes | yes |
| Like | yes | no |

## Comment automations [#comment-automations]

A comment with a keyword gets a private message (`POST /v1/comment-automations`, `create_comment_automation` in MCP), on one post or every post of the account. Each account sends up to 1,000 in 24 hours and 10 a minute; more wait for room, within the 7 days Meta takes a private reply to a comment. The follow gate is Instagram's only: Facebook does not say who follows a Page.

## Daily caps [#daily-caps]

Up to 30 reels an account in 24 hours, counting posts published. A post over a cap waits for room ([Limits](/limits#publishing)).

## Analytics [#analytics]

Days run on Pacific time (`America/Los_Angeles`). On connecting, Rizamo reads back the posts of the last 12 months (up to 500) and 365 days of the account's numbers. [How Rizamo reads numbers](/analytics).

### Posts [#posts]

| Metric | Facebook's name | Formats | Note |
| --- | --- | --- | --- |
| `views` | `post_media_view` | feed | Needs `read_insights` |
| `views` | `fb_reels_total_plays` | reel | Needs `read_insights` |
| `reach` | `post_total_media_view_unique` | feed | Needs `read_insights` |
| `reach` | `post_total_media_view_unique` | reel | Needs `read_insights`. Where Meta gives it |
| `clicks` | `post_clicks` | feed | Needs `read_insights` |
| `avg_watch_time` | `post_video_avg_time_watched` | reel | Needs `read_insights` |
| `watch_time` | `post_video_view_time` | reel | Needs `read_insights` |
| `follows` | `post_video_followers` | reel | Needs `read_insights`. Where Meta gives it |
| `shares` | `post_video_social_actions` | reel | Where Meta gives it |
| `shares` | `shares` | feed |  |
| `likes` | `post_video_likes_by_reaction_type` | reel | Where Meta gives it |
| `likes` | `reactions` | feed |  |
| `likes` | `likes` | reel |  |
| `comments` | `comments` | feed, reel |  |
| `engagements` | Rizamo adds up `likes`, `comments` and `shares` | feed, reel |  |
| `reach` | `post_impressions_unique` |  | Not given since 2025-11-15 |
| `impressions` | `post_impressions` |  | Not given since 2025-11-15 |

Its posts' details, what is not a count (a post's `details`, the latest read only: [Details](/analytics#details)):

| Detail | Facebook's name | Formats | Note |
| --- | --- | --- | --- |
| `retention` | `post_video_retention_graph` | reel | Needs `read_insights` |
| `viewer_demographics` | `total_video_views_by_age_bucket_and_gender` | reel | Needs `read_insights` |
| `viewer_demographics` | `total_video_views_by_country_id` | reel | Needs `read_insights` |

### Account [#account]

| Metric | Facebook's name | Note |
| --- | --- | --- |
| `reach` | `page_total_media_view_unique` | Needs `read_insights` |
| `views` | `page_media_view` | Needs `read_insights` |
| `views_followers` | `page_media_view` by `is_from_followers` (`1`) | Needs `read_insights`. Where Meta gives it |
| `views_non_followers` | `page_media_view` by `is_from_followers` (`0`) | Needs `read_insights`. Where Meta gives it |
| `views_paid` | `page_media_view` by `is_from_ads` (`1`) | Needs `read_insights`. Where Meta gives it |
| `views_organic` | `page_media_view` by `is_from_ads` (`0`) | Needs `read_insights`. Where Meta gives it |
| `engagements` | `page_post_engagements` | Needs `read_insights` |
| `likes` | `page_actions_post_reactions_total` | Needs `read_insights` |
| `profile_visits` | `page_views_total` | Needs `read_insights` |
| `profile_actions` | `page_total_actions` | Needs `read_insights` |
| `follows` | `page_daily_follows_unique` | Needs `read_insights` |
| `unfollows` | `page_daily_unfollows_unique` | Needs `read_insights` |
| `video_views` | `page_video_views` | Needs `read_insights` |
| `watch_time` | `page_video_view_time` | Needs `read_insights` |

No audience.

No `saves` on its posts, no `impressions` (since 2025-11-15), no numbers for stories and no audience (Meta's current API gives none for Pages).
