Prepared with AI assistance and reviewed for clarity, relevance and unsupported claims.

An organized workflow with a review checkpoint

A spreadsheet to CRM migration is successful when staff can find the right enquiry, understand its history and carry out the next action. Importing every row without an error message is not enough.

For a Moroccan service SME, the hardest issues are often ordinary ones: colours used as statuses, several requests stored under one customer, dates entered in different formats and notes that contain the only record of a promise. Resolve these before moving live work.

1. Decide what each row represents

Inspect the spreadsheet before choosing import settings. Does one row represent a person, a company, an enquiry or a quotation? A customer with three separate requests should not become three unrelated people simply because there are three rows.

Define the target structure in plain language. For example: one contact may have several enquiries; each enquiry has its own owner, stage and next action. Only introduce separate company or quotation records if they serve a real operational need.

Give every source row a stable migration reference and preserve it in the destination where possible. Do not use a row number that changes when someone sorts the sheet. This reference helps identify missing records and prevent an attempted re-import from creating duplicates.

If the source mixes customer identities, resolve those questions separately. The guide to careful customer identity matching explains why names alone should not drive merges.

2. Create a field map and a status dictionary

Write down where each source column will go, how its value will change and who approves the interpretation. A mapping document can be a simple list rather than a technical specification.

  • Client: contact or company name; split only where the distinction is known.
  • Telephone: text field, preserving meaningful prefixes and leading zeros.
  • Service requested: enquiry subject or service category.
  • Assigned to: CRM owner, with a review queue for missing or inactive staff.
  • Follow-up: separate the action description from its due date.
  • Comments: retained history, not an automatic replacement for structured fields.
  • Sheet colour: convert to an explicit status only after staff confirm its meaning.

Build a status dictionary alongside the field map. “Waiting”, “pending” and “to check” may describe different situations. Ask whether the customer, a supplier or the internal team must act next.

Check date interpretation explicitly. A value such as 04/05 can be ambiguous across import settings. Preserve a genuinely unknown date as unknown and create a review task instead of inventing one. Do not treat the import date as the original enquiry date.

3. Clean active work while preserving useful history

Separate open enquiries, recently closed records needed for ongoing work and older history. They do not all need the same treatment or the same migration date.

For open enquiries, review the owner, current state, next action and relevant deadline. For historical notes, preserve the original wording where practical. A rewritten summary may omit a condition or make a tentative promise sound final.

If AI helps summarise long notes, label the summary as derived and keep the source accessible to authorised staff during validation. Review any summary used to make a customer-facing decision.

Avoid carrying every attachment into the CRM merely because it exists. Decide whether a controlled link to the source is sufficient and whether the file remains useful. The guide to retaining customer workflow data provides a framework for that decision.

Cleaning everything first can delay the move indefinitely. Importing everything immediately transfers the confusion. A practical compromise is to make active work reliable first and schedule a separate historical review.

4. Test a sample that includes awkward cases

Keep an untouched source export with a clear date and restricted access. Then create a working copy for cleaning and a small representative import file.

Include straightforward rows and difficult ones:

  • A contact with more than one open enquiry.
  • A missing owner or next-action date.
  • A phone number with a leading zero.
  • Arabic and French text in the same record.
  • A long note, an attachment link and an ambiguous status.
  • A closed enquiry that should not generate an active task.

Use a test environment or an isolated import group where available. Check how import-triggered reminders, assignments and outbound messages will be disabled or contained before importing customer records.

After the test, inspect both totals and individual records. Confirm field values, relationships, dates, note content and owner access. Ask a staff member to carry out a sample next action from the imported record. A correct count cannot reveal a contact linked to the wrong enquiry.

5. Hypothetical example: move open requests first

Imagine a commercial maintenance company whose spreadsheet contains site enquiries, old quotations and completed jobs. It decides to migrate only open requests in its first batch.

One row says “waiting for access” in the comments and “quote” in the status column. During review, the team identifies the real next step: the coordinator must ask the prospect for suitable site-access times before arranging an assessment. No appointment is recorded as confirmed.

The cleaned enquiry receives an owner, an explicit waiting reason and a follow-up date. The original note stays attached as history. Older closed rows remain in a read-only archive pending a separate decision.

Before cutover, the team pauses edits briefly and records any new incoming enquiries in a temporary intake log. Once the import is checked, those new items are entered and reconciled using their references. Staff are then told which system is authoritative for active work.

6. Define acceptance and rollback before cutover

Set acceptance conditions before importing: every in-scope row is accounted for, relationships are correct, active work has an owner or review assignment, and no unintended customer messages have been sent.

Keep an import batch identifier or equivalent record list. If the batch fails validation, pause related workflows before removing or correcting imported records. Check what the CRM can actually reverse; deleting contacts may affect linked enquiries.

A source backup alone is not a complete rollback plan. Preserve tasks, notes and changes made after cutover before returning to the sheet. Otherwise, restoring the old copy discards new work. The guide to a narrow, reversible pilot helps structure this transition.

If recurring imports or connected intake channels are needed, a custom n8n automation can be assessed against the agreed mapping and controls. To discuss the migration with FlowAgent, describe your spreadsheet structure and target CRM.