Agent setup guide
Best Time to Post Finder
Every Monday your own Bluesky and Mastodon posts of the last 28 days are grouped by weekday and hour in code; the top 3 slots go to a sheet and Slack.
What it does
Every Monday your own Bluesky and Mastodon posts of the last 28 days are grouped by weekday and hour in code; the top 3 slots go to a sheet and Slack.
- Every Monday, reads your own recent posts from Bluesky's public API and your Mastodon server's public API, without signing in.
- Keeps your posts of the last 28 days and works out each one's weekday and hour in your time zone, in code. Dates are worked out in code, never by the AI: days until or since each date, the window and business days are computed in your workflow's time zone, and records outside the window are skipped before the AI sees them.
- Works out each post's engagement and the average per weekday-and-hour slot in code, and keeps the top 3 slots.
- Saves the slots as a row in your “Best times” tab and posts them to Slack with a short AI note on how reliable they are.
What it needs
- A paid plan (agents run live on paid plans).
- An AI provider key (Settings → AI Providers).
- Google Sheets and Slack, connected in Settings → Integrations.
- A public Bluesky account and/or a Mastodon account on a server that allows public API access.
What it doesn't do
- It doesn't change the Social Post Scheduler or post anything; you set your posting times from the sheet.
- It uses only your own posts' likes, reposts, replies (and quotes / favourites / boosts), not reach or follower activity, which the networks don't publish.
- It reads your 100 newest Bluesky and 40 newest Mastodon posts.
Availability and plans
Available
Its workflow is built and tested, and every app it needs is live. You can get it and set it up now.
Included free on the Enterprise plan; on other paid plans it's a one-time purchase per workspace (the price is on the Agents page). The Agents page in the app always shows its current status.
Before you start
- A paid plan: agents run live, and the Free plan only runs Dry Runs.
- An AI provider key (OpenAI, Anthropic, Google and more) in Settings → AI Providers. AI usage is billed by your provider.
- These apps, connected in Settings → Integrations: Google Sheets and Slack.
- Nothing to send: the agent runs on a schedule.
- About 10 minutes.
Set it up step by step
Get the agent first (buy it, or it's already yours when your plan includes it), then in Agents → My agents press “Set up this agent”. That creates the agent's workflow in your workspace (it counts towards your plan's workflow limit) and opens the canvas with a setup checklist above it. Each item links to the exact place to go and ticks itself off when it's done.
1. Connect your AI provider
The AI steps run on your own key (OpenAI, Anthropic, Google and more). Add one in Settings → AI Providers.
2. Connect Google Sheets
Connect the Google account that can open your content-calendar spreadsheet (Settings → Integrations → Google Sheets).
3. Connect Slack
Connect the Slack workspace for the summary (Settings → Integrations → Slack).
4. Your Bluesky and Mastodon accounts
Open “Read your Bluesky posts”, “Find your Mastodon account” and “Read your Mastodon posts” and replace the placeholders in the addresses.
| Setting | What to enter | In step |
|---|---|---|
| Your Bluesky handle | In the address, replace YOUR_BLUESKY_HANDLE with your handle, e.g. harborstreetbakery.bsky.social. It starts as “YOUR_BLUESKY_HANDLE” until you replace it. | “Read your Bluesky posts” |
| Your Mastodon server | In the address, replace YOUR_MASTODON_SERVER with your server, e.g. mastodon.social. It starts as “YOUR_MASTODON_SERVER” until you replace it. | “Find your Mastodon account” |
| Your Mastodon username | In the address, replace YOUR_MASTODON_USERNAME with your username without the @ or the server. It starts as “YOUR_MASTODON_USERNAME” until you replace it. | “Find your Mastodon account” |
| Your Mastodon server (same one) | In the address, replace YOUR_MASTODON_SERVER with the same server. It starts as “YOUR_MASTODON_SERVER” until you replace it. | “Read your Mastodon posts” |
5. Sheet, Slack and your audience
Open “Explain the slots” and replace the placeholder, pick the “Best times” tab (Week of | Slot 1 | Slot 2 | Slot 3 | Bluesky posts | Mastodon posts | Updated) on “Save the slots to your sheet” and the Slack channel on “Post the summary to Slack”.
| Setting | What to enter | In step |
|---|---|---|
| About your audience | Replace the placeholder with your business, who follows you and what you post. It starts as “[YOUR BUSINESS, WHO FOLLOWS YOU (TIME ZONES, WORK HOURS) AND WHAT YOU POST]” until you replace it. | “Explain the slots” |
| Google account (Best times) | The Google account that can open the spreadsheet. Pick your connected Google Sheets account. | “Save the slots to your sheet” |
| Best times spreadsheet | Paste the link of the spreadsheet. | “Save the slots to your sheet” |
| Best times tab | The tab for the weekly slots (Week of | Slot 1 | Slot 2 | Slot 3 | Bluesky posts | Mastodon posts | Updated). | “Save the slots to your sheet” |
| Slack account | The Slack workspace for the summary. Pick your connected Slack account. | “Post the summary to Slack” |
| Slack channel | Where the weekly summary goes, e.g. #social. | “Post the summary to Slack” |
6. Test it with Dry Run
Press Dry Run: the agent runs on sample data with no messages sent and nothing written to your apps.
7. Switch the trigger on
Open the trigger, set your time zone (the slots are in it) and switch the schedule on. It runs every Monday at 7:00.
How it works
The agent is a normal workflow with 13 steps (1 AI step). You can open, edit and monitor it like any other workflow.
- Mondays at 7:00 — Runs on a schedule (cron 0 7 * * 1, UTC — change it in the trigger's settings). Runs every Monday and looks at your posts of the last 28 days. Set your time zone on the trigger: the time slots are in it.
- Read your Bluesky posts — Calls a web address (HTTP request). Reads your 100 newest Bluesky posts (replies left out) from Bluesky's public API, with their like, repost, reply and quote counts. No sign-in needed.
- Bluesky: last 28 days — Step. In code, not AI: keeps your own posts from the last 28 days (reposts left out) and works out each one's weekday and hour in your time zone.
- Bluesky: engagement per post — Step. In code, not AI: each post's engagement (likes + reposts + replies + quotes).
- Find your Mastodon account — Calls a web address (HTTP request). Looks up your account id on your Mastodon server's public API. No sign-in needed on servers that allow public access.
- Read your Mastodon posts — Calls a web address (HTTP request). Reads your 40 newest public Mastodon posts (replies and boosts left out) with their favourite, boost and reply counts.
- Mastodon: last 28 days — Step. In code, not AI: keeps your posts from the last 28 days and works out each one's weekday and hour in your time zone.
- Mastodon: engagement per post — Step. In code, not AI: each post's engagement (favourites + boosts + replies).
- Find the best time slots — Step. In code, not AI: puts every post of both networks into its weekday-and-hour slot, works out the average engagement per slot and keeps the top 3 (more posts break a tie).
- Explain the slots — AI step (runs on your AI provider key). AI writes two or three sentences on what the top slots suggest and how sure to be (few posts per slot means a weaker signal), without typing numbers.
- Save the slots to your sheet — Google Sheets: Add a row. Adds a row to your “Best times” tab (Week of | Slot 1 | Slot 2 | Slot 3 | Bluesky posts | Mastodon posts | Updated) next to your content calendar.
- Post the summary to Slack — Slack: Post a message. Posts the top slots (from code) and the AI's note to your Slack channel.
- Saved and posted — Kept in the run history. The run history keeps every week's slots.
Test it with Dry Run
Press Dry Run in the canvas. The agent runs on the sample data stored on its trigger (the “Sample data for Dry Run” box), so you can check every step's output before anything is live.
- Nothing is sent or written: app actions, emails and Slack posts are simulated, and AI steps don't call your AI provider.
Go live
- Open the trigger, set your time zone (the slots are in it) and switch the schedule on. It runs every Monday at 7:00.
- Scheduled runs start only once the schedule is activated, and can't repeat faster than your plan's minimum interval.
- The setup checklist adds a “paid plan” item before activation: live runs need a paid plan (the Free plan only runs Dry Runs).
- When every checklist item is done and the trigger is on, the checklist says “Live — this agent is running”. Follow its runs in the workflow's History tab and in Analytics → Agents.
Questions
How is this different from the Weekly Social Performance Report?
That report reviews last week's posts one by one. This agent looks at 28 days of posts by when they went out, and ranks weekday-and-hour slots by average engagement.
Does it change my Social Post Scheduler?
No. It saves the slots to a tab you can see next to your content calendar; set the scheduler's posting time (and the days you plan posts) from it yourself.
How reliable is it?
It's based only on your own posts, so a slot with one or two posts is a weak signal. The Slack note says so, and the counts show how many posts each slot has.
Troubleshooting
- “No AI provider connected” or a rejected key: connect or fix the key in Settings → AI Providers, then press Test there.
- A checklist item stays unticked: the setting is still empty or still contains its placeholder text. Open the step from the checklist and fill it in.
- An app step fails with “Needs reconnect”: the account's access was revoked or expired. Reconnect it in Settings → Integrations.
- Slack says the app isn't in the channel: in Slack, type /invite @Fluxo Flow in that channel (always needed for private channels).
- It didn't run at the expected time: the schedule must be activated, and its time is in the trigger's timezone.
- A step failed: open the run in History and check that step in the Trace tab for the error and what it received.
Generated from the agent's own workflow, so it always matches what the agent does. Last updated .