---
ref: tool:hubspot/upsert-contacts
name: Create or update contacts
company: company:hubspot
workflows: [workflow:executive-job-change, workflow:webinar-follow-up]
access: [mcp, api]
tags: [capability:manage-crm, category:crm, has:api, has:mcp]
docs: https://developers.hubspot.com/docs/api-reference/latest/crm/objects/contacts/batch/upsert-contacts
updated: 2026-09-27
---

# Create or update contacts

Creates contacts or updates the ones that already exist with new property values.

The API takes a batch and matches each contact on `idProperty`: `email` or a custom unique property. On the MCP server, `manage_crm_objects` shows the proposed changes and waits for the user to confirm before it writes.

## Set up

Use the first option your agent supports.

### MCP (official, remote)

Add this server to your agent's MCP settings, then sign in when asked.

```json
{ "mcpServers": { "hubspot": { "url": "https://mcp.hubspot.com" } } }
```

Call the MCP tool `manage_crm_objects`.

Server URL: https://mcp.hubspot.com

### API (official)

- Base URL: https://api.hubapi.com
- Endpoint: `POST /crm/objects/2026-09/contacts/batch/upsert`
- Auth: send the header `Authorization: Bearer $HUBSPOT_API_KEY`
- Docs: https://developers.hubspot.com/docs/api-reference/latest/overview

Before doing anything else, make one read-only call to confirm access.

## Rules

- Ask the user before anything that sends messages, costs money, or changes data.
- Never print API keys.
