Extract Driver's License Data with Zapier: Dropbox to Notion
Watch Dropbox license scans, call Cryvis POST /v1/documents/driver-license with required ISO alpha-3 country via Custom Request, and sync fields into Notion.
Driver's license OCR is country-specific. Cryvis requires a multipart country field (ISO 3166-1 alpha-3) alongside file so the correct schema runs — India vs USA vs UK are not the same JSON shape. Omitting country or sending US / IN returns 400. This Zap watches a Dropbox folder, sends each scan with an explicit alpha-3 code, and upserts a Notion database row.
PAN twin (single file): Extract PAN card data. Multi-ID intake: Automate KYC. Hub: /blog/zapier.
Architecture
Dropbox /licenses/{COUNTRY}/scan.jpg
|
v
Zapier: New File in Folder
derive country from folder name (IND, USA, ...)
|
v
Custom Request
POST https://api.cryvis.com/v1/documents/driver-license
-F file=@scan.jpg
-F country=USA
-H "Authorization: Bearer ..."
|
v
Notion database: LicensesSupported countries (alpha-3 required)
Pass exactly one of:
| Code | Country |
|---|---|
IND | India |
USA | United States |
VNM | Vietnam |
GBR | United Kingdom |
THA | Thailand |
IDN | Indonesia |
Anything else is rejected. Do not send US, IN, UK, or VN — alpha-3 only.
Step 1: Dropbox layout
/licenses
/USA
/IND
/GBR
/VNM
/THA
/IDN
/_failed
/_doneFolder name = country parameter. This avoids a fragile manual mapping table inside Zapier.
Step 2: Watch and download
Dropbox → New File in Folder on each country folder (or one Zap per country if recursive watch is unavailable).
Ensure the step exposes file content / binary for Custom Request.
Formatter by Zapier → Text (or Code) to set country:
country = upper(folder name under /licenses)
# e.g. /licenses/USA/jane.jpg -> USAFilter by Zapier: country (Text) Is in IND,USA,VNM,GBR,THA,IDN. Else Dropbox → Move File to /_failed and stop.
Step 3: Cryvis Driver License API
Webhooks by Zapier → Custom Request
| Setting | Value |
|---|---|
| Method | POST |
| URL | https://api.cryvis.com/v1/documents/driver-license |
| Headers | Authorization: Bearer YOUR_API_KEY |
| Payload Type | Form / multipart |
| Part | Required | Value |
|---|---|---|
file | yes | Downloaded binary |
country | yes | USA / IND / … (text field, not a file) |
Both parts must be present. Sending country as a file part or file as text fails validation.
cURL (USA example):
curl -X POST https://api.cryvis.com/v1/documents/driver-license \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "country=USA" \
-F "file=@drivers-license.jpg"Docs: /docs/api/extractDriverLicense · /apis/driver-license.
Step 4: USA response example
Shared identity/license fields plus US-specific extras:
{
"success": true,
"data": {
"full_name": "JANE DOE",
"date_of_birth": "1990-05-20",
"address": "123 Main St, Austin, TX 78701",
"license_number": "D1234567",
"issue_date": "2022-01-15",
"expiry_date": "2030-05-20",
"state": "TX",
"license_class": "C",
"restrictions": null,
"endorsements": null,
"sex": "F",
"height": "5-06",
"eye_color": "BRN"
},
"meta": {
"request_id": "req_dl_01hxyz"
}
}Always map the common set:
full_name,date_of_birth,addresslicense_number,issue_date,expiry_date
Then map country-specific fields when present (null-safe):
| Country | Extra fields (examples) |
|---|---|
| USA | state, license_class, restrictions, endorsements, height, eye_color, sex |
| IND | vehicle_classes, blood_group, issuing_rto, father_name_or_guardian |
| GBR | categories, issuing_authority, sex, place_of_birth |
| VNM | license_class, place_of_issue |
| THA | license_type, national_id_number, blood_group, issuing_authority |
| IDN | license_type, blood_group, height, place_of_birth, issuing_authority |
Step 5: Notion database
Properties:
| Property | Type |
|---|---|
| Name | Title ← full_name |
| Country | Select ← country |
| License number | Rich text |
| DOB | Date |
| Address | Rich text |
| Issue | Date |
| Expiry | Date |
| State / Region | Rich text (USA state, etc.) |
| Class | Rich text |
| Restrictions | Rich text |
| Endorsements | Rich text |
| Sex | Rich text |
| Height | Rich text |
| Eye color | Rich text |
| Dropbox path | URL |
| Status | Select |
Notion → Create Database Item (or Find + Update if you key on license number + country).
Step 6: Paths for country-specific Notion fills
Because Zapier field mappings are static per step, use Paths by Zapier after Custom Request:
Path USA -> map state, license_class, restrictions, endorsements, height, eye_color, sex
Path IND -> map vehicle_classes, blood_group, issuing_rto, father_name_or_guardian
Path GBR -> map categories, issuing_authority, sex, place_of_birth
...Each path still writes the common fields. Missing country-specific keys stay empty rather than inventing placeholders. One Notion database is enough; leave unused country columns blank.
Step 7: Expiry, hygiene, and common failures
Set Notion Status from expiry_date (expired / expiring_soon / valid) with Formatter + Filter — Cryvis returns dates; your Zap owns the rules.
On success: Dropbox → Move File to /licenses/_done/{country}/. On error: /_failed/{country}/ and Status error.
| Mistake | Result |
|---|---|
Omit country | 400 |
country=US / IN / UK | Rejected — use USA / IND / GBR |
IND scan with country=USA | Wrong schema — match folder to issuing country |
Flat partner drops: require a filename suffix (jane_doe_USA.jpg), parse with Formatter → Split Text, Filter against the six alpha-3 codes before Custom Request.
Credits: 1 per PDF page or image (Credits). Prefer a single clear primary-side image unless you merge sides upstream.
Related reading
- Automate KYC multi-doc
- Extract PAN card data
- Convert PDFs to JSON
- Extract Indian vehicle RC
- /blog/zapier
CTA
Parse driver's licenses with country-aware schemas: /apis/driver-license. Docs: /docs/api/extractDriverLicense. From Zapier, Custom Request POST file + country (IND/USA/VNM/GBR/THA/IDN — alpha-3 only) to https://api.cryvis.com/v1/documents/driver-license with Bearer auth, then sync data.* into Notion.