Skip to content
AIM Development and Automation

Data migrator

Your messy Excel file turns into a clean list, ready to move into your system.

Live. Runs in your browser.

What your client sees

The problem it solves
Moving clients or orders from a spreadsheet into a new system is usually manual work: dates written a dozen ways, phone numbers without a country code, typos in emails and duplicate rows.
A real-life example
Picture a hardware store switching to new billing software. It exports its client list, runs it through the migrator and gets a clean list to import, plus another with the rows to check.
What you'll see
You upload a file, or use the sample one, and right away you see what was fixed, how many rows came out fine and what to check in each of the others, with a before and after.

Under the hood

What it does, in technical terms

Upload a messy CSV or Excel file and watch how columns are detected, dates, phone numbers and emails are normalized, and valid rows are separated from those with errors.

Technologies
  • TypeScript
  • PapaParse
  • Zod
  • Python
  • FastAPI
  • python-calamine
  • charset-normalizer

Architecture

  1. 1.Your browser (TypeScript)

    PapaParse reads the CSV, each column's type is detected, every value is normalized and Zod validates each row. By default the file never leaves your device.

  2. 2.Python engine (FastAPI on Render)

    Optional: it reads Excel (.xlsx and .xls), detects the encoding and accepts larger files. It processes in memory and saves nothing.

  3. 3.One contract

    The shape of the result is defined in Zod, exported to JSON Schema, and the Python tests validate every response against it.

  4. 4.Parity test

    With every change it compares the Python output with the browser's on the same files.

By the numbers

engines with the same rules, in the browser and in Python
2
per file at most, on the Python engine
10 MB
rows per file at most, on the Python engine
50,000

Try it with a customer list

  1. Upload your file. in progress.
  2. It sorts itself out. pending.
  3. Check the result. pending.
  4. Download your clean list. pending.

A CSV or Excel file with your data, or try the sample file.

Drop your customer list here

A CSV exported from your current software or your spreadsheet. It's sorted out right here: your file never leaves your device.

sample-customers.csv: 37 rows, the way they come out of an old system.

Upload your file

Where do you want to process the file?

Up to 5 MB and 20,000 rows, separated by commas or semicolons, with the column names in the first row.

See what the sample file looks like
 Nombre completo ;Correo Electrónico;Teléfono;Fecha de registro;Monto (COP);Ciudad
  ana maría  GÓMEZ ;[email protected] ;300 555 0101;03/04/2024;$1.200.000,50;bogotá
CARLOS andrés ruiz;[email protected];+57 (310) 555-0102;2024-04-05;1200000.5;Medellín
luisa fernanda díaz; [email protected];3125550103;3 de abril de 2024;850.000;cali
josé del carmen pérez;[email protected];(+57) 315 555 0104;15/01/2023;$ 2.500.000;SANTA MARTA
María de los Ángeles Torres;[email protected];320-555-0105;7 abr 2024;350000;Barranquilla

pedro salazar;pedro.salazar@example;301 555 0106;12/05/2024;$780.000;Pereira
  ana maría gómez;[email protected];+57 300 555 0101;2024-04-03;1200000.5;Bogotá
marta ríos;marta.rios.example.com;311 555 0107;20/06/2024;95.000;Bucaramanga
Jorge Iván Restrepo;[email protected];555 0108;01/07/2024;1.500.000;Manizales
;;;;;
Sofía Martínez;[email protected];3165550109;31/02/2024;420000;Cartagena
andrés felipe castro;[email protected];3175550110;04/13/2024;$ 1.050.000;Cúcuta
Valentina Rojas;[email protected];318 555 0111;2024-08-19;mil doscientos;Ibagué
CARLOS andrés ruiz;[email protected];+57 (310) 555-0102;2024-04-05;1200000.5;Medellín
daniela   herrera;[email protected];+57 300 555 01;10/09/2024;640.000,00;Villavicencio
Camilo Andrés Vargas;camilo [email protected];3195550113;5 de octubre de 2024;2.000.000;Neiva
  ;  ; ;;;
natalia gómez;[email protected];3205550114;23/10/2024;$3.450.000;Pasto
luis eduardo moreno;[email protected];300 555 0115;2024/11/02;150000.75;tunja
paula andrea suárez;[email protected];3015550116;8 de noviembre de 2024;$ 980.500;Armenia
luisa fernanda díaz;[email protected];+573125550103;03/04/2024;850000;Cali
Ricardo Peña;[email protected];+1 (415) 555-0117;12/12/2024;USD 1,250.00;Miami
Gabriela Ortiz;[email protected];+57 601 555 0118;14/02/2025;275.000;bogotá d.c.
Esteban Quintero;[email protected];3105550119;;;Popayán
martín alonso lópez;[email protected];3115550120;2 de enero de 2025;$1.2.3;Montería
Laura Jiménez;laura.jimenez@exa mple.com;31255501;17/03/2025;560.000;Sincelejo
Diego Fernando Ruiz;[email protected];3135550122;miércoles 9 de abril de 2025;1.000.000;Valledupar
Isabella Cárdenas;[email protected];314 555 0123;22-04-2025;720000;Riohacha
Mateo Sánchez;[email protected];315 555 0124;30/04/2025;$ 1.800.000,00;Quibdó
Mariana Pineda;[email protected];3165550125;5/5/25;99.900;Florencia
Sebastián Giraldo;[email protected];3175550126;2025-05-12;2.300.000;Yopal;VIP
camila andrea mejía;[email protected];3185550127;3 jun 2025;$450.000;Leticia
JUAN PABLO OSORIO;[email protected];319 555 0128;15.06.2025;1250000;Mocoa
Lucía Fernández;[email protected];+57 320 555 0129;julio 1, 2025;$ 600.000;San Andrés
Tomás Herrera;[email protected];0057 300 555 0130;20/07/2025;3.100.000,25;Arauca
samuel ospina;[email protected];301-555-0131;2025-08-01;875000;Puerto Carreño

What will happen to your file

Five steps, in this order. Upload a file or try the sample to see what each one did.

  1. Step 1: Read the file

    PapaParse reads the CSV, detects whether the separator is a comma or a semicolon and takes the first row as headers.

  2. Step 2: Detect columns

    It turns the headers into names without accents or spaces and checks up to 200 values per column to tell whether each one holds email addresses, phone numbers, dates, amounts or text. For dates written with numbers (04/03/2024), it works out whether the month or the day comes first.

  3. Step 3: Normalize

    It removes extra spaces, writes names in title case and email addresses in lowercase, turns phone numbers into international format with Colombia's rules (10 digits starting with 3 are a Colombian mobile number and get +57; numbers from other countries need their + and country code), dates into year-month-day (month or day first, depending on the column) and amounts into numbers.

  4. Step 4: Validate

    It builds a Zod schema with the detected types and checks every row: a valid email address, an international phone number, a date that exists and a numeric amount. Empty cells are allowed.

  5. Step 5: Result

    It separates the valid rows from the ones with errors and counts the duplicates and empty rows that were left out.

Want it for your business?

This is part of what I build in the automations service. See what's included or get a reference estimate for your case.

Curious how it is built? Look under the hood

How it works

It has two engines with the same rules. By default everything happens in your browser (TypeScript): the file never leaves your device. If you choose the server, a Python API built with FastAPI receives the file, processes it in memory without saving it and returns the same result; it also reads Excel (.xlsx and .xls), detects the encoding of CSV files exported in Spanish and accepts larger files. An automated test compares both engines on the same files with every change.