[Cotlet](https://cotlet.dev/index.md) · [Integrations](https://cotlet.dev/integrations.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Use cases](https://cotlet.dev/use-cases.md) · [Security](https://cotlet.dev/security.md) · [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md) · [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [Contact](https://cotlet.dev/contact.md) · [Pricing](https://cotlet.dev/pricing.md) · [Sign up](https://cotlet.dev/signup)

# Move Freshsales deals to Won or Lost with a reason

> Close out Freshsales deals past their expected close date: mark Won, or Lost with a Lost reason from your list, and keep the rest open for you.

Source: https://cotlet.dev/integrations/freshsales-api-mcp-server/close-won-and-lost-deals

At the end of the month the Negotiation column holds deals that were won or lost weeks ago, and each one still needs a drag to the right stage and, for a loss, a reason.

Cotlet does it in your own Freshsales account with list\_pipelines, list\_deals, update\_deal\_stage and add\_note, called by your AI agent, an n8n workflow or a script.

[Sign up free](https://cotlet.dev/app/signup?app=freshsales) [All Freshsales tools](https://cotlet.dev/integrations/freshsales-api-mcp-server.md)

Hosted · nothing to install or maintain

## Can Freshsales do this on its own?

Freshsales lets you drag one deal at a time to a stage, or update a field on selected deals in bulk (checked 22 Oct 2026). Workflows can update fields by a fixed rule. Nothing in the app reads your notes or your list of results and decides which deal is Won and which is Lost.

## How you do it in Freshsales today

1. In the Deals module, a rep opens Open Deals and chooses Pipeline from the dropdown, which shows the deals in a Kanban grouped by stage.
2. The rep drags a deal to another stage, or drops it on Won or Lost to close it.
3. A deal dropped on Lost brings up the Lost reason options, which an admin keeps under Admin Settings > Deals & Pipelines > Deals.
4. To change many deals, the rep switches to Table view, selects rows and uses the bulk action to update a field on all of them at once.
5. Every deal still needs a human to remember what happened to it, so old deals stay open and distort the forecast.

## How to move Freshsales deals to Won or Lost with a reason

Prompt

```
Go through my deals in the Negotiation stage with an expected close date before today. Mark Won the ones I list below, mark Lost with the reason Budget or No response where my notes say so, and leave the rest for me.
```

1. 01  
### Read the stage names first  
list\_pipelines returns each pipeline with its stages in order and the Lost reasons your admin set. The agent uses these exact names, so a reason you did not define, or a stage from another pipeline, stops the run before any deal changes.
2. 02  
### Find the candidates  
list\_deals runs with the stage and pipeline from your prompt, sorted by expected\_close, and follows next\_cursor. Deals with a close date in the future are left alone.
3. 03  
### Decide each deal from your rule  
You give the outcomes in the prompt, as a list of won deal names or as a rule on the notes, such as "no reply since September means Lost, reason No response". Anything that fits neither rule stays open and goes on your list.
4. 04  
### Change the stage  
update\_deal\_stage moves each deal to Won, or to Lost with lost\_reason. It can start your Workflows, which may email contacts or the owner, so each call waits for your OK by default.
5. 05  
### Leave the trail  
add\_note writes one line on the deal with the date and the reason for the change, so the next person who opens it sees why it closed.

### What you get back

Example data

```
Deals in Negotiation past their expected close: 9
Marked Won 3, e.g. Harbor Dental onboarding
Marked Lost 4: No response 3, Budget 1
Left for you 2: no result in my notes, no new activity
```

### Other ways to ask

- Every Friday, mark Lost any deal in New with no activity since the first of the month, reason No response.
- Mark Won every deal in my list below and add the invoice number from my message as a note.
- Show me deals past their expected close date grouped by stage, and change nothing.
- Move the deals I name from Follow-up to Demo and leave Won and Lost alone.

## What Freshsales allows, and what to know first

- Won and Lost are default stages in every Freshsales pipeline, and a pipeline needs at least 3 stages including both.
- Freshsales fills the closed date when a deal moves to Won, and asks for a Lost reason when it moves to Lost; these two defaults cannot be changed or turned off.
- An admin can mark the Lost reason as required, and the options are kept under Admin Settings > Deals & Pipelines > Deals.
- Several pipelines per account need the Pro plan, and an account on Growth has one.

update\_deal\_stage and add\_note ask for your OK by default. To run it weekly without you, switch confirmation off for those tools in your dashboard.

Sources: [Freshsales Help: How to view my open deals](https://crmsupport.freshworks.com/support/solutions/articles/50000002387-how-to-view-my-open-deals-) · [Freshsales Help: How to customize deal stages](https://crmsupport.freshworks.com/support/solutions/articles/50000002392-how-to-customize-deal-stages-) · [Freshsales Help: How to configure field dependency](https://crmsupport.freshworks.com/support/solutions/articles/50000002573-how-to-configure-field-dependency-in-freshworks-crm-) · [Freshsales Help: Features you lose on downgrade](https://crmsupport.freshworks.com/support/solutions/articles/50000002466-what-are-the-features-you-tend-to-lose-on-downgrade-)

## Call update\_deal\_stage from a script

curl

```
curl -X PATCH https://cotlet.dev/api/v1/freshsales/deals/7000377/stage \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"stage":"Lost","lost_reason":"No response"}'
```

Example response

```
{
"deal_id": 7000377,
"name": "Onboarding package",
"stage": "Lost",
"previous_stage": "New",
"lost_reason": "No response"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the call is freshsales\_write → update\_deal\_stage. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/freshsales-api-mcp-server.md#automations)

## Freshsales tools this automation uses

__Cotlet Freshsales tools used to move Freshsales deals to Won or Lost with a reason__
| Tool | Parameters |
| ------------------- | ------------------------------------------------------ |
| list\_pipelines | none |
| list\_deals | view, pipeline, stage, owner, sort, sort\_type, cursor |
| update\_deal\_stage | deal\_id, stage, lost\_reason |
| add\_note | record\_type, record\_id, body |

[All 11 Freshsales tools with descriptions](https://cotlet.dev/integrations/freshsales-api-mcp-server.md#tools)

## Frequently asked questions

### Is it safe to connect Freshsales to Cotlet?

Yes. You sign in to Freshsales yourself, in your own Cloud Browser in the EU, and we never save your password. Your agents only get Freshsales once you enable it, every background request is listed, and the browser profile is stored encrypted with AES-256-GCM, the cipher 1Password uses for its vaults. The AI model never sees a login, posts and messages wait for your OK, and Disable for agents cuts access in one click. Independent scanners grade cotlet.dev A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory; live results are on https://cotlet.dev/security.

## More Freshsales automations

- [Follow up on stale Freshsales deals](https://cotlet.dev/integrations/freshsales-api-mcp-server/follow-up-stale-deals.md)
- [Log call notes and the next step in Freshsales](https://cotlet.dev/integrations/freshsales-api-mcp-server/log-call-notes-and-next-steps.md)
- [Freshsales API and MCP server: every tool](https://cotlet.dev/integrations/freshsales-api-mcp-server.md)
- [All use cases](https://cotlet.dev/use-cases.md)

## Give your agent access to Freshsales.

Free 7-day trial with 2,000 credits, no card needed. Cotlet is independent and not affiliated with Freshsales.

[Sign up free](https://cotlet.dev/app/signup?app=freshsales)

---

Give your AI agents your signed-in browser.

**Product:** [Integrations](https://cotlet.dev/integrations.md) · [Use cases](https://cotlet.dev/use-cases.md) · [How it works](https://cotlet.dev/how-it-works.md) · [Pricing](https://cotlet.dev/pricing.md) · [Security](https://cotlet.dev/security.md)

**Resources:** [Blog](https://cotlet.dev/blog.md) · [API docs](https://cotlet.dev/docs.md) · [Help center](https://cotlet.dev/help.md) · [Changelog](https://cotlet.dev/changelog.md) · [GitHub](https://github.com/cotletdev/cotlet)

**Solutions:** [For developers](https://cotlet.dev/for-developers.md) · [For automation agencies](https://cotlet.dev/for-agencies.md)

**Company:** [About](https://cotlet.dev/about.md) · [AI info: company facts](https://cotlet.dev/ai-info.md) · [Contact](https://cotlet.dev/contact.md)

**Legal:** [Terms of service](https://cotlet.dev/terms) · [Privacy policy](https://cotlet.dev/privacy) · [Refund policy](https://cotlet.dev/refunds) · [Acceptable use](https://cotlet.dev/acceptable-use) · [Cookie policy](https://cotlet.dev/cookies) · [DPA](https://cotlet.dev/dpa) · [Subprocessors](https://cotlet.dev/subprocessors)

**Elsewhere:** [Status page](https://status.cotlet.dev) · [Cotlet on GitHub](https://github.com/cotletdev) · [Cotlet on X](https://x.com/cotletdev) · [Cotlet on LinkedIn](https://www.linkedin.com/company/cotletdev) · [Cotlet on Product Hunt](https://www.producthunt.com/products/cotlet) · [Cotlet on Crunchbase](https://www.crunchbase.com/organization/cotlet) · [Cotlet on SaaSHub](https://www.saashub.com/cotlet)

Cotlet is an independent service. It is not affiliated with, endorsed by or sponsored by any of the products listed on this site. Product names are trademarks of their respective owners.

## For AI agents: sign your user up

Is your user asking you to sign them up for Cotlet? You can do it for them, no account or key needed.

1. Read the fields and their allowed values: GET https://cotlet.dev/api/v1/access-requests
2. Ask the user for each value: email, apps, what you will do with them. If they leave the password to you, generate a strong one and show it to them.
3. Show the user what you will send, then POST it as JSON to https://cotlet.dev/api/v1/access-requests.

One call creates the account and sends the access request; we email the user when access is granted.
