← Back to blog

Extract Receipt Data with Zapier and Cryvis

Google Drive New File → Cryvis Receipt API → Google Sheets. Map merchant, date, total, currency, and payment method.

Finance teams already dump receipts into a shared Drive folder. The gap is structured data: merchant, date, and total still get typed by hand. This Zap closes that gap with Drive as the source, the Cryvis Receipt API as the extractor, and Google Sheets as the ledger.

Hub: Zapier + Cryvis. Invoices use a different endpoint — extract invoice data. Multipart reference: Send multipart form data.

Workflow

[Google Drive: New File in Folder]
        |
        v
[Filter: filename / MIME pdf|jpeg|png|webp]
        |
        v
[Webhooks by Zapier: Custom Request]
   POST /v1/documents/receipt
   multipart file + Bearer key
        |
        v
[Filter: success is true]
        |
        v
[Google Sheets: Create Spreadsheet Row]
   merchant | date | total | currency | receipt # | payment

Steps

StepApp / actionRole
1Google Drive — New File in FolderTrigger when a receipt lands
2FilterKeep supported files
3Webhooks — Custom RequestCall Cryvis Receipt API
4FilterDrop failed extractions
5Google Sheets — Create Spreadsheet RowPersist merchant and totals

Watch a dedicated folder such as Finance/Receipts/Inbox. Do not watch the whole Drive — every spreadsheet export will fire the Zap.

What you need

  • Zapier + Google Drive + Google Sheets
  • Cryvis API key — Receipt API
  • Sample receipt PDF or phone photo (JPEG/PNG/WebP)

Credits: 1 per PDF page or imageCredits.

Cryvis HTTP configuration

Required shape for Custom Request:

PieceValue
MethodPOST
URLhttps://api.cryvis.com/v1/documents/receipt
HeaderAuthorization: Bearer <API_KEY>
Bodymultipart/form-data
Part namefile
Part valueDrive file binary

Store the API key in a place your team controls. Do not paste live keys into public Zap templates.

Supported MIME: application/pdf, image/jpeg, image/png, image/webp. Docs: extractReceipt.

Example response

{
  "success": true,
  "data": {
    "receipt_number": "RCT-88421",
    "transaction_date": "2026-09-10",
    "merchant": { "name": "North Cafe" },
    "payment": { "method": "card" },
    "currency": "USD",
    "total_amount": 28.40
  },
  "meta": {}
}

Map from data.*. Nested merchant and payment need dotted paths: data.merchant.name, data.payment.method.

Sheets mapping

Headers (row 1):

Receipt Number | Transaction Date | Merchant | Total | Currency | Payment Method | Source File | Processed At

ColumnSource
Receipt Numberdata.receipt_number
Transaction Datedata.transaction_date
Merchantdata.merchant.name
Totaldata.total_amount
Currencydata.currency
Payment Methoddata.payment.method
Source FileDrive file name
Processed Atcurrent timestamp

Keep one file per Zap run so you map data directly. Batching multiple files in one request is a different response shape — stick to single-file for this ledger Zap.

Filters and errors

After Drive: filename ends with .pdf, .jpg, .jpeg, .png, or .webp.

After Custom Request: only continue if success is true.

Use Zap history to inspect the Custom Request body when Sheets stays empty — usually a mapping path issue (merchant.name vs top-level) or a failed extraction that skipped the success Filter.

Troubleshooting

SymptomLikely causeFix
401Bad Bearer tokenAuthorization: Bearer … with one space
Missing fileWrong part nameMust be file
Merchant blankMapped merchant objectUse data.merchant.name
Duplicate rowsDrive re-triggerMove to Processed after success
High credit burnMulti-page PDF “receipts”Prefer single-page images when possible

Test

  1. Drop one known receipt into the inbox folder.
  2. Confirm Custom Request → success: true in Zap history.
  3. Check Sheets: merchant, date, total, currency, payment method.
  4. Move the file to Processed and confirm the Zap does not re-fire.

Optional Paths for expense policy

After the success Filter:

Path A: data.total_amount (Number) greater than or equal to 100
  → Slack #expenses-review with merchant + total
  → Sheets row (same mapping)

Path B: fallback
  → Sheets row only

Use Formatter to coerce total_amount to a number if Paths treat it as text. Thresholds live in Zapier — Cryvis only returns the extracted total.

Production notes

  • Phone photos work; blur and glare still produce nulls — Filter or Slack-alert when merchant.name is empty if you want human review.
  • Archive after success so New File stays quiet.
  • Keep the inbox folder free of invoices; invoice PDFs belong on extract invoice data or automate invoice processing.
  • Multi-page “receipt” PDFs cost one credit per page — prefer single-page captures for employee expense volume.