> ## Documentation Index
> Fetch the complete documentation index at: https://beebole.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Master data review: check, export, and bulk-edit your setup

> Review, export, and bulk-edit your Beebole configuration data — people, projects, tags, rates, schedules, and custom field values — from one admin table.

Master data review in Beebole is an admin table over your organization's configuration data: the definitions your account is built on, not the time your team logs. Pick an entity, build the columns you want from its own fields and relations, and you get a live table you can filter, download, or edit in bulk. Use it to audit a setup before a cutover, hand a colleague a spreadsheet of your rates, or fix the same field on two hundred people in one pass.

> [!NOTE]
>
> Master data review is restricted to administrators. Open it from the button with your initials at the bottom of the sidebar: click **Account Settings**, then **Master data review** in the **Settings** menu. The phone menu does not offer it.

***

## What you can review

A review always starts from one entity. Beebole offers nine:

| Entity | What it holds |
| - | - |
| **People** | Everyone in the account, with their roles, rates, schedules, and settings |
| **Projects** | The project hierarchy, with rates, budgets, and access |
| **Tasks** | Planning items, with owners, dates, and planned time |
| **Tags** | Your tag trees and the configuration they carry |
| **Time off types** | Absence types and their allowances |
| **Expense types** | Expense types and their units and markups |
| **Custom fields** | The field definitions themselves, with their types and visibility |
| **Roles** | Roles and their permissions |
| **Work schedules** | Schedule definitions and their days |

For **Projects**, **Tasks**, and **Tags** you can also narrow the review to one category, and inside it to one hierarchy level — pick **All categories**, a category, then **Lowest level** or a named level. A review lists the lowest level by default, so parent rows never pad the table or the export; pick a named level when that is the one you want to read.

> [!NOTE]
>
> Master data review covers definitions only. Time entries, expense records, and absences are records, not master data — report on those with [custom reports](https://beebole.com/help/documentation/custom-reports.md) and [data exports](https://beebole.com/help/documentation/data-exports.md).

***

## Building a review

**1. Open Master data review**

Click the button with your initials at the bottom of the sidebar, then **Account Settings**, then **Master data review** in the **Settings** menu.

**2. Add an export**

Click **Add an export**. Beebole creates one named **New export**, listing **People**, and puts the name in edit mode — type a name and press Enter.

**3. Pick the entity**

The table's first column is a column header like any other: it carries the entity currently reviewed, and its menu holds **Filter on this column** and **Add a column…** alongside the list of entities. Open it and pick another entity — or, for projects, tasks, and tags, walk into a category and a level. The first column always holds that entity's name.

**4. Add the columns you need**

Click **Add a column…** and walk into the entity's fields. Each pick appends a column; the table re-runs on its own.

Every review you save is personal to you, and the list of your saved exports is the page itself — click one to open it, click it again to close it. To remove a review, hover it, click the **⋯** action menu, then **Delete**.

### Adding columns

The column picker walks the entity's own fields and its relations, with no depth limit. A field becomes a column; an attribute or a relation opens as a branch you step into, so a person's tags lead to the tag's own fields, and a tag's rates lead to the rate's amount.

* Type in **Search a field…** to search several levels down at once. Each match shows the path it sits on, so a hit reading *Tags: Name* is clearly the name of a tag, not the name of the person.
* Press Backspace on an empty search box to step back up one level, or click a step of the path to jump back to it.
* One column can hold several values — a person with three tags shows all three, stacked in the cell.

A column header carries its own menu:

| Menu entry | What it does |
| - | - |
| **Filter on this column** | Adds a filter chip for that column |
| **Other *Tags* column** | Names the path the column sits on, and opens the picker there so you can add a sibling field next to it |
| **Add a column…** | Inserts a new column right after this one |
| **Remove column** | Drops the column from the review |

You can also drag a header sideways to reorder the columns. The first column, which holds the entity's name, can be neither moved nor removed.

If the server refuses to run the review — a column that walks too many levels deep, or a request too heavy to serve — the table keeps the rows it was showing, a message says why, and the refused column is rolled back instead of being saved. The same goes for a refused **Show Archived**, category, or period change.

### Custom field values as columns

When a [custom field](https://beebole.com/help/documentation/custom-fields.md) applies to the entity you are reviewing, a **Custom field values** branch appears in the picker with those definitions in it. Pick one and its values become a plain column, one value per row, blank where a record holds none. Only the definitions that actually apply to the entity are offered.

***

## Narrowing what the table shows

**Filters** are chips under the command row. Each chip names a column, an operator, and a value:

| Operator | Matches |
| - | - |
| **contains** / **doesn't contain** | Part of the cell's text |
| **is** / **is not** | The whole value |
| **is empty** / **is not empty** | Rows with or without a value |
| **is more than** / **is less than** | Numbers above or below a threshold |

**Show Archived** next to the review's name brings archived records into the table; click **Hide Archived** to leave them out again. Archived rows are shown dimmed.

**A period selector** appears whenever the review holds a dated column — rates, costs, budgets, allowances, work schedule assignments, tag assignments. It decides which of those records the table lists: a record counts for the period when its validity overlaps it, so a rate that started in 2025 still shows for 2025 as long as its replacement starts after the period begins. The default period runs from today onwards, which lists the records in force now.

***

## Reading the table

* **Rows line up item by item.** When several columns walk the same list — an authorization's name and its targets, for example — the row splits into one line per item, so the third authorization's targets sit beside the third authorization's name however long either wraps. Columns that walk another list, or none, span the whole row and stack their own values as before.
* **Every other row is banded.** Rows alternate a light background, and the band covers every line of a row that has split.
* **Inherited values name their origin.** When a value comes from the organization, a tag, or a parent record rather than the row itself, the cell shows the source on its own line right under that value, with the same clickable link the attribute panels use. A value set on the row itself shows nothing.
* **Stored codes read as words.** Durations, work-schedule day times, colors, absence units, duration formats, weekdays, and permission names render the way the interface shows them, not as raw codes. A rate renders like its panel: the amount on the first line, then its method and start date beneath it — **120,00 EUR**, then **Hourly rate · 1 Jan 2026** — with its split lines below that.
* **Records are badges.** A cell holding another record shows it as a clickable badge — click it to open that record's panel and edit it in place.
* **A subtracted value is struck through.** When a rule removes an inherited item instead of adding one, the cell shows it struck through in red, the same way the rest of Beebole marks an exclusion.
* **The table re-runs live.** When anything on screen changes — your own edit in a panel, or a colleague's — the review re-runs and rows that no longer match fade out.

***

## Downloading a review

Hover the review in the list, click the **⋯** action menu, choose **Export**, then a format: **JSON**, **CSV**, **TSV**, **Excel (XLSX)**, or **PDF**. The file carries the columns and rows on screen, plus a header noting the entity, whether archived records were included, and the period when the review has one. A file has no link to carry the origin of an inherited value, so the file spells it out instead: the value is followed by *(inherited from …)* and the name of its source.

***

## Building a review in plain language

When AI features are enabled for your account, a text box sits above your saved reviews, under **Ask for a new list**. Describe the table you want — for example *people with their hourly rate and their tags* — and click **Build**. Beebole picks the entity, the columns, and the filters, and runs it.

With a review open, the same box refines it: **Update** adds a column, changes a filter, or swaps the entity. Asking about a different entity creates a new review instead of overwriting the one you built.

The box keeps the whole conversation, so you can see how you got where you are: your last question and its answer stay on screen, and the turns before them open behind **Whole conversation** (**Latest only** folds them back). It is the same box the [report builder](https://beebole.com/help/documentation/ai.md#report-builder) uses, with **Read your data** and **Change your data** as its tabs, **Apply** and **Cancel** next to the sentence, and the undo of your last change always within reach.

Plain language works on every list, the tag and project lists included. Naming a person in your question reads as a filter rather than as text to look up: ask *who does Anna manage?* and the review keeps the rows Anna manages and adds the column that shows it.

When you ask for a value no column can hold — *people and their external ID* on an account with no such field — Beebole builds nothing and tells you in one sentence which value has no column for this entity and, for people, projects, tasks, tags, and time off types, that a [custom field](https://beebole.com/help/documentation/custom-fields.md) could hold it. It never asks which entity or which value you meant. A request that leaves the review exactly as it is reports **Nothing changed.**

***

## Changing data in bulk

An open review is in one of two modes, picked with the tabs above the table: **Read your data** for columns, filters, and download, and **Change your data** for a bulk change. Click **Change your data**, describe the change, and click **Preview**.

The change applies to every row the table currently lists, unless your sentence names the rows it is about: *set Bob Wilson's external ID to abc* or *archive Alice Martin and Bob Wilson* reaches those rows alone. A name matches a listed row exactly first, then the first listed name that contains it; a name no row carries stops the preview with **Nothing here is called** followed by the name. A description such as *the German ones* is not a filter and Beebole never guesses one, so filter the table first, then run the change. What you can ask for:

* Set or clear a value, including a custom field value.
* Put text around the value each row holds today, such as *prefix their external ID with ext-*.
* Number the rows with a counter, such as *their external ID as ext-3, then ext-4, and so on*. Beebole writes the prefix, the number, and the suffix to each row in the order the table shows them, one number per row; a row that already holds the number it would get keeps it and the next row gets the next number. Add *for those without one* to fill only the rows whose field is still empty — the rows already holding a value stay out of the change and are not listed as left out. Prefixes, suffixes, and counters work on free-text fields only.
* Add or clear a billing rate, a cost rate, a time off allowance, or a public holiday — including a percentage change on the rate each row holds.
* Link or unlink a related record, such as a work schedule, a tag, or a role.
* Archive, unarchive, or delete the listed records, or create one new record.

**1. Preview the change**

Beebole replaces the table with a before/after view: the changed column shows **old → new**, records to be created appear as new rows, and records to be deleted are struck through. A one-line summary and the number of changes sit next to the buttons. A sentence that no listed field can carry gets an explanation instead, or **That change cannot be made on this list.**; one that leaves every row as it is reads **Nothing would change.**

**2. Check what was left out**

Rows Beebole leaves untouched are listed after **Left out:** with a reason — *inherited from* a tag or the organization, *nothing to remove*, *no current value to change*, *the field does not apply*, *already linked*, *already in that state*, or *an entry already starts on that date*.

**3. Refine or apply**

Type another sentence and click **Update preview** to adjust, **Cancel** or **Read your data** to drop the whole thing, or **Apply** to run it. Rows tick off one by one as they go through, and a row that fails shows its error without stopping the rest.

> [!WARNING]
>
> **Undo the last change**, at the end of the mode tabs while you read the data, reverses the bulk action you just applied. Each bulk change is also one step in Beebole's [undo history](https://beebole.com/help/documentation/concepts.md#undo-and-redo), so **⌘+Z** (Ctrl+Z) or the undo button in the top bar can take back earlier ones, newest first. Both are held in memory, so reloading the page loses them, and deleted records cannot be brought back at all. Recreating one gives it a new identity, and no reference to the old one survives.

> [!NOTE]
>
> A row whose value is inherited from a tag or from the organization is deliberately skipped: writing on the row would break the inheritance for its whole history. To raise rates on people who inherit them, run the change on the tag instead.

***

## What reaches the AI model

The plain-language builder and **Change your data** follow the same privacy stance as the rest of [Beebole AI](https://beebole.com/help/documentation/ai.md#what-reaches-the-model): only definitions reach the model. It receives your sentence, the entity being reviewed, and the vocabulary of that entity — the labels and paths of its fields, plus the allowed values of a field that has a closed set. It never sees a value from your table: Beebole turns the sentence into an abstract instruction, and your browser computes the actual before and after values. The one thing about your records it learns is what you typed yourself — when your sentence contains the name of a listed row, Beebole confirms to the model that this name is one of the listed records, so it does not doubt it. Nothing you did not type reaches it.

***

## Related content

> **[Custom fields](https://beebole.com/help/documentation/custom-fields.md)**
>
> Define the fields whose values become columns in a review.

> **[Data exports](https://beebole.com/help/documentation/data-exports.md)**
>
> Export the time and expense records a review deliberately leaves out.

> **[Beebole AI](https://beebole.com/help/documentation/ai.md)**
>
> How Beebole's AI features work and what data they see.

> **[Account settings](https://beebole.com/help/documentation/account-settings.md)**
>
> Set the organization-wide defaults that people, projects, and tags inherit, shown in a review as inherited values.

## Frequently asked questions

> **Who can use Master data review in Beebole?**
>
> Administrators only. In Beebole, the **Master data review** entry sits in the **Settings** menu: click the button with your initials at the bottom of the sidebar, then **Account Settings**. The page itself is closed to anyone whose role does not have **Admin role (full access)** checked. See [Roles & permissions](https://beebole.com/help/documentation/roles-authorisations.md).

> **Which entities can I review?**
>
> Beebole offers nine: **People**, **Projects**, **Tasks**, **Tags**, **Time off types**, **Expense types**, **Custom fields**, **Roles**, and **Work schedules**. For projects, tasks, and tags you can narrow the review to one category and one hierarchy level, from the first column's menu — the lowest level is what you get by default.

> **Can I export my time entries from here?**
>
> No. Beebole's Master data review covers your configuration data — the definitions — not the records your team logs. For time entries, expenses, and absences, build a [custom report](https://beebole.com/help/documentation/custom-reports.md) and download it as described in [Data exports](https://beebole.com/help/documentation/data-exports.md).

> **Can I undo a bulk change?**
>
> Yes. **Undo the last change** reverses the last bulk change, and Beebole's undo history (**⌘+Z** or the top-bar undo button) can take back earlier ones, newest first, while the page stays open: a reload drops both. Records deleted by a bulk change cannot be restored at all, so check the before/after preview before clicking **Apply**.

> **Why did some rows get left out of my bulk change?**
>
> Beebole lists them after **Left out:** with the reason. The common ones are a value inherited from a tag or the organization (change it on the tag instead), a record already linked or already in the state you asked for, a row with nothing to remove, and a custom field that does not apply to that record. Rows your sentence did not name, rows that already hold the value you asked for, and rows already holding a value when you asked for *those without one* are simply out of the change and are not listed.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.