Major updates and new features in propform.io — sorted chronologically (newest at the top).
You can now restrict, for each file upload field, which file types may be uploaded. In the file field settings you'll find the new "Allowed file types" area: conveniently pick whole groups (images, PDF, Office documents, spreadsheets, e-mail files, archives, audio, video) or set each extension individually under "Adjust individual file extensions".
The restriction works twice over — the browser's file dialog only offers the allowed types, and on submission it is additionally checked on the server.
Handy e.g. for notary instructions: When the uploaded files are later assembled into a PDF in onOffice, only images can be embedded there. Simply restrict the field to "Images" — this prevents visitors from uploading PDFs that would disrupt the later PDF creation.
If you don't select anything, you automatically keep the previous behaviour: all common file types are allowed. So you don't need to change anything on your existing forms.
📖 Restrict the allowed file types
When writing an activity, a cancellation reason can be included. In onOffice, these cancellation reasons can be freely adjusted — renamed, deleted or extended. Until now, propform only knew the standard cancellation reasons; if a reason was used that no longer exists in your onOffice version, writing the activity failed.
Now you can maintain your own cancellation reasons: under Settings → onOffice API you'll find a list pre-filled with the onOffice standard values. You can add, rename or remove entries — most easily via copy/paste straight from onOffice. This way the values match your onOffice version exactly, and activities with a cancellation reason are written reliably. (Each entry can be up to 40 characters long — an onOffice requirement.)
If you don't change anything, the previous standard cancellation reasons remain in place automatically — so there's nothing to do if your onOffice version is unchanged.
When a form can't be submitted — for example because a required field is missing or the duplicate check kicks in — and the visitor goes back in the browser, all entries already made are now preserved. This no longer applies only to plain text fields, but also to:
In addition, the error page now has a new "Back" button that leads straight back into the filled-in form — no need to type everything again.
This also works in multi-step forms and together with Conditions & Rules: fields that are shown and hidden are restored correctly. The entries are stored exclusively locally in the visitor's browser (without cookies) and are gone at the latest when the tab is closed.
Signing is now simpler: the previous intermediate step "Use signature" is gone. As soon as the visitor has signed, the signature is applied automatically — a green confirmation "✓ Signature accepted" shows this. The delete icon lets you discard the signature and start over at any time.
Also improved:
The change applies automatically to all existing forms — you don't need to change anything in how your forms are built.
Appointments can not only be displayed and created via a form, but also specifically edited/updated (subject, note, status, times). Particularly useful in combination with the onOffice appointment macros and the new recursive appointment loop:
_bCalendarRek_(...) ... _eCalendarRek_
Appointments can be listed dynamically and processed further via form logic — e.g. book a slot, deactivate a slot, change status. The new macro _pfGetCalendarUUID provides an encrypted calendar UUID to securely access appointments via a link or parameter.
📖 propform macros — Calendar loop
Existing search criteria can be loaded and edited via a form. Explanatory video
_bScRek_(...) ... _eScRek_ allows you to iterate through all search criteria for an address. Optionally with a filter, e.g. _bScRek_("status:1") for active search criteria only.
Also: output individual search criteria values using _pfGetSearchCriteriaField(feldname).
📖 Overview of all propform macros
_pfButton() & _pfLink()Fully styled buttons and hyperlinks directly in description and text fields. Examples:
_pfButton("Weiter zum Formular", "https://example.com", "rounded-pill", "_blank")
_pfLink("https://example.com", "Hier klicken", "_blank")
_getAddressLink & _getEstateLinkCreate a direct deep link to the address or property record in onOffice enterprise — works only for logged-in users.
When a form performs ChatGPT operations, you can now also select the newer models GPT-5.1, GPT-4.1, GPT-4.1-mini — in the form settings under “Generate text (ChatGPT)” → “Fine-tuning”.
All functions of the onOffice API are now available in propform:
📖 File upload fields · Video tutorial
Download fields have been given many new selection criteria:
In addition, download tracking is now available as an activity in onOffice. This also enables digital data/download rooms for customers via a form.
📖 File download fields · Video tutorial
Forms can now be filled in using voice/AI. Prerequisite: OpenAI Platform API key stored in the account. Can be enabled in the form settings under ‘Further settings’. A microphone button will then appear at the bottom right of the form.
📖 AI voice input · Video example
In the form settings under the “Conditions & Rules” tab, you can dynamically show and hide fields depending on the values of other fields.
📖 Conditions & Rules · Explanatory video
With “Write values”, additional fields can be populated in the address or property section after the form is submitted — including using macros. Example: Write _pfGetSearchCriteriaInformation into an address field to use it later in an onOffice PDF template.
📖 Write values · Video
In the account settings under “Statistics”, you can completely disable the following:
This ensures that data is routed exclusively to onOffice.
📖 Data Protection & Data Minimisation
key=The URL parameter ?key=... can be used to password-protect a form — also in combination with macros, for example to create one-time links. Video explanation
In the form settings, you can configure the form so that only specific IP addresses are permitted to access it.
form_start_input and form_abort have been added. GTM can therefore be used to track form abandonment and the start of input.
In addition to Google Tag Manager, the Etracker code can now also be added to forms.
📖 Tracking
Previously, when matching recipients to onOffice addresses where the email was only a secondary or tertiary address, the email was sent to the primary address of the record. Now, propform first checks whether the email actually exists as the primary address — and if not, automatically creates a new address record with this email.
Individually created user fields in the address or property can now be selected as recipients of emails — e.g. “Team Leader” or “In-house Responsibility”.
Recipients, CC and BCC now also support onOffice macros — e.g. with fallback:
_ifEmpty(_Sonstige1;"fallback@unternehmen.de";"_Sonstige1")
Fields can now be moved within the form via drag & drop — the old ‘up/down arrow’ logic has been replaced.
For single-select fields with many options (e.g. user fields), a search function can be enabled — the visitor types a search term and matching options are suggested.
Search criteria fields with From and To values can now be populated separately via URL parameters — using a double underscore:
?searchcriteria[wohnflaeche__von]=50&searchcriteria[wohnflaeche__bis]=80
Set Intervall = 0,0001 in the field settings. Please note: In onOffice, the field must also be set to “Decimal with 4 decimal places” in the administration.
For number fields, a unit or currency can now be displayed after entered values — e.g. m² or €. Freely definable in the “Further field settings”.
Number fields now use a full stop as the thousands separator. The numeric keypad is automatically displayed on smartphones.
Configurable in the field settings — the browser can suggest saved values (name, email, phone number, etc.).
iFrames can now be embedded from any source via the description field — e.g. Timum appointment booking:
<iframe src="https://www.timum.de/[providerID]/_Id@[providerID]@onofficeEstate/embedded_map" width="100%" height="400px" frameborder="0"></iframe>
In the case of the “Duplicate check on object_no_external”, you can now select that only existing object numbers are permitted. This prevents “ghost properties” caused by typing errors.
In addition to “square” and “rounded”, you can now also select the “Pill” design style — all form elements will be fully rounded.
Baskerville and Inter are now available.
Previously, you could only define an activity for form submission. Now, an activity can also be created on form call — e.g. to track who has accessed a form.
You can now dynamically decide which thank-you page to redirect to based on field values in the address/property:
_ifEmpty(_Sonstige1;"www.dankeseite1.de";"www.dankeseite2.de")
or using a single-select value:
_calculate(IF([ind_2418_Feld_adressen51]="ind_Schl_4605";"https://link-1.de";"https://link-2.de"))
The onOffice field configuration is now retrieved in the background. Using the builder and loading forms is significantly faster. Fields are now only auto-updated when the form overview is called up and once a day in the morning — no longer every time the field settings are accessed.
Form groups can be defined in the account settings. In the form settings, a form can be assigned to a group. This allows you to create a copy link for the entire form group — and copy multiple forms between propform accounts at once.