Open source · Omnichannel harvester · Google Contacts native · AI review · CRM sync · Feedback learning

Your contacts are a mess.
Let AI fix them.

Contact Refiner automatically fixes diacritics, formatting, and duplicates in your Google Contacts. 26 rule categories, Claude AI review, LinkedIn signals, personal CRM, and a feedback learning loop. You approve every change.

terminal
$ python main.py # daily pipeline — 5 phases, fully automated
Phase 0: Process review feedback → learn approvals and rejections
Phase 1: Analyze all contacts → auto-fix HIGH confidence changes
Phase 2: AI review MEDIUM confidence → promote or demote
Phase 3: Tag activity from Gmail + Calendar interactions
Phase 4: Score top FollowUp candidates (LinkedIn + interactions)
Phase 5: Sync CRM notes → Google Contacts biographies + groups
# Review changes at your-domain.com/review
# Pipeline completed — remaining changes queued for review
6
Pipeline phases
26
Rule categories
5,500+
Contacts managed
<$0.02
Daily AI cost
100%
Self-hosted
Active development · Last 2 weeks

Recently shipped

What's landed since Sprint 3.31. Every line has a PR you can read.

  1. Omnichannel biography writeback

    PR

    WhatsApp / Signal / LinkedIn / iMessage activity rolls up into a fenced "Omnichannel" block on each Google Contact — primary channel, 30-day message count, awaiting-reply side. Zero message content, metadata only.

  2. Dashboard awaiting-reply pills + harvest chip

    PR

    CRM kanban cards now show a red "you owe reply" pill when a contact is waiting on your response via any channel. Sidebar harvest chip shows freshness at a glance.

  3. Beeper-only contacts surface on /crm

    PR

    Contacts that only exist on messaging networks (not yet in Google Contacts) now appear in the follow-up queue, so messaging threads never drop from view.

  4. Business-first lead scoring

    PR

    Lead scorer promotes executive titles (+15), penalises personal-email-only contacts (×0.3), caps the silent-period window at 24mo, and excludes your own company. Top-of-funnel is now actually business-shaped.

  5. Signals page: 7 derived signal types

    PR

    New /signals view groups leads by signal type (job change, new C-level, dm-awaiting-reply, …) and caps actionable batch at 100/week. Candidates / backlog / dismissed tabs.

  6. Partition rollback tool

    PR

    scripts/revert_partition.py lists and restores soft-deleted generations of any GCS data blob — 7-day safety net for every harvest run. Dry-run default.

What it fixes

Rule-based analysis catches the obvious. AI handles the rest.

Google Contacts Native

Lives inside your Google Contacts. Changes sync directly via People API. Works on every device — iOS, Android, web, desktop.

Diacritics Restoration

Restores missing accents on Slovak and Czech names. Context-aware: only applies when the surname confirms SK/CZ origin.

Smart Formatting

Normalizes phone numbers, titles, company names, and name casing across all contacts.

Contact Cleanup

Flags low-value one-off contacts — no full name, no email, no phone. Review and delete the clutter.

AI Review

Claude AI catches edge cases that rules miss. You approve every change before it applies.

LinkedIn Social Signals

Scans LinkedIn profiles to detect job changes and reconnection opportunities. Surfaces contacts worth reaching out to.

Personal CRM

Kanban board with quick-action buttons, inline AI reconnect prompts, and LinkedIn signal context on every tile. Drag contacts through stages.

FollowUp Intelligence

Scores contacts by interaction history, months since last contact, LinkedIn job changes, and profile completeness. Top candidates surface automatically.

CRM Sync to Contacts

Notes sync back to Google Contacts biographies. Tags become contact groups. Your CRM data lives everywhere — native search, mobile, desktop.

Smart Hashtag Labels

Write #hashtags in CRM notes — they auto-convert to searchable tags and Google Contact groups. Slovak diacritics supported.

Pipeline Health Monitor

Visual run history showing duration, errors, and phase completion. Spot problems before they affect your contacts.

Learning System

Remembers your review decisions. Rejected changes never come back. Confidence adjusts based on your feedback.

Daily Email Digest

Get a morning summary of what the pipeline fixed overnight. Changes applied, errors, queue status — all in one email.

Privacy First

Runs on your own infrastructure. Security audited. Your contacts never leave your Google account.

Omnichannel Harvester

Harvests WhatsApp, Signal, LinkedIn, Messenger, Telegram, and iMessage activity into a per-contact rollup. Primary channel, recent-message counts, awaiting-reply side — all attached to the Google Contact, zero message content.

Awaiting-Reply Surfaces

Dashboard CRM shows a red pill on contacts where you owe a reply across any channel, plus dedicated signal type on /signals. Nothing drops through the cracks.

Business-First Scoring

Exec-title bonus, personal-email penalty, 24-month recency cap, own-company exclusion. Top-of-funnel is business-shaped, not "people who happen to be in my phone".

Time-Travel Safety Net

7-day soft-delete on every GCS partition plus a one-command revert tool. Any bad harvest run can be rolled back by generation.

How it works

Three steps. You stay in control.

01

Authenticate

Connect your Google account with OAuth2. Read-only access to Contacts, Gmail, and Calendar.

02

Analyze

A 6-phase daily pipeline scans all contacts with 26 rule categories, AI reviews ambiguous cases, scores reconnection candidates, and syncs CRM data back to Google Contacts.

03

Review & Learn

Review changes on the dashboard. Approve, reject, or edit. The system learns from every decision — rejected changes never come back.

Frequently asked questions

Is Contact Refiner free?
Yes. Contact Refiner is open source and free to self-host. Your data stays in your own Google account and infrastructure.
Does it delete or modify contacts without my permission?
No. Every change goes through a review queue. You approve or reject each change before it applies. The system learns from your decisions so rejected changes never come back.
What kind of fixes does it make?
Contact Refiner fixes missing diacritics on Slovak and Czech names, normalizes phone numbers, standardizes titles and company names, flags low-value contacts for deletion, and uses AI to catch edge cases that rules miss.
How does the LinkedIn integration work?
Contact Refiner scans LinkedIn profiles to detect job changes and activity. It scores your contacts for reconnection opportunities and surfaces the best candidates in a personal CRM board.
Does the CRM sync change my Google Contacts?
Yes — CRM notes and an auto-generated Omnichannel block sync to contact biographies; tags map to your existing contact groups (alias-aware, so "instarea" reuses your "IS" label instead of creating a duplicate). User content is additive-only; the Omnichannel block is metadata-only (no message bodies) and cleanly replaced on each run. You can search all of this natively on any device.
How does the omnichannel harvester work?
Beeper Desktop (running on your Mac) exposes WhatsApp, Signal, LinkedIn, Messenger, Telegram, and iMessage threads through a localhost API. A session-start harvest pulls recent messages, matches them to your Google Contacts, and writes a metadata-only rollup into each biography — primary channel, last-heard date, 30-day message count, awaiting-reply side. No message content leaves your machine.

Clean up your contacts today

Open source. Self-hosted. Your data stays yours.

Get started on GitHub