Guide
Move HubSpot or Attio contacts into a CRM your agent runs, and undo it
Handing an agent your pipeline starts with getting the contacts you already have into one place it can write to. Deskhand takes a CSV export, shows you what would happen, and only then writes. If the result is wrong, one click removes the whole import.
Steps
- Export your contacts as CSV from HubSpot or Attio.
- In the console open Import and drop the file in. HubSpot and Attio exports are recognised by their column names and mapped for you; any other CSV maps by header, and you can change any column's target.
- Read the preview. It counts contacts that would be created, filled in, left alone because they already exist, and rows with errors, before anything is written. Choose whether existing contacts are skipped or have their empty fields filled.
- Commit. The import is recorded as one run in Activity.
- If it was not what you meant, undo the whole import from its history entry.
What gets mapped
Email is the match key. First and last name, job title, company name and website, status (HubSpot lifecycle stages map to Deskhand's contact statuses), source and tags have a home of their own. Columns with no home become custom fields on the contact, up to 30 of them, so nothing you exported is silently lost.
Limits
Up to 1,000 rows and 1 MB per file; split larger exports and import them in parts. The import must fit your plan's record limit, which the preview shows: Free holds 250 records, Pro 10,000.
Then give the agent a key
Once the contacts are in, the agent reads and writes the same records you see. Pick the route that fits it: Claude Code in one command, the TypeScript SDK, or plain HTTP. You can also take everything back out at any time as JSON or CSV from Settings.
Try it
The Free plan covers one agent with its own key, a pause switch and the full audit log. Get started free
Related: A CRM for Claude Code agents: one command, one key per agent, A CRM API for AI agents: curl and Python quickstart