Rows are individual records in your Baserow tables, each containing data across multiple fields. Learn how rows organize information, understand row IDs and counts, and discover common row operations.
A row represents a single record or entry in your table. Rows are the fundamental building blocks where your information lives, and understanding how to work with them is essential for effective data management in Baserow.
Rows hold your actual data records, while fields (columns) define what type of information each record contains. Each row spans horizontally across your table, with cells at the intersection of rows and fields containing the actual data values.

In the image above, each horizontal line represents a complete row with information about a project in the “All Projects” table.
Baserow tables organize data in a grid structure where rows and fields work together to create a complete database.
Rows (horizontal): Each row represents one complete record with all its associated information. For example, in a customer database, one row contains all details about a single customer: their name, email, phone number, and purchase history. Data in rows reads from left to right across fields.
Fields (columns): Fields define the categories of information your records contain. The “Name” field, “Email” field, and “Phone” field are vertical columns where similar types of data appear for every row. Data in fields is read from top to bottom across rows.
Cells: The intersection of a row and a field creates a cell, which holds the actual data value. If row 7 intersects with the “Name” field, that cell contains the name value for that specific record. Each cell stores one piece of information according to its field type.

The cell containing “Valery Dugall” sits at the intersection of row 7 and the Name field.
Understanding the difference between row IDs and row counts helps you track and reference records correctly.
Click the row number column header to toggle between row ID (with potential gaps) and row count (sequential without gaps). This doesn’t change the underlying data, just how row numbers display.
Row ID is a permanent, unique number assigned when a row is created. This number never changes and stays with that row forever, even if you reorder rows or delete other rows. Row IDs are not sequential after deletions; if you delete row 5, you’ll see rows 1, 2, 3, 4, 6, 7 with a gap where row 5 was. This permanence makes row IDs reliable for references, formulas, and integrations that need to identify specific records consistently.
Use row IDs when: Creating formulas that reference specific rows, building integrations that track records over time, maintaining permanent references that won’t change with row reordering, or using the row_id() formula function to identify records.
Row count provides sequential numbering of currently visible rows without gaps. This number changes as you add, delete, or filter rows. If you have 100 rows and delete row 50, row count renumbers everything sequentially from 1 to 99. Row count helps you quickly see how many rows exist and provides a simple sequential reference for temporary purposes.
Use row count when: Counting total visible rows in your current view, creating temporary sequential references, printing or exporting with simple numbering, or needing gap-free numbering for presentations.

Rows support various operations that help you manage and organize your data effectively.
You can create rows manually one at a time, import multiple rows from CSV or other files, use forms to let others create rows, or utilize the API for programmatic row creation. Learn more: Create rows
You can edit cells inline for quick updates, open the row detail panel for comprehensive editing of all fields in one row, paste data from spreadsheets for bulk updates, or use multi-cell selection to update multiple values efficiently. Learn more: Edit rows
Row selection enables bulk editing, deletion, copying data across rows, or applying operations to multiple records simultaneously.
Deleted rows move to trash with a grace period for recovery. Be cautious when deleting; once the trash grace period expires, deletion is permanent.
Apply colors to rows based on conditions or manually to create visual organization. Use row coloring for status indication, priority highlighting, categorization, or any visual grouping that helps you quickly scan and understand your data.
Add comments to rows to discuss specific records with team members, mention collaborators with @ tags, track conversation history about individual records, or document decisions and changes related to specific rows.
Filtering rows: Use filters to show only rows matching specific criteria. Filters don’t delete data; they temporarily hide rows that don’t meet your conditions. This is perfect for focusing on relevant subsets like “Active Customers” or “Tasks Due This Week.”
Sorting rows: Arrange rows by field values in ascending or descending order. Sort alphabetically by name, chronologically by date, numerically by price, or by any field type. Sorting changes display order without affecting row IDs.
Grouping rows: Group rows by field values to organize records into collapsible sections. Group by status, category, assignee, or any single-select field to create organized sections within your table.
Expanding rows: Increase row height to see more content in long text fields, view multiple lines of wrapped text, display larger images in file fields, or get better visibility of cell contents without clicking into them.
Tracking changes: View row change history to see who modified rows and when, review previous values before edits, track data evolution over time, or audit changes for compliance purposes.
Baserow has row limits depending on your subscription plan. Limits depend on your plan’s storage capacity and performance requirements for your specific use case. Tables can handle millions of rows efficiently thanks to lazy loading, which loads data progressively as you scroll rather than loading everything at once.
The 200-row selection limit exists because Baserow loads rows in batches of 200 as you scroll through tables. This lazy loading approach allows smooth scrolling through millions of rows without downloading entire tables. If you need to operate on more than 200 rows, use filters to create smaller batches or use the API for bulk operations.
No, row IDs are permanent identifiers that cannot be changed or reassigned. This permanence ensures reliable references in formulas, integrations, and links between tables. If you need changeable identifiers, create a custom field (like an auto-number field) for your own numbering system.
Deleted row IDs are never reused. If you delete row 5, that number remains permanently unused even if you create new rows later. This prevents confusion where different records might share the same ID at different times. Row count renumbers to fill gaps, but row ID preserves the gap.
Use the row_id() formula function to get the current row’s ID. For more complex references between rows or tables, use Link to table fields with lookup or rollup fields to pull data from related records. Row IDs provide stable references that persist through sorting and filtering.
Work with rows effectively:
Organize and customize:
Advanced features:
Learn more:
Still need help? If you’re looking for something else, please feel free to make recommendations or ask us questions; we’re ready to assist you.
Contact support for questions about Baserow or help with your account.