Turns each new recording into a Notion page holding its summary and transcript, and never files the same one twice.

UsesFireflies.aiNotionOpenAI

File recordings in Notion as summaries and transcripts

Every six hours, the recordings Fireflies has transcribed for you are checked and any not yet filed become a page in your Notion database. Each page holds an AI summary, with an overview, the key points and the follow-ups people agreed to, then the transcript itself, so the conversation is searchable rather than only playable.

A recording is matched to its page by a reference tag in the page title, so re-running never files the same conversation twice. The summary is written strictly from the transcript, with no advice, no opinions and no facts the recording does not contain. A recording whose transcript or summary comes back empty is left for the next run, not filed half finished, and the transcript is capped so Notion accepts the page; a page that is cut short says so and links to the full recording.

You need a Fireflies account and a Notion database to file into. Nothing is written into the database's columns beyond the page title, so it needs no particular fields.

ScheduleRun every 6 hours.Run every 6 hours.
ValuesSet notionDatabaseId to blank.Set notionDatabaseId to blank.
ValuesSet maxRecordings to 5.Set maxRecordings to 5.
ValuesSet maxTranscriptLines to 60.Set maxTranscriptLines to 60.
TextTrim notionDatabaseId and save it as databaseId.Trim notionDatabaseId and save it as databaseId.
MathSet lineBudget to maxTranscriptLines multiplied by 1.Set lineBudget to maxTranscriptLines multiplied by 1.
Decisions & LoopsIf lineBudget is greater than 80If lineBudget is greater than 80
Yes
ValuesChange lineBudget to 80.Change lineBudget to 80.
No
No steps
Decisions & LoopsIf lineBudget is less than 1If lineBudget is less than 1
Yes
ValuesChange lineBudget to 1.Change lineBudget to 1.
No
No steps
MathSet recordingLimit to maxRecordings multiplied by 1.Set recordingLimit to maxRecordings multiplied by 1.
Decisions & LoopsIf recordingLimit is greater than 25If recordingLimit is greater than 25
Yes
ValuesChange recordingLimit to 25.Change recordingLimit to 25.
No
No steps
Decisions & LoopsIf recordingLimit is less than 1If recordingLimit is less than 1
Yes
ValuesChange recordingLimit to 1.Change recordingLimit to 1.
No
No steps
Fireflies.aiFireflies.aiList Fireflies meetings. Save it as recordings.List Fireflies meetings. Save it as recordings.
ValuesSet filed to 0.Set filed to 0.
ValuesSet skipped to 0.Set skipped to 0.
Decisions & LoopsFor each recording in recordings.meetings:For each recording in recordings.meetings:
Decisions & LoopsIf filed is greater than or equal to recordingLimitIf filed is greater than or equal to recordingLimit
Yes
Decisions & LoopsStop repeating.Stop repeating.
No
No steps
TextTrim recording.id and save it as recordingId.Trim recording.id and save it as recordingId.
Decisions & LoopsIf recordingId is empty or recordingId is nullIf recordingId is empty or recordingId is null
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: A recording came back with no id, so it was skipped..Show in the output: A recording came back with no id, so it was skipped..
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet marker to [ref: recordingId].Set marker to [ref: recordingId].
TextTrim recording.title and save it as recordingTitle.Trim recording.title and save it as recordingTitle.
Decisions & LoopsIf recordingTitle is empty or recordingTitle is nullIf recordingTitle is empty or recordingTitle is null
Yes
ValuesChange recordingTitle to Untitled recording.Change recordingTitle to Untitled recording.
No
No steps
ValuesSet filedAlready to false.Set filedAlready to false.
ValuesSet dedupeChecked to false.Set dedupeChecked to false.
ValuesSet existingPages to an empty list.Set existingPages to an empty list.
Decisions & LoopsIf a step below fails, save the error as searchErrorIf a step below fails, save the error as searchError
Try
ValuesChange existingPages to the pages from the Notion “Search pages” step.Change existingPages to the pages from the Notion “Search pages” step.
ValuesChange dedupeChecked to true.Change dedupeChecked to true.
On error
ValuesShow in the output: Could not check Notion for an existing page for recordingTitle, so it was left for the next run.Show in the output: Could not check Notion for an existing page for recordingTitle, so it was left for the next run.
Decisions & LoopsIf dedupeChecked is noIf dedupeChecked is no
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsFor each existingPage in existingPages:For each existingPage in existingPages:
Decisions & LoopsIf existingPage.title contains marker (ignoring case)If existingPage.title contains marker (ignoring case)
Yes
ValuesChange filedAlready to true.Change filedAlready to true.
Decisions & LoopsStop repeating.Stop repeating.
No
No steps
Decisions & LoopsIf filedAlready is yesIf filedAlready is yes
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet transcriptText to blank.Set transcriptText to blank.
ValuesSet recordingLink to blank.Set recordingLink to blank.
ValuesSet recordedOn to blank.Set recordedOn to blank.
Decisions & LoopsIf a step below fails, save the error as transcriptErrorIf a step below fails, save the error as transcriptError
Try
Fireflies.aiFireflies.aiGet transcript for meeting recordingId. Save it as transcript.Get transcript for meeting recordingId. Save it as transcript.
TextTrim transcript.text and save it as transcriptText.Trim transcript.text and save it as transcriptText.
TextTrim transcript.transcript_url and save it as recordingLink.Trim transcript.transcript_url and save it as recordingLink.
TextTrim transcript.date and save it as recordedOn.Trim transcript.date and save it as recordedOn.
On error
ValuesShow in the output: Could not read the transcript for recordingTitle, so nothing was filed for it.Show in the output: Could not read the transcript for recordingTitle, so nothing was filed for it.
Decisions & LoopsIf transcriptText is empty or transcriptText is nullIf transcriptText is empty or transcriptText is null
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: No transcript text came back for recordingTitle, so it was left for the next run.Show in the output: No transcript text came back for recordingTitle, so it was left for the next run.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet promptBody to Recording title: recordingTitleSet promptBody to Recording title: recordingTitle Transcript: .
ValuesSet summaryPrompt to You are summarising one recorded conversation so it can be found again later.Set summaryPrompt to You are summarising one recorded conversation so it can be found again later. Write three parts, in this order: 1. A two-sentence overview of what the conversation was about. 2. A line reading 'Key points:' followed by up to six short lines, one per point. 3. A line reading 'Follow-ups:' followed by the actions people agreed to, one per line, or the single line 'None stated.' Rules you must follow: - Use ONLY what the transcript below says. Do not add any name, figure, date or fact that does not appear in it. - Do not give advice, opinions or recommendations of your own. - Write plain text. Do not use markdown, asterisks or hash marks. promptBody@transcriptText truncated to 12000 characters using as the ellipsis.
ValuesSet summary to blank.Set summary to blank.
Decisions & LoopsIf a step below fails, save the error as summaryErrorIf a step below fails, save the error as summaryError
Try
TextTrim the response text from the OpenAI “Ask OpenAI” step and save it as summary.Trim the response text from the OpenAI “Ask OpenAI” step and save it as summary.
On error
ValuesShow in the output: Could not write a summary for recordingTitle, so nothing was filed for it.Show in the output: Could not write a summary for recordingTitle, so nothing was filed for it.
Decisions & LoopsIf summary is empty or summary is nullIf summary is empty or summary is null
Yes
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: No summary came back for recordingTitle, so it was left for the next run.Show in the output: No summary came back for recordingTitle, so it was left for the next run.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ValuesSet recordedLabel to recordedOn.Set recordedLabel to recordedOn.
Decisions & LoopsIf recordedLabel is empty or recordedLabel is nullIf recordedLabel is empty or recordedLabel is null
Yes
ValuesChange recordedLabel to not stated.Change recordedLabel to not stated.
No
No steps
ValuesSet linkLabel to recordingLink.Set linkLabel to recordingLink.
Decisions & LoopsIf linkLabel is empty or linkLabel is nullIf linkLabel is empty or linkLabel is null
Yes
ValuesChange linkLabel to not available.Change linkLabel to not available.
No
No steps
ValuesSet blocks to an empty list.Set blocks to an empty list.
ListsAdd a record of object, type, and paragraph to the end of blocks and save it as blocks.Add a record of object, type, and paragraph to the end of blocks and save it as blocks.
ListsAdd a record of object, type, and paragraph to the end of blocks and save it as blocks.Add a record of object, type, and paragraph to the end of blocks and save it as blocks.
ListsAdd a record of object, type, and paragraph to the end of blocks and save it as blocks.Add a record of object, type, and paragraph to the end of blocks and save it as blocks.
ListsAdd a record of object, type, and paragraph to the end of blocks and save it as blocks.Add a record of object, type, and paragraph to the end of blocks and save it as blocks.
ListsAdd a record of object, type, and paragraph to the end of blocks and save it as blocks.Add a record of object, type, and paragraph to the end of blocks and save it as blocks.
ValuesSet linesUsed to 0.Set linesUsed to 0.
ValuesSet transcriptTruncated to false.Set transcriptTruncated to false.
Decisions & LoopsFor each line in transcriptText split by a new line:For each line in transcriptText split by a new line:
Decisions & LoopsIf linesUsed is greater than or equal to lineBudgetIf linesUsed is greater than or equal to lineBudget
Yes
ValuesChange transcriptTruncated to true.Change transcriptTruncated to true.
Decisions & LoopsStop repeating.Stop repeating.
No
No steps
TextTrim line and save it as lineText.Trim line and save it as lineText.
Decisions & LoopsIf lineText is emptyIf lineText is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
ListsAdd a record of object, type, and paragraph to the end of blocks and save it as blocks.Add a record of object, type, and paragraph to the end of blocks and save it as blocks.
ValuesAdd 1 to linesUsed.Add 1 to linesUsed.
Decisions & LoopsIf transcriptTruncated is yesIf transcriptTruncated is yes
Yes
ListsAdd a record of object, type, and paragraph to the end of blocks and save it as blocks.Add a record of object, type, and paragraph to the end of blocks and save it as blocks.
No
No steps
ValuesSet pageTitle to recordingTitle truncated to 120 characters using as the ellipsis marker.Set pageTitle to recordingTitle truncated to 120 characters using as the ellipsis marker.
Decisions & LoopsIf a step below fails, save the error as notionErrorIf a step below fails, save the error as notionError
Try
NotionNotionCreate the page pageTitle in databaseId.Create the page pageTitle in databaseId.
ValuesAdd 1 to filed.Add 1 to filed.
On error
ValuesAdd 1 to skipped.Add 1 to skipped.
ValuesShow in the output: Notion would not accept the page for recordingTitle, so it was left for the next run.Show in the output: Notion would not accept the page for recordingTitle, so it was left for the next run.
ValuesShow in the output: Filed filed recording(s) in Notion. Left for the next run: skipped.Show in the output: Filed filed recording(s) in Notion. Left for the next run: skipped.