Every 15 minutes
Turn meeting transcripts in Drive into Jira tasks
When a meeting transcript is saved to your Drive folder, its action items become Jira tasks with owners and due dates, and Slack lists them.
- Runs
- Every 15 minutes
- Apps
- Google Drive, Jira
- AI
- Yes, uses the built-in AI allowance
- Access
- Drive read; Jira create
Send this to your assistant
Create a ClickRuntime automation: every 15 minutes, check my Transcripts folder in Drive for new docs, have AI pull out action items with owner and due date, create Jira tasks in PM for each, and post them to #team.
First time? Adding ClickRuntime to your assistant takes about two minutes.
Why use it
Why teams use this automation
A project team records its meetings, and transcripts land in a Drive folder automatically. Action items are agreed in the meeting, but nobody writes them up, and by next week half have been forgotten.
Pulling action items from each transcript and creating Jira tasks with owners turns spoken promises into tracked work. Everyone sees their tasks in Slack straight after the meeting.
What you get out of it
Actions do not get lost
Each agreed action becomes a task. Next week's meeting starts with a list, not a memory test.
Owners are named
Tasks are assigned to the person mentioned in the meeting where possible. Responsibility is clear.
No write-up needed
Nobody has to spend time turning notes into tickets after the meeting.
Visible to the team
A Slack post lists the new tasks. People can correct anything that was misheard.
How it works
What happens, step by step
Every 15 minutes, ClickRuntime looks for new transcripts in your Drive folder.
It reads the text of each new transcript.
AI picks out the action items, with an owner and due date where mentioned.
A Jira task is created for each action item.
The new tasks are posted to your #team Slack channel, and each transcript is handled once.
Before it runs live
- Connect Google Drive
- Connect Jira
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
- Act only on the items that match your own rules, and skip the rest
- Change what the AI looks for, or how it writes the result
- Add another app, for example also send it to Slack
- Combine it with other Google Drive and Jira steps into one automation
Under the hood
The code that runs this automation
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from clickruntime import on_trigger, credentials, http, notify, state, ai, report_fetched
JIRA, SITE = "https://api.atlassian.com/ex/jira/your-cloud-id", "https://acme.atlassian.net/browse/"
adf = lambda text: {"type": "doc", "version": 1, "content": [{"type": "paragraph", "content": [{"type": "text", "text": text}]}]}
def jira(method, path, **kw):
resp = http.request(method, JIRA + path, headers={"Authorization": f"Bearer {credentials.connection('jira', 'work')}", "Accept": "application/json"}, **kw)
return resp.raise_for_status() or (resp.json() if resp.content else None)
FOLDER = "transcripts-folder-id"
SCHEMA = {"type": "object", "properties": {"actions": {"type": "array", "items": {"type": "object", "properties": {
"task": {"type": "string"}, "owner": {"type": "string"}, "due": {"type": "string"}}}}}}
@on_trigger
def run(event):
drive = build("drive", "v3", credentials=Credentials(credentials.connection("google", "work")), cache_discovery=False).files()
seen = set(state.get("seen") or [])
files = [f for f in drive.list(q=f"'{FOLDER}' in parents and mimeType = 'application/vnd.google-apps.document' and trashed = false",
fields="files(id,name)", orderBy="createdTime desc", pageSize=20).execute()["files"] if f["id"] not in seen]
report_fetched(len(files))
if not files:
return {"tasks": 0}
lines = []
for f in files:
text = drive.export(fileId=f["id"], mimeType="text/plain").execute().decode("utf-8")[:24000]
actions = ai.generate(text, json_schema=SCHEMA, max_output_tokens=800,
system="List the agreed action items with owner name and due date (YYYY-MM-DD or empty).").json["actions"]
for a in actions:
fields = {"project": {"key": "PM"}, "issuetype": {"name": "Task"}, "summary": f"{a['task']} ({a['owner']})"[:250], "description": adf(f"From meeting: {f['name']}")}
key = jira("POST", "/rest/api/3/issue", json={"fields": {**fields, **({"duedate": a["due"]} if a.get("due") else {})}})["key"]
lines.append(f"• {key} {a['task']}, {a['owner']}")
seen.add(f["id"])
notify.slack("Action items from today's meetings\n" + "\n".join(lines), channel="#team")
state.set("seen", sorted(seen)[-500:])
return {"tasks": len(lines)}FAQ
Common questions
Which transcript formats work?
How are owners matched to Jira users?
What if the AI picks up something that was not an action?
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
Set up a Drive folder and Jira tickets for each new hire
For every new hire, a Drive folder with copies of your onboarding documents is created and shared, Jira onboarding tickets are opened, and Slack gets a summary.
See how it worksOpen an incident ticket and archive its evidence in Drive
Each reported incident opens a Jira ticket, its report is saved to your Drive incidents folder, and the ticket links to the file.
See how it worksLabel new emails automatically
New mail is sorted into labels like Inquiry, Invoice and Newsletter within minutes of arriving.
See how it worksKeep exploring
Set up “Turn meeting transcripts in Drive into Jira tasks” from your assistant
Copy the prompt above, or connect your assistant first. Free plan, no credit card.