Paperform & Coda

How To Coda with Paperform

Using the Coda PaperForm Pack from the Coda Guy

Once you use external form builders to get feedback you can choose between various providers like Jotform, Typeform and the one we deal with in this blog: Paperform.

I previously used Paperform for some projects and appreciated the tool a lot. The great Coda Maker Scott (on Twitter The Coda Guy) created a pack to handle the responses. The set up is very well done. You need an API key and if you click on the the link in Coda that asks for the key you are directed to the right place directly inside PaperForm. Good job. From here you give a name and copy the key into the Coda Pack (window in your doc).

Paperform API key generation

The result is an active pack in your doc

An empty page

you ask for responses and first you see the loading, Coda connects to Paperform:


And a bit later all the forms got in. When you have only 10–30 forms this is okay and if you need an overview because you got lost in your forms, you simply click on the Forms tab and this generates a table with all your forms. This overview is a handy tool to find what you are looking for.

The responses arrive as columns and for logical reasons each question got a column. They become part of one table. This tables is often a mix of contact details (name, first name, email, gender) and all sort of responses.

Below how the data is pushed into each column, the columns are not plain text, they are formula driven so you cannot manually alter the outcome.

In short Scott did a wonderful job with this pack. It is simple, goes fast and takes away the need for any integration like Zapier or (which will save you both time, money and fake alerts…). Nothing to complain so far!

But be careful

In this blog I wrote about how a spreadsheet logic can fool us.

The structure of your PaperForm table looks a lot like ”spreadsheet logic” and is maybe not the best way to move forward.

I created a test form designed to evaluate teas and used the pack to integrate the results. Below the imported Paperform open in Coda.

The table containing the the form to get feedback on teas

This is what you see

It is very well possible that you — like me — end up with this, see below:

The imported results of the review

Do you see what is happening? We end up with the wrong data structure. Why? Have a look below, this is how products live in a Coda table. It is row based, not column based.

Next steps

How to move forward from here? Two suggestions to make it work.

  • First you apply a transpose logic inside Coda using a button OR
  • Second you export the PaperForm logic into a spreadsheet and you transpose before you paste it into Coda…

Option 1 — Transposing in Coda

This is actually not that easy and requires a combination of insights and skills. I am not going to work out the solution in detail, just the headlines. Most important are two aspects. You create a list of results (manual work) in the source table using the function List() to group all results in one column — in the below image this is ListOfResults. Next you make sure that your target table has the same amount of rows as the list count and that the order corresponds with the column order in your source table (Evaluate Be Your Tea in the example). Once you have this manuel work behind you, it is time to define the function in the button. This function modifies each currentvalue, thus each row via the part after FormulaMap and since the rows in the target table are equal to the amount of evaluations, we use the same CurrentValue (a number generated via Sequence(). The last part in the function makes sure that we keep what we have and add each time the values of a new row.

You cannot via code access the refresh button of the pack, so I suggest that you create a button on the canvas the presses the button only for those rows that have not yet been pressed. You can use a simple trick. Add a check box field to the source table and set it as true via an extra ModifyRows() function (don’t forget about the RunActions() and disable the button for checked boxes. Well, here you are.

We have a working transpose solution in Coda!

There is an alternative to this complexity, but is it a good alternative? Have a look!

Transposing in Google Sheets:

This is quick and dirty. Quick because it takes 30 seconds, dirty you have to do it every time you have new data and it is error prone. Good for a one time exercise, not something to repeat, unless you don’t understand what I shared previously.

step 01 — select the range inside the transpose function

How it works? Click on the function : Transpose( — data range — ) and that is it…. pff, so simple and fast, amazing actually.

transposed in google sheets

Next steps

I’ll ask Scott and all the other pack builders to create a tool that does this transpose work for you, thus generate an additional table that contains the column values as rows. This will make the transpose logic as explained above redundant and that might be a good thing for 95% of the Coda makers. I would not be surprised to see an update in the nearby future on this part. Anyway, keep up the good work Scott.

I hope you enjoyed this article. If you have questions feel free to reach out. Though this article is for free, my work (including advice) won’t be, but there is always room for a chat to see what can be done. Besides you find my (for free) contributions to the Coda Community and on Twitter

My name is Christiaan and I support SMB with calculations (budgets and planning) and I prefer using Coda to get the job done.

Not to forget: the Coda Community provides great insights for free once you add a sample doc.

Christiaan on: How To Coda with Paperform



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Christiaan Huizer

Christiaan Huizer

I use Coda mainly for planning & calculations of all sorts. Follow me to learn how to Coda with numbers. I blog at least once per week.