This workflow corresponds to n8n.io template #7849 — we link there as the canonical source.
This workflow follows the Google Drive → Google Drive Trigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"id": "5abb0804-324f-4ba7-9d9f-45ed4555b84f",
"name": "VLM Run",
"type": "@vlm-run/n8n-nodes-vlmrun.vlmRun",
"position": [
1504,
560
],
"parameters": {
"domain": "healthcare.claims-processing"
},
"typeVersion": 1
},
{
"id": "78d37355-309d-4502-9655-ad8ca03c617d",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1952,
560
],
"parameters": {
"columns": {
"value": {
"FORM TYPE": "={{ $json.response.form_type }}",
"AMOUNT DUE": "={{ $json.response.balance_due }}",
"AMOUNT PAID": "={{ $json.response.amount_paid }}",
"INSURED DOB": "={{ $json.response.insured_dob }}",
"INSURED SEX": "={{ $json.response.insured_sex }}",
"PATIENT SEX": "={{ $json.response.patient_sex }}",
"CARRIER NAME": "={{ $json.response.carrier_name }}",
"FORM VERSION": "={{ $json.response.form_version }}",
"INSURANCE ID": "={{ $json.response.insured_id_number }}",
"INSURED NAME": "={{ $json.response.insured_name }}",
"PATIENT NAME": "={{ $json.response.patient_name }}",
"TOTAL CHARGE": "={{ $json.response.total_charge }}",
"AUTO ACCIDENT": "={{ $json.response.auto_accident }}",
"INSURANCE TYPE": "={{ $json.response.insurance_type }}",
"MARTIAL STATUS": "={{ $json.response.marital_status }}",
"OTHER ACCIDENT": "={{ $json.response.other_accident }}",
"INSURED ADDRESS": "={{ $json.response.insured_address.street }}, {{ $json.response.insured_address.city }}, {{ $json.response.insured_address.state }}, {{ $json.response.insured_address.zip_code }}",
"PATIENT ADDRESS": "={{ $json.response.patient_address.street }}, {{ $json.response.patient_address.city }}, {{ $json.response.patient_address.state }}, {{ $json.response.patient_address.zip_code }}",
"INSURED EMPLOYER": "={{ $json.response.insured_employer }}",
"INSURED PHONE NO": "={{ $json.response.insured_address.phone }}",
"PATIENT PHONE NO": "={{ $json.response.patient_address.phone }}",
"PROCESSING NOTES": "={{ $json.response.processing_notes }}",
"EMPLOYMENT STATUS": "={{ $json.response.employment_status }}",
"OTHER INSURED DOB": "={{ $json.response.other_insured_dob }}",
"OTHER INSURED SEX": "={{ $json.response.other_insured_sex }}",
"UNABLE TO WORK TO": "={{ $json.response.unable_to_work_to }}",
"EMPLOYMENT RELATED": "={{ $json.response.employment_related }}",
"FORM APPROVAL DATE": "={{ $json.response.form_approval_date }}",
"HOSPITALIZATION TO": "={{ $json.response.hospitalization_to }}",
"OTHER INSURED NAME": "={{ $json.response.other_insured_name }}",
"PATIENT ACCOUNT NO": "={{ $json.response.patient_account_number }}",
"PATIENT BIRTH DATE": "={{ $json.response.patient_birth_date }}",
"UNABLE TO WORK FROM": "={{ $json.response.unable_to_work_from }}",
"CURRENT ILLNESS DATE": "={{ $json.response.current_illness_date }}",
"HOSPITALIZATION FROM": "={{ $json.response.hospitalization_from }}",
"INSURED POLICY GROUP": "={{ $json.response.insured_policy_group }}",
"PATIENT RELATIONSHIP": "={{ $json.response.patient_relationship }}",
"SIMILLAR ILLNESS DATE": "={{ $json.response.similar_illness_date }}",
"INSURED INSURANCE PLAN": "={{ $json.response.insured_insurance_plan }}",
"OTHER INSURED EMPLOYER": "={{ $json.response.other_insured_employer }}",
"REFERRING PHYSICIAN NAME": "={{ $json.response.referring_physician_name }}",
"OTHER INSURED POLICY GROUP": "={{ $json.response.other_insured_policy_group }}",
"OTHER INSURED INSURANCE PLAN": "={{ $json.response.other_insured_insurance_plan }}"
},
"schema": [
{
"id": "FORM TYPE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "FORM TYPE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "FORM VERSION",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "FORM VERSION",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "FORM APPROVAL DATE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "FORM APPROVAL DATE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CARRIER NAME",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "CARRIER NAME",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PATIENT NAME",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PATIENT NAME",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PATIENT BIRTH DATE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PATIENT BIRTH DATE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PATIENT SEX",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PATIENT SEX",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PATIENT ADDRESS",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PATIENT ADDRESS",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PATIENT RELATIONSHIP",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PATIENT RELATIONSHIP",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PATIENT PHONE NO",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PATIENT PHONE NO",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "MARTIAL STATUS",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "MARTIAL STATUS",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "EMPLOYMENT STATUS",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "EMPLOYMENT STATUS",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "EMPLOYMENT RELATED",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "EMPLOYMENT RELATED",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "AUTO ACCIDENT",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "AUTO ACCIDENT",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "OTHER ACCIDENT",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "OTHER ACCIDENT",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CURRENT ILLNESS DATE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "CURRENT ILLNESS DATE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "SIMILLAR ILLNESS DATE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "SIMILLAR ILLNESS DATE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "UNABLE TO WORK FROM",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "UNABLE TO WORK FROM",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "UNABLE TO WORK TO",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "UNABLE TO WORK TO",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "HOSPITALIZATION FROM",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "HOSPITALIZATION FROM",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "HOSPITALIZATION TO",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "HOSPITALIZATION TO",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PATIENT ACCOUNT NO",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PATIENT ACCOUNT NO",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "TOTAL CHARGE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "TOTAL CHARGE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "AMOUNT DUE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "AMOUNT DUE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "AMOUNT PAID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "AMOUNT PAID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PROCESSING NOTES",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PROCESSING NOTES",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURANCE TYPE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURANCE TYPE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURANCE ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURANCE ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURED NAME",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURED NAME",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURED ADDRESS",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURED ADDRESS",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURED PHONE NO",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURED PHONE NO",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURED POLICY GROUP",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURED POLICY GROUP",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURED DOB",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURED DOB",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURED SEX",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURED SEX",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURED EMPLOYER",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURED EMPLOYER",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "INSURED INSURANCE PLAN",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "INSURED INSURANCE PLAN",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "OTHER INSURED NAME",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "OTHER INSURED NAME",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "OTHER INSURED POLICY GROUP",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "OTHER INSURED POLICY GROUP",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "OTHER INSURED DOB",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "OTHER INSURED DOB",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "OTHER INSURED SEX",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "OTHER INSURED SEX",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "OTHER INSURED EMPLOYER",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "OTHER INSURED EMPLOYER",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "OTHER INSURED INSURANCE PLAN",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "OTHER INSURED INSURANCE PLAN",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "REFERRING PHYSICIAN NAME",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "REFERRING PHYSICIAN NAME",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1wZQDu7Hd0iV8dqiLbfUzAwUqKnn8J0ZQFO1weZ_ShxQ/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1wZQDu7Hd0iV8dqiLbfUzAwUqKnn8J0ZQFO1weZ_ShxQ",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1wZQDu7Hd0iV8dqiLbfUzAwUqKnn8J0ZQFO1weZ_ShxQ/edit?usp=drivesdk",
"cachedResultName": "healthcare claim"
}
},
"typeVersion": 4.7
},
{
"id": "029fce72-6691-49a8-9653-c8d78183c2e5",
"name": "Download file",
"type": "n8n-nodes-base.googleDrive",
"position": [
1152,
560
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"typeVersion": 3
},
{
"id": "e51f8123-dc3c-41cd-8598-bb78cc9957fd",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
0
],
"parameters": {
"color": 7,
"width": 416,
"height": 816,
"content": "# Health Care Claim Processing with VLM Run\n\nAutomatically extracts structured health care claim details from uploaded documents in Google Drive and saves them into a Google Sheet for tracking, compliance, or reporting.\n\n## Workflow\n\n1. \ud83d\udcc2 Detect file upload in Google Drive\n2. \u2b07\ufe0f Download the uploaded document\n3. \ud83e\udd16 Convert document to structured text using VLM Run (`healthcare.claims-processing`)\n4. \ud83d\udcca Append extracted order data to Google Sheet\n\n## Perfect for\n\n* Healthcare claim submission forms\n* Insurance reimbursement requests\n* Prior authorization documentation\n* Denial and appeal workflows\n* Automated payer compliance reporting\n\n\n## Requirements\n\n* VLM Run API access\n* Google Drive + Sheets OAuth2\n* n8n server with active workflow"
},
"typeVersion": 1
},
{
"id": "00c4afaf-34a8-4a5c-903c-d66831f5dd52",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1792,
0
],
"parameters": {
"color": 7,
"width": 416,
"height": 816,
"content": "# Append Row in Sheet\n\n**Function:** Appends extracted structured data into a Google Sheet.\n\n* Columns could be: Patient, DOB, Insurance ID, CPT/HCPCS Code, Diagnosis Code, Billed Amount, Modifiers, Provider, Date of Service, Payer Response\n\n\n**Benefit:** Provides a structured, continuously updated database for tracking orders"
},
"typeVersion": 1
},
{
"id": "ebacf386-ab43-406f-ae3e-95e6089f0c0b",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1344,
0
],
"parameters": {
"width": 416,
"height": 816,
"content": "# VLM Run (Document)\n\n**Function:** Sends the health care claim file to VLM Run under the category `healthcare.claims-processing`.\n\n* Extracts structured details such as:\n\n * Patient name, DOB, insurance ID\n * Claim details (CPT/HCPCS, diagnosis codes, billed amount, modifiers)\n * Provider details (name, NPI, signature/date of service)\n * Payer response (approval, denial, adjustment codes)\n\n\n**Benefit:** Turns complex medical forms into machine-readable JSON"
},
"typeVersion": 1
},
{
"id": "f393272d-8006-43be-afd7-1e3629e40a05",
"name": "Google Drive Trigger",
"type": "n8n-nodes-base.googleDriveTrigger",
"position": [
944,
560
],
"parameters": {
"event": "fileCreated",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "list",
"value": "1E8rvLEWKguorMT36yCD1jY78G0u8g6g7",
"cachedResultUrl": "https://drive.google.com/drive/folders/1E8rvLEWKguorMT36yCD1jY78G0u8g6g7",
"cachedResultName": "test_data"
}
},
"typeVersion": 1
},
{
"id": "cd56ccab-968d-405c-b27a-dfcb40d6e1b5",
"name": "\ud83d\udcc1 Input Processing Documentation",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
0
],
"parameters": {
"color": 7,
"width": 416,
"height": 824,
"content": "# \ud83d\udcc1 Input Processing\n\n**Monitors & downloads healthcare claim files from Google Drive.**\n\n**Process:**\n1. Watches designated Drive folder\n2. Auto-triggers on new uploads\n3. Downloads files for AI processing\n\n**Supported Formats:**\n- Images (JPG, PNG, WEBP)\n- PDF documents\n- Mobile camera uploads\n- Scanned receipts"
},
"typeVersion": 1
}
],
"connections": {
"VLM Run": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Download file": {
"main": [
[
{
"node": "VLM Run",
"type": "main",
"index": 0
}
]
]
},
"Google Drive Trigger": {
"main": [
[
{
"node": "Download file",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automatically process healthcare claims into structured Google Sheets entries with VLM Run extraction Monitors Google Drive for new files in a target folder Downloads the file inside n8n for processing Sends the file to VLM Run for AI transcription or analysis Fetches extra…
Source: https://n8n.io/workflows/7849/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Transform your expense tracking with automated AI receipt processing that extracts data and organizes it instantly. Monitors Google Drive for new receipt uploads (images/PDFs) Downloads and processes
This workflow contains community nodes that are only compatible with the self-hosted version of n8n. Monitors Google Drive for new driver license image uploads Downloads and processes images using VLM
Automatically process Construction Blueprints into structured Google Sheets entries with VLM extraction
Process Physician Orders into Google Sheets with VLM Run AI Extraction
Automatically process invoices and receipts using Gemini OCR, extracting data directly into Google Sheets from multiple sources including Google Drive, Gmail, and Telegram. This powerful workflow ensu