Watch our latest video available on Youtube.
Tutorials/Tutorial

Stripe Checkout Links with Dynamic Pricing and Airtable

Send every client a custom-priced Stripe checkout link without touching the Stripe dashboard. This tutorial walks through wiring Airtable to Stripe through Make so each record generates its own payment URL and syncs back to your accounting tools.

YouTubeIntermediate12 min readApr 18, 2026

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

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:

  • mode is set to payment
  • line_items is 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 amount
  • success_url and cancel_url point back to pages of your choice
  • metadata carries 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:

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:

Frequently Asked Questions

Common questions about this tutorial.

Ready to Transform Your Business Operations?

Join 100+ companies that have automated their way to success. Get started today and see the difference.