Google Drive to Google Sheets, business cards to leads
Business cards feel harmless. Then you get back from an event with a stack of them, your phone is full of photos, and “I’ll add these later” turns into lost leads.
Sales teams usually feel this first. But recruiters and event coordinators run into the same wall. This business card automation gets your contacts into Google Sheets fast, with fewer typos and no copy-paste marathon.
You’ll upload a card image, the workflow extracts the details with AI, cleans the data, and appends a tidy row to your sheet (plus keeps the original image in Google Drive for backup). Then follow-up becomes the easy part.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Google Drive to Google Sheets, business cards to leads
flowchart LR
subgraph sg0["On form submission Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>On form submission"]
n1@{ icon: "mdi:database", form: "rounded", label: "Add contact to tracking sheet", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Transform Output"]
n3@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "GPT4o", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "Neural assistant for contact..", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter bad data", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Upload file", pos: "b", h: 48 }
n4 -.-> n5
n6 --> n1
n2 --> n6
n0 --> n5
n0 --> n7
n3 -.-> n5
n5 --> n2
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n3,n5 ai
class n4 aiModel
class n6 decision
class n1 database
class n2 code
classDef customIcon fill:none,stroke:none
class n0,n2 customIcon
Why This Matters: business cards shouldn’t become forgotten leads
The real cost of business cards isn’t printing them. It’s what happens after you collect them. You snap photos in a hurry, the lighting is bad, and later you squint at tiny text while flipping between your camera roll, contacts app, and spreadsheet. One missed digit in a phone number means a follow-up never lands. One typo in an email means you think “they ghosted,” when honestly you emailed nobody. It’s tedious work, so it gets postponed. And when it gets postponed, leads go cold.
It adds up fast. Here’s where it breaks down in real life.
- Typing 30 cards into a sheet can easily take about 2 hours, and that’s before you double-check for mistakes.
- Photos end up scattered across phones and shared drives, so you can’t later prove what was on the original card.
- Your team follows up inconsistently because there’s no “single list” everyone trusts.
- Even good schedulers and CRMs don’t help if the data entry step is still manual.
What You’ll Build: business card photos → structured leads in Sheets
This workflow turns a simple upload into a ready-to-use lead record. It starts when someone submits a form with one or more business card photos. Those images get saved into a specific Google Drive folder right away, so you have an archive you can refer back to later. Next, an AI contact extractor reads each card using an image-capable model (GPT‑4o in this build) and returns structured fields like name, company, email, and phone. Then a short data-cleaning step normalizes the results, strips weird characters (like “+” in phone numbers), and drops empty records so junk doesn’t pollute your spreadsheet. Finally, clean contacts get appended as new rows in Google Sheets, giving you a single follow-up list your whole team can work from.
The workflow begins with a form submission trigger. From there, Google Drive stores the images while the AI processes each file and outputs consistent JSON. The last stage is simple: filter, clean, and append the row to your Google Sheet.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you come home from an event with 40 cards. Manually, even at about 3 minutes per card (open photo, type fields, re-check), you’re looking at around 2 hours of data entry. With this workflow: maybe 5 minutes to upload the photos through the form, then you wait while AI processes them and the sheet fills itself. You get most of that time back, and the list is usable the same day.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Drive for storing card images in a folder.
- Google Sheets to store cleaned contacts in rows.
- OpenAI API key (get it from your OpenAI API dashboard)
Skill level: Beginner. You’ll connect Google + OpenAI accounts, then map a few fields to your sheet columns.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A form submission kicks things off. Someone uploads one or multiple business card images (JPG/PNG) using the n8n form trigger. That submission carries the files into the workflow, no email chains required.
The images get stored for safekeeping. A Google Drive step saves each uploaded file into a defined folder. That archive matters when someone later asks, “What did the card actually say?”
AI extracts contact data from each image. The agent uses an image-capable model (GPT‑4o here) to read the card text and return structured fields. Then a structured output parser keeps the response predictable, so “Name” doesn’t randomly show up as “Full name” or “Contact person.”
Data gets normalized, filtered, and written to Sheets. A Code step cleans common formatting issues (phone symbols, stray characters) and the filter removes empty or useless records. Finally, the Google Sheets node appends a new row to your contact sheet, ready for follow-up and assignment.
You can easily modify the extracted fields to match your sheet (or future CRM fields) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
Set up the form that captures business card images and kicks off the workflow.
- Add the Form Submission Trigger node and set Form Title to
Name Card Uploader Form. - Set Form Description to
Upload a photo of one or more business cards. Our system will automatically extract contact details, such as name, company, phone number, and email, and save them to your team’s Google Sheet for easy access and follow-up.. - In Form Fields, add a file field labeled
Name Card Pictureand set Accept File Types to.jpg,.jpge,.png.
Step 2: Connect Google Drive and Google Sheets
Store the uploaded images and prepare the destination sheet for contact data.
- Open Store File in Drive and set Name to
={{ $now.toFormat("yyyyLLdd-HHmmss") }}-{{$binary.data.fileName}}. - Select the target Drive and folder in Store File in Drive (replace
[YOUR_ID]with your folder ID). - Credential Required: Connect your
googleDriveOAuth2Apicredentials in Store File in Drive. - Open Append to Contact Sheet and set Operation to
append. - Choose the spreadsheet in Document ID and sheet in Sheet Name (replace
[YOUR_ID]with your Sheet ID). - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Append to Contact Sheet.
Name, JobTitle, Company, Phone, Email, Website, Address, and LinkedIn to avoid mapping issues.Step 3: Set Up the AI Extraction Pipeline
Configure the AI model and structured parsing to extract contact details from the uploaded images.
- In OpenAI Vision Model, select the model
gpt-4o. - Credential Required: Connect your
openAiApicredentials in OpenAI Vision Model. - Open AI Contact Extractor and set Text to
Extract all business contact details from this image of multiple name cards. Return full names, job titles, company names, phone numbers, email addresses, websites, office addresses, and any relevant information such as QR code content or social media links. Do not include decorative elements or branding.. - Confirm AI Contact Extractor has Has Output Parser enabled and that Structured Data Parser is connected as its output parser.
- In Structured Data Parser, keep the JSON Schema Example as provided to enforce structured outputs.
Step 4: Normalize, Filter, and Append Contacts
Clean the AI output, remove empty records, and append valid contacts to Google Sheets.
- In Normalize Contact Records, keep the JavaScript code as provided to map and clean fields, including phone and email normalization.
- Configure Filter Empty Contacts to pass records where Left Value is
={{ $json.Name }}and the condition isnotEmpty. - Ensure the execution flow follows AI Contact Extractor → Normalize Contact Records → Filter Empty Contacts → Append to Contact Sheet.
Step 5: Test and Activate Your Workflow
Run a full test to confirm file storage, AI extraction, and sheet updates work as expected.
- Click Test Workflow and submit a sample image through the Form Submission Trigger form.
- Verify the file appears in Google Drive with a timestamped name from Store File in Drive.
- Check the Google Sheet to confirm new rows were appended by Append to Contact Sheet with populated fields.
- When successful, toggle the workflow to Active to enable production use.
Troubleshooting Tips
- Google Drive credentials can expire or need specific permissions. If things break, check the Google connection in n8n’s Credentials panel first, then confirm the target folder is still accessible.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- OpenAI calls can fail from rate limits or an invalid API key. If the AI Contact Extractor returns blanks, verify the key, confirm billing is active, and try a smaller batch upload.
Quick Answers
About 30 minutes if your Google and OpenAI accounts are ready.
No. You’ll mostly connect accounts and map fields to your Google Sheet. The included Code step is already set up for basic cleanup.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs, which are usually small per card but depend on image size and model.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you probably should. You can adjust what gets extracted by changing the prompt in the AI Contact Extractor, then update the Structured Data Parser to match your fields. Common tweaks include adding “Industry” and “Notes,” capturing the submitter name from the form, and requiring at least an email before writing to Google Sheets.
Usually it’s expired OAuth access or the Drive folder permissions changed. Reconnect Google Drive in n8n, then confirm the workflow is pointing at a folder your account still owns or can edit. Also check if your Google admin restricts Drive access for third-party apps.
A lot, as long as your OpenAI usage and n8n plan can keep up. On n8n Cloud, your monthly execution limit depends on your plan, and each uploaded card can count as an execution (or more, depending on batching). If you self-host, there’s no execution cap, but your server resources and API rate limits become the bottleneck. Practically, most small teams can process event-day batches (50–200 cards) without issues once batching is tuned, and you’ll know quickly if you need to slow the loop or split uploads.
Often, yes. n8n is easier to extend when you need filtering, parsing, and “only write to Sheets if X is present” logic, and you can self-host for high-volume capture without worrying about every tiny step costing more. AI vision extraction also tends to be more flexible in n8n because you can shape structured outputs and add your own cleanup code. Zapier or Make can still be fine if you want a very simple flow and don’t care about archiving images in Drive. If you’re on the fence, Talk to an automation expert and describe your volume and follow-up process.
You collect the cards. The workflow turns them into a clean lead list, automatically. Honestly, that’s the difference between “nice chat” and “closed deal.”
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.