Clients with multiple outstanding invoices create a small but persistent headache: your accounting tool lets them pay one invoice at a time, but they want a single link that covers everything. Manually assembling that in Stripe means logging into the dashboard, building a one-off payment link, copying the URL, pasting it into an email — and then repeating the process next month.
This tutorial shows you how to eliminate that loop entirely. You will build a Make scenario that reads invoice data from Airtable, calls the Stripe API to create a checkout session with the exact line items and amounts for that customer, writes the payment URL back to Airtable, and later syncs confirmed payments to Xero. The whole trigger is a single click inside an Airtable interface — no Stripe dashboard required.
If you are already running invoice automations or want to see related patterns, check out our invoice automation solutions and the Airtable automation guide.
Video Tutorial
How Stripe Payment Links Work
Stripe offers two ways to collect money: Payment Links (reusable, fixed-product URLs created in the dashboard) and Checkout Sessions (dynamic sessions created via API). Payment Links are great for a standard product at a standard price. They fall short the moment every customer owes a different amount.
The Stripe Checkout Sessions API at POST /v1/checkout/sessions solves this. You send a JSON body containing an array of line items — each with a name, unit amount in cents, and quantity — and Stripe returns a hosted checkout URL unique to that session. The customer sees a professional Stripe-branded payment page with exactly the items you specified; you never touch the dashboard.
https://checkout.stripe.com/c/pay/cs_live_a1Xyz...#fidkdWxOYHwnPyd1blpxYHZxWjA
Sessions can be created in payment mode for one-time charges or subscription mode for recurring billing. For invoice consolidation — the main use case here — payment mode is the right choice. You can also attach customer metadata to the session so that Stripe's webhook payload carries enough context to identify which Airtable record to update when payment completes.
Make does include native Stripe modules for common operations, but creating a multi-line checkout session with dynamic amounts requires a custom HTTP module hitting the checkout/sessions endpoint directly. That is the piece this tutorial focuses on.
Why Airtable Is Your Pricing Engine
Airtable acts as the single source of truth for three things: customer details, individual invoice records synced from Xero, and payment batches that group those invoices together.
The base uses three linked tables:
- Customers — one row per client with contact details and a linked field to their invoices
- Invoices — one row per Xero invoice, carrying the invoice number, amount due, currency, and a status field that mirrors Xero (Authorised, Paid, Voided)
- Payments — one row per checkout session you want to generate, linking to a customer and to one or more invoice records
The Payments table carries a rollup field that sums the amounts of all linked invoices — this becomes the total passed to Stripe. It also stores the Stripe checkout URL (written back by Make), the Stripe session ID (used later for the webhook lookup), and a status field that moves from blank → Payment Link Created → Paid.
The clever bit is a formula field in Payments that checks whether a checkout URL already exists. If the URL field is empty, the formula renders a Make webhook URL containing the Airtable record ID as a query parameter — this is what the team member clicks to trigger the scenario. If the URL is already populated, the formula renders the Stripe link instead, so clicking it opens the payment page directly. One field, two behaviors, zero confusion.
For a deeper look at building CRM-style tables in Airtable, see our guide to building a CRM in Airtable. Teams in field-based industries can also adapt this pattern for quote-to-payment flows — our service and field sales solutions page covers that context.
Step-by-Step Make Scenario
The Make scenario has five modules. Here is how they connect.
Module 1 — Webhook trigger. A custom webhook receives the GET request that fires when a team member clicks the formula-generated link in Airtable. The record ID arrives as a URL parameter.
Module 2 — Get Airtable record. Make fetches the full Payments record using the record ID from step one. The response includes the rollup total, the linked invoice record IDs, and the linked customer record ID.
Module 3 — Iterator over invoice IDs. Because a payment can bundle multiple invoices, an Iterator module splits the linked invoice array into individual items. For each invoice, Make then fetches the full invoice record to retrieve the invoice number and individual amount.
Module 4 — Custom HTTP module to Stripe. This is the core of the scenario. Make sends a POST request to https://api.stripe.com/v1/checkout/sessions with Bearer token authentication using your Stripe secret key. The request body is built dynamically:
modeis set topaymentline_itemsis an array constructed from the iterator — one entry per invoice, with the invoice number as the item name and the invoice amount converted to cents as the unit amountsuccess_urlandcancel_urlpoint back to pages of your choicemetadatacarries the Airtable record ID so the webhook response can find the right row
Stripe returns a JSON object containing id (the session ID) and url (the hosted checkout URL).
Module 5 — Update Airtable record. Make writes the Stripe url into the checkout link field and the id into the session ID field, then sets status to "Payment Link Created". The formula field in Airtable immediately flips from displaying the webhook trigger URL to displaying the live Stripe checkout link.
The entire scenario runs in a few seconds. By the time the team member switches back to their Airtable interface, the link is ready to copy into an email or have a separate automation send directly to the client.
For a broader look at what Make can orchestrate across your business, see our Make automation agency page or explore the Make tool overview.
Syncing Paid Invoices to Xero
Getting money collected is only half the job — your books need to reflect it. A second Make scenario handles the Stripe-to-Xero sync using Stripe's checkout.session.completed webhook event.
When Stripe fires that event, the webhook payload includes the session id and all the metadata you attached at creation time, including the Airtable record ID. Make uses that record ID to fetch the Payments record from Airtable, retrieves the list of linked Xero invoice IDs, and then calls the Xero API to record a payment against each invoice for its individual amount.
After the Xero calls succeed, Make updates the Airtable Payments record status to "Paid" and stamps a paid date. Because the Invoices table mirrors Xero statuses, those individual invoice rows will reflect "Paid" the next time your Xero sync runs — giving you a clean, consistent view of outstanding versus settled amounts across all three platforms.
For teams handling high invoice volumes, Xero also supports bulk payment endpoints that you can batch into a single API call rather than one call per invoice, which keeps your Make operation count lower on paid plans.
When to Hire Help
The scenario above is buildable by anyone comfortable with Make and the Airtable interface designer. Where things get more complex is when you need to layer on conditional logic — for example, applying early payment discounts, handling partial payments against individual invoices, supporting multiple currencies in a single account, or integrating with a CRM to trigger the link automatically when a proposal is accepted.
If you want a production-ready system built faster than it would take to troubleshoot edge cases yourself, our teams specialize in exactly this:
- Airtable consultant — base design, interface builds, formula logic, and Xero sync setup
- Make automation agency — scenario architecture, error handling, webhook reliability, and multi-tool integrations including Stripe
Both services are available for one-off project builds and ongoing retainer support.
Next Steps
Ready to go further? These tutorials and solutions pages build on what you have learned here:
- How to build a CRM in Airtable — structure the customer and deal data that feeds your payment workflows
- Airtable automation guide — native Airtable automations that complement your Make scenarios
- Invoice automation solutions — see the full end-to-end invoice-to-payment system we build for clients