Extract Receipt Data from Images with Make.com
Accept JPEG and PNG receipts via Make.com webhooks or Google Forms, extract fields with Cryvis, and append merchant and totals to Google Sheets.
Phone photos are the default expense artifact. PDFs from cashiers are optional; camera rolls are not. This scenario accepts JPEG/PNG (and WebP) through a Make webhook or Google Forms file upload, runs Cryvis Receipt extraction, and writes a clean row to Google Sheets.
Hub index: Make.com. PDF-heavy Drive folders: extract receipt data. Field-level Sheets design: receipt to Google Sheets.
Workflow
Two triggers share the same Cryvis + Sheets tail. Pick one.
Option A — Custom webhook (mobile / app)
[Webhooks: Custom Webhook]
multipart or JSON+file URL
|
v
[HTTP: Get File] (if URL-based)
|
v
[HTTP: Make a Request] Cryvis Receipt
|
v
[Google Sheets: Add a Row]Option B — Google Forms (field teams)
[Google Forms: Watch Responses]
|
v
[Google Drive: Download a File] (form upload)
|
v
[Filter: image/* or pdf]
|
v
[HTTP: Make a Request] Cryvis Receipt
|
v
[Google Sheets: Add a Row]
+ optional Slack pingModules
| Module | When to use |
|---|---|
| Webhooks — Custom Webhook | Apps, Zapier-less mobile clients, internal tools |
| Google Forms — Watch Responses | Non-technical submitters |
| Google Drive — Download a File | Forms stores uploads in Drive |
| Filter | Enforce jpeg/png/webp/pdf |
| HTTP — Make a Request | Cryvis |
| Google Sheets — Add a Row | Ledger |
| Router | Split “image ok” vs “needs re-shoot” using totals presence |
Google Forms tip: use a File upload question limited to images, required. Add short text fields for Employee and Project code — Cryvis will not invent those from the photo.
Cryvis HTTP configuration
| Setting | Value |
|---|---|
| Endpoint | https://api.cryvis.com/v1/documents/receipt |
| Method | POST |
| Header | Authorization: Bearer <API_KEY> |
| Body type | Multipart/form-data |
| Part name | file |
| Filename | Preserve original (IMG_2041.jpg) for audit trails |
MIME support for this path: jpeg, png, webp (plus pdf if you allow it on the form). Credits: 1 per image. A webhook that sends three images as three separate scenario runs costs three credits; a single request with multiple file parts returns results[] and still bills per image.
Docs: extractReceipt. Product page: apis/receipt.
Webhook payload patterns
Preferred: multipart webhook where Make receives the file directly and maps it into the Cryvis multipart field.
Alternate: JSON body with file_url + employee_id. Then:
- HTTP GET the URL (signed S3/GCS link).
- Pass binary into Cryvis.
Do not base64-embed large photos inside JSON if you can avoid it — Make payload size limits will bite on multi-megapixel receipts.
Response fields for image receipts
Image receipts often have weaker line_items than digital PDFs. Still map:
data.merchant.name
data.transaction_date
data.transaction_time
data.total_amount
data.tax_total
data.currency
data.receipt_number
data.receipt_type
data.location.city
data.payment.method
data.amount_paidIf transaction_date is null (cropped header), keep the Sheets row and set Needs Review = true via a Filter on empty date.
Response mapping to Sheets
| Column | Source |
|---|---|
| Employee | Form field / webhook JSON |
| Project | Form field |
| Merchant | data.merchant.name |
| Date | data.transaction_date |
| Total | data.total_amount |
| Tax | data.tax_total |
| Currency | data.currency |
| Receipt # | data.receipt_number |
| Type | data.receipt_type |
| Photo URL | Drive link or webhook CDN URL |
| Needs Review | Formula or mapped boolean |
Keep Photo URL clickable. Auditors open the image faster than they reopen the form response.
Destination specifics
Sheets
Use a tab named Mobile Receipts separate from PDF pipeline tabs. Mobile photos have higher Needs Review rates; mixing them with clean PDF extractions rows skews ops dashboards.
Conditional formatting: highlight rows where Total is empty or Needs Review is true.
Webhook consumers
Return a simple JSON response from the webhook scenario so the mobile client can show success:
{ "ok": true, "merchant": "North Cafe", "total": 28.4 }Map those from Cryvis data in the Webhook response module.
Image quality edge cases
- Glare / shadow: totals may still extract; merchant name may not. Route to Needs Review when
merchant.nameis empty buttotal_amountexists. - Multi-receipt collage: one photo of two paper receipts confuses line boundaries. Instruct users: one receipt per frame.
- HEIC from iPhone: Make/Drive may convert or reject. Prefer Forms settings that convert to JPEG, or add a Converter module before Cryvis. Cryvis accepts jpeg/png/webp/pdf — not HEIC as a first-class MIME in this integration.
- Screenshots of e-receipts: usually fine; treat as PNG.
- Rotated images: Cryvis handles common rotations; extreme skew still benefits from a retake.
- Low resolution zooms: cropping too tightly can drop the merchant header while leaving the total barcode area. Prefer full-ticket framing with a small margin.
- Flash blowout on thermal paper: white-hot highlights erase ink. Ask field staff to disable flash and use ambient light.
Pre-flight checks in Make
Before calling Cryvis, a cheap Filter saves credits:
- MIME allowlist passes.
- File size between ~20 KB and 10 MB (empty stubs and huge panoramas both fail usefully).
- Optional: filename does not match
IMG_0000placeholders from failed camera apps.
If your mobile client can compute blur scores, reject client-side first. Otherwise rely on Needs Review when total_amount is null.
For Gmail attachment flows instead of camera uploads, use automate expense tracking.
Errors
| Case | Response |
|---|---|
| Webhook without file | HTTP 400 back to client; no Cryvis call |
| Unsupported MIME | Filter → Sheets Rejected row with reason |
| Cryvis 4xx | Break; notify submitter via Slack if Employee known |
| Cryvis 5xx / 429 | Incomplete execution; retry |
Empty total_amount | Still write row; Needs Review = true |
Never retry unsupported MIME errors — they will not heal.
Test plan
- Submit a sharp JPEG of a grocery receipt through Forms.
- Verify Drive download + Cryvis
success. - Confirm Sheets row: merchant, date, total, photo link.
- Submit a pitch-black photo; confirm Needs Review path.
- Hit the webhook with a PNG screenshot of an e-receipt.
- Submit HEIC if your iOS device defaults to it — document whether conversion is required.
Mapping employee metadata
Cryvis extracts what is on the receipt. It does not know who submitted the photo. Always carry Form/webhook fields alongside data.*:
| Metadata | Why |
|---|---|
| Employee email | Reimbursement owner |
| Cost center | GL coding |
| Project / trip ID | Client billable vs overhead |
| Client-reported amount | Optional sanity check vs total_amount |
If client-reported amount and data.total_amount differ by more than your threshold (commonly 2–5%), set Needs Review = true and optionally Slack the submitter. That catches wrong-photo uploads without blocking the entire pipeline.
Production checklist
- Forms: limit file size (e.g. 10 MB) to protect Make operations.
- Webhook: authenticate with a shared secret query param or Make’s IP allowlist behind your API gateway.
- Rate: mobile offsites can spike; monitor Cryvis credits (1/image).
- Privacy: receipt photos can include personal card last4 in
payment— restrict Sheets ACL. - Pair with Slack approval if policy requires it (employee expense workflow).
- Publish a one-page “how to photograph a receipt” guide linked from the Form description.
Related guides
- Convert receipts to JSON (HTTP deep dive)
- Extract receipt data (Drive)
- Invoice extraction on Make.com
- Make.com hub
CTA
Camera roll to structured expense data is a single multipart call. Start with the Cryvis Receipt API and the extractReceipt reference — Bearer token, file part, JSON back with merchant and totals.