← Back to blog

Extract PAN Card Data with Make.com: Google Drive to Google Sheets

Watch an India-KYC Drive folder, call Cryvis POST /v1/documents/pan with multipart file, and append PAN number, name, and holder type to Google Sheets.

Indian KYC packs often land as PAN card scans in a shared Drive folder before anyone opens a CRM. This Make.com scenario watches an India-KYC folder, sends each new file to Cryvis POST /v1/documents/pan, and appends structured rows to Google Sheets — including holder_type and pan_structure fields you can use for Individual vs Company routing.

Multi-document HubSpot flow: Automate KYC. Aadhaar companion: Extract Aadhaar data.

Architecture

Google Drive
  /India-KYC/pan-inbox/
        |
        v  (Watch files)
Make.com
        |
        v
POST https://api.cryvis.com/v1/documents/pan
  -F file=@scan.jpg
  -H "Authorization: Bearer ..."
        |
        v
Google Sheets
  pan_number | full_name | father_name | dob | holder_type | ...

Prerequisites

  • Cryvis API key
  • Google Drive folder dedicated to PAN uploads (isolate from Aadhaar/passport)
  • Google Sheet with a header row
  • Make.com Google Drive + Sheets + HTTP modules

Step 1: Folder and Sheet schema

Drive path example: India-KYC / pan-inbox. Optionally move processed files to pan-done to avoid re-processing.

Sheet columns:

ColumnCryvis data field
A processed_atMake now
B drive_file_idDrive module
C file_nameDrive module
D pan_numberpan_number
E full_namefull_name
F father_namefather_name
G date_of_birthdate_of_birth
H holder_type_codeholder_type_code
I holder_typeholder_type
J seriespan_structure.series
K name_initialpan_structure.name_initial
L sequencepan_structure.sequence
M check_digitpan_structure.check_digit
N statusok / error

Step 2: Watch Drive

Google Drive → Watch Files in a Folder

  • Folder: pan-inbox
  • Restrict to images/PDF if the module allows MIME filters

Downstream: Google Drive → Download a File so Make has binary content. Watching metadata alone is not enough for multipart upload.

Step 3: Call Cryvis PAN

HTTP → Make a request

SettingValue
URLhttps://api.cryvis.com/v1/documents/pan
MethodPOST
HeaderAuthorization: Bearer {{cryvis_api_key}}
Body typeMultipart/form-data
Field nameValue
fileDownloaded Drive binary (required)

Supported types: PDF, JPEG, PNG, WebP.

cURL equivalent:

curl -X POST https://api.cryvis.com/v1/documents/pan \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "file=@pan-card.jpg"

Step 4: Response fields

{
  "success": true,
  "data": {
    "pan_number": "ABCPS1234F",
    "full_name": "RAHUL SHARMA",
    "father_name": "SURESH SHARMA",
    "date_of_birth": "1992-08-14",
    "holder_type_code": "P",
    "holder_type": "Individual",
    "pan_structure": {
      "series": "ABC",
      "holder_type_code": "P",
      "holder_type": "Individual",
      "name_initial": "S",
      "sequence": "1234",
      "check_digit": "F"
    }
  }
}

holder_type_code is the 4th character semantics (e.g. P = Individual, C = Company). Use holder_type for human-readable Sheets filters.

Docs: /docs/api/extractPan · Product: /apis/pan.

Step 5: Append to Sheets

Google Sheets → Add a Row

Map each column from Step 1. For nested structure:

series       = data.pan_structure.series
name_initial = data.pan_structure.name_initial
sequence     = data.pan_structure.sequence
check_digit  = data.pan_structure.check_digit

Set status = ok on the success path.

Step 6: Route by holder type

Add a Router after a successful extract:

RouteConditionAction
Individualholder_type_code = POptional Slack “retail KYC”
Companyholder_type_code = CFlag for entity KYC pack
OtherelseOps review

You are not calling another Cryvis endpoint here — only branching on returned enums.

Step 7: Move processed files

Google Drive → Move a File from pan-inboxpan-done. Prevents Watch modules from re-ingesting the same scan on the next poll.

Step 8: Errors

Error handler on HTTP:

  1. Write a Sheets row with status=error, pan_number blank, file_name set, and a short error message column if you add one.
  2. Move the file to pan-failed instead of pan-done.
  3. Alert Slack with Drive link only — not the image bytes.

Common issues:

  • Wrong field name (document instead of file)
  • HEIC uploads (convert before Cryvis, or reject in Filter)
  • Multi-page PDF of an entire KYC pack — prefer a cropped PAN-only file for higher accuracy

Validation tips without inventing APIs

Cryvis returns structured pan_structure. You can add Make Filters such as:

  • length(pan_number) Equal to 10
  • upper(pan_number) Equals pan_number (normalize before compare)

Do not claim a separate “PAN verification against NSDL” step unless you integrate that yourself — this scenario is extraction, not government verification.

Ops cadence

MetricHow
Daily volumeCOUNTA on Sheets date column
Error ratefilter status=error
Company sharefilter holder_type_code=C

Make.com module settings (detail)

HTTP — Make a Request checklist:

  1. Body type must be Multipart/form-data, not Raw JSON.
  2. Field name is exactly file (lowercase).
  3. Field type is File; map the Drive download binary, not the file URL string.
  4. Parse response as JSON (enable JSON parse on the module or add JSON → Parse JSON).
  5. Map Sheets from data.pan_number, never from a guessed top-level pan_number unless you flatten first.

If Make shows the response as a string, add Parse JSON with JSON string = {{http.body}} (or the module’s data field name in your Make version).

Deduping PAN rows

Before Add a Row, optionally Google Sheets → Search Rows where pan_number equals data.pan_number:

  • Found → Update a Row (refresh name/DOB from latest scan)
  • Not found → Add a Row

This keeps one row per PAN when ops re-drop the same card after a blurry first attempt.

Credits and throughput

PAN extraction is 1 credit per PDF page or image (Credits). A single JPEG PAN is one credit. A multi-page PDF of an entire KYC pack still bills per page — crop to the PAN page before upload when possible.

For bursts (hundreds of files), raise Make’s scenario max run time and prefer Drive move-to-done so Watch does not re-queue.

Sample end-to-end timeline

T0  File lands in pan-inbox
T1  Watch Files fires (poll interval depends on Make plan)
T2  Download + HTTP Cryvis (~few seconds)
T3  Sheets row written; file moved to pan-done
T4  Router notifies Slack if holder_type_code = C

If T1 feels slow, switch the trigger to Google Drive → Watch Files with a shorter interval, or use a Drive webhook-style push if your Make plan supports it.

CTA

Extract Indian PAN cards to JSON with Cryvis: /apis/pan. Docs: /docs/api/extractPan. From Make, POST file to https://api.cryvis.com/v1/documents/pan with Bearer auth and append data.pan_number, data.full_name, and data.holder_type to Sheets.