Webhook Mapping, File Uploads & Date Formatting Questions

Hi team,

I just got Tier 2 from AppSumo and am currently testing the tool. I have a few questions:

• When a form (in any form builder) includes a file, how can I upload it into an attachment column? The data is received via webhook.

• The same webhook receives multiple data points (email, name, file, webpage link, etc.), but when mapping, I can’t select the individual fields. For example, how can I extract the “email” and map it to the correct column? Do you have an example video or flow for this?

• How can I remove the time (hours) from the “time submitted” field and keep only the date?

Hi Alex! :waving_hand:

For your Q1 & Q2, they’re actually the same workflow. Here’s how to set it up:

  1. Create an Automation with a “When webhook received” trigger
  2. Send a test webhook from your form builder to the webhook URL — this is the key step. Teable needs to receive a sample payload first so it can parse the JSON structure
  3. Add a “Create record” action, and you’ll see all the individual fields from your webhook data (email, name, file, website, etc.) available for mapping
  4. For the attachment column, simply map the file URL field to it. Teable will automatically download the file and store it as an attachment

See the screenshot below for reference:

For Q3 — removing the time from a date field:

Click on the date field → Field settings → under Formatting, set the Time formatting to “No display”. This will display only the date (e.g., 2024-12-25) without the hours.

1 Like

Hi @Leo , thanks for the info!

So I’m currently trying to “map” fields, but I’m not getting it to work unfortunately. I’m trying to understand the “loop” function, but doesn’t do anything.

Hi Alex! :waving_hand:

We tested with a similar nested structure and the → arrow shows up correctly for object fields like response and custom_key, allowing us to drill into sub-fields.

Could you try sending this exact payload to your webhook and see if it works?

{
“data”: [
{
“label”: “Email”,
“response”: { “value”: “john@example.com” },
“uuid”: “abc123”,
“custom_key”: { “key”: “email_field” }
},
{
“label”: “Name”,
“response”: { “value”: “John” },
“uuid”: “def456”,
“custom_key”: { “key”: “name_field” }
}
]
}

If the → arrow still doesn’t appear, could you share your actual webhook payload? We’d like to test with your exact data structure to see what’s different.

@Leo As an example, the form sends:

{
“body”: {
“id”: “41102168-b28e-46ef-bed6-28a968277522”,
“data”: [
{
“uuid”: “2776c176-3a40-4fed-9a12-c444dbbfaddc”,
“label”: “Name”,
“response”: “Alex Testing”,
“custom_key”: null
},
{
“uuid”: “dae19cf4-3933-4edf-bcb3-7f5f44b45c44”,
“label”: “Email”,
“response”: “alex_teable_testing@16mail.com”,
“custom_key”: null
},
{
“uuid”: “46d27cc3-e0be-4977-83eb-0ccd488f912f”,
“label”: “Attachment”,
“response”: [
“Teable Testing File 2026.docx|https://userdata.deftform.com/workspaces/uploads/teable_testing_file_2026.docx”
],
“custom_key”: null
}
],
“number”: 1,
“form_id”: “a75511dc-4bd3-4aa3-888d-7042fa43cd8a”,
“referrer”: null,
“form_name”: “Teable testing form”,
“number_formatted”: “1”
}
}

and I can’t find any of the fields to map

Testing

The video in good resolution: Unique Download Link | WeTransfer

Hi Alex! :waving_hand:

Sorry about that — I now understand your issue after looking at your screenshot more carefully. The problem is that your form tool (DeftForm) sends all fields as an array inside data, so each item has label, response, uuid, etc. — but you can’t drill into response to map it to specific columns because the values aren’t nested objects.

Here are a few ways to solve this:

Option 1: Use a Script action
Add a Script action after your webhook trigger. It can parse the data array by label and write each value to the correct column. You can ask Teable’s AI to generate the script for you — just describe what you need.

Option 2: Adjust the webhook output in DeftForm
Check if DeftForm supports sending a flat JSON structure (e.g., { “Name”: “Alex”, “Email”: “alex@…” }) instead of the nested array. That would make mapping straightforward.

Option 3: Build the form in Teable
You can use Teable’s built-in Form view for simple forms, or use the App Builder to create a custom form with more flexibility. Either way, submissions write directly to your table — no webhook or mapping needed.

1 Like

Thank you @Leo , I’m testing the App Builder (for the form) and it’s great! The only issue I have now is that I can’t open or preview the files. When I click on a file in the column, a pop-up opens with a blue “Open” button, but it doesn’t seem to work (in Google Chrome and Firefox).

PDF - doesn’t work (no preview)

docx - works (can view the document)

Hi Alex,

For apps built with App Builder, the functionality is generated by AI.

So in this case, I’d recommend describing the issue directly to the AI builder, for example:

  • clicking the file opens the popup
  • the blue “Open” button does not work for PDFs
  • DOCX files work normally
  • the issue happens in Chrome and Firefox

That will help the AI judge what’s going wrong and iterate on that part of the app.

You can also check our best practices doc here: App Builder Best Practices - Teable

1 Like