← Back to blog

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 days

Auth: 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 front or back — 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 front

If two files and neither name contains front/back, map first → front, second → back.

Step 3: Call Cryvis

HTTP → Make a request

SettingValue
URLhttps://api.cryvis.com/v1/documents/indian-vehicle-rc
MethodPOST
HeaderAuthorization: Bearer {{cryvis_api_key}}
BodyMultipart/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

FieldTypeSource
RegistrationPrimaryregistration_number
Registration dateDateregistration_date
OwnerTextowner_name
AddressLong textaddress
ClassTextvehicle_class
MakeTextmanufacturer
ModelTextmodel
ChassisTextchassis_number
EngineTextengine_number
FuelTextfuel_type
Insurance valid uptoDateinsurance_valid_upto
Fitness valid uptoDatefitness_valid_upto
FinancierTextfinancier
Extract sourceSelectsource
Email threadURLGmail link
Insurance alertCheckboxformula/automation
StatusSelectok / 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 = false

Mirror 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:

  1. Status = incomplete
  2. Reply to sender: “Please email the RC back/front side we are missing.”
  3. 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 id

Do not attach RC images to Slack.

Step 8: Ops views in Airtable

ViewFilter
Insurance due 30dalert checked OR date within 30d
Missing chassischassis empty
Front onlyextract source = front (or equivalent)
Errorsstatus = error

Testing

  1. Email front+back clear JPEGs → full row, source front_and_back.
  2. Email front only → row created; maybe missing insurance if it lives on back → incomplete + Slack.
  3. Expired insurance_valid_upto in fixture → alert path fires.
  4. Wrong multipart (file instead of front) → 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 label

Store 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:

FieldTypical use
insurance_valid_uptoRoad legality / lender covenant
fitness_valid_uptoCommercial 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 upto is within the next 30 days OR Insurance alert is 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.

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.