# A full HubSpot assessment

**Demo output from a system we run, holding synthetic records.**

This is what Migratez produced for a HubSpot CRM organisation we run, populated with synthetic records and moving to Salesforce CRM, in the order the product shows it: what is in the source, how full each custom field is, where it all lands, what the destination cannot hold, what arrives changed, and the price. None of it is a customer's data.

Canonical page: https://migratez.com/examples/hubspot-assessment

## 1. Objects and record counts

190,945 records in the source, counted object by object from one read-only connection. History counts: a note, a call or a task is a record the same as a contact is. Custom fields and the links between records are not counted.

- Companies: 12,480
- Contacts: 48,930
- Deals: 9,860
- Notes: 61,240
- Tasks: 21,470
- Calls: 14,905
- Products: 640
- Line items: 18,300
- Delivery routes: 3,120
- Total in the source: 190,945

The nine objects and their counts are from the completed run's summary on the same organisation. They sum to the total the assessment reported.

## 2. Custom-field fill rate

9 objects and 51 fields, each with the share of records that fill it in. Where a value changes shape on the way, the plan says so under the field, and those notes are quoted as the product shows them. Each custom field is recreated at the destination with the same values before any record is written.

### Companies, 12,480 records, 10 fields

Standard fields, 8:

- Name (Text): 100% filled in
- Website domain (Text): 95% filled in
- Industry (Choice): 73% filled in. Values with no matching option are left empty. The original value is kept beside it, in an extra field.
- Annual revenue (Amount): 35% filled in
- Employees (Number): 48% filled in
- Phone (Phone number): 71% filled in
- Owner (Person on your team): 100% filled in
- Description (Long text): 26% filled in

Your own fields, 2:

- Account tier (kestrel_tier, choice): 82% filled in
- Route density (route_density, number): 61% filled in

2 more fields from the source have no equivalent in Salesforce CRM. It stays behind unless asked for.

### Contacts, 48,930 records, 9 fields

Standard fields, 8:

- Email (Email address): 94% filled in
- First name (Text): 98% filled in
- Last name (Text): 99% filled in
- Job title (Text): 64% filled in
- Phone (Phone number): 79% filled in
- Mobile phone (Phone number): 45% filled in. Arrives as text, not a phone number.
- Owner (Person on your team): 100% filled in
- Email opt out (Yes or no): not counted

Your own fields, 1:

- Preferred depot (preferred_depot, choice): 59% filled in

1 more field from the source has no equivalent in Salesforce CRM. It stays behind unless asked for.

Kept as extra fields, 1. Salesforce CRM has no matching field for these, so each one is created there as an extra text field holding the original value:

- Lifecycle stage (HS_Source_Lifecycle_Stage__c, text): kept as text

### Deals, 9,860 records, 9 fields

Standard fields, 9:

- Name (Text): 100% filled in
- Amount (Amount): 97% filled in. Your destination replaces this with a value of its own. Salesforce works a deal's amount out from its line items, so it becomes the total of the lines that came across.
- Currency (Text): 100% filled in
- Close date (Date): 95% filled in
- Deal type (Choice): 83% filled in. Values with no matching option are left empty. The original value is kept beside it, in an extra field.
- Lead source (Choice): 75% filled in. Values with no matching option are left empty. The original value is kept beside it, in an extra field.
- Next step (Text): 40% filled in
- Lost reason (Text): 22% filled in. Added to a text field, readable but no longer its own value.
- Owner (Person on your team): 100% filled in

Kept as extra fields, 2. Salesforce CRM has no matching field for these, so each one is created there as an extra text field holding the original value:

- Stage (HS_Source_Stage__c, text): kept as text
- Pipeline (HS_Source_Pipeline__c, text): kept as text

### Notes, 61,240 records, 3 fields

Standard fields, 3:

- Body (Formatted text): 100% filled in. Formatting is removed, the words are kept.
- Date (Date and time): 100% filled in
- Owner (Person on your team): 98% filled in

### Tasks, 21,470 records, 5 fields

Standard fields, 5:

- Subject (Text): 100% filled in
- Status (Choice): 100% filled in
- Priority (Choice): 84% filled in
- Date (Date and time): 100% filled in
- Owner (Person on your team): 100% filled in

### Calls, 14,905 records, 5 fields

Standard fields, 5:

- Subject (Text): 100% filled in
- Direction (Choice): 100% filled in
- Duration (Duration): 93% filled in
- Date (Date and time): 100% filled in
- Recording (Link): 28% filled in. The link arrives as a reference you can look up, not a live link.

### Products, 640 records, 3 fields

Standard fields, 3:

- Name (Text): 100% filled in
- Product code (Text): 98% filled in
- Unit price (Amount): 100% filled in

### Line items, 18,300 records, 3 fields

Standard fields, 3:

- Quantity (Number): 100% filled in
- Unit price (Amount): 100% filled in
- Line total (Amount): 100% filled in

### Delivery routes, 3,120 records, 4 fields

Your team built this one, so it is rebuilt at your destination before the migration runs.

Standard fields, 1:

- Name (Text): 100% filled in

Your own fields, 3:

- Depot code (depot_code, text): 100% filled in
- Weekly stops (weekly_stops, number): 93% filled in
- Service window (service_window, choice): 68% filled in

## 3. The plan

What travels, and what each value becomes. The plan is composed from what the two systems declare, so nobody builds a field map. You decide what to leave behind, what to bring along that has no native home, which losses to accept, and, where a source owner has no match in the destination, who inherits their records. Where a value cannot arrive intact, the plan says so before the run.

## 4. Readiness checks

The plan reports what this organisation's destination cannot do yet and what the connector could not reach, each with the fix and a re-check. It does not quote a vendor page or an API allowance. 2 came up for this run, and either can be fixed and re-checked or carried on without.

### Records linked to more than one company. Action needed

Your destination keeps a single company per record unless you turn its multiple-company feature on. 2,310 of your records are affected.

Fix: In Salesforce, open Setup and enter "Account Settings" in the Quick Find box. Turn on "Allow users to relate a contact to multiple accounts", save, then re-check.

### How your products get priced (Salesforce CRM). Action needed

Salesforce prices products from a price book, so each one we bring gets an entry in your standard book. If we can't reach it, your products arrive but can't be sold.

Fix: Ask your Salesforce admin for access to the standard price book, then re-check.

## 5. Lossy conversions

Where a value has no matching option at the destination, the plan leaves the field empty and keeps the original beside it in an extra field. Where the destination has no field at all, the original goes into a text field of its own. Every case the plan marked for this organisation is below, in the product's words.

Changed on the way, 8:

- Companies, Industry: Values with no matching option are left empty. The original value is kept beside it, in an extra field.
- Contacts, Mobile phone: Arrives as text, not a phone number.
- Deals, Amount: Your destination replaces this with a value of its own. Salesforce works a deal's amount out from its line items, so it becomes the total of the lines that came across.
- Deals, Deal type: Values with no matching option are left empty. The original value is kept beside it, in an extra field.
- Deals, Lead source: Values with no matching option are left empty. The original value is kept beside it, in an extra field.
- Deals, Lost reason: Added to a text field, readable but no longer its own value.
- Notes, Body: Formatting is removed, the words are kept.
- Calls, Recording: The link arrives as a reference you can look up, not a live link.

Kept as extra fields, 3:

- Contacts, Lifecycle stage (HS_Source_Lifecycle_Stage__c, text): kept as text
- Deals, Stage (HS_Source_Stage__c, text): kept as text
- Deals, Pipeline (HS_Source_Pipeline__c, text): kept as text

## 6. The price

$4,999 USD, one time. 190,945 records is inside the top tier's 200,000, so it is that tier's base price. It is a price rather than an estimate that moves later: the destination's capabilities are known when the migration is created, so the price is settled from the source alone. Every plan is at https://migratez.com/pricing.

## Try it on your data

Create an account at https://app.migratez.com and connect the CRM you are leaving with read-only access. You get your own record count, your own fill rates and your price before you connect the destination. Nothing moves until you ask for it.
