Extract Indian Vehicle RC Data with Make.com: Drive to Fleet Sheets
Watch Google Drive for RC front/back scans, call Cryvis POST /v1/documents/indian-vehicle-rc, and append registration and chassis fields to a fleet Google Sheet.
Fleet ops still retype Registration Certificate (RC) fields into spreadsheets. This Make.com scenario watches a Drive folder for Indian RC front and/or back images, calls Cryvis POST /v1/documents/indian-vehicle-rc, and appends structured vehicle rows to Google Sheets for fleet inventory.
Related: Automate vehicle document processing (email → Airtable), Vehicle onboarding workflow (webhook → HubSpot).
Architecture
Google Drive
/fleet-rc/inbox/
KA01AB1234_front.jpg
KA01AB1234_back.jpg
|
v
Make: pair front/back by prefix
|
v
POST https://api.cryvis.com/v1/documents/indian-vehicle-rc
-F front=@... (and/or)
-F back=@...
-H "Authorization: Bearer ..."
|
v
Google Sheets: Fleet registryAPI contract
| Item | Value |
|---|---|
| URL | https://api.cryvis.com/v1/documents/indian-vehicle-rc |
| Auth | Authorization: Bearer YOUR_API_KEY |
| Multipart | front and/or back — at least one required |
| Not used | Do not send a generic file part for this endpoint |
cURL:
curl -X POST https://api.cryvis.com/v1/documents/indian-vehicle-rc \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "front=@rc-front.jpg" \
-F "back=@rc-back.jpg"Docs: /docs/api/extractIndianVehicleRc · /apis/indian-vehicle-rc.
Step 1: Drive naming convention
{registration_guess}_front.jpg
{registration_guess}_back.jpgExamples: KA01AB1234_front.jpg, KA01AB1234_back.jpg. Registration guess is only for pairing — trust Cryvis registration_number in the Sheet.
Folders:
/fleet-rc/inbox
/fleet-rc/done
/fleet-rc/failedStep 2: Watch and pair
Google Drive → Watch Files on inbox.
Use a Data store or Aggregate by filename prefix (strip _front / _back):
pair_key = replace(replace(filename; "_front"; ""); "_back"; "")
side = if(contains(filename; "_front"); "front"; "back")When a pair_key has front only, back only, or both, proceed — Cryvis accepts any non-empty combination of front/back. Waiting for both improves completeness (source often becomes front_and_back).
Step 3: Download binaries
Download available sides into front_bin / back_bin. Build multipart dynamically:
| Condition | Parts sent |
|---|---|
| Both | front, back |
| Front only | front |
| Back only | back |
Step 4: HTTP module
HTTP → Make a request → multipart as above. Parse JSON data.
Typical fields:
{
"success": true,
"data": {
"registration_number": "KA01AB1234",
"registration_date": "2019-06-15",
"owner_name": "RAHUL SHARMA",
"address": "12 MG Road, Bengaluru, Karnataka 560001",
"vehicle_class": "LMV",
"manufacturer": "MARUTI SUZUKI",
"model": "SWIFT",
"chassis_number": "MA3EJLF1S00123456",
"engine_number": "K12MN1234567",
"fuel_type": "Petrol",
"insurance_valid_upto": "2025-06-14",
"fitness_valid_upto": "2026-06-14",
"financier": "HDFC BANK LTD",
"source": "front_and_back"
}
}Map all of these into Sheet columns. source tells you whether extraction used front, back, or both — useful when chassis is missing (often on the side you did not upload).
Step 5: Fleet Sheet columns
| Column | Field |
|---|---|
| processed_at | now |
| registration_number | data.registration_number |
| registration_date | data.registration_date |
| owner_name | data.owner_name |
| address | data.address |
| vehicle_class | data.vehicle_class |
| manufacturer | data.manufacturer |
| model | data.model |
| chassis_number | data.chassis_number |
| engine_number | data.engine_number |
| fuel_type | data.fuel_type |
| insurance_valid_upto | data.insurance_valid_upto |
| fitness_valid_upto | data.fitness_valid_upto |
| financier | data.financier |
| source | data.source |
| drive_pair_key | pair_key |
| status | ok / error |
Google Sheets → Add a Row. Optionally Search rows first on registration_number and Update instead of Append to keep one row per vehicle.
Step 6: Completeness Filter
After extract:
IF EMPTY(chassis_number) OR EMPTY(engine_number)
status_note = incomplete_identifiers
(optional) Slack fleet ops
ELSE
status_note = completeIncomplete rows still belong in the Sheet — do not drop them. Ops can drop the missing side into inbox with the same prefix and you can Upsert.
Step 7: Move files
Success → done/{pair_key}/. Error → failed/. Clear inbox so Watch does not loop.
Step 8: Errors
| Cause | Fix |
|---|---|
No front or back part | At least one required |
Used file like PAN | Wrong field names for RC |
| 401 | Bearer token |
| Unreadable scan | Re-shoot; keep status=error row |
Fleet reporting ideas
Without leaving Sheets:
- Filter
insurance_valid_upto < today+30dfor renewals - Pivot by
manufacturer/vehicle_class - Count rows where
source != front_and_backas quality debt
Pairing race conditions
Drive Watch can deliver _front and _back as two separate scenario runs seconds apart. Options:
- Data store lock — on first side, write a record keyed by
pair_keywith optionalfront_id/back_id. On second side, merge and only then call Cryvis; clear the store entry after success. - Delay — after seeing one side, Sleep 60–120s, re-list folder for the sibling file, then proceed with whatever exists (front-only still valid).
- Manual batch — ops drops both files, then moves a
READYmarker file that triggers the scenario.
Prefer (1) for production fleets; (3) for low volume.
Upsert by registration number
After extract, Search Rows on registration_number:
- Update chassis/engine/insurance if the row exists (re-scan with the missing side)
- Append if new
Normalize before search: upper(replace(registration_number; " "; "")) so KA 01 AB 1234 matches KA01AB1234 if you also normalize the Sheet column on write.
Credits
Indian Vehicle RC is 1 credit per image. Front+back = two credits when both are images. Worth it when chassis/engine sit on opposite sides.
Sample Sheets formulas
Insurance days left = =[insurance_valid_upto] - TODAY()
Needs attention = =OR([Insurance days left]<30, [chassis_number]="")Use these in a filtered view for Monday fleet standups.
HTTP module field reference
| Multipart name | Required | Notes |
|---|---|---|
front | one of front/back | RC face with registration / owner |
back | one of front/back | Often chassis, engine, insurance |
Never send file on this endpoint (that is PAN/invoice shape). Never send first_page (passport only).
When source is not front_and_back
source value (typical) | Meaning | Action |
|---|---|---|
| front only | Back missing | Ask for back if chassis empty |
| back only | Front missing | Ask for front if registration empty |
| front_and_back | Both used | Prefer for fleet master data |
Exact enum strings follow the API response; treat source as an ops signal, not a billing field.
Related reading
- Email → RC → Airtable + insurance
- Form → Notion chassis/engine
- Webhook → HubSpot deals
- /blog/make-com
CTA
Extract Indian RC front/back to JSON: /apis/indian-vehicle-rc. Docs: /docs/api/extractIndianVehicleRc. In Make, POST multipart front and/or back to https://api.cryvis.com/v1/documents/indian-vehicle-rc with Bearer auth and write registration_number, chassis_number, and insurance dates into your fleet Sheet.