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 Fetch table view.
  • Sync records from Airtable to power frontend lists and detail pages
  • Create and update records from forms and workflows
  • Bulk upsert records from external sources
  • Upload attachments to existing Airtable records

Setup

  1. Create a Personal Access Token in Airtable with access to the target bases and the data.records:read, data.records:write, and schema.bases:read scopes as needed.
  2. In WeWeb, add your Airtable token to the Editor and Production modes.
  3. Use the built-in pickers to select a Base and Table; run "List records" to validate access.
  4. 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 Fetch table view 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: Airtable field ID and direction (asc or desc).
    • Page size — Records per page (1–100). Used for pagination.
    • Offset — Optional. Pagination cursor from the previous response (the record ID Airtable returns as offset).

When the view is loaded (e.g. by a table component or by Fetch table view), 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 Fetch table view).
  • Fetch table view — In an interface workflow, add the Fetch table view 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 records, Delete records) 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 Fetch table view.

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

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

All Actions

This integration provides six 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 recordsUpdate a single record or multiple records (with optional upsert)
Delete recordsDelete a single record or multiple records by IDs
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
"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
User locale
Optional
"en-US"Locale for formattingBCP47

Example output

json
{
  "records": [
    { "id": "recXXXXX", "fields": { "Name": "Acme" } }
  ],
  "offset": "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
Fields to return
Optional
["fldABC123","fldDEF456"]Only return these fieldsArray of field IDs
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
User locale
Optional
"en-US"Locale for formattingBCP47

Example output

json
{ "id": "recXXXXXXXXXXXXXX", "fields": { "Name": "Acme" } }

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

Create records

Create one or multiple records.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Mode"single"Create a single record or multipleValid: single, multiple
Record / RecordsSee belowFields for the new record(s)Object or array of objects
Return fields by field ID
Optional
trueReturn field keys as IDsBoolean
Typecast
Optional
trueCoerce values to field typesBoolean

Example output

json
{
  "records": [
    { "id": "recXXXX", "fields": { "Name": "Acme" } }
  ]
}

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

Update records

Update a single record or multiple records.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Mode"single"Update a single record or multipleValid: single, multiple
Select fields to include
Optional
["fldABC123","fldDEF456"]Fields to show and updateArray of field IDs
Record ID
Optional
"recXXXX"Required in single modeString
Record / RecordsSee belowFields to updateObject or array with {id, fields}
Typecast
Optional
trueCoerce values to field typesBoolean
Perform upsert
Optional
trueUpsert on multiple modeBoolean

Example output

json
{
  "records": [
    { "id": "recXXXX", "fields": { "Status": "Active" } }
  ]
}

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

Delete records

Delete a single record by ID or multiple records by IDs.

Inputs

Display KeyExample InputDescriptionRestrictions
Base"appXXXXXXXXXXXXXX"Airtable Base IDRequired
Table"tblXXXXXXXXXXXXXX"Airtable Table IDRequired
Mode"single"Delete single or multipleValid: single, multiple
Record ID
Optional
"recXXXX"Required in single modeString
Record IDs
Optional
["rec1","rec2"]Required in multiple modeArray of strings

Example output

json
{
  "records": [
    { "id": "rec1", "deleted": true },
    { "id": "rec2", "deleted": true }
  ]
}

Documentation of API endpoint that powers action: Airtable API – Delete 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
{
  "attachment": {
    "id": "attXXXX",
    "url": "https://v5.airtableusercontent.com/..."
  }
}

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.