Import guide

Import Airtable records into monday.com on a schedule

Airtable often holds the operational list that has not moved to monday.com yet — suppliers, inventory, a content calendar. The two tools end up side by side, joined by somebody’s copy-paste.

Boardfeed reads an Airtable table on a schedule and keeps a monday.com board in step with it, matching on the record id so a change updates the item rather than adding another.

Last checked : the token scopes, what one record carries, the 100-record page and the 5,000-page stop it adds up to (500,000 records), the base rate limit, and how attachments and multi-value fields arrive, read off the connector and the Airtable pages it cites

Doing it by hand, every time

  1. Open the base, download the CSV for the view, and re-upload it.
  2. Fix the columns where linked records came through as record ids.
  3. Delete the previous rows or accept the duplicates.
  4. Keep doing it as long as the base stays in use.

The scheduled route

  1. Create a personal access token at airtable.com/create/tokens with two scopes — schema.bases:read and data.records:read — and grant it access to the base itself. Scopes and base access are separate settings, and a token with the right scopes still answers 403 for a base it was never given (Airtable’s rules, airtable.com/developers/web/api/scopes, read 2026-09-11).
  2. Pick the base and the table. Boardfeed lists them as "base / table" pairs; one import reads one table.
  3. Map the fields to board columns and key the upsert on the record id.
  4. Pick the schedule, then read the value check before you save.
  5. Every run pages through the table 100 records at a time. Airtable itself allows five requests a second per base — Airtable’s limit, not ours; airtable.com/developers/web/api/rate-limits, read 2026-09-11 — and Boardfeed sends its pages without a pause of its own, so a table large enough to reach that limit is answered with 429s: the run waits the time Airtable asks for, retries up to three times, and then stops with the run recorded as failed rather than importing part of the table.
  6. Every run stops at 5,000 pages rather than importing part of a longer table — 500,000 records for one table, at 100 a page.

Field mapping notes for Airtable

This is the part that decides whether an import works on the first try. Everything below is handled in the mapping step, before the first run.

  • Record ids are the safest key: every Airtable record has one, and it is stable for the life of the record where a name or a number is not. Each row also carries createdTime alongside the table’s own fields.
  • Single select, text, number, date and checkbox map directly. Multi-selects and linked records arrive as their values joined with commas — Airtable returns a linked record as the id of the row it points at (airtable.com/developers/web/api/field-model, read 2026-09-11) — so resolve them through a second import or keep them as text.
  • Attachments arrive as their URLs, joined with commas. Note what Airtable says about those URLs: they expire two hours after Airtable returns them (airtable.com/developers/web/api/field-model#attachment, read 2026-09-11). Import the file name or the record it belongs to if you need something that still resolves next week.
  • A field with no value is simply absent from the row: the row is built from the fields the response actually carries and nothing else. An absent value is skipped rather than written as a blank, so it cannot clear the monday.com column it maps to.
  • The connector computes nothing of its own: whatever Airtable returns for a field is what gets mapped, with a field holding several values joined by commas.

Airtable import questions

Can I import only part of a table?

Not by pointing at an Airtable view — an import reads a base and a table, and view filters are not part of the source today. Two ways round it: keep the rows you want in their own table, or import the whole table and filter on the monday.com board, where the filter is visible to the people reading it.

What happens to rows deleted in Airtable?

They stay on the board. Boardfeed will not delete or archive a monday.com item because a record disappeared upstream. If you want the board to show it, an upsert import can opt in to marking: items it imported before and the source no longer has get a status label you choose, after a run that read everything and failed nothing, and the label lifts by itself if the record comes back.

Which token scopes do I need?

Two: schema.bases:read, so Boardfeed can list your bases and tables, and data.records:read, so it can read the records. Grant the token access to the base as well — that is a separate setting from the scopes. Airtable’s legacy API keys stopped working in February 2024 (airtable.com/developers/web/guides/personal-access-tokens, read 2026-09-11), so a personal access token is the only route.

How much of a table does one run import?

As much as one run reads. The connector takes no view or filter setting, so it pages through the whole table, 100 records a page — and it stops at 5,000 pages rather than importing part of a longer table, which is 500,000 records. A table larger than that needs a narrower table of its own, or the REST API source pointed at Airtable with a filter of its own. The stop is not silent: the run ends as failed and its record says how many rows it had already written, and those rows stay on the board — so re-run it in update mode once the source is narrower, or a create-mode re-run adds them a second time. The first run against a large base can be big: check the row count against your monthly allowance before you schedule it.

Other sources