Weekly
Back up all your Linear issues weekly
Every week you get a CSV of all your issues as a backup.
- Runs
- Weekly
- Apps
- Linear
- AI
- Not needed
- Access
- read
Send this to your assistant
Create a ClickRuntime automation: every Sunday at 8pm, export all my Linear issues with title, status, assignee, priority and dates to a CSV and email it to me.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
Linear holds a company's engineering history: every bug, every decision made in comments, every estimate. Yet it is hosted by someone else, and teams rarely think about what happens if an account is deleted by mistake, a workspace is restructured or an integration wipes a field. Auditors and customers in regulated industries also ask for records that sit outside the tool itself.
Every week, ClickRuntime pages through all the issues in your Linear workspace, builds a CSV with the key fields and emails it to you, either as an attachment or as text, depending on size. You end up with a dated file for each week that you can store in your own archive or drive.
It is a low-effort safety net for managers and operations leads who want one.
What you get out of it
A copy exists outside Linear
If a mistake or a bulk edit damages data, you have last week's file to compare with. That is peace of mind that costs nothing but a weekly email. That kind of peace of mind is cheap for what it protects.
Audits and customer requests are easier
Some customers and auditors want evidence of how issues were handled. A dated export lets you produce it without a rushed manual extraction. It saves a stressful scramble the day the request arrives.
Bulk analysis happens in a spreadsheet
Teams that want to count issues by label or compute average age can open the CSV in a spreadsheet. That is simpler than building a report for every question. That makes ad hoc questions easy to answer.
Data changes can be traced
With weekly snapshots, you can see how an issue's status or estimate changed between files. It helps when people disagree about what was said or decided. That evidence settles most arguments about history.
Migrations are easier
If you ever move to a different tracker, a recent export of all issues is the starting point. You are not scrambling to extract data from a tool you are about to leave.
How it works
What happens, step by step
Once a week, ClickRuntime pages through every issue in your Linear workspace.
It builds a spreadsheet-style list with each issue's ID, title, status, assignee, priority, and created and completed dates.
You get the export by email, giving you a regular backup you can open in Excel or Google Sheets.
Before it runs live
- Connect Linear
What you get
Build your own
Need it to work differently?
Your own rules
Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.
Any number of apps
One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.
AI where it helps
Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.
On a schedule or on each event
Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.
Changes you can ask for
- Run it at a different time, more or less often, or only on weekdays
- Add an AI step, for example to summarize, sort or draft a reply
- Add another app, for example also send it to Slack
- Combine it with other Linear steps into one automation
Under the hood
The code that runs this automation
import csv, io
from clickruntime import on_trigger, http, credentials, notify
def linear(query, variables=None):
r = http.post(
"https://api.linear.app/graphql",
headers={"Authorization": credentials.secret("LINEAR_API_KEY")},
json={"query": query, "variables": variables or {}},
)
r.raise_for_status()
return r.json()["data"]
@on_trigger
def run(event):
rows, cursor = [], None
while True:
page = linear("""query($after: String) { issues(first: 250, after: $after) {
nodes { identifier title state { name } assignee { name } priorityLabel createdAt completedAt }
pageInfo { hasNextPage endCursor } } }""", {"after": cursor})["issues"]
rows += page["nodes"]
if not page["pageInfo"]["hasNextPage"]:
break
cursor = page["pageInfo"]["endCursor"]
out = io.StringIO()
w = csv.writer(out)
w.writerow(["id", "title", "status", "assignee", "priority", "created", "completed"])
for i in rows:
w.writerow([i["identifier"], i["title"], i["state"]["name"], (i["assignee"] or {}).get("name", ""),
i["priorityLabel"], i["createdAt"], i["completedAt"] or ""])
notify.email_me(f"Linear export: {len(rows)} issues", out.getvalue())
return {"issues": len(rows)}FAQ
Common questions
Which fields are in the CSV?
What if my workspace has thousands of issues?
Does the export include comments and attachments?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
See which open issues nobody has touched
Every Monday you get the open issues with no updates in 14 days, grouped by team and priority.
See how it worksMove issues that have stalled
Issues left in one status too long are moved back automatically, with a comment, and you get the list.
See how it worksGet warned before an issue breaches its SLA
You hear about issues a few hours before their SLA runs out, once per issue.
See how it worksKeep exploring
Set up “Back up all your Linear issues weekly” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.