FRESHSALES / DELETE

Delete the contacts a view matches

Freshsales lets you delete a view but not the contacts inside it. This does the other half. Pick a custom view, take a snapshot, keep the backup, then permanently delete exactly those contacts.

⚷ your API key is used in-memory for this run and never reaches our servers · save it in Settings to skip re-entering

01 Connect

Needs an API key with delete rights. Read-only keys will fail at the last step, not the first.

02 Pick a view

Only views you or a colleague created. Built-in views are locked.

03 Take the backup

Required. The delete is permanent, so this CSV is the only copy you will have.

Not yet downloaded.

04 Delete

This cannot be undone. Contacts are permanently deleted, not moved to the recycle bin. Only the 0 contacts in your snapshot are touched, even if the view has changed since. The view itself will remain, empty, because Freshsales has no API for deleting a view.

What this actually does

Freshsales gives you two halves of a job and never the whole thing. You can delete a view, if you happen to be the person who created it, by opening it and picking Delete from the three-dot menu next to its name. What you cannot do is delete the contacts that view was matching. There is no bulk action for it, no API endpoint for it, and no setting that turns it on. People end up ticking checkboxes twenty-five at a time, or exporting to a spreadsheet and re-importing a deletion list, or opening a support ticket and waiting.

This runs against your own Freshsales data, in your browser session, using the official API. It pages the view once, shows you the number, hands you a CSV backup, and then permanently deletes exactly the contacts in that snapshot. Nothing is written until you have typed the view's name and taken the backup.

Why built-in views are locked

A view is not a list. A list is a fixed set of contacts that someone put there on purpose. A view is a saved search, re-run every time anything looks at it, and its contents change as your data changes. That difference is the whole reason this tool is careful.

The view called All Contacts has the ID 3 on every Freshsales account in the world. If built-in views were selectable here, one tired click on the default option would permanently delete an entire CRM. So they are blocked in the dropdown, and blocked again on the server on every single request, because a disabled option in a browser is decoration rather than a safeguard. If you need to purge something broad, build a custom view with the exact filter you want and purge that instead. Being forced to describe what you are deleting is the point.

The snapshot, and why it matters

Because a view is a live query, the set it matches can move between the moment you read a number and the moment you press the button. A colleague edits a record, an automation fires, a field updates, and suddenly the view means something slightly different. A tool that re-ran the query at delete time would quietly delete a set you had never seen.

So this one does not. It collects the matching contact IDs once, before you confirm, and the delete step works only from that frozen list. If the view widens in the meantime, the extra records are not touched. You delete the set you were shown, or you delete nothing.

Before you run it

The deletion is permanent. Contacts are removed outright rather than dropped into the recycle bin, because a purge that fills the recycle bin has not solved anyone's problem. That is why the backup CSV is a required step rather than a suggestion, and why the confirmation asks for the view's name instead of a generic word. A phrase you type on every destructive tool becomes muscle memory; a name you have to read does not.

Your API key needs delete rights. A read-only key will get you all the way to the last step and then fail. And when the run finishes, the view itself will still be there, empty, because no API exists for removing one. Delete it from the Freshsales UI if you want it gone: open the view, click the three dots beside its name, choose Delete. Only its creator can.

What this actually does

Freshsales lets you delete a view but not the contacts inside it. This does the other half: snapshot a custom view, keep a backup, then permanently delete exactly those contacts. Built-in views are blocked, and the snapshot means a view that shifts mid-run cannot widen the blast radius.

It runs on your own Freshsales data, in your browser session, against Freshsales's official API. There is no middle layer holding your records and there is no migration to anywhere. You run it, you get the result, you carry on with your day.

Where the file goes next

It is a CSV, which is the point. Freshsales will happily show you the numbers on a screen you cannot do anything with. This gives you the file, and the file goes wherever you need it.

The column names stay the same run to run, so if you build a Power BI report or a Sheets formula on top of it, re-running next month will not break what you built.

What it will not do

It will not touch anything you did not ask it to. It does not store your API key, it does not keep a copy of your data, and where an action cannot be reversed you get told that before you press the button, not after.

Questions people actually ask

Does this store my Freshsales API key?

No. The key is held in memory for the length of the run and is gone when the tab closes. It is never written to our database and never appears in a log. You can revoke it in Freshsales the moment you are done and nothing here breaks.

What can I do with the file afterwards?

It is a plain CSV, so anything that reads a CSV will read it. Open it in Excel or Google Sheets, pull it into Power BI or Looker Studio, or load it into a warehouse table. The headers are clean and they do not change between runs, so a scheduled refresh will not break on you.

How big a job can it handle?

It streams the results as they arrive rather than holding everything in memory, and it respects Freshsales's rate limits instead of hammering the API. Large accounts take longer, but they finish.

Can I see what it will do before it does it?

Yes, and you should. Every run starts with a preview of the exact records involved, and a CSV backup you can keep. Nothing is written until you say so.

Is it reversible?

Read the tool's own note above, because it differs by action. Where a change cannot be undone we say so plainly on the button itself rather than in the small print.

Why is this not just a feature in Freshsales?

That is the whole question, and we do not have a good answer either. It is a gap that has been open for years, it is on the forums, and it never gets shipped. So we shipped it.

Related: delete, view, filter, cleanup, bulk, contacts, destructive, purge, segment.