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:
| Setting | Value |
|---|---|
| Method | POST |
| URL | https://api.cleanvoice.ai/v2/edits |
| Authentication | None (we'll add the key manually) |
| Send Headers | On |
| Header Name | X-API-Key |
| Header Value | Your Cleanvoice API key |
| Send Body | On |
| Body Content Type | JSON |
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:
| Setting | Value |
|---|---|
| Method | GET |
| URL | https://api.cleanvoice.ai/v2/edits/{{ $('HTTP Request').item.json.id }} |
| Send Headers | On |
| Header Name | X-API-Key |
| Header Value | Your API key |
Then add an IF node:
- Condition:
{{ $json.status }}equalsSUCCESS - 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:
- In the HTTP Request node, switch Authentication to Header Auth
- Create a new credential with name
X-API-Keyand your key as the value - n8n will store it encrypted and reuse it across workflows
Tips for n8n workflows
- Use public URLs — passing a file URL in
filesis 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/falsein the config to turn features on or off. See Edit Settings for all options.
Available processing options
| Option | What it does |
|---|---|
fillers | Removes "um", "uh", "like" etc. |
long_silences | Trims long pauses |
mouth_sounds | Removes clicks and lip smacks |
breath | Removes audible breathing |
stutters | Removes repeated word fragments |
remove_noise | Reduces background noise |
studio_sound | Aggressive voice enhancement |
normalize | Balances loudness levels |
transcription | Generates a transcript |
summarize | Generates chapter markers and summaries |