← Help Center

Importing invoices automatically

Last updated: 2026-06-05

Duefy can pull your unpaid invoices in automatically, so you never re-key them — then it starts chasing payment on your behalf. There are two ways, depending on what you already use.

Option 1 — Connect your accounting software (Pro & Team)

Supported today: QuickBooks Online, Xero, FreshBooks, Zoho Books, Stripe Invoicing, FreeAgent, Square Invoices, Harvest (Sage, Wave and MYOB are on the way).

  1. Go to Invoices → Accounting import.
  2. Click Connect next to your tool and approve access on their sign-in screen.
  3. That's it. Duefy then imports your unpaid invoices every hour, auto-creates the matching clients, and starts the reminder sequence automatically.

Notes:

  • Only unpaid invoices are imported — paid ones are skipped.
  • Sync now forces an immediate pull; Disconnect stops syncing at any time.
  • Imports land in the workspace whose account you connected.

Option 2 — Anything else, via Zapier & Make (Team)

If your tool isn't in the list, connect Duefy to 6,000+ apps with Zapier or Make and have them POST invoices to your Duefy webhook.

API access is a Team-plan feature.

Setup

  1. As the workspace owner, open Settings → API Keys and create an API key (full scope).
  2. In Zapier, add a Webhooks by Zapier → POST action. (In Make, use an HTTP → Make a request module.)
  3. URL: the webhook address shown on Invoices → Accounting import (/integrations/zapierWebhook/).
  4. Header: X-API-Key: your-key — or Authorization: Bearer your-key. (The key must be sent in a header; it is not accepted in the URL.)
  5. Body type: JSON, using the fields below.
  6. Map your source fields into the JSON and turn the Zap on.

Fields

Field Required Notes
invoice_number yes
client_email yes must be a valid email
amount yes greater than 0
client_name no
currency no 3-letter code, defaults to USD
issue_date no YYYY-MM-DD
due_date no YYYY-MM-DD; blank means today

Example payload

{
  "invoice_number": "INV-1042",
  "client_name": "Acme Corp",
  "client_email": "ap@acme.com",
  "amount": 1250.00,
  "currency": "USD",
  "issue_date": "2026-05-01",
  "due_date": "2026-05-31"
}

A successful POST returns { "success": true, "imported": 1 } (re-POSTing the same invoice_number returns "imported": 0 — duplicates are skipped). A bad or missing key — or a key whose workspace is no longer on the Team plan — returns 401; a read-only key (insufficient scope) returns 403; a non-JSON body returns 400.

Which plan do I need?

  • Connect an accounting app: Pro or Team.
  • Zapier / Make (API key): Team.

See also: Connecting Stripe so the imported invoices carry a one-click payment link.

Was this helpful?