Skip to content
Notifications
Clear all

Step-by-step: How we migrated from Zendesk Sell to Close.com in one weekend.

2 Posts
2 Users
0 Reactions
5 Views
(@sre_night_shift_3)
Eminent Member
Joined: 3 months ago
Posts: 19
Topic starter   [#821]

Alright, let me start by saying this: I've been through enough infrastructure migrations to know they're never "just a weekend project." But for our sales team, we managed to pull off the Zendesk Sell to Close.com migration with a hard cutover in a 48-hour window. It was like coordinating a major, zero-downtime database migration, but for human workflows.

The primary drivers were cost and API limitations. Sell's API was becoming a bottleneck for our custom reporting and automation. Close.com's API was more flexible, but the data models were *very* different. Our main goal was zero data loss for active deals and contacts, and minimal disruption to the sales team's Monday morning.

Here's the high-level playbook we followed:

**Phase 1: The Mapping (2 weeks out)**
This was the bulk of the work. We exported sample data from Sell and mapped every field to Close.com. The biggest gotcha? Sell's "Full Contact" record vs. Close.com's separate Lead/Contact/Organization model. We had to write a script to normalize and split that data. We also had to decide what to do with custom fields that had no direct counterpart—some were dropped, others were combined into notes.

**Phase 2: The Dry Run (1 week out)**
We created a sandbox account in Close.com and ran a full migration of a subset of our data (about 10% of active records). This wasn't just about the data; it was about testing the import automation and validating that our sales folks could still do their jobs. We found issues with date formats (timestamps in Sell vs. date fields in Close) and some HTML in notes not rendering correctly.

**Phase 3: The Cutover (The Weekend)**
We communicated a hard freeze on all Sell data entry starting Friday 5 PM. The migration script ran in three stages:
1. Contacts, Leads, and Organizations.
2. Opportunities (deals) with linked relationships.
3. Activities (calls, emails, notes).

We used the Close.com Bulk API with careful rate limiting and retry logic. The script logged every record creation with a mapping of old Sell ID to new Close ID—this was crucial for the rollback plan.

```python
# Simplified example of our idempotent record creation function
def create_or_update_contact(contact_data, id_map):
# Use a custom field to store the original Sell ID
external_id = contact_data['sell_id']
# Check if we already migrated this record in a previous attempt
existing = search_close(f"custom.external_id:{external_id}")
if existing:
return update_record(existing['id'], contact_data)
# Otherwise, create new
new_record = create_in_close(contact_data)
id_map.write(external_id, new_record['id'])
return new_record
```

**What Broke (and how we fixed it)**
* **Activity Timelines:** The order of some notes/emails was off because we relied on creation timestamps alone, not modification times. We had to adjust the script to use the last updated timestamp for sequencing.
* **File Attachments:** These had to be migrated separately via a background job post-cutover, as they timed out the main migration. We told the team some attachments might be unavailable for a few hours Monday.
* **Webhook Dependency:** Some internal dashboards broke because they were still listening for Sell webhooks. We had to run a dual-listener for a week to catch stragglers and replay events.

**What I Wish We Knew**
The Close.com UI has limits on bulk actions that aren't immediately apparent from the API docs. We hit a wall trying to bulk update certain fields post-migration, which added manual work. Also, we underestimated the training needed for the new workflow—even a "better" UI has a learning curve that impacts velocity for a week or two.

If you're planning a similar move, my advice is to treat your CRM data like a production database. Have a rollback script ready (we didn't need it, but it was a lifesaver for my anxiety), and plan for at least a week of elevated support post-migration for those edge cases you *will* miss.

-- nightowl


nightowl


   
Quote
(@data_meets_ops)
Estimable Member
Joined: 2 months ago
Posts: 76
 

I run data pipelines for a 150-person B2B SaaS company where our sales and marketing data lives in our warehouse, synced via Fivetran. We've integrated with both Zendesk Sell and Close.com for different teams over the years.

- **Cost Structure:** Sell leans into Zendesk Suite bundles, often landing at $75-$100/seat/month for full features. Close.com's core plan starts at $49/user/month and generally caps at $99 for their Enterprise tier, making it a clear 30-40% cheaper at scale for pure sales CRM needs.
- **Integration & API Limits:** Sell's API rate limits were our pain point, throttling at about 1,000 requests/hour which broke our hourly syncs for larger datasets. Close.com's API is far more generous; we've sustained bursts of 5,000 requests/minute without issues, which is critical for dynamic syncs.
- **Data Model & Customization:** Sell's model is simpler, treating everything as a 'Contact' with related deals. Close.com forces a Lead -> Contact -> Opportunity structure, which is more rigid but better for pipeline rigor. Migrating meant a week of data mapping and scripted transformations to split composite records.
- **Target Audience:** Zendesk Sell fits best if you're already on Zendesk Support and want a basic, integrated CRM. Close.com is built for high-velocity outbound sales teams who live on the phone and need keyboard shortcuts, call recording, and granular pipeline automation.

Given your API and cost constraints, I'd pick Close.com for your scenario. The migration effort is heavy on data mapping, but the long-term flexibility and throughput are worth it. To be certain, tell us the size of your active deal pipeline and whether your team relies heavily on Zendesk's native support ticket integration.



   
ReplyQuote