Duncanville Arts Foundation — CIS Infrastructure
Setup Guide — Foundation Box Office

Foundation
Box Office

Stripe + Airtable + Zapier — Configuration, field schema, and data flow for CIS pre-commitment validation

PlatformStripe + Airtable + Zapier
Merchant AccountDuncanville Arts Foundation
Build Time1–2 days configuration
GovernsCIS v2.0, Section 7 (Data)
Design Rationale

The Foundation Box Office is not a ticketing convenience. It is the data collection layer that makes the CII scoreable. Every CIS activation requires five data streams. Three of them, pre-commitment rate, resident ZIP share, and repeat participation, flow directly from purchase records. If those records are scattered across individual proposers' Venmo accounts and Eventbrite logins, there is no pipeline. This configuration puts the Foundation in control of the merchant relationship, the data format, and the refund authority that the 100% validation gate requires.

I
Section OneArchitecture Overview

Three tools do three distinct jobs. Stripe handles money. Airtable holds records. Zapier connects them automatically so no one touches a spreadsheet between a purchase and a scorecard.

Step 1 Purchaser visits
Payment Link
Stripe-hosted page. Collects name, email, ZIP, program selection, ticket tier. Payment processed.
Step 2 Stripe fires
webhook
On successful charge, Stripe sends a checkout.session.completed event with all purchaser data.
Step 3 Zapier writes
to Airtable
Zapier catches the webhook, maps fields, and creates a new record in the Purchasers table.
Step 4 Airtable
scores live
Rollup fields count commitments per program. Foundation sees real-time validation progress.
Step 5 CSV export
feeds CII
Post-activation, the Purchasers table exports a clean CSV. The Matching Workbook scores F4. The Activation Report Generator imports F1 and F2.
Why not Eventbrite or Luma? Both platforms set the event organizer as the merchant of record. The Foundation cannot execute refunds on behalf of a proposer from those accounts. The 100% validation gate requires the Foundation to hold the money and execute the no-go determination independently.
II
Section TwoStripe Setup
2.1 — Account

Create the Stripe account under the Duncanville Arts Foundation's legal name and EIN. Use the Foundation's bank account for payouts. This is the step that establishes the Foundation as merchant of record. Do not create the account under a personal name or a proposer's name under any circumstances.

2.2 — Products

Create one Stripe Product per activation. Each product maps to a single CIS program in Airtable. Within each product, create one Price per ticket tier.

Product FieldValue ConventionExample
Product Name[Program Name] — [Activation Date]Third Wednesday Jazz — June 18, 2026
Product DescriptionCIS Activation ID + venue + brief descriptionACT-2026-001 • Arts Junction • Monthly jazz series
Metadata: program_idAirtable Program record IDrecXXXXXXXXXXXXXX
Metadata: activation_dateISO 86012026-06-18
Metadata: validation_deadlineISO 8601, 30 days before activation2026-05-19
2.3 — Payment Links

Create one Payment Link per activation. Configure each link with the following settings:

a.Collect billing address: Postal code only. This captures ZIP at no friction to the purchaser and feeds the F2 resident share calculation directly.
b.Collect phone number: Off. Not needed and adds friction.
c.Custom fields: Add one text field labeled "Name as it should appear on your ticket." This populates the Airtable display name field and allows for household name matching in F4 scoring.
d.After payment: Redirect to duncanvillearts.org/ticket-confirmed. This page should confirm the purchase, state the validation timeline, and explain the refund policy clearly.
e.Limit quantity: Set to the activation's maximum seating capacity. Prevents overselling before the validation gate decision.
2.4 — Stripe Metadata on Each Charge

Zapier will read these fields from the Stripe checkout.session.completed object. Confirm they are present on every completed session before going live.

Stripe FieldPath in API ResponseMaps to Airtable Field
Customer emailcustomer_details.emailEmail
Customer namecustomer_details.nameName (Stripe)
Display name (custom field)custom_fields[0].text.valueDisplay Name
Postal codecustomer_details.address.postal_codeZIP Code
Amount paid (cents)amount_totalAmount Paid (cents)
Payment Intent IDpayment_intentStripe Payment Intent ID
Product metadata: program_idmetadata.program_idProgram (linked record)
Product metadata: activation_datemetadata.activation_dateActivation Date
Stripe documentation: Payment Links, Custom Fields, checkout.session.completed webhook event.
III
Section ThreeAirtable Base Schema

The Airtable base has three tables. Programs holds one record per activation. Purchasers holds one record per ticket purchase. Activations holds the post-event scorecard inputs. The Purchasers table is the operational core. Everything the CII needs for F1, F2, and F4 lives here.

3.1 — Programs Table
Field NameTypeNotes
Program NameSingle line textPrimary field. Matches Stripe Product name.
Activation IDSingle line textFormat: ACT-YYYY-NNN. Used in all CII reporting.
ProposerSingle line textOrganization or individual proposer name.
Activation DateDateISO 8601. Used for F4 matching across activations.
Validation DeadlineDate30 days before activation date.
VenueSingle line textDefault: Arts Junction at 202 West Center.
CapacityNumberMaximum seats. Set as quantity limit on Stripe Payment Link.
Cost to ActivateCurrencyTotal projected costs including licensing, venue, talent, and operations.
Ticket Price — GeneralCurrencyStandard admission price.
Ticket Price — SupporterCurrencyPremium tier. Optional.
Tickets Required to ValidateFormulaCEILING({Cost to Activate} / {Ticket Price - General}). Minimum pre-commitments needed at 100%.
PurchasersLinked record (Purchasers)Auto-populated by Zapier as purchases arrive.
Total CommittedRollupCOUNT of linked Purchasers. Live validation tracker.
Total Revenue CommittedRollupSUM of Amount Paid from linked Purchasers.
Validation StatusSingle selectOptions: Campaigning, Validated, Did Not Validate, Cancelled.
Stripe Product IDSingle line textUsed to match incoming Zapier records to the correct program.
Pipeline StageSingle selectIntake, Develop, Validate, Activate, Graduate. Mirrors CIS v2.0 pipeline.
3.2 — Purchasers Table

One record per ticket. Zapier creates every record automatically from the Stripe webhook. No manual entry after initial setup.

Field NameTypeCII Factor
Name (Stripe)Single line textF4 matching
Display NameSingle line textF4 matching (household name)
EmailEmailF4 matching (primary key)
ZIP CodeSingle line textF2 resident share
Is Duncanville ResidentFormulaF2 IF(OR({ZIP Code}="75116",{ZIP Code}="75137"),TRUE,FALSE)
Amount Paid (cents)NumberF1 revenue
Amount Paid (dollars)FormulaF1 {Amount Paid (cents)} / 100
Ticket TierSingle selectGeneral, Supporter
ProgramLinked record (Programs)All factors
Activation DateDateF4 matching
Purchase TimestampDate/timeValidation tracking
Stripe Payment Intent IDSingle line textRefund reference
Refund StatusSingle selectOptions: Active, Refunded. Updated manually on no-go.
Previous ActivationsCount (linked from Activations)F4 — Populated post-activation via email match lookup.
Is Repeat ParticipantFormulaF4 IF({Previous Activations} > 0, TRUE, FALSE)
3.3 — Activations Table

One record per completed activation. Holds the raw inputs the Activation Report Generator reads. Populated by Foundation staff after each event night.

Field NameCII FactorSource
ProgramAllLinked record (Programs)
Actual AttendanceF1Door count on activation night
Pre-Committed RevenueF1Rollup from Purchasers table
Total Activation CostF1Confirmed actual costs
Duncanville ZIP PurchasersF2Rollup: count where Is Duncanville Resident = true
Total PurchasersF2Rollup: count of all Purchasers linked to Program
Survey Responses — Would Have LeftF3Substitution survey count (collected separately)
Survey Responses — TotalF3Substitution survey total responses
Repeat PurchasersF4Rollup: count where Is Repeat Participant = true
Activation Night TransactionsF5Tenant POS data (collected separately)
Baseline Average TransactionsF5Four-night baseline average from Baseline Data Entry Template
Airtable documentation: Rollup fields, Formula fields, Linked records. CIS v2.0, Appendix D (CII Scoring Worksheet).
IV
Section FourZapier Connection

One Zap handles all ticket purchases across all activations. It does not need to be duplicated per program. The program_id metadata on the Stripe product routes each purchase to the correct Airtable Program record automatically.

4.1 — Trigger
App: Stripe  —  Event: New Payment (checkout.session.completed)
This fires once per completed purchase. Failed payments and abandoned checkouts do not trigger it.
4.2 — Action: Create Airtable Record
Airtable FieldZapier Source
Name (Stripe)Stripe → Customer Details → Name
Display NameStripe → Custom Fields → [0] → Text → Value
EmailStripe → Customer Details → Email
ZIP CodeStripe → Customer Details → Address → Postal Code
Amount Paid (cents)Stripe → Amount Total
ProgramStripe → Metadata → program_id Airtable will link this string to the matching Programs record by record ID.
Activation DateStripe → Metadata → activation_date
Purchase TimestampStripe → Created (Unix timestamp, convert to ISO)
Stripe Payment Intent IDStripe → Payment Intent
Refund StatusSet to: Active (static value)
4.3 — Testing

Use Stripe's test mode to run three purchases through the Zap before going live: one Duncanville ZIP, one out-of-market ZIP, and one at the Supporter price tier. Confirm all three create correct Airtable records and that the Programs table rollup fields update accurately.

Zapier documentation: Stripe + Airtable integration. Stripe documentation: Metadata on Payment Links, test mode.
V
Section FiveValidation Gate Operations

The 100% pre-commitment requirement is the governing financial discipline of the CIS. The Box Office is the mechanism that makes it enforceable. The Foundation checks Airtable on Day 15 and Day 30 of every validation campaign.

5.1 — Day 15 Review

Pull the Programs record for the activation. Compare Total Committed against Tickets Required to Validate. A program tracking below 40% on Day 15 is unlikely to close. Issue a written mid-campaign assessment to the proposer within 48 hours. Continue the campaign; do not cancel early.

5.2 — Day 30 Decision
OutcomeAirtable ActionStripe ActionProposer Communication
Total Committed ≥ Tickets Required Set Validation Status to Validated. Set Pipeline Stage to Activate. No action. Funds remain held until activation night. Written confirmation. Activation scheduling begins.
Total Committed < Tickets Required Set Validation Status to Did Not Validate. Issue full refunds to all purchasers via Stripe dashboard. Use Payment Intent IDs from Purchasers table. Update Refund Status to Refunded in Airtable. Written analysis and insights returned. Development support continues. Proposer may re-enter a new campaign.
Payout timing: Do not configure Stripe for automatic daily payouts during the validation campaign period. Set payouts to manual. Release funds to the Foundation operating account only after a Validated determination is made and the activation has occurred. This keeps refund execution clean at every stage.
VI
Section SixRefund Protocol
6.1 — No-Go Refunds

When a program does not validate, the Foundation executes all refunds directly from the Stripe dashboard. The process is:

1.Filter the Airtable Purchasers table by Program and export the Stripe Payment Intent ID column.
2.In Stripe, navigate to Payments. Use the Payment Intent IDs to locate each charge and issue a full refund. Stripe batch refunds are available for more than ten purchasers.
3.After each refund is confirmed in Stripe, update the Refund Status field in the corresponding Airtable Purchaser record to Refunded.
4.Send a direct email to each purchaser confirming the refund and the timeline for funds to appear. Stripe refunds typically clear in five to ten business days.
6.2 — Individual Refund Requests

The Foundation's refund policy for individual requests before the validation decision should be established before the first campaign opens and published on the ticket confirmation page. A reasonable default: full refund if requested more than 14 days before the activation date; no refund within 14 days of the activation date except in cases of program cancellation.

VII
Section SevenCII Data Output

After each activation, export the Purchasers table filtered to the relevant program. This CSV is the input for the Matching Workbook and for the Activation Report Generator in the CIS Toolkit. The column order below is the canonical format all downstream tools are built against.

7.1 — Canonical CSV Schema
ColumnTypeCII Factor
activation_idStringAll
emailStringF4 primary key
display_nameStringF4 secondary match
zip_codeString (5-digit)F2
is_duncanville_residentBooleanF2
amount_paid_dollarsDecimalF1
ticket_tierStringF1 breakdown
purchase_timestampISO 8601Validation tracking
is_repeat_participantBooleanF4
stripe_payment_intent_idStringRefund reference
refund_statusStringFinancial reconciliation
7.2 — Factor Inputs Resolved by This Schema
CII FactorDerived FromRemaining Input
F1 — Pre-Commitment RateSUM(amount_paid_dollars) vs. total activation costActual activation cost (from proposer)
F2 — Resident ShareCOUNT(is_duncanville_resident = true) / COUNT(*)None. Fully resolved by CSV.
F3 — Substitution RateNot in this CSVSubstitution survey (collected at door)
F4 — Repeat ParticipationCOUNT(is_repeat_participant = true) / COUNT(*)None after second activation. First activation always scores zero.
F5 — Adjacent Business LiftNot in this CSVBaseline Data Entry Template (tenant POS data)
CIS v2.0, Sections 6.1–6.2 (CII Formula). Appendix D (CII Scoring Worksheet). Appendix E (Data Collection Protocols).
VIII
Section EightCost and Maintenance
PlatformCostNotes
Stripe 2.9% + $0.30 per transaction No monthly fee. Fee applies to each ticket sale. On a $20 ticket, the Foundation nets $19.12. On a no-go refund, Stripe refunds the purchaser in full but retains the processing fee. Build a small processing buffer into the cost-to-activate calculation or absorb it as an infrastructure cost.
Airtable Free tier: up to 1,000 records per base Sufficient for Year One at expected activation volume. The free tier supports all field types required by this schema. Upgrade to Plus ($10/mo) if record count approaches the limit or if additional collaborator seats are needed.
Zapier Starter plan: approximately $20/month The free tier supports only 100 tasks per month, which is insufficient. The Starter plan supports 750 tasks and multi-step Zaps. A single Zap handles all activations; no additional Zaps are needed for this configuration.
Year One total platform cost: Approximately $240 in Zapier fees, plus Stripe processing fees on actual ticket revenue. No other fixed costs. The entire Box Office infrastructure runs on less than the cost of one activation's licensing fee.
8.1 — Ongoing Maintenance

Each new activation requires three setup steps: create a Stripe Product with the correct metadata fields, create a Payment Link with the quantity cap set to capacity, and create an Airtable Programs record with the matching Stripe Product ID. Estimated time per activation: fifteen minutes. No code changes are required.