---
title: "Airtable columns filled from PDFs by field descriptions"
kind: "Kit"
category: "Productivity"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/6874e359-e319-4fbe-a1fd-88a61beb9069"
updated: "2026-11-12"
---

# Airtable columns filled from PDFs by field descriptions

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow for an Airtable table where each field’s description is its prompt. Attach a PDF to a row and an OpenAI chat model fills each empty described cell. Change a field and its column fills again.

Airtable columns filled from PDFs by field descriptions is an n8n workflow in the Productivity category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-12. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow lets the people who use an Airtable table decide what to pull out of a PDF, with no change to the workflow. Each field’s description acts as the prompt for that column. When someone attaches a PDF to a row, an OpenAI chat model reads it and fills every described field that is still empty. Add a field or edit its description, and the workflow fills that column for every row with a PDF. Thirty-six nodes run it, beside fourteen sticky notes.

### Who it suits

Teams that already keep their records in Airtable and receive documents as PDFs, such as invoices, leases, quotes and résumés. Skip it if your PDFs are scans with no text, if you need exact figures with no review, or if you cannot publish a webhook address that Airtable can reach. The watched table must be the first one in its base.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Accounting | Bookkeepers | Attach each supplier invoice and describe the fields to read | A bookkeeper adds \`Total\` and \`Due date\` columns and sees both filled from forty invoices. |
| Property management | Property managers | Attach each lease and ask for its rent and its end date | A manager adds a \`Notice period\` field, and the column fills for every lease. |
| Procurement | Buyers | Attach supplier quotes and read their price and lead time | A buyer compares three quotes side by side in one table. |
| Recruitment | Recruiters | Attach résumés and ask for the last employer and the years of experience | A recruiter describes \`Last employer\`, and the column fills for each résumé. |

You need some n8n and some Airtable: import a file, add two credentials, publish a webhook and run a setup branch once.

### Where to use it

Any n8n that Airtable can reach over the internet, and that can reach OpenAI, will run it. The answers land in the cells of the table you watch.

- n8n Cloud: import the file there and publish it, so Airtable can reach it
- Your own n8n server: the same file and steps, with a public address for the webhook
- Airtable: write the prompts in field descriptions and read the answers in the cells
- Airtable views: filter or sort on the filled columns as you would on any other

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. A setup branch inside the workflow creates the Airtable webhooks for you.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own, with a public address |
| Airtable | A base, a table with an attachment field named \`File\`, and a personal access token with the scopes \`data.records:read\`, \`data.records:write\`, \`schema.bases:read\` and \`webhook:manage\` |
| OpenAI | An API key, and a model to choose in two nodes |
| PDFs | Files that have text in them, not scans |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an Airtable Personal Access Token credential and select it in every Airtable and HTTP Request node that asks for one. The README lists the nine.
3. Add an OpenAI credential and select it in `OpenAI Chat Model` and `OpenAI Chat Model1`. Choose a model in each.
4. In `Airtable Webhook`, replace `YOUR_WEBHOOK_PATH` with a long random string. Save, then press Publish.
5. In `Set Airtable Vars`, replace `<MY_BASE_ID>`, `<MY_TABLE_ID>` and `<MY_WEBHOOK_URL>` with your base ID, your table ID and the production address of `Airtable Webhook`. The brackets go.
6. Run the workflow once from `When clicking ‘Test workflow’`. It creates two webhooks on the base.
7. In Airtable, write a prompt in the description of each field you want filled, then attach a PDF to a row.

### How to use it

Attach a PDF to a row’s `File` field. A few moments later, each described cell that was empty holds an answer. To ask a new question, add a field and write the question in its description. That column fills for every row with a PDF.

What to change for a different result

| To change | Where |
| --- | --- |
| The questions | The Airtable field descriptions |
| How answers are phrased | The system messages of \`Generate Field Value\` and \`Generate Field Value1\` |
| The models | \`OpenAI Chat Model\` and \`OpenAI Chat Model1\` |
| The input column | The name \`File\`, in \`Set Airtable Vars\`, in \`Fetch Records\` and in the \`File\[0\].url\` expressions |
| Which rows a field change reaches | The formula in \`Fetch Records\` |

### Example

A bookkeeper’s table has `File`, `Supplier` (described as the company that issued the invoice), `Total` (the invoice total with its currency) and `Due date` (the payment due date, as written). All three are single line text fields. She attaches one supplier’s PDF invoice to a new row.

Within moments, `Supplier`, `Total` and `Due date` hold short answers. A month later she adds `PO number`, described as the purchase order number if there is one. That column fills for every row with a PDF, and shows `n/a` where an invoice has none. Check the figures against the PDFs before you rely on them.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Airtable tells n8n about an edit with a webhook ping that holds no change data, so the workflow asks Airtable what changed. Start with a table of three text fields and one PDF.

**For experts.** The workflow reads Airtable through the Airtable node and through HTTP requests to its Web API. One Code node decides what kind of event arrived.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Parse Event\` | Reads the last payload and works out the event, the field and the row | It knows only changed records, created fields and changed fields |
| \`Fields to Update\` | Lists the described fields whose cell in the row is empty | A row change never overwrites a cell, and a field change does |
| \`Generate Field Value1\` | Basic LLM Chain: the PDF’s text, the field’s description and its Airtable type | Its system message asks for \`n/a\` and a reason when nothing is found |
| \`Fetch Records\` | Searches with \`NOT({File} = "")\`, all rows | The formula names the column \`File\` |
| \`Add Row ID to Payload\` | Folds one answer per field into one object with the row’s \`id\` | \`Update Record\` sends it as a single update |

### Good to know

A row edit never overwrites a cell, but a field edit does, and Airtable’s webhooks lapse after a quiet week.

- Overwriting: a row change fills only empty cells. A field change fills that column for every row with a file, and replaces what was there
- Cost: each field on each row is one chat call that carries the whole PDF’s text
- What is read: only the first attachment, \`File\[0\]\`, and only as a PDF. A scan with no text layer gives the model nothing
- \`n/a\`: the model answers \`n/a\` when it finds nothing. That is text, and Airtable can refuse text in a number or date column, since \`typecast\` is off. Start with text fields
- Bulk edits: \`Parse Event\` uses the last payload and the first changed record in it, so editing several rows at once fills one of them
- The first table: \`Get Prompt Fields\` reads the first table of the base, so watch that one
- Webhooks: Airtable’s webhook page, read on 12 November 2026, says a webhook made with a personal access token is disabled after 7 days, and that listing its payloads extends it. A quiet week ends it, and the setup branch must run again
- Model: neither chat model names one. OpenAI Chat Model 1.1 uses \`gpt-5-mini\` by default in n8n’s current source, read on 12 November 2026. OpenAI’s deprecations page gives 11 December 2026 for it and names \`gpt-5.6-terra\` as the replacement
- Open webhook: keep its path long and private, since anyone who learns the address can call it
- Your data: each PDF’s text goes to OpenAI
- Credentials: the JSON holds none

## README

```markdown
# Airtable columns filled from PDFs by field descriptions

An n8n workflow that treats each Airtable field's description as a prompt. When someone attaches a PDF in a row's `File`
field, a chat model reads it and fills every described field that is still empty. When a field is added or changed, the
same prompt runs again for every row that has a PDF.

## What is inside

- `workflow.json`: the workflow as n8n exports it, fifty nodes: thirty-six that do the work and fourteen sticky notes. It
  holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The credential links are gone: the Airtable token on nine nodes and the OpenAI key on both chat models. Select your own.
- `Airtable Webhook` had its author's own path and webhook ID. The ID is gone and the path is now `YOUR_WEBHOOK_PATH`.
- The large note at the top, with the author's links, a demo video and a referral link, is now a title. The note that held
  a logo with that referral link is gone.
- Nothing else. The three placeholders in `Set Airtable Vars` came with the file, and its Code nodes needed no repair.

## Before you start

- An n8n instance, on n8n Cloud or your own server. Airtable must be able to reach its webhook address.
- An Airtable base with a table that has an attachment field named `File`. The name is written into the formula in
  `Fetch Records`, into the `File[0].url` expressions and into `Set Airtable Vars`, so change it in all of them or none.
- An Airtable personal access token with the scopes `data.records:read`, `data.records:write`, `schema.bases:read` and
  `webhook:manage`, and access to that base.
- An OpenAI API key.
- PDFs that have text in them. A scanned page with no text layer gives the model nothing to read.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add an Airtable Personal Access Token credential and select it in the nine nodes that use one: `Get Table Schema`,
   `Get Table Schema1`, `Get Webhook Payload`, `Fetch Records`, `Get Row`, `Update Row`, `Update Record`,
   `RecordsChanged Webhook` and `FieldsChanged Webhook`.
3. Add an OpenAI credential and select it in `OpenAI Chat Model` and `OpenAI Chat Model1`. Neither names a model, so
   choose one in each.
4. In `Airtable Webhook`, replace `YOUR_WEBHOOK_PATH` with a long random string of your own. Save, then press Publish.
5. In `Set Airtable Vars`, replace `<MY_BASE_ID>`, `<MY_TABLE_ID>` and `<MY_WEBHOOK_URL>` with your base ID, your table ID
   and the production address of `Airtable Webhook`. The brackets go. Leave `inputField` as `File`.
6. Run the workflow once from `When clicking ‘Test workflow’`. It creates two webhooks on the base, one for changes to the
   `File` column and one for fields.
7. In Airtable, write a prompt in the description of each field you want filled, such as "The company that sent the
   document". Attach a PDF to a row. The empty described cells fill within moments.

## How a run goes

Setup, run once:

1. `Set Airtable Vars` holds the base ID, the table ID, the webhook address and the input field's name.
2. `Get Table Schema1` and `Get "Input" Field` find the `File` field. `RecordsChanged Webhook` asks Airtable to ping when
   that field's data is updated from its own interface. `FieldsChanged Webhook` does the same for fields that are added
   or edited.

Each ping:

1. `Airtable Webhook` receives it. `Get Table Schema` and `Get Prompt Fields` read the table's fields and keep those with
   a description. `Get Webhook Payload` asks Airtable what changed, and `Parse Event` works out the event from the last
   payload: `row.updated`, `field.created` or `field.updated`.
2. `Event Type` sends a row change one way and a field change the other.
3. A row change: `Get Row` reads the row and `Filter Valid Rows` keeps it if it has a file. `Loop Over Items1` takes one
   row. The PDF is downloaded and read as text. `Fields to Update` lists the described fields whose cell is empty. For
   each one, `Generate Field Value1` sends the PDF's text, the field's description and its type to the chat model.
   `Get Result1` names the answer after the field, `Add Row ID to Payload` joins the answers with the row's ID and
   `Update Record` writes them.
4. A field change: `Filter Valid Fields` keeps it if the field has a description. `Fetch Records` finds every row with a
   file. For each one, the PDF is read, `Generate Field Value` answers for that one field, and `Update Row` writes it.

## Change the look

- The prompts: the Airtable field descriptions, and the system messages of `Generate Field Value` and
  `Generate Field Value1`, which keep answers short and ask for `n/a` when nothing is found.
- The models: both chat model nodes.
- The input column: the name `File`, in the places listed above.
- Which rows a field change reaches: the formula in `Fetch Records`.
- Which edits start a run: the filters in the bodies of `RecordsChanged Webhook` and `FieldsChanged Webhook`.

## Good to know

- A row change fills only empty cells. A field change fills that column for every row with a file, and replaces what was
  there.
- Each field on each row is one chat call that carries the whole PDF's text. Many fields on long PDFs cost more.
- Only the first attachment, `File[0]`, is read, and `Extract from File` is set to PDF.
- `Get Prompt Fields` reads the fields of the first table that `Get Table Schema` returns, which is the first table of the
  base. Watch that table, or keep the base to one table.
- The answer `n/a` is text. Airtable can refuse text in a number or date column, because `typecast` is off in the update
  nodes. Describe text fields first.
- `Parse Event` uses the last payload in Airtable's answer and the first changed record in it, so a bulk edit of several
  rows fills one of them. Attach the others one at a time.
- The row webhook uses `fromSources` set to `client`, so only edits made in Airtable itself start a run, not the
  workflow's own writes.
- Airtable's webhook page, read on 12 November 2026, says a webhook made with a personal access token is disabled after 7
  days. Listing its payloads extends it by 7 days, and `Get Webhook Payload` does that on every run. A quiet week still
  ends it, so run the setup branch again then.
- Neither chat model names a model. OpenAI Chat Model 1.1 uses `gpt-5-mini` in n8n's current source, read on 12 November
  2026. OpenAI's deprecations page gives 11 December 2026 for `gpt-5-mini` and names `gpt-5.6-terra` as its replacement.
- Keep the webhook path long and private. Anyone who learns the address can call it.
- The PDF's text goes to OpenAI. The table's schema and rows stay between n8n and Airtable.
```

## What is in it

3 files, 50 KB, downloaded as a zip.

```text
NOTICE.md  636 B
README.md  7 KB
workflow.json  42 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 34 steps, starting when its webhook is called or by hand
- AI: 2 steps call an AI model: Generate Field Value1 and Generate Field Value
- Sign-ins: Signs in to: Airtable and OpenAI
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 12 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/6874e359-e319-4fbe-a1fd-88a61beb9069)
- [Its page on Mindket](https://mindket.com/p/6874e359-e319-4fbe-a1fd-88a61beb9069)
