CRM

Save many contacts

crm_save_contacts · Changes data · Markdown

Creates or updates up to 100 contacts in one call, each like crm_save_contact; you pay only for the ones saved.

$0.01 per record saved

From your agent’s balance. A call that fails costs nothing.

An example

Add the two chefs we met at the trade fair, Mark Jansen from Restaurant Kranich and Ines Vogel, and tag them trade fair 2026.

Your agent callscrm_save_contacts$0.01 per record saved

The example business is Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff. The reply is the one the tool really gives.

With these arguments
{
  "contacts": [
    {
      "email": "mark.jansen@restaurant-kranich.example",
      "name": "Mark Jansen",
      "company": "Restaurant Kranich",
      "tags": [
        "trade-fair-2026"
      ]
    },
    {
      "email": "ines.vogel@example.com",
      "name": "Ines Vogel",
      "tags": [
        "trade-fair-2026"
      ]
    }
  ]
}
What comes back
{
  "saved": 2,
  "failed": 0,
  "results": [
    {
      "index": 0,
      "id": 4108,
      "email": "mark.jansen@restaurant-kranich.example",
      "created": true
    },
    {
      "index": 1,
      "id": 4109,
      "email": "ines.vogel@example.com",
      "created": true
    }
  ]
}

Use it when

Several people arrive at once: a list from an event, a sign-up sheet, a spreadsheet the owner pasted.

  • For a whole CSV file or the records from another CRM, use import_csv.

What it does

Create or update up to 100 contacts in one call, each exactly like crm_save_contact (matched by email; without an email a new contact is made). Each one succeeds or fails on its own; the reply lists which, and you pay only for the ones saved.

What comes back

How many were saved and how many failed, and per contact in the order sent: its index and either its id, email and created, or the error. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
contactsRequiredarray of objects1 to 100 items.
contacts[].emailstring (email)Up to 254 characters.
contacts[].namestringUp to 255 characters.
contacts[].titlestringUp to 255 characters.
contacts[].companystringCompany name; also links or creates the company record. Up to 255 characters.
contacts[].phonestringUp to 60 characters.
contacts[].locationstringUp to 255 characters.
contacts[].timezonestringUp to 60 characters.
contacts[].languagestringUp to 60 characters.
contacts[].lifecycle_stagestringOne of: lead,trial,onboarding,customer,at_risk,churned,advocate.
contacts[].notesstringUp to 20,000 characters.
contacts[].custom_fieldsobjectCustom fields as {"key": value}, merged into the existing ones; null clears one. Keys defined with crm_define_field are checked against their type.
contacts[].tagsarray of stringsTags to add, e.g. ["vip"]; a new tag is made on first use. crm_tag_records removes tags. Up to 20 items.

The call

Over MCP, call crm_save_contacts on https://api.conecto.chat/mcp/crm. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/crm_save_contacts \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contacts":[{"email":"mark.jansen@restaurant-kranich.example","name":"Mark Jansen","company":"Restaurant Kranich","tags":["trade-fair-2026"]},{"email":"ines.vogel@example.com","name":"Ines Vogel","tags":["trade-fair-2026"]}]}'

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md