Automation workflow: Payment-event automation
Zapier and InvoiceQuickly: Zaps for invoices paid through Stripe and PayPal
When a client pays an InvoiceQuickly invoice through a Stripe or PayPal payment link, the payment happens in your own Stripe or PayPal account and carries the invoice number. A Zap on that account can react to it: add a row to Google Sheets, post in Slack, or send a thank-you from Gmail. InvoiceQuickly records the payment on the invoice by itself, so these Zaps are for notifications and logs, not for marking invoices paid. You need InvoiceQuickly Pro ($9/month) for payment links and a paid Zapier plan for the filter and formatter steps.
How it works
Using Zapier with InvoiceQuickly, step by step
Step 1: Get paid through an InvoiceQuickly payment link
On Pro, connect Stripe or PayPal under Integrations, then choose Create Stripe link or Create PayPal link from a sent invoice's action menu. For Stripe, InvoiceQuickly creates a Checkout Session on your Stripe account with one line named after the invoice, such as Invoice INV-0042, priced at the remaining balance, and three metadata keys: invoiceId, invoiceNumber and paymentProviderId. For PayPal, it creates a PayPal invoice whose detail.invoice_number and detail.reference both hold the InvoiceQuickly number.
Step 2: Start the Stripe Zap with Checkout Session Completed
In Zapier, create a Zap, pick the Stripe app and choose the Checkout Session Completed trigger. Skip New Payment and New Charge: Stripe does not copy a session's metadata to the PaymentIntent or Charge, and InvoiceQuickly sets metadata only on the session, so those records arrive without an invoice number. Skip New Invoice too; it watches Stripe Invoices, which InvoiceQuickly never creates.
Step 3: Add a Filter so only paid InvoiceQuickly sessions continue
Add a Filter by Zapier step with two rules: the metadata invoiceNumber value from the trigger exists, and payment_status exactly matches paid. The first rule drops checkout sessions created by other tools on the same Stripe account. The second drops bank-debit sessions that complete before the money arrives.
Step 4: Convert the amount, then add your action
Stripe sends amount_total in minor units, so $850.00 arrives as 85000. Add Formatter, choose the Numbers event and the Perform Math Operation transform, pick Division and divide by 100. Then add the step you want: Google Sheets Create Spreadsheet Row, Slack Send Channel Message, or Gmail Send Email.
Step 5: For PayPal, catch the invoice-paid event with Webhooks by Zapier
Zapier's PayPal app has no trigger for a paid invoice; its New Invoice trigger fires when an invoice is created, which for InvoiceQuickly means when you create the link. Instead, start a Zap with Webhooks by Zapier and the Catch Hook trigger, copy its URL, and add it as a second webhook on the same PayPal REST app you connected to InvoiceQuickly, subscribed to INVOICING.INVOICE.PAID. PayPal allows up to 10 webhook URLs per app, so InvoiceQuickly's own webhook stays in place.
Step 6: Test with one real payment, then turn the Zap on
Zapier needs a sample record to map fields. Pay a small invoice through your own link, pull that record into the Zap, map the fields listed in the tables below, and publish. Check that the invoice also shows as paid in InvoiceQuickly; that confirms the separate InvoiceQuickly webhook is working too.
What you get
What this Zapier workflow gives you
What you get
- A message or email soon after a client pays, started by Stripe's Checkout Session Completed trigger rather than by someone checking the dashboard
- A running payment log in Google Sheets keyed by invoice number, which lines up with the Invoice Number column of InvoiceQuickly's CSV export
- A Slack post for your team when an invoice is paid, so nobody chases a client who has already settled
- A personal thank-you from your own Gmail; InvoiceQuickly does not send the client a confirmation when it records a Stripe or PayPal payment
- Filter and Formatter steps do not use Zapier tasks, so each paid invoice costs one task per action step
- Zapier never needs your InvoiceQuickly login; the Zap reads only your Stripe or PayPal account
Best for
- Freelancers who want a Google Sheet of every card or PayPal payment, keyed by invoice number, for month-end bookkeeping
- Small teams who want a Slack channel message when a client pays, without giving everyone an InvoiceQuickly seat
- Consultants who send a personal thank-you or next-steps email once a project invoice is settled
- Not a fit if most clients pay by bank transfer, cash or check that you record by hand: those payments never pass through Stripe or PayPal, so no Zap runs
Reference
Stripe Checkout Session fields from an InvoiceQuickly link
What the Checkout Session Completed trigger carries when the session came from Create Stripe link, and how to use each field. Names are Stripe's API field names; Zapier shows them with readable labels in the test record.
| Stripe field | What InvoiceQuickly puts there | Use in the Zap |
|---|---|---|
| metadata.invoiceNumber | Your invoice number, for example INV-0042 | Filter rule (exists); Sheets Invoice column; Slack and Gmail text |
| metadata.invoiceId | InvoiceQuickly's internal invoice ID | Optional unique key for the row; never show it to clients |
| metadata.paymentProviderId | The ID of your Stripe connection in InvoiceQuickly | Ignore; it changes if you disconnect and reconnect Stripe |
| amount_total | The balance when you created the link, in minor units (85000 = $850.00) | Formatter Division by 100, then the Sheets Amount column |
| currency | The invoice currency in lowercase, such as usd or gbp | Sheets Currency column; Slack text |
| payment_status | paid once funds are confirmed; unpaid for delayed bank debits | Filter rule: exactly matches paid |
| customer_details.email and customer_details.name | What the payer typed on Stripe Checkout; InvoiceQuickly does not prefill it | Gmail To field and greeting; may differ from the client email on the invoice |
| payment_intent | The Stripe PaymentIntent ID (pi_...), which InvoiceQuickly saves as the payment reference | Sheets Reference column for matching against Stripe payouts |
| id | The Checkout Session ID (cs_...) | Sheets column if you want a link back to the session in Stripe |
Scroll sideways to see every column.
line_items (the Invoice INV-0042 line) is not returned on the session unless it is expanded, so rely on metadata.invoiceNumber rather than the line name.
Reference
PayPal INVOICING.INVOICE.PAID fields for a Catch Hook Zap
The event's resource is the PayPal invoice InvoiceQuickly created. Paths follow PayPal's webhook and invoice formats; confirm them against the record your Catch Hook receives.
| PayPal field | What it holds | Use in the Zap |
|---|---|---|
| event_type | INVOICING.INVOICE.PAID | Filter rule: exactly matches, since a Catch Hook accepts any request sent to its URL |
| resource.status | PAID when fully paid; PayPal also sends this event for partial and pending payments | Filter rule: exactly matches PAID |
| resource.detail.invoice_number | The InvoiceQuickly invoice number | Sheets Invoice column; Slack text |
| resource.payments.paid_amount.value and .currency_code | A decimal amount, such as 850.00, and the currency code | Sheets Amount and Currency columns; no division needed |
| resource.primary_recipients billing_info.email_address | The client email from the InvoiceQuickly invoice, if it had one | Gmail To field |
| resource.id | The PayPal invoice ID that InvoiceQuickly matches the payment to | Sheets Reference column |
Scroll sideways to see every column.
Setup
Setting it up
You need three things before building a Zap. First, InvoiceQuickly Pro with Stripe or PayPal connected and its webhook working, so InvoiceQuickly already marks invoices paid on its own; the Stripe and PayPal pages cover that setup. Second, a paid Zapier plan. As of October 28, 2026, Zapier's Free plan allows two-step Zaps only, with no Filter, Formatter, premium apps or webhooks, and PayPal is a premium app on Zapier. Professional starts at $29.99 a month, or $19.99 a month billed annually, for 750 tasks. Third, the account access to add an app to Zapier: Stripe login rights for the Stripe Zap, or the PayPal Developer Dashboard for the REST app you gave InvoiceQuickly. Task math for a typical month: 30 invoices paid by card, with a Zap that adds a Sheets row and posts to Slack, uses 60 tasks; the Filter and Formatter steps add nothing. For testing, create a small invoice to yourself, choose Create Stripe link, pay it, and use that session as the Zap's sample. An owner or admin can refund it afterwards from the Payments page in InvoiceQuickly. For the PayPal Catch Hook, the sample appears only after PayPal sends a real INVOICING.INVOICE.PAID event to the hook URL, so pay a small PayPal link from a different PayPal account.
Good practice
Best practices
Filter on both invoiceNumber and payment status
- The Stripe trigger fires for every completed Checkout Session on the account, including sessions from Stripe Payment Links or a shop, and sessions whose bank debit has not cleared. Two Filter rules, metadata invoiceNumber exists and payment_status exactly matches paid, keep the log to money that has actually arrived for an InvoiceQuickly invoice.
Key every row by invoice number
- Use metadata.invoiceNumber or resource.detail.invoice_number as the first Sheets column, not the payer's name. Payers type their own name and email at checkout, and a client's accounts team may pay under a different name. The invoice number matches the Invoice Number column of the CSV export from InvoiceQuickly.
Add Zapier next to InvoiceQuickly's webhook, never in place of it
- InvoiceQuickly marks invoices paid only from its own webhook. Do not delete, edit or repoint the webhook endpoint you created for InvoiceQuickly in Stripe or PayPal. For PayPal, the Catch Hook is an additional URL on the same REST app.
Keep the Catch Hook URL private
- A Catch Hook accepts whatever is posted to its URL. Unlike InvoiceQuickly's endpoint, it does not ask PayPal to verify the signature. Keep the URL out of shared documents and keep the event_type and resource.status filter rules, so a stray request cannot write a fake payment row.
Decide who emails the client
- Stripe sends its own receipt if Successful payments is switched on under Settings, Business, Customer emails in the Stripe Dashboard. If it is, make the Gmail step a short personal note rather than a second receipt, or turn one of them off.
Troubleshooting
Common issues
The Zap runs but the invoice number is blank
- The Zap probably starts from New Payment or New Charge. Those PaymentIntent and Charge records do not carry the session's metadata, so switch the trigger to Checkout Session Completed. If the trigger is already right, the session came from another tool on the same Stripe account; add the metadata invoiceNumber exists rule to the Filter.
Amounts show as 85000 instead of 850.00
- Stripe reports amount_total in minor units. Add a Formatter step with Numbers, Perform Math Operation, Division by 100 and map its output into Sheets, Slack or Gmail. The PayPal paid_amount value is already a decimal and needs no change.
The PayPal Zap never fires
- Open the REST app you connected to InvoiceQuickly in the PayPal Developer Dashboard and check that the Catch Hook URL is listed as a webhook subscribed to INVOICING.INVOICE.PAID, in live mode, and that the Zap is published. If you used the PayPal app's New Invoice trigger instead, it fires when the PayPal invoice is created, which happens when you choose Create PayPal link, not when the client pays.
The Zap fired but the invoice is still unpaid in InvoiceQuickly
- The Zap and InvoiceQuickly receive the event separately, so a working Zap proves nothing about InvoiceQuickly's webhook. Check the InvoiceQuickly endpoint's deliveries in Stripe or PayPal, fix the URL or secret, and resend the event. Both providers retry failed deliveries for a while: Stripe for up to three days, PayPal up to 25 times over 3 days.
Scope
What this workflow does not do
- InvoiceQuickly has no app in Zapier's directory, no public API and no outgoing webhooks, so there are no InvoiceQuickly triggers or actions; a Zap cannot create, read or update invoices or clients in InvoiceQuickly
- A Zap cannot mark an invoice paid in InvoiceQuickly, and does not need to: InvoiceQuickly records Stripe and PayPal payments from the provider's webhook on its own
- Only payments made through an InvoiceQuickly Stripe or PayPal link reach Zapier; bank transfers, cash, checks and any payment you record by hand do not
- There is no event for an invoice being sent, viewed, overdue or reminded, or for an estimate being accepted
- The Stripe and PayPal records carry the invoice number and amount, not InvoiceQuickly's line items, tax, due date or client address
- Filter, Formatter, multi-step Zaps, Webhooks by Zapier and the PayPal app all need a paid Zapier plan
Questions
Zapier and InvoiceQuickly: questions
Is there an InvoiceQuickly app on Zapier?
No. The Zaps on this page run on your own Stripe or PayPal account. They work because InvoiceQuickly labels each payment link with the invoice number: Stripe metadata invoiceNumber, or the PayPal invoice's invoice_number.
Which Stripe trigger should I use for paid invoices?
Checkout Session Completed. InvoiceQuickly's Stripe links are Checkout Sessions, and the invoice number is in the session's metadata. New Payment and New Charge return the PaymentIntent and Charge, which do not carry that metadata. Add a Filter for payment_status exactly matching paid.
Can a Zap mark my InvoiceQuickly invoice as paid?
No, and it does not need to. InvoiceQuickly records the payment from the Stripe checkout.session.completed or PayPal INVOICING.INVOICE.PAID webhook it receives directly. If an invoice stays unpaid, fix that webhook; a Zap cannot write to InvoiceQuickly.
Does this work on Zapier's free plan?
Not as described. As of October 28, 2026, Zapier Free allows 100 tasks a month and two-step Zaps only, with no Filter, Formatter, premium apps or webhooks. Professional starts at $19.99 a month billed annually, or $29.99 monthly, for 750 tasks. Filter and Formatter steps use no tasks, so 30 paid invoices with two actions each use 60.
How do I get PayPal payments into a Zap?
Use Webhooks by Zapier with the Catch Hook trigger, and add its URL as a webhook on the PayPal REST app you connected to InvoiceQuickly, subscribed to INVOICING.INVOICE.PAID. Filter on resource.status exactly matching PAID, because PayPal also sends that event for partial and pending payments.
Will my client get two payment emails?
InvoiceQuickly sends none when it records a Stripe or PayPal payment. Stripe sends a receipt only if Successful payments is on in its Customer emails settings. If it is, keep your Gmail step to a short thank-you so the client is not sent two receipts.
Sources
Official documentation
The Zapier steps on this page follow these official pages. Menus and plan limits change, so check them before you rely on a detail.
- Zapier: Stripe integrations (triggers and actions) (checked 2026-10-28)
- Zapier Help: How to get started with PayPal on Zapier (checked 2026-10-28)
- Zapier: Plans and pricing (checked 2026-10-28)
- Zapier Help: Tasks in Zapier (checked 2026-10-28)
- Zapier Help: Add conditions to Zap workflows with filters (checked 2026-10-28)
- Stripe API: The Checkout Session object (checked 2026-10-28)
- Stripe Docs: Metadata (checked 2026-10-28)
- PayPal Developer: Webhook event names (checked 2026-10-28)
Create your first invoice
The Free plan covers 5 invoices in total with PDF download. Pro is $9/month for unlimited invoices, email delivery and Stripe or PayPal payment links.
Start freeLast verified: October 2026