How to turn a Linear or GitHub week into a stakeholder update automatically
Engineering teams spend 15-30 minutes every week pulling Linear issues and GitHub pull requests into a stakeholder update. Automate it: use an AI coworker like Geniusly to summarize last week's shipped work and this week's planned issues in Slack, or use Slack Workflow Builder to send a formatted summary on schedule. This guide shows three methods, from no-code to custom, with example outputs and when each fits.
Why do teams need Linear/GitHub weekly updates?
Product managers, founders, and stakeholders need to know what engineering shipped last week and what's planned for this week. But pulling that information manually wastes time:
- Open Linear, filter by "Completed" and "This week", copy issue titles
- Open GitHub, check merged PRs, read commit messages
- Write a summary that non-technical stakeholders understand
- Post it in Slack, email, or a project doc
- Repeat every Friday or Monday
That's 15-30 minutes per week. Over a year, that's 13-26 hours of manual copy-paste work.
The good news: this is one of the easiest team tasks to automate. You have three main options:
- AI coworker method (Geniusly): Ask in Slack once, schedule it weekly, get a plain-language summary
- Slack Workflow Builder method: No-code automation that posts formatted summaries on a schedule
- Custom script method: Write code to pull from Linear/GitHub APIs and format the output
Let's walk through each method.
Method 1: AI coworker (Geniusly) — 2 minutes to set up, plain-language summary
The fastest way to automate your Linear/GitHub weekly update is to use an AI coworker that connects to both tools and writes a stakeholder-ready summary.
How it works
With Geniusly, you:
- Add Geniusly to Slack and invite it to your #product-updates or #engineering channel
- Connect your Linear and GitHub accounts in a private Geniusly conversation
- In your shared channel, ask:
@Geniusly give me a weekly engineering update: what we shipped from Linear last week and what we're working on this week from GitHub - Geniusly pulls the data, writes a plain-language summary, and posts it in the channel
- Ask Geniusly to schedule it weekly:
@Geniusly schedule this weekly update to post every Friday at 4pm
Example output
Engineering update for the week of Oct 14-18, 2026
What we shipped last week:
- User auth refactor (GEN-234) — Migrated to OAuth 2.1, reducing login errors by 40%
- Dashboard loading speed (GEN-241) — Cut initial load time from 3.2s to 1.1s with lazy loading
- Email notification templates (GEN-198) — New templates for weekly digests and client briefs
What we're working on this week:
- In Review: API rate limiting (PR #456) — waiting on security review
- In Progress: Mobile responsive nav (GEN-267), Linear integration v2 (GEN-272)
- Blocked: None
Next up: GitHub Actions CI optimization, new onboarding flow
When to use this method
- You want a plain-language summary that non-technical stakeholders can read
- You want to set it once and forget it (scheduled weekly updates)
- You already use Slack and have Linear and GitHub connected
- You don't want to write custom code or maintain a script
Try Geniusly free — it takes 2 minutes to add to Slack.
Integrations
Geniusly connects to:
Method 2: Slack Workflow Builder — no-code, formatted summary
Slack's built-in Workflow Builder can send scheduled messages with data from Linear and GitHub. This method requires a Slack paid plan (Pro, Business+, or Enterprise) and a bit more setup, but no coding.
How it works
- Open Workflow Builder in Slack (Tools → Workflow Builder)
- Create a new workflow and set the trigger to "Scheduled" (e.g., every Friday at 4pm)
- Add a step to pull data from Linear using Slack's Linear app or a webhook
- Add another step to pull data from GitHub using Slack's GitHub app
- Format the message using Slack's message composer (add variables for issue titles, PR links, etc.)
- Set the destination channel (#product-updates, #engineering, etc.)
- Publish the workflow
Example output
Weekly Engineering Update
Linear: Issues completed this week
- GEN-234: User auth refactor
- GEN-241: Dashboard loading speed
- GEN-198: Email notification templates
GitHub: PRs merged this week
When to use this method
- You have a Slack paid plan (Workflow Builder isn't available on the free plan)
- You want a structured, formatted summary (not a narrative)
- You're comfortable setting up Slack workflows
- You don't need plain-language explanations of what shipped
Limitations
- No plain-language summaries. Workflow Builder posts raw data (issue titles, PR links), not a stakeholder-friendly narrative.
- Limited formatting. You can't easily group by priority, team, or status without custom logic.
- No context. It won't explain what each issue or PR means for the product.
Method 3: Custom script (Linear/GitHub APIs) — full control, more maintenance
If you have a developer on your team, you can write a custom script that pulls from Linear and GitHub APIs, formats the output, and posts to Slack.
How it works
- Get API keys for Linear, GitHub, and Slack
- Write a script (Python, Node.js, etc.) that:
- Pulls completed Linear issues from the past week using Linear's GraphQL API
- Pulls merged GitHub PRs from the past week using GitHub's REST API
- Formats the data into a readable message
- Posts the message to a Slack channel using Slack's Web API
- Schedule the script to run weekly (cron job, GitHub Actions, etc.)
Example code (Python)
```python import requests from datetime import datetime, timedelta # Linear API linear_query = """ query { issues(filter: {state: {name: {eq: "Done"}}, completedAt: {gte: "%s"}}) { nodes { identifier title completedAt } } } """ one_week_ago = (datetime.now() - timedelta(days=7)).isoformat() response = requests.post('https://api.linear.app/graphql', headers={'Authorization': 'YOUR_LINEAR_API_KEY'}, json={'query': linear_query % one_week_ago}) linear_issues = response.json()['data']['issues']['nodes'] # GitHub API github_response = requests.get('https://api.github.com/repos/YOUR_ORG/YOUR_REPO/pulls', params={'state': 'closed', 'since': one_week_ago}, headers={'Authorization': 'token YOUR_GITHUB_TOKEN'}) github_prs = [pr for pr in github_response.json() if pr['merged_at']] # Format message message = "**Weekly Engineering Update**\n\n" message += "**Linear: Issues completed this week**\n" for issue in linear_issues: message += f"- {issue['identifier']}: {issue['title']}\n" message += "\n**GitHub: PRs merged this week**\n" for pr in github_prs: message += f"- [PR #{pr['number']}]({pr['html_url']}): {pr['title']}\n" # Post to Slack requests.post('https://slack.com/api/chat.postMessage', headers={'Authorization': 'Bearer YOUR_SLACK_TOKEN'}, json={'channel': '#product-updates', 'text': message}) ```When to use this method
- You need full control over the format, filters, and logic
- You have a developer available to write and maintain the script
- You want to add custom logic (e.g., group by team, filter by label, calculate metrics)
- You're comfortable managing API keys and scheduled jobs
Downsides
- Maintenance. If Linear or GitHub changes their API, your script breaks.
- Time investment. Writing, testing, and deploying the script takes 2-4 hours upfront.
- No plain-language summaries. You're formatting raw data, not writing a narrative (unless you add an LLM layer).
Which method should you use?
| Method | Setup time | Plain-language summary | Maintenance | Best for |
|---|---|---|---|---|
| AI coworker (Geniusly) | 2 minutes | ✓ | None | Teams that want a stakeholder-ready narrative with zero maintenance |
| Slack Workflow Builder | 15-30 minutes | ✗ | Low | Teams on Slack paid plans that want a formatted list, not a narrative |
| Custom script | 2-4 hours | ✗ (unless you add an LLM) | Medium | Teams with developers and custom formatting needs |
Our recommendation: Start with the AI coworker method (Geniusly). It takes 2 minutes to set up, produces a stakeholder-ready summary, and requires zero maintenance. If you need custom formatting or logic later, you can always add a custom script.
Tips for better Linear/GitHub weekly updates
Regardless of which method you use, follow these best practices:
1. Write for non-technical stakeholders
Your weekly update should make sense to your PM, founder, or client. Avoid jargon like "refactored the auth middleware" — say "fixed login errors" instead.
2. Group by impact, not by task
Instead of listing every issue and PR, group work by impact: "Performance improvements," "New features," "Bug fixes."
3. Highlight blockers
If something is blocked or at risk, call it out. Stakeholders need to know what needs their attention.
4. Link to details
Include links to Linear issues or GitHub PRs so stakeholders can dig deeper if they want.
5. Keep it short
Aim for 5-10 bullets max. If you shipped 20 things, group them: "10 bug fixes, 3 new features, 7 performance improvements."
Real examples of Linear/GitHub weekly updates
Example 1: Engineering team to product team
Engineering update for Oct 14-18
Shipped:
- User onboarding flow (GEN-189) — New 3-step wizard, ready for launch
- API performance (GEN-201, GEN-203) — Response times down 60% under load
- Mobile nav redesign (GEN-215) — Now responsive on all devices
In progress:
- Payment integration (GEN-220) — Stripe API connected, testing edge cases
- Admin dashboard (GEN-225) — 70% complete, targeting next Friday
Blocked:
- Email sending (GEN-230) — Waiting on SendGrid approval (escalated to support)
Example 2: Eng team to founder/stakeholders
This week in engineering (Oct 14-18)
What's live:
- New onboarding wizard — users can now sign up and connect tools in 3 clicks
- Faster dashboard — load times cut from 3s to 1s (60% improvement)
- Mobile-friendly nav — works on all phone sizes
Coming next week:
- Payment integration (Stripe) — final testing this week, ready to ship Monday
- Admin dashboard — 70% done, on track for next Friday
Heads-up:
- Email sending is blocked on SendGrid approval (escalated, should resolve by Wednesday)
FAQ
Can I pull Linear issues and GitHub PRs into one update?
Yes. All three methods (AI coworker, Slack Workflow Builder, custom script) can combine Linear issues and GitHub PRs into a single weekly update.
Do I need a paid Slack plan to automate this?
It depends on the method. Slack Workflow Builder requires a paid Slack plan (Pro, Business+, or Enterprise). The AI coworker method (Geniusly) and custom script method work on Slack's free plan.
Can I schedule the update to post automatically?
Yes. With Geniusly, you can ask it to schedule a weekly update (e.g., "schedule this to post every Friday at 4pm"). With Slack Workflow Builder, you set a scheduled trigger. With a custom script, you use a cron job or GitHub Actions.
What if I only use Linear or only use GitHub?
All methods work with just one tool. You don't need both Linear and GitHub. Just pull from whichever tool your team uses for project tracking and code.
Can I customize the format of the update?
Yes. With Geniusly, you can ask for specific formats (e.g., "group by priority" or "include only high-priority issues"). With Slack Workflow Builder and custom scripts, you have full control over the format.
Where should I post the weekly update?
Most teams post to a #product-updates, #engineering, or #general channel in Slack. Some teams also post to a project management tool like Notion or send via email. Choose wherever your stakeholders already check.
