Freshsales logo Freshsales automation · runs weekly

Move Freshsales deals to Won or Lost with a reason

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.

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 · Freshsales Help: How to customize deal stages · Freshsales Help: How to configure field dependency · Freshsales Help: Features you 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

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

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.

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.