Skip to content

Updating visuals

If you see any images containing outdated UI, please bear with us.

We are updating all content as quickly as possible to mirror our new UI.

Airtable integration ​

Airtable combines the simplicity of a spreadsheet with the power of a database. This integration lets your WeWeb backend list, read, create, update, and delete records in Airtable, as well as upload attachments.

Use cases ​

  • Use Airtable as a data source for tables — Add a table in Data & API linked to an Airtable base and table; configure views (fields, filters, sort, pagination) and bind them to Data Grids or fetch them with Table View: Fetch.
  • Sync records from Airtable to power frontend lists and detail pages
  • Create and update records from forms and workflows
  • Bulk create, update or delete records from external sources
  • Upload attachments to existing Airtable records

Setup ​

  1. Sign in to Airtable.
  2. Open the user menu in the top-right corner and click Builder hub.
  3. Go to Personal access tokens.
  4. Click Create token and give it a name.
  5. Click Add a scope and add:
    • data.records:read
    • data.records:write
    • schema.bases:read
  6. Choose the base(s) this token can access, or allow access to all resources.
  7. Click Create token and copy the personal access token.
  8. In WeWeb, open Data & API → Integrations, click Add Connection on Airtable and add your token in Personal Access Token for Editor and Production.
  9. Use the built-in pickers to select a Base and Table, then run List records to validate access.
  10. If the test fails, verify base/table permissions, required scopes, and that the base and table IDs are correct.

Using Airtable as a data source for tables ​

Besides calling Airtable actions from workflows, you can use Airtable as a data source for tables in WeWeb. A table linked to Airtable loads records from a base and table you choose, and you configure a view (fields, filters, sort, pagination). That view can be bound to table components (e.g. Data Grid) or fetched from the interface with the Table View: Fetch action.

Add an Airtable table ​

  1. In WeWeb, open Data & API and go to the area where you manage Tables (or Add table).
  2. Add a new table and choose Airtable as the source.
  3. Select your Airtable connection.
  4. Use the pickers to select Base and Table. WeWeb loads your bases and tables from the Airtable API; columns for the WeWeb table are derived from the Airtable table’s fields (names and types).
  5. Save. The table is now available in your project.

Configure a view ​

Views define which slice of data the table exposes (which fields, filters, sort, and pagination). On the Airtable table you added:

  1. Create or edit a view for that table.
  2. Configure:
    • Fields to return — Select which Airtable fields to include (or leave empty for all). Uses Airtable field IDs (fld...); the picker shows field names.
    • View — Optional. An Airtable view ID (viw...) to use for record order/filtering in Airtable. Leave empty for the default.
    • Filter by Formula — Optional. An Airtable formula (e.g. {Status} = "Active"). Use {FieldName} for field references.
    • Sort — Optional. One or more sort rules: a Field and a Direction (Ascending or Descending).

When the view is loaded (e.g. by a table component or by Table View: Fetch), the backend calls the Airtable List records API with these options and returns the records. Each row in the WeWeb table is the record’s fields object (field names or IDs, depending on your Airtable settings).

Use the table in the interface ​

  • Bind to a component — In the binding menu, under Table Views, select the view you configured. Bind it to a Data Grid, repeating group, or list so the component displays the Airtable records. Data loads when the view is fetched (e.g. on page load or when you call Table View: Fetch).
  • Table View: Fetch — In an interface workflow, add the Table View: Fetch action, choose your Airtable table view, and optionally pass parameters (if the view supports them). Use the result to update a variable or refresh the bound data.
  • Pagination — The view returns an offset in its metadata when more records exist. Use that offset in a subsequent request to load the next page (e.g. by passing it as a parameter or storing it in a variable and refetching).

Auto-generated workflows for the table ​

When you add an Airtable table, WeWeb can create backend workflows for that table so you can get, create, update, and delete records via APIs:

  • Get Record — GET with a Record ID parameter; returns one Airtable record.
  • Create Record — POST with a body containing the new record’s fields.
  • Update Record — PUT with Record ID and body with fields to update.
  • Delete Record — DELETE with a Record ID parameter.

These workflows call the same Airtable actions (Get record, Create records, Update record, Delete record) with the table’s base and table IDs. Use them from the interface (e.g. form submit → call Create Record API) or from other backend workflows. Security and access are controlled by the API’s access rules and your Airtable token.

For the general pattern of tables, views, and fetching data, see Working with data and Table View: Fetch.

Common pitfalls (setup & usage) ​

Missing scopes or base access ​

If the token lacks required scopes or access to the base, requests will fail (often 403). Ensure the token includes needed scopes and the base is shared with the token.

Field ID vs field name mismatch ​

When returning fields by ID, your responses will contain field IDs, not names. Disable “Return fields by field ID” if you prefer names.

Formula and sorting issues ​

Filter by Formula must follow Airtable’s formula syntax. For sorting, use valid field IDs and a supported direction (asc, desc).

All Actions ​

This integration provides eight actions mapped to Airtable’s REST API.

ActionDescription
List recordsRetrieve records from a table with optional fields, filters, sorting, and pagination
Get recordRetrieve a single record by ID
Create recordsCreate one or multiple records
Update recordUpdate the fields of a single record
Update multiple recordsUpdate up to 10 records in one request
Delete recordDelete a single record by ID
Delete multiple recordsDelete up to 10 records in one request
Upload attachmentUpload a file to an attachment field on an existing record

Action details ​

List records ​

Retrieve records from a table with optional fields, filters, sorting, and pagination.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Fields to return
Optional
["fldABC123","fldDEF456"]Only return these fieldsArray of field IDs
View
Optional
"viwXXXXXXXXXXXXXX"View to source recordsValid view ID
Filter by Formula
Optional
{Status} = "Active"Airtable formula filterValid Airtable formula
Sort
Optional
[{"field":"fldABC","direction":"asc"}]Sort criteriadirection: asc, desc
Page size
Optional
100Records per page1–100
Offset
Optional
"itrXXXXXXXX/recXXXXXXXX"Pagination cursor from previous pageString
Return fields by field ID
Optional
trueReturn field keys as IDsBoolean
Cell format
Optional
"json"Value formatValid: json, string
Time zone
Optional
"America/New_York"Time zone for datesIANA tz. Required when Cell format is string
User locale
Optional
"en-US"Locale for formattingBCP47. Required when Cell format is string

Example output

json
{
  "records": [
    { "id": "recXXXXX", "createdTime": "2026-10-26T09:00:00.000Z", "fields": { "Name": "Acme" } }
  ],
  "offset": "itrXXXXX/recYYYYY"
}

Documentation of API endpoint that powers action: Airtable API – List records (GET /v0/{baseId}/{tableId})

Get record ​

Retrieve a single record by ID.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Record ID"recXXXXXXXXXXXXXX"Record IDRequired
Return fields by field ID
Optional
trueReturn field keys as IDsBoolean
Cell format
Optional
"json"Value formatValid: json, string
Time zone
Optional
"America/New_York"Time zone for datesIANA tz. Required when Cell format is string
User locale
Optional
"en-US"Locale for formattingBCP47. Required when Cell format is string

Example output

json
{ "id": "recXXXXXXXXXXXXXX", "createdTime": "2026-10-26T09:00:00.000Z", "fields": { "Name": "Acme" } }

Documentation of API endpoint that powers action: Airtable API – Get record (GET /v0/{baseId}/{tableId}/{recordId})

Create records ​

Create one or multiple records.

Once a table is selected, choose Single to create one record, or Multiple to create several. Use Select fields to include to pick the fields you want to fill: each one then gets its own input in Fields (single) or in each item of Records (multiple).

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Records[{"fields":{"fldABC123":"Acme"}},{"fields":{"fldABC123":"Globex"}}]Fields for the new records (Multiple mode)Required in Multiple mode; up to 10 records
Select fields to include
Optional
["fldABC123","fldDEF456"]Fields to show and fillArray of field IDs
Fields
Optional
{"fldABC123":"Acme"}Fields for the new record (Single mode)Object
Return fields by field ID
Optional
trueReturn field keys as IDsBoolean
Typecast
Optional
trueCoerce values to field typesBoolean

Example output (Single mode)

json
{ "id": "recXXXXXXXXXXXXXX", "createdTime": "2026-10-26T09:00:00.000Z", "fields": { "Name": "Acme" } }

In Multiple mode, the result is { "records": [ … ] } with one object per created record.

Documentation of API endpoint that powers action: Airtable API – Create records (POST /v0/{baseId}/{tableId})

Update record ​

Update the fields of a single record. Fields you don't send keep their current values.

Use Select fields to include to pick the fields you want to change: each one then gets its own input in Fields.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Record ID"recXXXXXXXXXXXXXX"Record to updateRequired
Select fields to include
Optional
["fldABC123"]Fields to show and updateArray of field IDs
Fields
Optional
{"fldABC123":"Active"}Fields to updateObject
Typecast
Optional
trueCoerce values to field typesBoolean
Return fields by field ID
Optional
trueReturn field keys as IDsBoolean

Example output

json
{ "id": "recXXXXXXXXXXXXXX", "createdTime": "2026-10-26T09:00:00.000Z", "fields": { "Status": "Active" } }

Documentation of API endpoint that powers action: Airtable API – Update record (PATCH /v0/{baseId}/{tableId}/{recordId})

Update multiple records ​

Update up to 10 records in one request. For each record, only the fields you send change.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Select fields to include
Optional
["fldABC123"]Fields to show and updateArray of field IDs
Records to update
Optional
[{"id":"recXXXXXXXXXXXXXX","fields":{"fldABC123":"Active"}}]Records to update, each with {id, fields}Up to 10 records
Typecast
Optional
trueCoerce values to field typesBoolean
Return fields by field ID
Optional
trueReturn field keys as IDsBoolean

Example output

json
{
  "records": [
    { "id": "recXXXXXXXXXXXXXX", "createdTime": "2026-10-26T09:00:00.000Z", "fields": { "Status": "Active" } }
  ]
}

Documentation of API endpoint that powers action: Airtable API – Update multiple records (PATCH /v0/{baseId}/{tableId})

Delete record ​

Delete a single record by ID.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Record ID"recXXXXXXXXXXXXXX"Record to deleteRequired

Example output

json
{ "id": "recXXXXXXXXXXXXXX", "deleted": true }

Documentation of API endpoint that powers action: Airtable API – Delete record (DELETE /v0/{baseId}/{tableId}/{recordId})

Delete multiple records ​

Delete up to 10 records in one request.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Record IDs["recXXXXXXXXXXXXXX","recYYYYYYYYYYYYYY"]Records to deleteRequired; up to 10 IDs

Example output

json
{
  "records": [
    { "id": "recXXXXXXXXXXXXXX", "deleted": true },
    { "id": "recYYYYYYYYYYYYYY", "deleted": true }
  ]
}

Documentation of API endpoint that powers action: Airtable API – Delete multiple records (DELETE /v0/{baseId}/{tableId})

Upload attachment ​

Upload a file to an attachment field on an existing record.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Record ID"recXXXXXXXXXXXXXX"Record to attach toRequired
Attachment Field"fldXXXXXXXXXXXXXX"Target attachment fieldRequired
File"data:image/png;base64,..."Base64-encoded file contentRequired
Filename"invoice.pdf"Client filenameRequired
Content Type"application/pdf"MIME typeRequired

Example output

json
{
  "id": "recXXXXXXXXXXXXXX",
  "createdTime": "2026-10-26T09:00:00.000Z",
  "fields": {
    "fldXXXXXXXXXXXXXX": [
      { "id": "attXXXXXXXXXXXXXX", "url": "https://v5.airtableusercontent.com/...", "filename": "invoice.pdf", "size": 10240, "type": "application/pdf" }
    ]
  }
}

Documentation of API endpoint that powers action: Airtable API – Upload attachment (POST content.airtable.com/v0/{baseId}/{recordId}/{fieldId}/uploadAttachment)

Error handling ​

Error code and typeReason
401 UnauthorizedInvalid or missing token.
403 ForbiddenToken lacks required scopes or base/table access.
404 Not FoundBase, table, record, or route not found.
413 Payload Too LargeRequest body too large (e.g., large attachments).
422 Unprocessable EntityInvalid field values or schema mismatch.
429 Too Many RequestsRate limited; retry with backoff.
500 Internal Server ErrorProvider-side error; retry with backoff.

FAQs ​

How do I get Base, Table, Field, and View IDs?

Use the built-in pickers in WeWeb, which fetch bases, tables, fields, and views. IDs are also visible in Airtable’s API/metadata responses.

What does “Return fields by field ID” do?

When enabled, keys in fields are IDs (e.g., fld*) instead of user-facing names. Disable if you want field names.

How should I format filterByFormula?

Use Airtable formula syntax (e.g., {Status} = "Active"). See Airtable’s formula reference.