← Back to blog

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 ping

Modules

ModuleWhen to use
Webhooks — Custom WebhookApps, Zapier-less mobile clients, internal tools
Google Forms — Watch ResponsesNon-technical submitters
Google Drive — Download a FileForms stores uploads in Drive
FilterEnforce jpeg/png/webp/pdf
HTTP — Make a RequestCryvis
Google Sheets — Add a RowLedger
RouterSplit “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

SettingValue
Endpointhttps://api.cryvis.com/v1/documents/receipt
MethodPOST
HeaderAuthorization: Bearer <API_KEY>
Body typeMultipart/form-data
Part namefile
FilenamePreserve 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:

  1. HTTP GET the URL (signed S3/GCS link).
  2. 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_paid

If 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

ColumnSource
EmployeeForm field / webhook JSON
ProjectForm field
Merchantdata.merchant.name
Datedata.transaction_date
Totaldata.total_amount
Taxdata.tax_total
Currencydata.currency
Receipt #data.receipt_number
Typedata.receipt_type
Photo URLDrive link or webhook CDN URL
Needs ReviewFormula 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.name is empty but total_amount exists.
  • 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:

  1. MIME allowlist passes.
  2. File size between ~20 KB and 10 MB (empty stubs and huge panoramas both fail usefully).
  3. Optional: filename does not match IMG_0000 placeholders 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

CaseResponse
Webhook without fileHTTP 400 back to client; no Cryvis call
Unsupported MIMEFilter → Sheets Rejected row with reason
Cryvis 4xxBreak; notify submitter via Slack if Employee known
Cryvis 5xx / 429Incomplete execution; retry
Empty total_amountStill write row; Needs Review = true

Never retry unsupported MIME errors — they will not heal.

Test plan

  1. Submit a sharp JPEG of a grocery receipt through Forms.
  2. Verify Drive download + Cryvis success.
  3. Confirm Sheets row: merchant, date, total, photo link.
  4. Submit a pitch-black photo; confirm Needs Review path.
  5. Hit the webhook with a PNG screenshot of an e-receipt.
  6. 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.*:

MetadataWhy
Employee emailReimbursement owner
Cost centerGL coding
Project / trip IDClient billable vs overhead
Client-reported amountOptional 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.

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.