List icon
OutputValues icon
If icon
SlackIncomingWebhook icon
Log icon
Schedule icon

Facebook Page Posting Cadence Sentinel

List Facebook Page posts, alert Slack when the Page has gone quiet past your cadence threshold, and log the result for marketing teams.

Categories
Business

A brand's Facebook Page going quiet is easy to miss: there is no outage, no error, just silence that looks identical to a slow week until a customer or a manager notices the last post is a month old. Facebook's own Page Insights show engagement trends, not a schedule violation alert. This blueprint reads the newest post's real timestamp and reports exactly how many days the Page has gone without a new post.

This blueprint was created by Mohit Jeswani.

How it works

  1. list_recent_posts (io.kestra.plugin.meta.facebook.posts.List) fetches the newest few posts from facebook_page_id's feed, requesting only id and created_time. Read-only; nothing on the Page is changed. allowFailure: true covers an API or token error without failing the flow outright.
  2. evaluate (io.kestra.plugin.core.output.OutputValues) finds the newest created_time with a jq filter and computes how many days have passed since then.
  3. route (io.kestra.plugin.core.flow.If):
    • compliant: logs the newest post's timestamp, within cadence.
    • alert: posts the silence duration and newest timestamp to Slack.
  4. summary logs the silence duration and severity, closing the governance cycle.
  5. errors alerts Slack if the flow itself fails, for example an expired access token.

What you get

  • A real timestamp-based measurement of posting silence, not an inferred "this looks inactive" guess from engagement numbers.
  • A Page with zero posts in the fetched window treated the same as a fully silent Page, so a brand-new or emptied Page is still caught rather than silently passing.
  • A read-only check with zero risk of creating, editing, or deleting a real post.

Who it's for

  • Marketing and social media teams who own a Facebook Page and want to know the moment posting cadence slips, not discover it when someone screenshots the stale page.
  • Teams evaluating the Meta plugin who want a worked example of facebook.posts.List used as a standing cadence check, distinct from this repo's existing Meta blueprint, which sends WhatsApp failure notifications rather than reading Facebook Page content.

Why orchestrate this with Kestra

The Graph API reports each post's timestamp on request; it does not decide what cadence is expected, compare the newest post against it, or notify a Slack channel when the Page goes quiet. Kestra keeps max_silence_days as a flow input, turns the check into a Slack page naming the exact silence duration, and keeps a full execution history of every run.

Prerequisites

  • A Facebook Page and a Page access token with pages_read_engagement permission.
  • A Slack incoming webhook URL.

This flow calls the Facebook Graph API directly over HTTPS; there is no official local Graph API emulator, so list_recent_posts cannot be exercised against a local Docker container.

Secrets

  • FACEBOOK_ACCESS_TOKEN: the Page access token used by list_recent_posts. In Kestra OSS, provide it as the base64-encoded environment variable SECRET_FACEBOOK_ACCESS_TOKEN.
  • SLACK_WEBHOOK_URL: used by alert and the errors block. In Kestra OSS, provide it as the base64-encoded environment variable SECRET_SLACK_WEBHOOK_URL.

Inputs

Input Default Purpose
facebook_page_id <your-facebook-page-id> Facebook Page to audit
max_silence_days 14 Days since the newest post past which the alert fires

Outputs

  • {{ outputs.list_recent_posts.rows }}: the fetched posts (id, created_time).
  • {{ outputs.evaluate.values.newest_post_created_time }} / .silence_days: the newest post's timestamp and how many days old it is.
  • {{ outputs.evaluate.values.severity }}: OK, PAGE_SILENT, or CRITICAL.

Pitfalls

  • created_time reflects when the post was published, not when it was last edited; an old post that was recently edited does not reset the silence clock, which is the correct behavior for a posting-cadence check.
  • limit: 5 only looks at the five newest posts; this is enough to find the single newest created_time, but is not a full publishing history if you also want post-by-post auditing.
  • The Graph API's /feed endpoint returns posts the access token's permissions allow it to see; a token missing pages_read_engagement can return an empty or partial feed that looks identical to a genuinely silent Page.

Quick start

  1. Add the FACEBOOK_ACCESS_TOKEN and SLACK_WEBHOOK_URL secrets.
  2. Set facebook_page_id to a real Page.
  3. Run the flow manually and confirm compliant logs the newest post's real timestamp.
  4. Raise max_silence_days below that real post's age to confirm alert fires.
  5. Enable the daily trigger once max_silence_days matches your real posting policy.

How to extend

  • Loop over several facebook_page_id values with io.kestra.plugin.core.flow.Loop to cover more than one Page's cadence in a single scheduled run.
  • Add io.kestra.plugin.meta.instagram.media.List alongside this check for a combined cross-platform silence gate, since both plugins live in the same Meta package.
  • Request additional fields such as permalink_url to include a direct link to the newest post in the compliant log, not just its timestamp.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.