Case study
Small software, done properly.
Every organization has one: the spreadsheet of people. Names, emails, two phone numbers, lovingly maintained — and completely invisible to the phone in your pocket. Contact Sync closes that gap in about a minute.
- Scope
- Design, build, deploy — a tool that does one thing well
- Stack
- Python · Flask · Google OAuth · self-hosted
- Audience
- Anyone whose contacts live in a spreadsheet
The problem: the list and the phone don't talk
Google will happily let you keep a contact list in a Sheet and a contact list in Google Contacts. It will not, anywhere, offer to keep them in sync. So the spreadsheet stays authoritative and the phone stays out of date, and when someone calls, you don't know who it is — even though you typed their number into a cell last spring.
Contact Sync is the missing bridge: sign in with Google, pick the sheet, and it maps the columns itself — it knows a column called "Cell" when it sees one. You get a preview of exactly what will be created, updated, or skipped before anything touches your contacts.
The interesting part: people are messy data
The same person shows up as "Smith, John" in the spreadsheet and "John Smith" in your contacts — and a naive sync would happily create a duplicate. Contact Sync matches by email first, then falls back to fuzzy name matching that understands reversed names and uses organization as a tiebreaker.
And when the math isn't sure, it doesn't guess. Borderline matches go to a review queue that shows the top candidates side by side and lets a human make the call. Confident matches sync automatically; ambiguous ones wait for you. That's the design philosophy in one feature: automate the certain, surface the uncertain.
Contact Sync is live and free to use at contactsync.clapp.me — a deliberately small tool that respects both your data and your time.
Start your project