Scan business cards instantly. Extract contacts automatically. Save to your phone in seconds.
CardSnap is a professional business card scanner built with native Kotlin and Jetpack Compose. It uses Google's ML Kit for OCR to extract contact details from business card photos, then intelligently parses and saves them to your device contacts.
| Scan Screen | Review Contact | Contacts List | Settings |
|---|---|---|---|
- πΈ Instant Scanning β Point your camera at any business card and capture with a single tap
- π€ Smart OCR β Google ML Kit Text Recognition extracts all text with high accuracy
- π§ Intelligent Parsing β Automatically identifies names, emails, phones, companies, and websites
- πΎ Auto-Save β Optionally save contacts automatically after each scan
- π€ Export & Share β Export contacts as vCard or CSV, share via any app
- π Multi-Language OCR β Support for English, Chinese, German, French, Spanish, and more
- π± Native Android β Built with Jetpack Compose, CameraX, and Material 3 design
- π Privacy-First β All processing happens on-device. No data sent to servers
CardSnap follows the MVVM architecture with clean separation of concerns:
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β UI Layer β
β ScanScreen β ContactsScreen β EditContactScreen β
β SettingsScreen (Jetpack Compose) β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β ViewModel Layer β
β ScanViewModel, ContactsViewModel, etc. β
β (StateFlow + Coroutines) β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Domain Layer β
β ContactParser, OcrEngine, ImageCropper β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Data Layer β
β Room Database ββ ContactRepository β
β DataStore Preferences ββ SettingsRepository β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
| Component | Technology |
|---|---|
| Language | Kotlin 1.9.22 |
| UI | Jetpack Compose + Material 3 |
| Camera | CameraX |
| OCR | Google ML Kit Text Recognition |
| Database | Room |
| Settings | DataStore Preferences |
| Async | Kotlin Coroutines + Flow |
| Image Loading | Coil |
| Architecture | MVVM + Repository Pattern |
| Version | Type | Link |
|---|---|---|
| Latest Debug APK | Debug | Download from Releases |
| Latest Release APK | Release | Download from Releases |
Open the app and point your camera at a business card. The card guide frame helps you align the card properly.
When you tap capture, the image is cropped, rotated (if needed), and processed by ML Kit's Text Recognition engine.
The extracted text is analyzed by our contact parser, which uses regex patterns to identify:
- Names β First line without digits or @ symbols
- Emails β Standard email format detection
- Phone numbers β US/international format recognition
- Companies β Detection of business suffixes (Inc, LLC, Corp, etc.)
- Job titles β Keyword-based title identification
- Websites β URL pattern detection
Review the extracted contact details, edit any fields if needed, then save to your device database or export as vCard.
| Use Case | Description |
|---|---|
| Networking Events | Quickly scan dozens of business cards at conferences and meetups |
| Sales Teams | Capture prospect contact info during field visits |
| Recruiters | Save candidate contact details from career fairs |
| Real Estate | Collect agent and client contact information efficiently |
| Personal Use | Digitize your stack of physical business cards at home |
- Java 17 (Temurin recommended)
- Android SDK (compileSdk 35, minSdk 26)
- Gradle 8.8
# Clone the repository
git clone https://github.com/Sensible-Analytics/CardSnap.git
cd CardSnap
# Build debug APK
cd android
./gradlew assembleDebug
# Build release APK
./gradlew assembleRelease
# Run unit tests
./gradlew testDebugUnitTest
# Run E2E tests (requires emulator)
./gradlew connectedAndroidTest- Debug APK:
android/app/build/outputs/apk/debug/app-debug.apk - Release APK:
android/app/build/outputs/apk/release/app-release-unsigned.apk
| Requirement | Value |
|---|---|
| Minimum Android | 8.0 (API 26) |
| Target Android | 14.0 (API 34) |
| Compile SDK | 35 |
| Camera | Required |
| Permissions | Camera, Contacts, Internet, Vibrate |
This project is licensed under the MIT License β see the LICENSE file for details.
We welcome contributions! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with β€οΈ by Sensible Analytics