Automate Vehicle Document Processing in Make.com: Email RC to Airtable
Parse Indian Vehicle RC attachments from email with Cryvis, store fleet records in Airtable, and flag insurance_valid_upto renewals.
Insurers, lessors, and fleet desks receive RC PDFs and photos by email all day. This Make.com scenario watches those threads, extracts structured data via Cryvis Indian Vehicle RC OCR, writes Airtable records, and surfaces insurance expiry before cover lapses.
Drive→Sheets twin: Extract Indian Vehicle RC. Deal-centric flow: Vehicle onboarding workflow.
Architecture
Email (Gmail/Outlook)
label: vehicle-rc
attachments: RC front/back
|
v
Make: download 1–2 images/PDFs
|
v
POST /v1/documents/indian-vehicle-rc
front and/or back
|
v
Airtable: Vehicles
+ insurance_valid_upto view
+ Slack if expiry < 30 daysAuth: Authorization: Bearer against https://api.cryvis.com.
Step 1: Mail rules
Create label/folder vehicle-rc. Filter: has attachment; subject/body contains RC or Registration.
Ask senders to attach:
*_front.*and/or*_back.*, or- One PDF of the RC (still map to
frontorback— prefer naming so you know which side)
Cryvis needs at least one of front / back. Two sides produce richer source: front_and_back payloads.
Step 2: Watch email and attachments
Gmail → Watch Emails (or Outlook equivalent). Iterator over attachments; keep PDF/JPEG/PNG/WebP.
Assign sides:
IF contains(lower(filename); "back")
back_bin = file
ELSE
front_bin = file # default first/non-back to frontIf two files and neither name contains front/back, map first → front, second → back.
Step 3: Call Cryvis
HTTP → Make a request
| Setting | Value |
|---|---|
| URL | https://api.cryvis.com/v1/documents/indian-vehicle-rc |
| Method | POST |
| Header | Authorization: Bearer {{cryvis_api_key}} |
| Body | Multipart/form-data |
Include whichever binaries you have as front and/or back.
Reference: /docs/api/extractIndianVehicleRc · /apis/indian-vehicle-rc.
Step 4: Airtable Vehicles base
| Field | Type | Source |
|---|---|---|
| Registration | Primary | registration_number |
| Registration date | Date | registration_date |
| Owner | Text | owner_name |
| Address | Long text | address |
| Class | Text | vehicle_class |
| Make | Text | manufacturer |
| Model | Text | model |
| Chassis | Text | chassis_number |
| Engine | Text | engine_number |
| Fuel | Text | fuel_type |
| Insurance valid upto | Date | insurance_valid_upto |
| Fitness valid upto | Date | fitness_valid_upto |
| Financier | Text | financier |
| Extract source | Select | source |
| Email thread | URL | Gmail link |
| Insurance alert | Checkbox | formula/automation |
| Status | Select | ok / incomplete / error |
Airtable → Create/Update record keyed on Registration so resubmissions overwrite.
Step 5: Insurance expiry automation
After a successful write, evaluate:
days_left = dateDifference(insurance_valid_upto; now; days)
IF EMPTY(insurance_valid_upto)
Status = incomplete
Slack: "RC missing insurance date — {registration_number}"
ELSE IF days_left < 0
Insurance alert = true
Slack: "EXPIRED insurance — {registration_number}"
ELSE IF days_left <= 30
Insurance alert = true
Slack: "Insurance renews in {days_left}d — {registration_number}"
ELSE
Insurance alert = falseMirror for fitness_valid_upto if your fleet cares about fitness certificate windows.
Cryvis only extracts the printed date; renewal booking stays in your process.
Step 6: Incomplete document path
When chassis_number or engine_number is null:
- Status =
incomplete - Reply to sender: “Please email the RC back/front side we are missing.”
- Keep the Airtable row — do not delete partial data
When both sides later arrive on a new email with the same registration in the subject, Update merges fields.
Step 7: Error handler
HTTP
success -> Airtable -> expiry checks -> optional reply
error -> Airtable Status=error (if registration unknown, create stub with email subject)
-> Slack status code + message idDo not attach RC images to Slack.
Step 8: Ops views in Airtable
| View | Filter |
|---|---|
| Insurance due 30d | alert checked OR date within 30d |
| Missing chassis | chassis empty |
| Front only | extract source = front (or equivalent) |
| Errors | status = error |
Testing
- Email front+back clear JPEGs → full row,
sourcefront_and_back. - Email front only → row created; maybe missing insurance if it lives on back → incomplete + Slack.
- Expired
insurance_valid_uptoin fixture → alert path fires. - Wrong multipart (
fileinstead offront) → 400; error handler verified.
Threading and idempotency
Partners often resend the same RC in a reply thread. Key Airtable on registration_number, not message id:
Watch Email
-> extract
-> Airtable: find by registration_number
found -> update insurance/fitness/chassis
missing -> create
-> mark Gmail as read / archive labelStore last_message_id on the record to skip no-op reprocessing when the attachment hash is unchanged (optional: compare Drive MD5 if you stage attachments).
What not to put in Slack
Safe: registration number, days until insurance expiry, Airtable record URL.
Unsafe: full RC image, owner address dumps in public channels.
Use a private #fleet-compliance channel and HubSpot/Airtable for PII-adjacent owner fields.
Fitness vs insurance
Both dates come from the RC when printed:
| Field | Typical use |
|---|---|
insurance_valid_upto | Road legality / lender covenant |
fitness_valid_upto | Commercial vehicle fitness certificate window |
Run the same days_left logic on both; tag Slack with which date triggered the alert.
Credits and attachment caps
Each RC image/PDF page costs 1 credit. Cap the Iterator at two attachments so a long email thread with unrelated PDFs does not burn credits. Filter MIME strictly before HTTP.
Airtable interface for renewals
Build an Interface (or Grid view) titled Insurance 30-day:
- Filter:
Insurance valid uptois within the next 30 days ORInsurance alertis checked - Fields: Registration, Owner, Insurance valid upto, Email thread
- Button field: open Gmail compose to the last sender asking for renewed policy + updated RC if printed dates changed
Extraction gets you the date; the Interface is where humans close the loop.
Multipart reminder
Email automation often copies an invoice HTTP module. Change field names to front / back before go-live — file will 400 on indian-vehicle-rc.
Related reading
CTA
Automate RC email intake with Cryvis: /apis/indian-vehicle-rc. Docs: /docs/api/extractIndianVehicleRc. POST front/back to https://api.cryvis.com/v1/documents/indian-vehicle-rc, map insurance_valid_upto into Airtable, and alert before cover expires.