Kommo + Asana: template-based project on deal close

Kommo + Asana: template-based project on deal close

A manager closes a deal in Kommo — and the manual work begins: create a project in Asana, add sections, assign tasks to team members, copy the client name and contract amount. This “sales -> delivery” handoff is a bottleneck in most companies. The Kommo and Asana integration automates it: Deal Won -> template-based project with tasks, assignees, and client data.

Why the “sales -> delivery” handoff breaks manually

Companies where sales and execution are separate teams face a common problem: client information gets lost in the handoff. A manager closes a deal — the delivery team learns about the new project via email or a conversation, not from a system. Contract details, special requirements, budget — all have to be requested again.

Automatically creating an Asana project when a deal is closed solves this: all information from Kommo is passed into the project immediately.

What gets transferred from Kommo to Asana

When creating the project: — Project name = deal name (or a template: "[Company] - Onboarding") — Description = client data + deal context (manager, amount, special terms) — Start date and deadline from Kommo custom fields — Asana custom fields: crm_deal_id, client_email, contract_value

Tasks from the template: Asana allows you to duplicate an existing project as a template. The integration creates a project from the template (duplicateProject) and then updates the variable fields.

Assigning team members: Responsible Kommo manager -> assignee of the first task. Other deal participants -> followers in the Asana project.

Integration architecture

Kommo: deal moved to Won stage (status_id = 142)
  ↓ Webhook -> Backend
  1. GET /api/v4/leads/{id} - deal details
  2. GET /api/v4/contacts?lead_id={id} - client contact
  3. Asana API: duplicateProject(template_project_id)
     -> Get new project_id
  4. Asana API: updateProject(project_id) - insert name, description, dates
  5. Asana API: updateCustomField - crm_deal_id, client_email
  6. Asana API: update assignee of first task based on Kommo manager
  7. Kommo: create note on deal "Asana project created: [link]"

Asana API: key methods

Asana API authenticates via Personal Access Token or OAuth 2.0.

Duplicating a project from a template:

import asana

client = asana.Client.access_token(ASANA_TOKEN)

# Duplicate the template project
result = client.projects.duplicate_project(
    template_project_id,
    {
        'name': f'{client_name} - Onboarding',
        'team': ASANA_TEAM_ID,
        'schedule_dates': {
            'should_skip_weekends': True,
            'due_on': deadline_date  # ISO 8601
        }
    }
)
new_project_id = result['new_project']['gid']

Updating the project with data from Kommo:

client.projects.update(
    new_project_id,
    {
        'notes': (
            f'Client: {contact_name}\n'
            f'Email: {contact_email}\n'
            f'Contract value: ${deal_price:,}\n'
            f'Manager: {manager_name}\n'
            f'Special terms: {custom_field_notes}'
        )
    }
)

Assigning the first task:

# Get tasks of the new project
tasks = list(client.tasks.find_by_project(new_project_id))
if tasks:
    client.tasks.update(
        tasks[0]['gid'],
        {'assignee': asana_user_id}  # Mapping Kommo user -> Asana user GID
    )

Kommo -> Asana user mapping

Each Kommo manager corresponds to a user in Asana. The mapping is stored on the backend:

USER_MAPPING = {
    # kommo_user_id: asana_user_gid
    "101": "1234567890",  # Ivan
    "102": "0987654321",  # Maria
    "103": "1122334455",  # Alexey
}

def get_asana_user(kommo_responsible_id: str) -> str | None:
    return USER_MAPPING.get(str(kommo_responsible_id))

If a manager is not found in the mapping, the task is created without an assignee and goes into the team queue.

Reverse flow: Asana -> Kommo

Asana supports webhooks on task events. When a key task is completed, Kommo receives an update:

Asana: task completed (task_id = "Sign acceptance certificate")
  ↓ Webhook -> Backend
  1. Find deal_id by custom_field crm_deal_id
  2. Kommo: create Note "Certificate signed [date]"
  3. Kommo: move deal to "Completed" stage

This closes the loop: sale in Kommo -> project in Asana -> completion in Asana -> update in Kommo.

Real case

IT outsourcing company (10–15 new projects per month, team of 12):

  • Before integration: the PM received information about a new client from the sales manager via Telegram. Created the project in Asana manually. Some data was lost or distorted in the handoff.
  • After: Won in Kommo -> project in Asana in 5 seconds. The template contains 22 tasks for standard onboarding. The PM receives an Asana notification and opens a ready project with client data.
  • Result: average time from Won to start of work was reduced from 2 days to 4 hours. Data transfer errors — zero.

We implemented a similar scenario for Kommo and Notion and Kommo and ClickUp integrations — the “Won -> project” pattern is universal, only the destination API changes.

Who should use this

The Kommo + Asana integration makes sense if: — Sales (Kommo) and execution/delivery (Asana) are separate teams — Each new deal requires creating a standardized project — Traceability matters: the sales manager needs to see execution status — The team uses Asana as their primary project management tool

Frequently asked questions

Are Asana Templates (project templates) a paid feature?

Asana Project Templates are available on Premium and higher plans ($10.99+/user/month). On the free plan, project duplication via API also works — there is just no built-in UI template editor. For the integration this is not critical: duplication via duplicateProject works on any plan.

How do you update Asana tasks when deal data changes in Kommo?

Kommo generates a webhook when a deal is updated (lead_update). If a critical field changed (e.g. a deadline shifted or the manager changed), Asana is updated via crm_deal_id stored in the project’s custom field.

What if the project template changes frequently?

The integration logic is tied to template_project_id. When the template is updated in Asana, all new projects are automatically created with the updated structure. Existing projects are not affected.

Can you create different Asana projects for different Kommo pipelines?

Yes. The routing is simple: pipeline_id from the Kommo webhook determines which template to use:

TEMPLATE_MAP = {
    PIPELINE_SMB: ASANA_TEMPLATE_SMB,
    PIPELINE_ENTERPRISE: ASANA_TEMPLATE_ENTERPRISE,
}

Summary

  • Kommo + Asana: Won -> template-based project with tasks, client data, and assignees in seconds
  • Asana API duplicateProject copies the template with the full structure of sections and tasks
  • Kommo -> Asana user mapping is stored on the backend
  • Reverse flow: task completion in Asana -> Note and stage change in Kommo
  • Typical development timeline — 2–3 weeks

If you use Kommo and Asana and want to automate data transfer when closing a deal — describe the structure of your template project. Exceltic.dev will analyze the field mapping and set up the integration.

More articles

All →