Turn a voice-note transcript into tasks with n8n

Khoa Truong Nguyen AnhSources checked Updated

A voice note is easy to capture and easy to forget. This workflow turns its reviewed transcript into structured task candidates you can inspect in n8n. It preserves each source line so a short task title does not lose its context.

The input is text, not an audio file. Transcribe the note with your chosen tool, read it back, and put one intended task on each line before running the workflow. The voice-input data-flow guide helps you check where that earlier transcription step happens.

What the downloadable workflow does

The workflow has three nodes:

Manual start
     ↓
Voice note transcript
     ↓
Parse tasks

Manual start runs the example when you choose. Voice note transcript is an Edit Fields node containing note_id and transcript. Parse tasks is a JavaScript Code node that returns one item per non-empty line.

Each item contains a title, source note ID, original line number, original text and a task key. owner and due_date are null; status is needs_review. The workflow has no external destination or credentials, so running it produces candidates in the execution output rather than creating tickets or sending messages.

This is a deterministic parser. It does not decide whether a sentence is an action, extract a date from prose or summarize a long meeting. A line containing commentary becomes a candidate too, which is why you review the transcript and output.

Import the example into n8n

Download the workflow JSON. In the n8n editor, use the menu's Import from File option documented in the import and export guide. Inspect the three nodes after import.

The download omits an instance-specific workflow ID and contains no credential references. Import it as a new workflow, rather than replacing a workflow you already use. There is no schedule, webhook or publication step needed for the manual example.

Open Voice note transcript and start with the supplied values. Its example text is also available as a plain text file:

1. Review the retry patch before merging.
2. Run the regression tests for HTTP 401.
3. Draft the release note after verification.

Run the workflow manually and inspect Parse tasks. You should see three items. These sentences are sample input, not a transcript recorded for this article and not evidence that anyone reviewed or tested a real patch.

Read the output before using it

For note_id set to demo-note-v1, the first sample item is:

{
  "task_key": "demo-note-v1:1",
  "title": "Review the retry patch before merging.",
  "owner": null,
  "due_date": null,
  "status": "needs_review",
  "source_note_id": "demo-note-v1",
  "source_line": 1,
  "source_text": "1. Review the retry patch before merging."
}

The title drops a leading bullet or numbered-list marker, while source_text preserves the original line. Blank lines are skipped, but source line numbers retain their original positions. A task on line three remains line three even if line two is blank.

Check that every title is an action you intended and that conditions such as “before merging” survived. Assign an owner or deadline only after confirming them. If a note says “tomorrow,” this parser leaves that phrase in the title; it does not guess a calendar date or timezone.

Prepare a note so the parser does not guess

Use a stable note identifier containing 1–64 ASCII letters, digits, underscores or hyphens, starting with a letter or digit. Include a revision when you change the note's contents, for example release-check-v2.

One non-empty line becomes one task candidate. If your voice tool produces one paragraph with five actions, split it into the five intended lines before running. Keep negations and qualifications attached to their tasks. Do not split automatically at every period: filenames, abbreviations and decimal numbers can contain periods too.

The Code node accepts at most 50 non-empty lines per note and a transcript length of 10,000 JavaScript string units. Each resulting title must be non-empty and at most 500 units. These are limits chosen for this sample, not n8n platform limits. JavaScript counts some characters, including many emoji, as two units.

Invalid input stops the node with an error rather than emitting a partially validated batch. Duplicate note IDs in one run are rejected. An ordinary sentence that is not a task is still syntactically valid, so validation does not replace human review.

Keep provenance and handle repeated runs

The task key combines the note ID and source line. Re-running the same input produces the same keys, which can help a destination identify existing records. This sample does not store previous runs or perform deduplication by itself.

When you add a destination later, define whether it creates, updates or skips a key. If you edit a note without changing its ID, the same line number may now describe a different task. Using a revision in the ID makes that change explicit, but deciding whether the old task should be replaced still belongs to your workflow.

The Code node documentation explains its run modes and output data. This example uses Run Once for All Items, reads $input.all() and attaches pairedItem references so multiple output tasks remain linked to their input notes.

What was actually tested

The workflow's three-node execution was tested in an isolated n8n 2.38.7 installation using Node.js 24.21.0. The sample produced three items with the expected titles, null owners and dates, and needs_review status. The CLI import copy received a temporary workflow ID because that importer required one; the node definitions and parser match the public download.

Separate parser checks covered Vietnamese text, CRLF newlines, blank-line provenance, repeated keys, multiple notes and invalid inputs. The n8n Server CLI documentation describes executing a saved workflow by ID; that is the integration path used here. Browser import and n8n Cloud execution were not part of this test.

No audio recognizer, external task manager or paid model API was called. Hosting costs and any transcription service you choose remain separate. Execution history may retain the supplied text according to your n8n configuration, even though the workflow has no external processing node.

For the next useful step, run one reviewed note and inspect every candidate before connecting a destination. If the note is about a code change, the Cursor prompt workflow helps structure the request; the commit and PR guide covers documenting the work after it is done.

If you are choosing the capture step as well, the developer voice-tool guide separates dictation requirements from this transcript-to-task workflow.

Some links may earn a commission if you subscribe, at no extra cost to you. Commercial relationships do not determine the recommendation; we state the constraints and alternatives.