avi112005/business-cards-to-crm/business-cards-to-crm
Claude Code and agent skill by avi112005/business-cards-to-crm
- community
Checking that the SKILL.md file is still in the repository.
Turn photos of business cards into clean, deduped, enriched CRM records (name, title, company, email, phone, LinkedIn, notes). Use when the user drops card images or a folder of cards and wants contacts ready for HubSpot/Salesforce/Notion/CSV. Extraction is done by your own vision (Read the images); a bundled npx CLI (`npx cards-crm`) does the normalization, deduplication, and export. Free — no paid APIs.
Install
npx vskill@latest install avi112005/business-cards-to-crm/business-cards-to-crmSKILL.md
/business-cards-to-crm
You don't have a CRM; this skill gives you one. The user hands you business-card photos (or a folder of them). You read each image with your own vision, extract the fields, and then run a bundled, zero-dependency CLI (npx cards-crm) that normalizes, dedupes, enriches, and exports everything to a CRM-ready CSV/JSON. There is no paid API anywhere in the loop.
Resolve SKILL_DIR (do this before any command)
Every command below runs a bundled script under SKILL_DIR/. Set SKILL_DIR to the absolute path of the directory containing THIS SKILL.md you just Read — your harness gave you that path in the Read result. The CLI is a direct sibling of this file (SKILL_DIR/bin/cards-crm.js):
Run the CLI one of two ways (both equivalent):
If npx cards-crm isn't installed/published, prefer the node "${SKILL_DIR}/bin/cards-crm.js" form so the skill works everywhere. Requires Node.js ≥ 18.17.
When to use
- User drops business-card image(s), a folder, or a zip of cards and wants contacts.
- User says "put these cards into my CRM / HubSpot / Salesforce / Notion / a CSV".
- User asks to "scan / digitize / clean up" a pile of cards.
The pipeline (overview)
records.jsonl is the single source of truth: one JSON record per line, shaped by schemas/contact.schema.json. Raw and processed records share the same shape, so any stage can be re-run.
Step 1 — locate the cards
Ask or detect the source:
- A folder → glob for images (
*.jpg *.jpeg *.png *.webp *.heic *.tif *.tiff *.bmp). - Pasted/attached images → note their paths.
If the user hasn't told you where the cards are, ask. Don't guess.
Step 2 — scaffold records
This writes records.jsonl with one empty record per image (id, source, date_collected). If you were given loose image paths instead of a folder, create records.jsonl yourself using the record shape in schemas/contact.schema.json (the new command needs a directory).
Step 3 — extract (your vision)
Read every card image (parallel Read calls). For each record, fill the JSONL with exactly what is printed — do not invent anything:
name/name_original(print the name as shown, even if all-caps)title(as printed)companyemails(list),phones(list of{"raw": "…"}),websiteaddress(street/city/region/country/postal as printed)linkedin/twitter/githubif literally printedmet_at/notes— use the conversation context (event, reason you met)tags— any obvious segments
Leave absent fields empty. Flag unreadable cards to the user instead of guessing. Set provenance.extracted_by to "agent-vision".
Step 4 — validate
Fix any issues it lists (missing names, malformed emails). Exit 0 means clean.
Step 5 — normalize
Title-case names, expand titles (CEO → Chief Executive Officer), E.164 phones, lowercase emails, country codes. See references/field-normalization.md.
Step 6 — enrich (your research)
This prints a gap report (what's missing) and concrete lookup queries. Run those searches (WebSearch/WebFetch) and merge confirmed findings back into the records. Follow references/enrichment-sources.md:
- Never invent data — a missing field beats a hallucinated one.
- Record each filled field in
provenance.enriched. - One batch pass, then move on.
Step 7 — dedupe
Merges duplicates (identical email/phone = certain; fuzzy name+company = probable). Read the merge report; if it merged two different people, tell the user rather than silently trusting it. See references/dedupe-rules.md.
Step 8 — export
Targets: generic (full columns), hubspot, salesforce, notion. Default generic. Ask the user which target if they didn't say. For a non-CSV deliverable use --format json.
Step 9 — report
Summarize for the user: how many cards in, how many unique contacts out, how many merged, and where the output file is. Offer the CSV path.
Failure modes
- No images found →
newexits 1. Ask the user where the cards are. - Unreadable card → skip it, list it in your report, don't guess fields.
- Over-merging → if the dedupe report merges distinct people, lower
NAME_THRESHOLD/COMPANY_THRESHOLD in src/dedupe.js and re-run.
- Wrong target →
exportlists valid--targetchoices.
Security & permissions
- Does not send card images to any API. Extraction is your own vision.
- Enrichment is opt-in web search; only public data is used.
- Writes only the JSONL/CSV files you specify. No keys, no uploads, no
persistence of card images.
Bundled tooling
bin/cards-crm.js (entry), src/cli.js (orchestrator), src/extract.js (factory
- validation + JSONL I/O),
src/normalize.js,src/enrich.js,src/dedupe.js,
src/export.js. Review docs/ARCHITECTURE.md for the full map.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingSKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/avi112005/business-cards-to-crm/business-cards-to-crm)