Configuring Jotform as a Source
In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Jotform option from the list of connectors. Click Next and you’ll be prompted to add your access.1. Add account access
The connector uses a Jotform API key. To create one, sign in to Jotform, open My Account > API, click Create New Key and copy it. Read Access is enough: the connector never changes anything in your account. The following configurations are available:- API Key: the Jotform API key. Required.
-
API Region: (Default: Standard) where your Jotform account is hosted. Choose EU if you sign in at
eu.jotform.com, HIPAA for HIPAA-compliant accounts and Enterprise if your forms are on your company’s own Jotform domain. Required. -
Enterprise API URL: shown only for Enterprise. The API address of your Enterprise domain, such as
https://forms.your-company.com/APIorhttps://your-company.jotform.com/API. Only HTTPS addresses with a domain name are accepted. - Team ID: only if your forms live in a Jotform Teams workspace: the ID of that team. Leave it empty for forms in your own workspace. After the first sync, check that the Forms table has as many forms as the team sees in Jotform.
- Start Date: only submissions received on or after this date are extracted. Leave it empty to extract every submission. It does not apply to forms, reports, labels and sub-users, which are always read in full.
- Lookback Days: (Default: 3) on every sync, submissions received or edited up to this many days before the previous sync are read again, so late arrivals (for example, submissions made offline in the Jotform mobile app and uploaded later) are not missed.
-
API Time Zone: (Default:
America/New_York) Jotform’s API returns dates without a time zone, in Jotform’s server time (US Eastern), regardless of the time zone of your account. The connector converts them to UTC using this setting. Change it only if every date in your tables comes out shifted by the same number of hours.
2. Select streams
Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis. You can select entire groups of streams or pick specific ones.Tip: The stream can be found more easily by typing its name.
Form Questions and Form Properties cost one API call per form, but only for forms edited since the previous sync, plus one per form once a week to refresh them. Label Resources costs one API call per label. All the other streams cost a handful of calls per sync.
3. Configure data streams
Customize how you want your data to appear in your catalog. Select the desired layer where the data will be placed, a folder to organize it inside the layer, a name for each table (which will effectively contain the fetched data) and the type of sync.- Layer: choose between the existing layers on your catalog. This is where you will find your new extracted tables as the extraction runs successfully.
- Folder: a folder can be created inside the selected layer to group all tables being created from this new data source.
- Table name: we suggest a name, but feel free to customize it. You have the option to add a prefix to all tables at once and make this process faster!
- Sync Type: use INCREMENTAL for Submissions, Submission Answers, Form Questions and Form Properties: each sync then reads only new and edited submissions and only the forms edited since the previous sync (plus, once a week, every form). Forms, Reports, Labels, Label Resources and Sub-users are FULL_TABLE: each sync reads their current state. Read more about Sync Types here.
A full sync of Submissions reads every submission again, at about one API call per 980 submissions, and is the way to remove from the table submissions that were deleted in Jotform (see Data Quality Considerations). If Submission Answers is set to FULL_TABLE, every submission is read on every sync, because that table is replaced each time.
4. Configure data source
Describe your data source for easy identification within your organization, not exceeding 140 characters. To define your Trigger, consider how often you want data to be extracted from this source. This decision usually depends on how frequently you need the new table data updated (every day, once a week, or only at specific times). On Jotform plans with a low daily API limit, prefer hourly or less frequent syncs. Optionally, you can define some additional settings:- Configure Delta Log Retention and determine for how long we should store old states of this table as it gets updated. Read more about this resource here.
- An Additional Full Sync is only needed if you want submissions deleted in Jotform, or questions removed from forms, to disappear from your tables. Each one costs one API call per form for Form Questions and Form Properties, plus about one call per 980 submissions, so on plans with a low daily limit prefer an occasional manual full sync over a frequent schedule. Check that it finished successfully (see API Limits & Performance).
5. Check your new source
You can view your new source on the Sources page. If needed, manually trigger the source extraction by clicking on the arrow button. Once executed, your data will appear in your Catalog.Streams and Fields
Available streams
The table below lists every stream, its slug (the exact identifier to pass when creating the source via API) and a short description.Fields by stream
All dates are in UTC. Nested values (answers, question properties, payment settings, permissions) are JSON strings. A submission’s answers are keyed by question ID (question_id), the same ID used in Form Questions.
Forms
Forms
Every form of the account returned by Jotform (enabled and disabled; forms in the trash appear with status DELETED when Jotform lists them), with submission counters. Read in full on every sync.Primary key:
id · Full tableForm Questions
Form Questions
One row per question (field) of each form: label, type, order and every property Jotform returns. A form’s questions are requested again when the form was edited since the previous sync, and at least once a week. Forms in the trash are not read.Primary key:
form_id, question_id · Replication key: form_updated_atForm Properties
Form Properties
One row per form with all of its settings (thank-you page, notification e-mails, limits, styles) as JSON. Refreshed for forms edited since the previous sync, and at least once a week.Primary key:
form_id · Replication key: form_updated_atSubmissions
Submissions
Every response received by every form of the account, with all its answers as a JSON object.Primary key:
id · Replication key: last_updated_atSubmission Answers
Submission Answers
One row per answered question of each submission, taken from the same response as Submissions (no extra API call). Join with Form Questions on
form_id and question_id.Primary key: submission_id, question_id · Replication key: submission_last_updated_atReports
Reports
Reports (Excel, CSV, grid, table, visual…) created on the account’s forms.Primary key:
id · Full tableLabels
Labels
Labels (the folders of your Jotform workspace), one row per label including nested ones.Primary key:
id · Full tableLabel Resources
Label Resources
What each label contains: forms, workflows, apps and other assets.Primary key:
label_id, asset_type, asset_id · Full tableSub-users
Sub-users
Sub-user accounts and the forms and folders they can access.Primary key:
id · Full tableImplementation Notes
Data Quality Considerations
- Jotform’s API returns dates in Jotform’s server time (US Eastern) whatever the time zone of your account, so dates shown in Jotform’s own screens can differ by some hours from the UTC dates in your tables. They refer to the same moment.
- Submissions deleted in Jotform are not removed from the Submissions and Submission Answers tables by incremental syncs: Jotform’s API offers no way to list what was deleted. A full sync of these streams (or an Additional Full Sync) brings the tables back in line with Jotform.
- An edited submission is read again on the next sync and replaces the old version. The
new(unread),flag(starred),statusandworkflow_statuscolumns may change in Jotform without the submission counting as edited, so on rows older than Lookback Days they can show the value of the last time the submission was extracted. A full sync refreshes them. - Form Questions and Form Properties are refreshed when the form is edited in Jotform, and every form is read again at least once a week, in case Jotform does not mark the form as edited when only a question changes. A question removed from a form stays in the Form Questions table until a full sync of that stream. Forms in the trash are not read.
- Late submissions (for example, made offline and uploaded later) are caught as long as they arrive within Lookback Days of the previous sync.
API Limits & Performance
Calls made by each sync, which count toward your Jotform daily API limit:- With every stream selected and nothing changed in Jotform, a sync costs about 7 calls plus one per label (and, once a week, one per form for Form Questions and Form Properties). Lists are read in pages of 1,000 that overlap by 20 rows, which is why a page brings about 980 new records. Each sync ends with a line in the run log saying how many calls it made and how many are left for today.
- Before reading the rest of the data, the connector estimates the calls the sync still needs and compares them with what Jotform reports as left for today. If they are not enough, the sync stops before spending them and without changing any table. If the sync fits but leaves fewer than 20 calls for the day, the run log warns that your other integrations may run out.
- Everything that is replaced on each sync (Forms, Reports, Labels, Label Resources, Sub-users, and, in a full sync, Form Questions, Form Properties, Submissions and Submission Answers) is read completely before the connector writes anything. If Jotform answers with errors, refuses access or reports the daily limit as reached while that data is being read, the sync stops and those tables stay as they were. Incremental reads that stop midway do not change what is already in your tables, and the next sync picks up from the same point.
- If a sync is interrupted for another reason while it is writing a table that is replaced on each sync (for example, during a full sync), that table can be left incomplete until the next successful run. Run the sync again until it succeeds.