Tutorial - vCard business cards
Print a tap-to-save contact QR on the back of your business card.
Tutorial: vCard business cards
Print one tiny QR on the back of your business card. Your contact taps "Save Contact" and you are in their address book - name, phone, email, LinkedIn, all of it. No typing.
What you will build
A 1 x 1 inch black-on-white vCard QR designed to fit on a standard business card alongside your existing layout.
Step 1: Build your vCard payload
{
"name": "Darius Tokam",
"org": "QR Code Agency",
"title": "Founder",
"phone": "+15145551234",
"email": "darius@qrstudio.agency",
"url": "https://qrstudio.agency",
"address": "123 Rue Saint-Laurent, Montreal QC H2X 2T1",
"note": "Print once. Edit forever."
}tip: What to include Keep it minimal. The more fields, the bigger the QR matrix gets, the smaller each module becomes. For business-card use:
- Always:
name,phoneoremail - Often:
org,title,url - Rarely:
address,note(only if relevant)
Step 2: Generate
cURL
curl -X POST https://api.qrstudio.agency/api/v1/generate/ \
-H "X-Api-Key: smk_..." \
-H "Content-Type: application/json" \
-d '{
"data_type": "vcard",
"payload": {
"name": "Darius Tokam",
"org": "QR Code Agency",
"title": "Founder",
"phone": "+15145551234",
"email": "darius@qrstudio.agency",
"url": "https://qrstudio.agency"
},
"size_inches": 1,
"dpi": 600,
"color": "black",
"background": "white",
"pattern": "rounded"
}' \
--output card-qr.pngPython
import requests
r = requests.post(
"https://api.qrstudio.agency/api/v1/generate/",
headers={"X-Api-Key": "smk_..."},
json={
"data_type": "vcard",
"payload": {
"name": "Darius Tokam",
"org": "QR Code Agency",
"title": "Founder",
"phone": "+15145551234",
"email": "darius@qrstudio.agency",
"url": "https://qrstudio.agency",
},
"size_inches": 1,
"dpi": 600,
"color": "black",
"background": "white",
},
)
open("card-qr.png", "wb").write(r.content)note: Why 600 DPI here At 1 inch, 300 DPI gives 300 x 300 px. With many vCard fields, the QR matrix has more modules. At this small physical size, doubling DPI keeps each module crisp. 600 DPI requires Pro plan or higher.
Step 3: Test it
- Email yourself the PNG.
- View it at full size on your phone.
- Open another phone's camera, scan.
- Tap "Add to Contacts": the form should pre-fill all fields.
Step 4: Add the QR to your card design
In Illustrator, Affinity, Canva:
- Place
card-qr.pngon your existing card template. - Resize to ~25 mm (about 1 inch); keep it square.
- Align to a corner with at least 3 mm clearance from the edge.
- Print on standard 350 g/m2 card stock with matte or soft-touch lamination. Avoid glossy: glare hurts scanability.
Common issues
warning: Phones with old vCard parsers Android 6 and earlier sometimes choke on
EMAIL:lines with multiple addresses. Use one email max inemailsas an array and accept that older devices may show only the first.
warning: International phone numbers Always use E.164 format:
+1 514 555 1234-> store as+15145551234. Without the+, scanners cannot dial it as a tap action.
warning: Long URLs in url A 50-character LinkedIn URL is fine; a 300-character analytics-laden URL bloats the matrix. Use a short link service for marketing trails, or use a dynamic QR.
Variant: a dynamic vCard
Print a dynamic QR pointing at a personal landing page that hosts the vCard download. Update your phone number / email later by editing the landing page or by re-pointing the dynamic QR. No reprinting cards.
{
"data_type": "dynamic",
"payload": {
"name": "Darius - business card",
"destination_url": "https://qrstudio.agency/people/darius/vcard"
},
"size_inches": 1,
"dpi": 600
}The QR encodes q.qrstudio.agency/q/<short_id>/. When scanned, that
URL serves the latest vCard download.
What is next
- Wi-Fi poster: same idea for cafe Wi-Fi
- Print quality: picking DPI for paper / lamination
- Dynamic campaign with analytics