CleanvoiceDocs
Guides

n8n

Automate audio cleaning with Cleanvoice inside n8n — self-hostable and free.

n8n is a workflow automation tool you can use for free (cloud or self-hosted). This guide walks you through connecting Cleanvoice to n8n so you can clean audio files automatically as part of any workflow — no coding needed.

What you'll build: A workflow that takes a new audio file (from Google Drive, Dropbox, or anywhere), sends it to Cleanvoice, waits for it to finish, and gives you back the cleaned file URL.


Before you start

You'll need:

  • A Cleanvoice account — get an API key
  • An n8n account or a self-hosted n8n instance
  • A public audio file URL (from Google Drive, Dropbox, S3, or anywhere)

Getting a public link from Dropbox: Right-click your file → Share → Copy link. Change ?dl=0 to ?dl=1 at the end.

Getting a public link from Google Drive: Share the file as "Anyone with the link". Then use: https://drive.google.com/uc?export=download&id=YOUR_FILE_ID

Want a ready-made template? Search for "Cleanvoice" in the n8n template library for a pre-built workflow you can import directly.


Building the workflow

Set up your trigger

In n8n, create a new workflow and add a trigger node. Choose whatever fits your use case:

  • Google Drive Trigger — fires when a new file is added to a folder
  • Dropbox Trigger — fires when a new file arrives
  • Webhook — lets you trigger the workflow manually or from another app
  • Schedule Trigger — runs at a set time (e.g. every morning)

Connect your trigger, then move on to the next step.

Submit your audio to Cleanvoice

Add an HTTP Request node after your trigger.

Configure it:

SettingValue
MethodPOST
URLhttps://api.cleanvoice.ai/v2/edits
AuthenticationNone (we'll add the key manually)
Send HeadersOn
Header NameX-API-Key
Header ValueYour Cleanvoice API key
Send BodyOn
Body Content TypeJSON

In the JSON Body field, enter:

{
  "input": {
    "files": ["{{ $json.fileUrl }}"],
    "config": {
      "fillers": { "enabled": true },
      "long_silences": { "enabled": true },
      "mouth_sounds": { "enabled": true },
      "normalize": { "enabled": true }
    }
  }
}

Replace {{ $json.fileUrl }} with the expression that maps to your audio URL from the trigger node.

Click Execute Node to test it. You should see a response:

{ "id": "edit_abc123", "status": "PENDING" }

Wait for Cleanvoice to finish

Processing takes time — a typical podcast episode takes 3–10 minutes. Add a Wait node set to 60 seconds to give Cleanvoice time to start.

Poll for the result

Add another HTTP Request node to check the status:

SettingValue
MethodGET
URLhttps://api.cleanvoice.ai/v2/edits/{{ $('HTTP Request').item.json.id }}
Send HeadersOn
Header NameX-API-Key
Header ValueYour API key

Then add an IF node:

  • Condition: {{ $json.status }} equals SUCCESS
  • True path → continue to use the result
  • False path → add another Wait node (10 seconds) and loop back to the HTTP Request node

To create the loop, connect the False branch of the IF node back to the polling HTTP Request node. n8n supports this natively.

Use the cleaned audio

When status is SUCCESS, the response includes a URL to your cleaned file at result.url.

From here you can:

  • Google Drive → Upload — save the cleaned file back to a folder
  • Dropbox → Upload — upload to Dropbox
  • Send an Email — notify yourself with the download link
  • HTTP Request → GET — download the file to process further

Map {{ $json.result.url }} to use the cleaned audio URL in any subsequent node.


Storing your API key securely

Instead of pasting your API key directly into nodes, use n8n Credentials:

  1. In the HTTP Request node, switch Authentication to Header Auth
  2. Create a new credential with name X-API-Key and your key as the value
  3. n8n will store it encrypted and reuse it across workflows

Tips for n8n workflows

  • Use public URLs — passing a file URL in files is the simplest approach. No upload nodes needed.
  • Test with short clips — a 1–2 minute clip processes in seconds, making testing much faster.
  • Add error handling — add an IF node on the FAILURE status to send yourself a notification if something goes wrong.
  • Adjust what gets cleaned — change true/false in the config to turn features on or off. See Edit Settings for all options.

Available processing options

OptionWhat it does
fillersRemoves "um", "uh", "like" etc.
long_silencesTrims long pauses
mouth_soundsRemoves clicks and lip smacks
breathRemoves audible breathing
stuttersRemoves repeated word fragments
remove_noiseReduces background noise
studio_soundAggressive voice enhancement
normalizeBalances loudness levels
transcriptionGenerates a transcript
summarizeGenerates chapter markers and summaries