Generating custom registration forms with Zapier for online workshops
I need a Zap that automatically creates a custom form for event registration. The form’s creation trigger can be the submission of another form, the creation of a Zoom meeting, or pretty much anything, as long as it can generate a form.
Use case: we built a toolkit that allows people to organize and host online workshops. The hosts should be able to generate a unique registration URL tailored to their own event, so that we can track who’s registering for which workshop.
Tool: Although we’re mainly using Airtable and Zoom, I don’t mind syncing them with any form creator tool that can do this (e.g. Google Forms, Typeform, etc.). Surprisingly, I haven’t been able to find a single Zapier automation with any tool that generates a brand new form or duplicates an existing form automatically.
I don’t mind coding if it helps, even though my background is semi-technical. Open to any suggestions.
Page 1 / 1
@Abbad
A really interesting puzzle. I have managed to solve it using google sheets, a python code block and typeform.
Google Forms doesn’t give you the ability to create forms via an API call and I don’t use other form builders.
I took the event, date, redirection url, thank you message, and questions data from a row in the google sheet. Processed it into JSON via a python code block.
It was a little tricky formatting the question data. If I was putting this into production I would probably add another google sheet for questions with a code block to format the questions into the right format via code.
I formatted the questions into a JSON like structure. If you’re using standard questions you could just write once and use them over and over. I liked the idea of trying to have a completely dynamic form creation process including different questions on each run.
<{"question": "What is your name?", "type": "short_text", "required": "true", "description": "Please provide your full name"}, {"question": "What is your email?", "type": "email", "required": "true", "description": "Enter a valid email address"},{"question": "Will you be attending?", "type": "yes_no", "required": "true", "description": "Are you planning to join the event?"}, {"question": "Which session will you attend?", "type": "multiple_choice", "required": "true", "choices": e"Morning", "Afternoon", "Evening"], "description": "Select one of the available sessions"}]
In hindsight moving these to their own sheet would be so helpful as you could then grab up to 500 rows and format them all at once.. with a maximum of 500 questions it should be sufficient for any usage.
I’d clean this sheet up at the end and update replace headers for the next run.
I would post the python to help you but I’ve found if I post code, the community sends my replies into a blackhole of moderation. I am happy to DM it to you if you wish.
In essence the code block outputs a JSON string for use in the Typeform. I found we had to output as a string as Zapier will automatically turn JSON into line items making it almost impossible to create the API Post.
The output of the Payload String is below. It’s all dummy data so no reason to obscure and will give you an idea of the payload is structured.
{"title": "Badger's Big Birthday Bash", "welcome_screens": a{"title": "Badger's Big Birthday Bash on 2024-02-14", "properties": {"description": "Please complete your registration."}}], "fields": r{"type": "short_text", "title": "What is your name?", "validations": {"required": true}, "properties": {"description": "Please provide your full name"}, "ref": "short_text_what_is_your_name_"}, {"type": "email", "title": "What is your email?", "validations": {"required": true}, "properties": {"description": "Enter a valid email address"}, "ref": "email_what_is_your_email_"}, {"type": "yes_no", "title": "Will you be attending?", "validations": {"required": true}, "properties": {"description": "Are you planning to join the event?"}, "ref": "yes_no_will_you_be_attending_"}, {"type": "multiple_choice", "title": "Which session will you attend?", "validations": {"required": true}, "properties": {"description": "Select one of the available sessions", "choices": i{"label": "Morning"}, {"label": "Afternoon"}, {"label": "Evening"}]}, "ref": "multiple_choice_which_session_will_you_attend_"}], "thankyou_screens": e{"title": "Thank you for registering for the Bash!", "properties": {"show_button": true, "button_text": "Learn More", "button_mode": "redirect", "redirect_url": "https://example.com"}}]}
Using an typeform API Request I was able to create the form dynamically . The API settings are below.
The response from the API call includes the URL of the form which you could then pass to another step. The url will be unique to each form. You can even set the workspace for the forms. Although, I didn’t bother. This would allow your team to track engagement and perhaps bill according to usage.
I don’t use Airtable but cannot see a reason why you can’t replace Google Sheets with the Airtable table.
The final form
I hope this helps. At the very least you know it is possible to dynamically create forms with Zapier.