Registration

Jotform + Stripe camp registration: where it breaks

Building camp registration from Jotform, Stripe, and Mailchimp works at 150 campers. Here's where the seams break at 500 — and what one system changes.

You built it yourself, and it worked. A Jotform for registration, Stripe for payments, Mailchimp for the reminders, a Google Sheet to track it all, and a PDF packet for the medical forms. At 150 campers, that stack was the right call — cheap, fast to set up, no contract to escape. It did the job.

Then the camp grew. And somewhere past a few hundred campers, the stack stopped saving you time and started costing it. Not because you did anything wrong. Because the seams between general-purpose tools don’t scale the way a camp does. Here’s where they break, named one by one, so you can recognize the ones you’re already living with.

The stack that works at 150 and breaks at 500

At small scale, a stitched-together stack is honest engineering. Each tool is good at its one job, and you’re the integration layer — you move data between them by hand, and there isn’t much of it.

The problem is that “you’re the integration layer” doesn’t scale. At 150 campers, matching a Stripe charge to a roster row by hand is a few minutes. At 500, it’s an afternoon you don’t have during the busiest week of the year. The work didn’t get harder per camper. There are just more campers, more forms, more edge cases, and more seams — and the seams are where the time goes. Five hundred isn’t a benchmark; it’s the rough scale where the cracks stop being annoyances and start being structural.

Where the forms break

Camp registration needs forms that ask the right follow-up question based on the last answer. Report an allergy, and the form should ask about severity and the action plan. Say a camper takes medication, and it should ask dosage, timing, and whether they self-carry. Pick a swim activity, and it should ask for a swim level.

General-purpose form tools do conditional logic, but shallowly — a show-hide rule or two before it gets unwieldy. Camp registration needs branching as a native part of the form, not a bolt-on. When the logic is shallow, you compensate by putting every question on the form for everyone, and a 60-field wall is the enemy of both completion and clean data. The deep version of this seam — how branching actually keeps forms short and data clean — is its own piece: conditional camp registration forms.

Where the money breaks

Stripe charges live in Stripe. The camper roster lives in a Sheet or a form’s responses. Nothing connects them, so matching a payment to a camper is a manual lookup — and reconciling the season is a spreadsheet you rebuild every time.

That seam is invisible until close-out, when you need a clean per-session financial picture and discover that your payments and your roster have never actually met. In a system where payments and registration share one camper record, the charge already knows which camper and which session it belongs to. The financial close-out reads off one ledger instead of three. Reconciliation becomes a check, not a rebuild.

Where the medical data breaks

A PDF packet and a free-text form field collect medical information. They don’t structure it, and they don’t validate it. An allergy typed into a comments box can’t be queried, sorted, or flagged. A missing or expired health form looks identical to a complete one until someone opens it.

Structured medical records change that. Allergies, medications, and conditions land as fields, not prose — so they’re queryable, and so an incomplete or missing form surfaces on its own before registration closes instead of being discovered on arrival day. At 150 campers you can eyeball the packets. At 500, you need the system to tell you which forms are missing, and a PDF stack can’t.

Where the follow-up breaks

Mailchimp sends a great reminder email. It just doesn’t know who needs one. It has a list of contacts; it doesn’t have a per-registration completion state. So the reminder goes to everyone — including the families who already finished — or to no one, because you didn’t want to nag the ones who did.

When registration tracks completion per family, the reminder goes only to the families with something missing. The registration system knows who’s incomplete, and the communication goes to exactly them. The difference between “blast everyone” and “remind the seven families who haven’t finished” is the difference between annoying your whole list and closing the gap.

Where capacity breaks

Session capacity and the waitlist live in someone’s head, or in a column they update by hand. When a session fills, there’s no logic stopping the next registration — so you catch the overflow manually, run the waitlist as a side spreadsheet, and email people their position one at a time.

A registration system that knows session capacity holds the line for you. When a session fills, the waitlist takes over automatically, positions track themselves, and an opening promotes the next family in line without you running the queue by hand. The waitlist stops being a thing you remember and becomes a thing the system runs.

Siblings and returning families re-enter everything

Two-thirds of your families came last year. Half of them have a sibling. In a stitched stack, none of that history carries forward — every returning camper is a blank form, every sibling is a fresh entry, and any sibling discount or returning-family logic is a manual adjustment you remember to apply.

When the system holds returning-family records, last year’s camper prefills this year’s form, siblings link instead of re-enter, and the discount logic applies itself. The data you already collected does the work, instead of being re-collected because four separate tools each remember a different fraction of it.

The root problem: four half-records, no source of truth

Step back from the individual seams and the real problem is one thing: in a stitched stack, the camper isn’t one record. They’re a Jotform submission, a Stripe customer, a Mailchimp contact, and a spreadsheet row. Four half-records, none of which is the source of truth, all of which you keep in sync by hand.

Every seam above is a symptom of that. The forms can’t branch because they don’t share the camper record. The money won’t reconcile because the payment and the roster are different databases. The reminders go to everyone because completion state lives nowhere. Fix the records and the seams close on their own.

What changes with one system

When registration, payments, medical, communication, capacity, and returning families live in one system on a single camper record, the integration work you’ve been doing by hand disappears — not because the work got faster, but because it stops being separate work. You enter each thing once, and every part already has it.

The charge knows its camper. The missing form surfaces itself. The reminder finds the right families. The waitlist runs. The returning family prefills. You stop being the integration layer between four tools and go back to running the camp.

You built the stack that worked at 150, and that was the right call. When it’s the seams holding you back instead of the workload, one system for camp registration is what closes them. Join the waitlist — and if you want to see it run a real registration first, the registration features walk through the flow end to end.

Common questions

Why does a Jotform and Stripe camp registration setup break as the camp grows?
At a small scale, you are the integration layer, moving data between tools by hand. That doesn't scale. As the camp grows, matching a Stripe charge to a roster row by hand goes from minutes to an afternoon, and every form, payment, and reminder lives in a separate tool with no shared record. The work didn't get harder per camper — there are just more seams, and the seams are where the time goes.
What specifically breaks in a DIY camp registration stack?
Six seams break in turn: forms can't branch deeply, payments don't connect to the roster, medical data sits unstructured in PDFs, reminders blast everyone because nothing tracks completion, capacity and the waitlist live in someone's head, and returning families re-enter everything. Each is a symptom of one root problem — the camper isn't one record.
What is the root problem with stitched-together camp tools?
In a stitched stack the camper is four half-records — a Jotform submission, a Stripe customer, a Mailchimp contact, and a spreadsheet row — none of which is the source of truth. Every seam is a symptom of that. When registration, payments, medical, communication, and returning families share one camper record, the integration work you've been doing by hand stops being separate work.
When should a camp move off a DIY registration stack to one system?
Move when it's the seams holding you back, not the workload — when reconciling payments against rosters and chasing missing forms by hand costs more time than the tools save. A stack stitched from general-purpose tools is honest engineering at a small scale; one system is what closes the seams once they turn structural.

Make next season reconciliation, not reconstruction.

Camp Runner keeps registration, payments, medical, staff, and season close-out in one system, so the numbers reconcile against each other. Join the waitlist to see it run before next season opens.