---
title: "Baserow columns filled from PDFs by field descriptions"
kind: "Kit"
category: "Productivity"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/8b68a8a2-1738-4871-a020-e7a8d261daf7"
updated: "2026-11-12"
---

# Baserow 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 a Baserow 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.

Baserow 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 a Baserow 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 the rows that have a PDF. Thirty nodes run it, beside fourteen sticky notes.

### Who it suits

Teams that keep their records in Baserow, on its cloud or on a server of their own, and receive documents as PDFs, such as invoices, contracts, 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 Baserow cannot reach a webhook address of yours.

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 a month of invoices. |
| Legal | Paralegals | Attach each contract and ask for its parties and its renewal date | A paralegal adds a \`Renewal date\` field, and the column fills for every contract. |
| 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 Baserow: import a file, add two credentials, publish a webhook and set up a webhook in Baserow.

### Where to use it

Any n8n that Baserow 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 Baserow can reach it
- Your own n8n server: the same file and steps, with a public address for the webhook
- Baserow: write the prompts in field descriptions and read the answers in the cells
- Baserow on your own server: change the address in five nodes first

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Unlike its Airtable twin, this one has no setup branch. You make the webhook in Baserow’s own settings.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own, with a public address |
| Baserow | A table with a file field named \`File\`, and a database token that can read and update it |
| 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 a Header Auth credential named `Authorization`, with the word `Token`, a space and your Baserow database token as its value. Select it in `Table Fields API`, `List Table API`, `Get Row`, `Update Row` and `Update Row1`.
3. Add an OpenAI credential and select it in `OpenAI Chat Model` and `OpenAI Chat Model1`. Choose a model in each.
4. In `Baserow Event`, replace `YOUR_WEBHOOK_PATH` with a long random string. Save, then press Publish.
5. In Baserow, open the table’s webhook settings and make a POST webhook to the production address of `Baserow Event`. Use field names instead of IDs, choose the events row updated, field created and field updated, and watch the `File` field for row updates.
6. 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 up to 60 rows that have a PDF.

What to change for a different result

| To change | Where |
| --- | --- |
| The questions | The Baserow 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 \`List Table API\`, \`Filter Valid Rows\` and the \`File\[0\].url\` expressions |
| How many rows a field change reaches | The page limit and the \`size\` in \`List Table API\` |

### 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 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 the rows that have 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. Baserow posts the edit itself to n8n’s webhook, and the workflow then asks Baserow for the table’s fields so it knows which prompts exist. Start with a table of three text fields and one PDF.

**For experts.** Everything goes through HTTP Request nodes to Baserow’s REST API with one Header Auth credential. A Switch node decides what kind of event arrived.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Get Event Body\` | Sets the webhook’s body as the item | \`Event Type\` reads \`event\_type\` from it, and \`table\_id\` comes along |
| \`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 |
| \`List Table API\` | Lists rows with a filter on \`File\` not empty, 20 a page | Its pagination stops after 3 requests, so at most 60 rows |
| \`Get Prompt Fields\` | Keeps the table’s fields that have a description | Mindket’s copy also passes each field’s \`type\`, which the row branch’s prompt uses |

### Good to know

A row edit never overwrites a cell, but a field edit does, and a field edit reaches 60 rows at most.

- Overwriting: a row change fills only empty cells. A field change fills that column for the rows it fetches, and replaces what was there
- The 60-row limit: \`List Table API\` asks for 20 rows a page and stops after 3 requests. Raise the page limit to reach more
- 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 Baserow can refuse text in a number or date field. Start with text fields
- Repairs: the original copy asked Baserow for six named fields only, with \`File\` left out, so the field branch had no attachment to download. Mindket’s copy drops that filter, and also passes each field’s type to the row branch’s prompt
- The token: Baserow’s API schema, read on 12 November 2026, lets a database token call the fields and rows endpoints this workflow uses, written as \`Token\` and the token
- 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
# Baserow columns filled from PDFs by field descriptions

An n8n workflow that treats each Baserow 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 the rows that have a PDF.

## What is inside

- `workflow.json`: the workflow as n8n exports it, forty-four nodes: thirty 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 Header Auth credential on five HTTP Request nodes and the OpenAI key on both chat
  models. Select your own.
- `Baserow Event` had its author's own path and webhook ID. The ID is gone and the path is now `YOUR_WEBHOOK_PATH`.
- `List Table API` asked Baserow for six named fields only, and `File` was not one of them. Baserow's API schema says that
  a request with `include` returns just the fields it names, so the rows would have arrived with no attachment to download.
  Mindket's copy drops `include`.
- `Get Prompt Fields` passed on each field's name, order and description but not its type, so the "output format" line in
  the row branch's prompt came out empty. It now passes `type` too, as the field branch already gets it from the webhook.
- The large note at the top, with the author's links and a demo video, is now a title. The note that held a logo is gone,
  and the screenshot link in the webhook note is removed. The text of that note stays.
- Nothing else. The Code nodes needed no other repair.

## Before you start

- An n8n instance, on n8n Cloud or your own server. Baserow must be able to reach its webhook address.
- A Baserow table with a file field named `File`. The name is written into the filter in `List Table API`, into the
  `File[0].url` expressions and into `Filter Valid Rows`, so change it in all of them or none.
- A Baserow database token that can read and update that table.
- 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 a Header Auth credential. Set its name to `Authorization` and its value to the word `Token`, a space and your
   Baserow database token. Select it in the five nodes that call Baserow: `Table Fields API`, `List Table API`,
   `Get Row`, `Update Row` and `Update Row1`.
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 `Baserow Event`, replace `YOUR_WEBHOOK_PATH` with a long random string of your own. Save, then press Publish.
5. In Baserow, open the table's webhook settings from the three-dots button in its toolbar. Create a POST webhook to the
   production address of `Baserow Event`. Tick the option to use field names instead of IDs. Choose individual events:
   "row updated", "field created" and "field updated". For "row updated", pick the `File` field as the one to watch.
6. In Baserow, 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.

A self-hosted Baserow needs one more change: replace `https://api.baserow.io` with your own address in the five nodes above.

## How a run goes

1. `Baserow Event` receives the event. `Table Fields API` lists the table's fields, `Get Prompt Fields` keeps those with a
   description, and `Get Event Body` puts the event's own data back in front. `Event Type` sends `rows.updated` one way and
   `field.created` and `field.updated` the other.
2. A row change: `Rows to List` splits the event into rows, `Filter Valid Rows` keeps those with a file, and `Get Row`
   reads each one fresh. `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 and `Update Row1`
   patches the row.
3. A field change: `Filter Valid Fields` keeps it if the field has a description. `List Table API` lists the rows that
   have a file, `Get Valid Rows` flattens its pages, and `Loop Over Items` takes one row. The PDF is read,
   `Generate Field Value` answers for that one field, and `Update Row` patches the row.

## Change the look

- The prompts: the Baserow 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.
- How many rows a field change reaches: `Max Pages` in the pagination of `List Table API`, and its `size`.
- Which edits start a run: the events and the watched field in Baserow's webhook settings.

## Good to know

- A row change fills only empty cells. A field change fills that column for the rows it fetches, and replaces what was
  there.
- `List Table API` asks for 20 rows a page and stops after 3 requests, so a field change reaches at most 60 rows. Raise
  the page limit to reach more. The note beside it warns that a table of thousands of rows would take a long time.
- 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.
- The answer `n/a` is text. Baserow can refuse text in a number or date field. Describe text fields first.
- Baserow's webhook watches only the `File` field, so the workflow's own writes to the other columns do not start
  another run.
- Baserow's API schema, read on 12 November 2026, lets a database token call the fields and rows endpoints this workflow
  uses, written as `Token` and the token.
- 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. Your rows travel between Baserow and n8n.
```

## What is in it

3 files, 40 KB, downloaded as a zip.

```text
NOTICE.md  634 B
README.md  6 KB
workflow.json  33 KB
```

## Workflow check

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

- Steps: 28 steps, starting when its webhook is called
- AI: 2 steps call an AI model: Generate Field Value1 and Generate Field Value
- Sign-ins: Signs in to: api.baserow.io and OpenAI
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 11 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/8b68a8a2-1738-4871-a020-e7a8d261daf7)
- [Its page on Mindket](https://mindket.com/p/8b68a8a2-1738-4871-a020-e7a8d261daf7)
