How to turn a Linear or GitHub week into a stakeholder update automatically

Mihir Ahuja 8 minute read

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:

  1. AI coworker method (Geniusly): Ask in Slack once, schedule it weekly, get a plain-language summary
  2. Slack Workflow Builder method: No-code automation that posts formatted summaries on a schedule
  3. 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:

  1. Add Geniusly to Slack and invite it to your #product-updates or #engineering channel
  2. Connect your Linear and GitHub accounts in a private Geniusly conversation
  3. 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
  4. Geniusly pulls the data, writes a plain-language summary, and posts it in the channel
  5. 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:

  • Linear — pull issues by status, assignee, team, or label
  • GitHub — pull PRs, commits, and issues from your repos
  • Slack — post updates in any channel you invite Geniusly 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

  1. Open Workflow Builder in Slack (Tools → Workflow Builder)
  2. Create a new workflow and set the trigger to "Scheduled" (e.g., every Friday at 4pm)
  3. Add a step to pull data from Linear using Slack's Linear app or a webhook
  4. Add another step to pull data from GitHub using Slack's GitHub app
  5. Format the message using Slack's message composer (add variables for issue titles, PR links, etc.)
  6. Set the destination channel (#product-updates, #engineering, etc.)
  7. 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

  • PR #451: Fix login error handling
  • PR #453: Add lazy loading to dashboard
  • PR #447: Update email templates

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

  1. Get API keys for Linear, GitHub, and Slack
  2. 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
  3. 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.