Make Automation: Auto-Post Project Health Updates From Jira to Slack Every Monday
What This Builds
A Make scenario (Make's word for automation) that runs every Monday morning, queries your Jira sprint for open blockers, overdue tasks, and in-progress items, sends that data to OpenAI to generate a concise project health update, and posts the formatted message to a designated Slack channel. The PM sees the auto-generated pulse check before their first standup — and can either let it run as-is or add comments before it posts. No manual Jira digging, no copy-pasting into Slack.
Prerequisites
- Familiar with Jira sprint boards and basic ticket management (Level 2)
- Make account — free tier (1,000 operations/month) is enough to start; Core plan ($9/month) for higher volume
- Jira Cloud account with API token
- OpenAI account with API key (platform.openai.com; ~$2–5/month for this use case)
- Slack workspace with permission to add apps/bots
The Concept
Think of this automation as a Monday morning briefing officer. Before you arrive at the office, they've already reviewed the project board, identified what's blocked, what's overdue, and what's moving — and left a clear summary on your desk. You didn't have to do any of the legwork. The briefing officer in this case is Make, and they're fluent in every tool in your stack. Make's superpower over Zapier is that it handles more complex data transformations — filtering, aggregating, conditionally routing — which makes it better suited for working with Jira's sometimes messy API responses.
Build It Step by Step
Part 1: Set Up Your Make Account and Connections
- Sign up at make.com. From the dashboard, click Create a new scenario.
- You'll see a blank canvas with a circular "+" button. This is where you add modules (Make's name for steps).
- Before building, set up your app connections:
- Go to Connections (left sidebar) → Add Connection → search Jira Software. Enter your Jira site URL (e.g.,
yourcompany.atlassian.net), your Atlassian email, and an API token from id.atlassian.com → Security → API tokens. - Add a connection for OpenAI. You'll need an API key from platform.openai.com → API Keys.
- Add a connection for Slack. Authorize via your Slack account — Make will request permission to post messages.
Part 2: Build the Scenario
Module 1 — Schedule Trigger
- Click the "+" on the canvas. Search for Schedule and select it.
- Set it to run Every Week on Monday at 7:00 AM in your timezone.
- Click OK.
Module 2 — Jira: Search for Issues
- Click the "+" after the Schedule module. Search for Jira Software → select Search for Issues.
- Select your Jira connection.
- In the JQL field, enter the following — this pulls all open, in-progress, and blocked issues from your sprint:
project = "YOUR-PROJECT-KEY" AND sprint in openSprints() AND status in ("In Progress", "Blocked", "In Review") ORDER BY priority DESC
Replace YOUR-PROJECT-KEY with your Jira project key.
- Set Max Results to
30. - In Fields, select:
summary,status,assignee,priority,due. - Run the module once (click the circular arrow icon) to verify it returns issues.
Module 3 — Jira: Search for Overdue Issues (second Jira module)
- Add another Jira Search for Issues module. This one targets overdue items specifically:
project = "YOUR-PROJECT-KEY" AND due < now() AND statusCategory != Done ORDER BY due ASC
Set Max Results to 15. Select the same fields.
Module 4 — Tools: Text Aggregator
- Add a Tools module → Text Aggregator. This concatenates the results from Modules 2 and 3 into a single text block for the AI.
- In Source Module, select Module 2 (In Progress issues).
- In Text, build the output using Make's variable picker:Make will repeat this line for each issue returned by Module 2.Copy and paste this
- [Summary]: [Status] (Assignee: [Assignee Display Name], Due: [Due Date]) - Add a Separator: a newline character.
- Duplicate this aggregator for Module 3 (overdue issues), using the same format.
Why two aggregators instead of one? It lets you label them separately in the AI prompt — "In Progress" vs. "Overdue" — which produces a better-organized AI output.
Module 5 — OpenAI: Create a Completion
- Add an OpenAI module → Create a Completion.
- Select your OpenAI connection.
- Set Model to
gpt-4o-mini(cheaper and fast enough for this use case). - In Messages, add two entries:
System message:
You are a project management assistant. You write concise, Slack-formatted project health updates for a delivery team. Use plain language. No corporate filler. Flag blockers clearly. Use emoji sparingly — only :red_circle: for blocked, :yellow_circle: for at-risk, :white_check_mark: for on track. Keep the entire update under 300 words.
User message (using Make's variable picker to insert the aggregated text from Modules 4a and 4b):
Here is this week's Jira data for our project:
IN PROGRESS ISSUES:
[insert Text Aggregator 1 output]
OVERDUE ISSUES:
[insert Text Aggregator 2 output]
Write a Monday morning project health update for our Slack channel. Structure:
*Weekly Pulse — [today's date]*
*Status:* [one word: On Track / At Risk / Blocked] [appropriate emoji]
*Active work (this sprint):*
[3–5 bullets summarizing what's in progress]
*Blockers requiring attention:*
[list any blocked issues or "None this week"]
*Overdue items:*
[list overdue issues with assignee, or "None — all clear"]
*One thing to focus on today:*
[Pick the single most important thing the team should prioritize]
- Set Max Tokens to
600.
Module 6 — Slack: Create a Message
- Add a Slack module → Create a Message.
- Select your Slack connection.
- In Channel, select or type the channel where you want the update posted (e.g.,
#project-deliveryor#[project-name]-team). - In Text, insert the output from Module 5 (the OpenAI completion).
- Enable Markdown formatting.
Part 3: Test and Activate
- Click Run once at the bottom of the canvas. Watch each module execute — a green checkmark means success, a red exclamation means failure (click it to see the error).
- Check your Slack channel — you should see the generated update.
- Review the output quality. If it's too long, reduce Max Tokens. If it's missing context, add a background sentence to the user message: "Context: This is a 9-month IT infrastructure migration project for a financial services client, currently in Month 5."
- Click Save and toggle the scenario Active.
Real Example: Application Modernization Project
Setup: Make scenario running every Monday 7:15 AM, Jira project key APP-MOD, posting to #app-mod-delivery Slack channel.
Input (auto-pulled from Jira): 11 in-progress issues, 3 blocked, 2 overdue.
Output posted to Slack:
Weekly Pulse — Monday, April 14
Status: At Risk :yellow_circle:
Active work (this sprint):
• API refactoring: 6 of 11 endpoints complete, on track for Thursday demo
• Database schema migration: in progress, Sarah on lead
• Front-end component library update: in review with QA
• Dev environment setup for new contractor: in progress (Marcus)
• Documentation update for v2 endpoints: in progress
Blockers requiring attention:
• :red_circle: Integration test environment down — waiting on DevOps (assigned: Tom, Day 3 of block)
• :red_circle: Client security review approval needed before UAT can start — 2 tickets blocked on this
Overdue items:
• API error handling spec (due Apr 10) — Priya — needs 1-day effort to close
• Sprint 5 retrospective action items doc — Marcus — 4 days overdue
One thing to focus on today:
Get the DevOps blocker resolved. The integration environment being down is cascading — 4 sprint tickets can't progress until it's back up.
PM action: Reads update at 7:30 AM, replies in thread: "Tom, can you give us an ETA on the env? Blocking sprint progress." Tagged and resolved by 9 AM standup.
Time saved: PM didn't open Jira on Monday morning. The board scan (previously 20–30 minutes) was automated.
What to Do When It Breaks
- Module 2 or 3 returns no issues → The JQL query may have a typo in the project key, or
openSprints()may not work if your project uses Kanban instead of Scrum. Replacesprint in openSprints()withupdatedDate >= -7dfor Kanban-style boards. - Text Aggregator produces a blank output → Make the field mappings explicit. Open the aggregator, delete the text field, and re-add variables from scratch using the variable picker.
- OpenAI module returns a 429 error (rate limit) → You've hit the API rate limit for your OpenAI tier. Upgrade to Tier 2 on platform.openai.com, or add a Sleep module (5 seconds) before the OpenAI call to reduce request speed.
- Slack message posts twice → You accidentally activated the scenario while it was set to run immediately on activation. Check Make's scheduling — set it to "From now on" rather than "From the beginning."
- Message formatting looks broken in Slack → Make sure the Slack module has Markdown enabled. Also ensure the OpenAI output doesn't include HTML tags — add "Do not use HTML tags, only plain text and Slack's markdown (* for bold, _ for italic, ` for code)" to the system prompt.
Variations
- Simpler version: Skip the AI module entirely. Use just the two Jira search modules + a Text Aggregator + Slack message. The update will be raw data, not a narrative — but it still saves you from opening Jira manually every Monday.
- Extended version: Add a fourth Jira module that searches for issues due in the next 7 days (upcoming deadlines), and include them as a separate section in the Slack message. Now the update covers past week (overdue), present (in progress), and near future (upcoming) in one automated post.
- Daily standup version: Change the schedule to run Monday–Friday at 8:45 AM and adjust the prompt to generate a shorter "pre-standup briefing" rather than a full weekly pulse. The team reads it before joining the call.
What to Do Next
- This week: Build and test the scenario. Let it run for two Mondays before making changes — first-run tweaks are tempting but you need a baseline to evaluate against.
- This month: Add a filter module between the Jira search and the OpenAI call that excludes closed/done tickets. This keeps the AI input clean and reduces noise in the output.
- Advanced: Add a Jira webhook trigger as an alternative to the schedule. Configure it so any time a ticket is marked "Blocked," Make immediately posts a lightweight alert to Slack: "Blocker flagged: [ticket summary] — assigned to [name]." Real-time blocking detection without waiting for Monday.
Advanced guide for project manager professionals. These techniques use more sophisticated AI features that may require paid subscriptions.