Configuring Tally as a Source
In the Sources tab, click on the “Add source” button located on the top right of your screen. Then, select the Tally option from the list of connectors. Click Next and you’ll be prompted to add your access.1. Add account access
The connector authenticates with a Tally API key. To create one, open Tally and go to Settings > API keys, click Create API key, and copy the key. Tally shows the key only once.An API key has the same access as the Tally user who created it. The connector extracts the workspaces and forms that user can see. If that user leaves your Tally organization, the key stops working.
- API Key: The Tally API key created above.
- Start Date: Only submissions submitted on or after this date are extracted on the first run. Leave it empty to extract all submissions.
- Submission Status (advanced, default
all): Extractallsubmissions, onlycompletedones, or onlypartialones. - Analytics Period (advanced, default
30d): The period requested from the form analytics streams. Options:today,yesterday,24h,7d,30d,3m,6m,12m, andall.
2. Select streams
Choose which data streams you want to sync. For faster extractions, select only the streams that are relevant to your analysis.Tip: The stream can be found more easily by typing its name.Select the streams and click Next.
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: you can choose between INCREMENTAL and FULL_TABLE.
- Incremental: every time the extraction happens, we’ll get only the new data - which is good if, for example, you want to keep every record ever fetched.
- Full table: every time the extraction happens, we’ll get the current state of the data - which is good if, for example, you don’t want to have deleted data in your catalog.
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). 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.
- Determine when to execute an Additional Full Sync. This will complement the incremental data extractions, ensuring that your data is completely synchronized with your source every once in a while.
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.Streams that Tally restricts by plan or role (such as folders, organization users and invites, and form analytics) are skipped with a warning in the run log when the API key’s user does not have access to them. The rest of the extraction continues normally.
Fields by stream
Fields holding nested objects or lists of objects (for examplepayments, members, fields, responses, and payload) are stored as JSON strings. In submission_responses, answer is always JSON-encoded, so text answers appear in quotes and multiple-choice answers appear as lists.
Current User
Current User
The Tally user who owns the API key.Primary key:
idid- Unique identifier of the userfirst_name- First name of the userlast_name- Last name of the userfull_name- Full name of the useremail- Email address of the useravatar_url- URL of the user’s avatar imageorganization_id- Identifier of the organization the user belongs tois_deleted- Whether the user account was deletedhas_two_factor_enabled- Whether the user has two-factor authentication enabledsubscription_plan- Subscription plan of the user (FREE, PRO or BUSINESS)created_at- When the user was createdupdated_at- When the user was last updated
Organization Users
Organization Users
Users that are members of the organization.Primary key:
idid- Unique identifier of the userfirst_name- First name of the userlast_name- Last name of the userfull_name- Full name of the useremail- Email address of the useravatar_url- URL of the user’s avatar imageorganization_id- Identifier of the organization the user belongs tois_deleted- Whether the user account was deletedhas_two_factor_enabled- Whether the user has two-factor authentication enabledsubscription_plan- Subscription plan of the user (FREE, PRO or BUSINESS)created_at- When the user was createdupdated_at- When the user was last updated
Organization Invites
Organization Invites
Pending invitations to join the organization.Primary key:
idid- Unique identifier of the inviteorganization_id- Identifier of the organization the invite is foremail- Email address that was invitedcreated_at- When the invite was createdupdated_at- When the invite was last updated
Workspaces
Workspaces
Workspaces the API key’s user has access to.Primary key:
idid- Unique identifier of the workspacename- Name of the workspaceindex- Display position of the workspace in the Tally dashboardmembers- Users with access to the workspace (JSON array of user objects)invites- Pending invites to the workspace (JSON array of objects with id, email and workspaceIds)folders- Folders in the workspace (JSON array of folder objects)created_by_user_id- Identifier of the user who created the workspacecreated_at- When the workspace was createdupdated_at- When the workspace was last updated
Folders
Folders
Folders of each workspace (folders require a Tally Pro subscription).Primary key:
idid- Unique identifier of the foldername- Name of the folderworkspace_id- Identifier of the workspace that contains the folderparent_id- Identifier of the parent folder, empty for top-level folderscreated_by_user_id- Identifier of the user who created the foldercreated_at- When the folder was createdupdated_at- When the folder was last updated
Forms
Forms
Forms the API key’s user has access to.Primary key:
idid- Unique identifier of the formname- Name of the formis_name_modified_by_user- Whether the form name was set by the user rather than derived from the titleworkspace_id- Identifier of the workspace that contains the formorganization_id- Identifier of the organization that owns the formstatus- Publication status of the form: BLANK, DRAFT or PUBLISHEDhas_draft_blocks- Whether the form has unpublished changesnumber_of_submissions- Total number of submissions received by the formis_closed- Whether the form is closed to new submissionsindex- Display position of the form in its workspacepayments- Payment amounts and currencies configured in the form (JSON array of objects)created_at- When the form was createdupdated_at- When the form was last updated
Form Questions
Form Questions
Questions of each form.Primary key:
form_id, idid- Unique identifier of the questionform_id- Identifier of the form the question belongs totype- Block type of the question (e.g. INPUT_TEXT, MULTIPLE_CHOICE, CHECKBOXES)title- Title of the question as shown to respondentsis_title_modified_by_user- Whether the title was set by the user rather than generatedis_deleted- Whether the question was removed from the formnumber_of_responses- Number of responses the question receivedfields- Input fields of the question with uuid, type, questionType and title (JSON array of objects)created_at- When the question was createdupdated_at- When the question was last updated
Submissions
Submissions
Submissions of each form, read incrementally by submission date.Primary key:
id. Incremental on submitted_at.id- Unique identifier of the submissionform_id- Identifier of the form that was submittedrespondent_id- Identifier of the respondent who submitted the formis_completed- Whether the submission is complete (false for partial submissions)submitted_at- When the submission was submitted, used as the incremental replication keypreview_url- Signed URL to view the submission in a browser (contains an access token, no expiry)pdf_url- Signed URL to download the submission as a PDF (contains an access token, no expiry)response_count- Number of questions answered in the submissionresponses- Answers of the submission (JSON array of answer objects); one row per answer in submission_responses
Submission Responses
Submission Responses
One row per answered question of each submission.Primary key:
idid- Unique identifier of the responsesubmission_id- Identifier of the submission the response belongs toform_id- Identifier of the formquestion_id- Identifier of the question that was answeredquestion_title- Title of the question at extraction timequestion_type- Block type of the question at extraction timerespondent_id- Identifier of the respondentsession_uuid- Identifier of the respondent’s sessionanswer- Answer value as JSON; its shape depends on the question type (text, number, list of options, file objects, …)formatted_answer- Answer formatted as text by Tally (e.g. numbers with custom formatting)created_at- When the response was createdupdated_at- When the response was last updatedsubmitted_at- When the submission was submitted, used as the incremental replication key
Form Analytics Metrics
Form Analytics Metrics
Aggregate metrics of each form for the configured period.Primary key:
form_id, periodform_id- Identifier of the formperiod- Analytics period requested from Tally (e.g. 30d, 12m, all), from the analytics_period settingvisits- Number of visits to the formvisit_duration- Average visit durationsubmissions- Number of submissionsunique_respondents- Number of unique respondentstotal_views- Total number of form viewsstarts- Number of respondents who started the formcompletions- Number of respondents who completed the formcompletion_duration- Average time to complete the formcompletion_rate- Share of starts that were completed
Form Visits Over Time
Form Visits Over Time
Visit counts of each form over time.Primary key:
form_id, period, bucketform_id- Identifier of the formperiod- Analytics period requested from Tally (e.g. 30d, 12m, all), from the analytics_period settingbucket- Time bucket key exactly as returned by Tallybucket_start- Start of the time bucket, parsed from the bucket key when possibleinterval- Length of each time bucket as reported by Tallytotal_visits- Number of visits in the bucket
Form Submissions Over Time
Form Submissions Over Time
Completed and partial submission counts of each form over time.Primary key:
form_id, period, bucketform_id- Identifier of the formperiod- Analytics period requested from Tally (e.g. 30d, 12m, all), from the analytics_period settingbucket- Time bucket key exactly as returned by Tallybucket_start- Start of the time bucket, parsed from the bucket key when possibleinterval- Length of each time bucket as reported by Tallycompleted- Number of completed submissions in the bucketpartial- Number of partial submissions in the bucket
Form Visitor Dimensions
Form Visitor Dimensions
Visitor counts of each form broken down by source, browser, OS, device, country and city.Primary key:
form_id, period, dimension, valueform_id- Identifier of the formperiod- Analytics period requested from Tally (e.g. 30d, 12m, all), from the analytics_period settingdimension- Breakdown dimension: source, browser, os, device, country or cityvalue- Value of the dimension (e.g. a browser name or a country)visitors- Number of visitors with this value
Form Drop-off
Form Drop-off
Per-question drop-off statistics of each form.Primary key:
form_id, period, block_group_uuidform_id- Identifier of the formperiod- Analytics period requested from Tally (e.g. 30d, 12m, all), from the analytics_period settingblock_group_uuid- Identifier of the question block grouptitle- Title of the questiontype- Block type of the questionis_required- Whether the question is requiredviews- Number of times the question was viewedstarted_views- Number of views by respondents who had started the formanswers- Number of answers to the questiondrops- Number of respondents who left the form at this questionanswer_rate- Share of views that resulted in an answerdrop_rate- Share of views that resulted in leaving the form
Webhooks
Webhooks
Webhooks configured on the forms the user has access to.Primary key:
idid- Unique identifier of the webhookform_id- Identifier of the form the webhook is attached tourl- Endpoint URL the webhook delivers tohttp_header_names- Names of the custom HTTP headers sent with each delivery (JSON array; values are not extracted)event_types- Event types the webhook subscribes to (e.g. FORM_RESPONSE)external_subscriber- Identifier of the external integration that created the webhook, if anyis_enabled- Whether the webhook is enabledlast_synced_at- When the webhook was last syncedcreated_at- When the webhook was createdupdated_at- When the webhook was last updated
Webhook Events
Webhook Events
Delivery attempts of each webhook, with status, response code and payload.Primary key:
idid- Unique identifier of the webhook eventwebhook_id- Identifier of the webhook that produced the eventwebhook_url- URL the event was sent toevent_type- Type of event (FORM_RESPONSE)delivery_status- Delivery status: QUEUED, SUCCEEDED, FAILED or DROPPEDstatus_code- HTTP status code returned by the receiving endpointresponse- Response body returned by the receiving endpointretry- Number of delivery retry attemptspayload- Payload that was sent to the endpoint (JSON object)created_at- When the event was createdupdated_at- When the event was last updated
Implementation Notes
- Submissions are extracted incrementally using
submitted_at. Each run reads submissions submitted on or after the last extracted one, so the newest submission can appear again in the next run. - Analytics streams are snapshots of the configured Analytics Period. Each row carries the
periodit was requested for. - Signed links:
preview_urlandpdf_urlinsubmissionsare links generated by Tally that never expire. Anyone with the link can see the submission, so share these columns carefully. - Rate limit: Tally allows 100 API requests per minute per API key. The connector stays under this limit and waits automatically when Tally asks it to slow down. Other integrations using the same key share this limit.