Move from another CRM
Bring your companies, contacts and deals from HubSpot, Zoho CRM or Pipedrive into Empiraa Signal with an AI assistant.
You can move your records from HubSpot, Zoho CRM or Pipedrive into Signal by having an AI assistant read from the old CRM and write to Signal through the REST API. There are no CSV exports to wrangle. The assistant shows you each batch before anything is created.
Switching from HubSpot? Start with Signal's own importer: Settings → Import → Switch from HubSpot. It brings contacts, companies, Assigned To, HubSpot lists and every unsubscribe and bounce across directly. Use this page for what it doesn't bring: deals, notes and activities.
Before you start#
You need three things:
- A Signal API key. Create it in Autopilot › Webhooks & API › API Keys, with the write scopes below.
- Read-only access to your old CRM, as an API key or access token. Never give the assistant write access to the CRM you're leaving.
- These docs. Point your assistant at the Signal API reference, or download the OpenAPI file from the API explorer.
| Signal scope | What it lets the import create |
|---|---|
prospects:write |
Prospect contacts and Prospect Companies |
accounts:write |
Accounts |
contacts:write |
Contacts |
deals:write |
Deals |
activities:write |
Activities, if you bring those across |
notes:write |
Notes, if you bring those across |
Import in this order#
Records link to each other, so the order matters.
- Companies first. Prospect Companies or Accounts.
- People second. Prospect contacts or Contacts, linked to their company.
- Deals last. A Deal needs an Account and a stage.
Start with 20 records, not all of them. A small batch is easy to fix. Hundreds of duplicates aren't.
Field mapping#
| From your old CRM | Signal field | On |
|---|---|---|
| First name | first_name |
Prospect contact |
| Last name | last_name |
Prospect contact |
email |
Prospect contact | |
| Phone | phone |
Prospect contact |
| Job title | job_title |
Prospect contact |
| Company | lead_company_id |
Prospect contact (the Prospect Company's ID) |
| Company name | name |
Prospect Company |
| Domain | website |
Prospect Company |
| Industry | industry |
Prospect Company |
| City and country | location |
Prospect Company |
| Deal name | name |
Deal |
| Amount | value |
Deal |
| Close date | expected_close_at |
Deal |
| Deal stage | stage_id |
Deal (map each old stage to a Signal stage) |
Full field lists: Prospect contacts, Prospect Companies and Deals.
The prompts#
Paste these into your assistant one at a time.
1. Set the rules#
I'm moving my CRM data from [HubSpot / Zoho CRM / Pipedrive] into Empiraa Signal. Rules for this whole job: - Read from [old CRM] only. Never write, update or delete anything there. - Before you create anything in Signal, show me the mapped data in a table and wait for my yes. - Work in batches of 20 and confirm each batch. - If something doesn't map cleanly, ask me. Don't guess. Signal API reference: https://developers.empiraa.com/signal/api/index.md Signal base URL: https://crm.empiraa.app/api/v1 I'll give you both API keys separately.
2. Companies#
Import my companies from [old CRM] into Signal as Prospect Companies. 1. Read the first 20 companies. 2. Map them: company name to name, domain to website, industry to industry, phone to phone, city and country joined into location. 3. Show me the table and wait for my yes. 4. Create them with POST /prospect-companies and keep a list of old ID to new Signal ID. We need it for the next step. 5. Carry on 20 at a time, confirming each batch.
3. People#
Now import my contacts from [old CRM] into Signal as prospect contacts. 1. Read the first 20 contacts. 2. Map them: first name to first_name, last name to last_name, email to email, phone to phone, job title to job_title. 3. Link each one to its company with lead_company_id, using the ID list from the last step. 4. Show me the table and wait for my yes. 5. Create them with POST /prospects. It matches on email, so running a batch twice won't make duplicates. 6. Tell me how many had no email, and list them.
4. Deals#
Now import my open deals from [old CRM] into Signal. 1. Call GET /pipelines and show me Signal's stages. 2. List the deal stages used in [old CRM] and propose a match for each one. Ask me about any that don't match. 3. Read the first 20 open deals. 4. Map them: deal name to name, amount to value, close date to expected_close_at, stage to stage_id. 5. Every Deal needs an account_id. Tell me which deals have no matching Account in Signal and ask whether to create the Accounts first. 6. Show me the table and wait for my yes, then create them with POST /deals.
5. Check the result#
Compare what's now in Signal with what was in [old CRM]: counts of companies, people and deals, and the total open deal value. List anything that didn't come across and why.
After the import#
- Revoke the import key in Signal, and the read-only token in your old CRM.
- Open a few records in Signal and check the links between company, person and Deal.
- Set up your Sequences and Campaigns in Signal before you turn the old CRM off.

