# Baserow Tally Integration - Capture Forms via Webhook

> Map Tally form fields into a Baserow table, keep a direct REST API call as a fallback when a webhook will not do, and wire up the HTTP trigger step by step.

Source: https://opennix.org/en/docs/baserow/integrations/tally-integration/


Connecting Tally to Baserow means every form submission triggers an automation that receives an HTTP POST request with JSON data over a webhook, then a Create Row action maps the submitted fields onto table columns - this guide walks through configuring both sides and covers a direct REST API alternative for cases that need custom logic.

## How It Works

The integration follows a three-step process:

1. **Trigger (Tally):** a form submission sends an HTTP POST request with a JSON payload.
2. **Listener (Baserow):** the webhook URL receives that request.
3. **Action (Baserow):** the JSON data maps to database columns.

## Part 1: Baserow Listener Setup

Create the webhook receiver:

1. Navigate to the **Automations** tab in the target Baserow table.
2. Create a new workflow.
3. Select the **"Receive an HTTP request (webhook)"** trigger.
4. Set a label (for example, "Incoming Tally Submissions").
5. Select **POST** as the allowed HTTP method.
6. Copy the generated webhook URL.

![Baserow webhook listener setup for receiving Tally form data](/images/baserow/integrations/tally-integration-baserow-listener-setup.png)

## Part 2: Tally Webhook Configuration

Configure Tally to send data:

1. Open the published Tally form and go to the **Integrations** tab.
2. Select **Connect to Webhooks**.
3. Paste Baserow's webhook URL into the **Endpoint URL** field.
4. Optionally add a signing secret for security (generates a SHA256 hash in the **Tally-Signature** header).
5. Save the integration.

![Tally webhook configuration with a Baserow endpoint URL](/images/baserow/integrations/tally-integration-webhook-configuration.png)

## Part 3: Mapping the Data

### Step 1: Capture Sample Data

Submit a test response through the Tally form. Click **"Test event"** in the Baserow automation builder. A typical JSON structure looks like this:

```json
{
  "data": {
    "formName": "Customer Feedback",
    "fields": [
      { "label": "Full Name", "value": "Jane Doe" },
      { "label": "Email", "value": "jane@example.com" }
    ]
  }
}
```

### Step 2: Create the Row Action

Add a **"Create Row"** action:

- Select the target table.
- Use the blue "+" icon to map Tally JSON fields to Baserow columns.
- Example: map `fields[0].value` to the **Name** column.

## Alternative: Direct API Method

Use a serverless function or middleware as a bridge between the two systems.

**Tally API:** REST-based, HTTPS only, base URL `https://api.tally.so`.

**Baserow API call example:**

```bash
curl -X POST "https://api.baserow.io/api/database/rows/table/{table_id}/?user_field_names=true" \
  -H "Authorization: Token YOUR_DATABASE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"Full Name": "Jane Doe", "Email": "jane@example.com"}'
```

`YOUR_DATABASE_TOKEN` is a Baserow [database (API) token](/docs/baserow/webhook-api/personal-api-tokens/) used in place of personal login credentials.

### Comparison

- **Baserow Automations:** a no-code solution that handles parsing inside the UI.
- **Direct API:** better suited for complex logic that needs data transformation before storage.

## Practical Scenario: Handling Incoming Submissions at Scale

Benefits of the webhook integration:

- **Stability:** Tally retries failed requests (after 5 minutes, 30 minutes, and up to a day).
- **Efficiency:** avoids the rate limits that come with polling an API (100 requests per minute).
- **Automation:** triggers secondary actions such as Slack notifications or CRM updates.

## Frequently Asked Questions

**Does receiving the webhook require a separate server?** No - the Baserow automation itself provides the webhook URL, so no extra server is needed. For more on how webhooks work in general, see [Webhooks in Baserow](/docs/baserow/webhook-api/webhooks/).

**What happens if the Tally form's structure changes?** Update the field mapping in the Create Row action manually - there is no automatic remapping when a form changes, so send a fresh test event after editing the form.

**Does this approach work with forms other than Tally?** Yes - any service that can send an HTTP POST request with JSON can work with the Baserow listener the same way; the trigger-listener-action pattern is not specific to Tally.

Related reading: the [Baserow REST API overview](/docs/baserow/webhook-api/database-api/) for direct calls without webhooks, and [Power Automate integration](/docs/baserow/integrations/power-automate-integration/) as an alternative way to connect forms and tables.

