> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitforms.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Build and migrate your CRM

> Have an AI agent set up your pipelines, custom fields and views, then move your records over from HubSpot, Salesforce, Pipedrive or a spreadsheet.

Setting up a CRM used to take days in settings screens, then weeks of mapping CSV columns, re-running imports and cleaning up what broke. With Orbit's MCP server you tell an agent how you sell and what you're moving from. It builds the structure, imports the records, links them together, and tells you what it couldn't map.

**1. Connect an agent**

Connect Claude, ChatGPT, Claude Code or Cursor to Orbit ([how](https://docs.orbitforms.ai/mcp/overview.md)). On the consent screen, approve the CRM permissions: `crm:write`, `contacts:write`, `companies:write`, `deals:write`, `tasks:write` and `notes:write`.

**2. Describe how you sell**

Explain your sales process in plain words. The agent turns it into pipelines, stages, custom fields, settings and saved views.

**3. Bring your data**

Attach your old CRM's export, or connect the old CRM's own MCP server alongside Orbit. The agent maps the fields and imports companies, contacts, deals, notes and tasks.

**4. Check and adjust**

Ask the agent to reconcile counts against the source and list anything it skipped. Change anything later the same way.

## Set up the structure

Start with how your team actually sells:

> "We sell annual contracts. SDRs book demos, then AEs run discovery, send a proposal and negotiate. Set up a New business pipeline for that, plus a Renewals pipeline. On deals we track contract value, seats, renewal date and lead source. Require a lost reason, and flag deals that sit in a stage for more than 14 days."

What the agent does:

| Step | Tools |
| - | - |
| Reads your current setup so it doesn't duplicate anything | `get_crm_schema` |
| Creates pipelines and stages, with win probabilities and won / lost stages | `create_pipeline`, `create_pipeline_stage`, `reorder_pipeline_stages` |
| Adds custom fields on contacts, companies and deals (text, number, date, URL, yes/no, and select on companies and deals) | `create_crm_field` |
| Turns on your rules: lost reasons, stale-deal threshold, default currency, task defaults, linking contacts to companies by email domain | `update_crm_settings` |
| Saves views of the Contacts table for each team or workflow | `create_contact_view` |

> [!TIP]
>
> Give each custom field a description. Agents read field descriptions through `get_crm_schema` before they write data, so write them the way you would explain the field to a new rep.

## Migrate your records

Two ways to give the agent your data:

* **An export file.** Export from HubSpot, Salesforce, Pipedrive, Close, Attio or any spreadsheet as CSV and attach it to the conversation. Claude Code and Cursor can also read it straight from disk.
* **Your old CRM's own connector.** If your old CRM has an MCP server, connect it next to Orbit and ask the agent to move records across directly.

Then ask it to plan before it writes:

> "Here are our HubSpot exports: companies, contacts, deals and notes. Map the columns to Orbit fields and create any custom fields you need. Put each deal in the matching stage of the New business pipeline. Show me the mapping before you import anything."

The agent imports in this order, so every record lands linked to the right ones:

1. **Companies** with `create_company`. The domain is unique per team, and with linking by domain turned on, contacts whose email matches a company's domain are linked to it automatically.
2. **Contacts** with `import_contacts`, up to 1,000 rows per call. Email is required and unique per team, so a row that matches an existing contact fills its blank fields (or overwrites or skips it, as you choose) instead of creating a duplicate. Tags, owners and companies come across in the same call, and rows with a problem are listed back so nothing disappears silently. Duplicates already in Orbit can be combined with `merge_contacts`.
3. **Deals** with `create_deal` in the right pipeline and stage, with amount, owner and custom fields, then `add_deal_contact` for the people on each deal.
4. **History** with `create_note` and `create_task`: notes and open follow-ups on the right contact, company or deal.

Record owners map to Orbit team members, whose IDs come from `get_crm_schema`. Invite your team before you migrate, then tell the agent how old owners map to new ones (it can usually match them by email).

## Large imports

Contacts import in batches of up to 1,000 per call, but companies, deals, notes and tasks are one tool call each, and MCP calls share the [REST API rate limits](https://docs.orbitforms.ai/developers/api/rate-limits.md). A chat assistant works well for setup, for contact lists, and for a few hundred deals. For thousands of deals:

* Use a coding agent such as Claude Code or Cursor with an API key created from the **CRM agent** preset in the [Developer Portal](https://orbitforms.ai/developer-portal). API keys allow 1,000 requests a minute, and the agent can work through a large file in batches and pick up where it left off.
* Or ask the coding agent to write a one-off script against the [CRM API](https://docs.orbitforms.ai/developers/api/crm.md), which the MCP tools call under the hood.
* For contacts alone, **Import contacts** on the Contacts page takes a CSV directly.

## Check the agent's work

> "Compare the row counts in the export with what's now in Orbit, and list anything that didn't import with the reason."

The agent reads back with `list_companies`, `list_contacts` and `list_deals`, and reports skipped rows, such as contacts with no email address.

## Keep shaping it

The same agent keeps the CRM in shape after the move:

> "Split Proposal into Proposal sent and Verbal yes, and move the deals that are waiting on a signature."

> "Add an Industry select field on companies with SaaS, Agency, Ecommerce and Other, and fill it in for every company."

> "Save a contacts view of qualified leads with no meeting yet, sorted by last activity."

Agents connected over MCP can't delete contacts, companies or deals. That needs the `:delete` scopes, which only API keys and OAuth apps registered in the Developer Portal can hold on the [REST API](https://docs.orbitforms.ai/developers/api/crm.md); assistants that register themselves over MCP never get them. See [Available Tools](https://docs.orbitforms.ai/mcp/tools.md) for everything an agent can do.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.