Create your flow using the Ultradox building blocks

With Ultradox you can build cool stuff by simply putting together a flow of powerful building blocks.

As Ultradox has been built from scratch for the G Suite, it provides building blocks for almost every Google service.

You can add building blocks by dragging them from the building blocks sidebar on the left and dropping them into your flow.

Common elements

All building blocks have something in common

Generate PDF from Invoice Template

2 Variables
2 Variables

Type icon

The icon in the top left corner of each building block lets you quickly identify the type of the building block. The icon and color in our example indicates that this building block is running a conversion from Google Docs to PDF.

Interactive description

The descriptive text explains the action that will be perform when this building block gets executed. You can configure the building block by clicking on the bold parts of the description.


On the top right you will find a set of buttons. While you find the buttons on the right in all building blocks, the buttons become more specific from right to left.


By default the requested data will be loaded from the owner of the Ultradox file. You can also load data from a different account by clicking on this button.

You'll have to authorize and grant access to the data of the selected account.

If you have restricted the access to your app to authorized users you will also be able to retrieve data from the user of your app.

The user will be prompted to grant access to the data when running the app for the first time.

Ultradox help

Whenever you find the help icon in Ultradox, you can click on it to open context-sensitive help information in the sidebar on the right.

License indicator

The number in the circle indicates, how many credits will be consumed when executing this building block.

Conditional execution

You can switch off a building block to skip this block when testing your Ultradox file. This comes in handy if you for example want to run your Ultradox file without uploading generated documents to Google Drive or without sending emails. The configuration of your building block will stay untouched.

You can also use this button to execute the building block only if a condition is met.

Condition Builder

When clicking on the if in the on/off switch, a dialog will open that allows you to create the condition using the condition builder.

You will find all available variables in the dropdown and can compose your condition using the available operators from the dropdown.

In the value field - just as in all blue template fields - you can enter fixed values or variables.

Advanced condition example

If you need more sophisticated conditions, you can switch to the Advanced tab and enter the conditions manually.

As indicated by the green background of the input field you can enter JavaScript code that may contain variables.

If you for example want to execute the block only if the variable plan has the value Gold and the variable age is greater than 21 enter the following condition:

'${plan}' == 'Gold' && ${age} > 21

Ultradox will first replace all variables with their values, so if your variables contain the values Silver and 30 your condition will look like this after evaluating the variables.

'Silver' == 'Gold' && 30 > 21

Ultradox will then evaluate this expression as JavaScript code. In this example, the result will be false and the building block will get skipped.


To learn how Ultradox handles advanced conditions, you can use the interactive playground.

Adjust the condition in the Template tab or the data in the Data tab and see how the merged JavaScript looks like.

The Result tab contains the evaluated JavaScript code and should contain just true or false.

'${plan}' == 'Gold' && ${age} > 21
"plan" : "Gold",
"age" : 50




You can toggle a breakpoint by double-clicking on it. Active breakpoints will show up in red.

Read more about how to debug your app by reading the Finding Errors guide.

Input parameters

Below the main toolbar you will find the input and output section of the building block.

Drag the splitter in the middle to resize the panels.

On the left hand side you will find all input parameters that a building block can consume. If you are working on a document containing variables they will appear on the left as input.

If you have created a script that requires some input, again the required input parameters will show up on the left.

On the right of each input parameter you will find an icon indicating if the data has been provided by another building block that is located above the current block.

 Enter values

Clicking on this button will create an input form that allows you to enter values for the input parameters.

A new form will appear above the building block.

You can then either enter fixed values or you can also enter variable names or simple templates so that you can map variables to the desired input parameter names. Let's say you have an input parameter called query and you want to use value of the variable mycondition as query, simply enter ${mycondition} into the form field for the query parameter.

The output prefix of the newly created form will automatically match the input prefix of the building block where you've clicked on the form icon.

 Create form

Creating a form that will prompt the user for the input of the variables works just in the same way as creating new variables.

Each time you are running your flow the user will be prompted to enter the form.

 Input prefix

If you are using multiple building blocks of the same type (e.g. loading multiple contacts), you may end up with the same input parameters multiple times. This will make it complicated to pass dedicated parameters to each building block.

To distinguish the parameters, you can click on this button and enter a unique prefix for the building blocks.

If you for example have an input parameter called query and set the input prefix to from the input parameter will then get the unique name from.query .

Output parameters

On the right hand side all the data that is provided by this building block will show up.

If you have for example selected a Google Sheet you will find all the provided columns of the sheet on the right. contact building block will provide all the data that has been found in the selected contact.

 Output prefix

The output prefix works just like the input prefix, but for the output parameters of a building block.

Some of the building blocks like loading a worksheet from a Google Sheet will assign an output prefix automatically so that you can deal with different worksheets from the same sheet without any hassles.

Feel free to change the output prefix to simplify the resulting variable names.

Please note that changing the variable names will not change them in your templates or subsequent building blocks. Renaming output parameters will force you to rename the variables manually wherever you have used them.

Suggested Actions

In the output section of your building block you will find a number of suggested actions that vary depending on the type of the building block.

Using these actions will add matching building blocks that are already properly configured to work out of the box.

For example the Google Docs to PDF building block will suggest actions to upload the generated PDF to Google Drive, print it or send it as an attachment by email.

 Log statement

The log action is available for all building blocks and can be used to print the available output variables to the console. This is great for simple debugging or inspecting your flow at runtime.

Context menu

If you right-click on the building block you will find some additional actions for the building block you are working on.


You can trigger a building block by simply calling its URL. You can either use the URL to just to a specific building block from your own application or you can use it as action URL in SmartLinks or when tracking your outgoing emails.

This is a powerful feature as you can for example trigger a specific building block whenever a mail gets bounced and then update data or in a spreadsheet, send out another email or whatever you think is useful.

All subsequent building blocks will get executed. Please make sure to pass all parameters required by the subsequent building blocks to be passed either as parameters in the URL or in the request body.

Check out the API reference for further details.

Questions and Feedback

If you have any comments on this page, feel free to add suggestions right to the Google document that we are using to create this site.

If you are not yet member of the Ultradox community on Google+, please join now to get updates from our end or to provide feedback, bug reports or discuss with other users.

Last Updated: 8/4/22