A cost estimator needs three figures: concrete by element type, concrete by level, and the total for the whole building. Those figures also have to agree with a traditional hand takeoff, or the documents come back.
Concrete quantities in Revit are read straight from the model geometry, so all three figures take minutes. But Revit handles the overlap between beams, slabs and columns in its own way, and that is where the numbers drift away from a hand takeoff. This article walks through fifteen steps in Revit 2027 and explains every source of difference. For the full workflow from modelling to structural drawings, the Institute runs a Revit Structure course.
Where concrete quantities in Revit come from
Every beam, column and slab in Revit carries a Volume parameter: the volume of the solid after it has been cut by its neighbours. A schedule only groups and sums those values, so when the model changes the schedule follows.
General schedule creation is covered in schedules in Revit, and reinforcement in rebar schedules in Revit. This article covers structural concrete only.
Preparing the model
You need a structural model with beams, columns and slabs built in the right categories: Structural Framing for beams, Structural Columns for columns, Floors for slabs. Every element needs a Structural Material that is a concrete material named after its grade. Modelling is covered in beams in Revit and structural floors in Revit.
This article is part of the Institute's Revit Structure series.
Concrete quantity schedule in Revit: beams by level
Step 1 — Check for in-place elements
Before building the schedule, look for elements modelled with Model In-Place. Select a suspicious element; if the ribbon shows Edit In-Place, it is an in-place family.
The sample model has five in-place elements in the Structural Framing category, the first of them a sloping roof slab. They have no reference level and no structural material, yet they do have a volume. In the beam schedule they become five rows with no level.
Step 2 — Open Schedule/Quantities
On the View tab, Create panel, click Schedules to open its menu.
Element schedules use Schedule/Quantities. Material Takeoff is kept for step 11.
Step 3 — Pick Structural Framing and name the schedule
The New Schedule dialog opens. Type Structural Framing into Category name search and the list shrinks to one line.
Name fills in Structural Framing Schedule; rename it so it is easy to find. Set Phase to the construction phase being measured, then click OK.
Step 4 — Find the right Volume field
Schedule Properties opens on the Fields tab. Type Volume into Parameter Name Search.
Three lines come back, and the first is Estimated Reinforcement Volume, an estimated rebar volume. The field you want is the last one, plain Volume.
Step 5 — Six fields for the beam schedule
Find each of the following fields and move it to the right-hand list.
| Field | Column in the schedule |
|---|---|
| Family and Type | Beam family and section |
| Reference Level | Level of the beam, used for grouping |
| Structural Material | Concrete material, that is the grade |
| Cut Length | Beam length after trimming at column faces |
| Count | Number of beams |
| Volume | Concrete volume |
Use Cut Length rather than Length for the length column, because that is the length actually cast.
Step 6 — Group by level on Sorting/Grouping
Go to Sorting/Grouping. Set Sort by to Reference Level, tick Header and Footer, and leave the footer on Title, count, and totals. Set Then by to Family and Type.
Tick Grand totals and type a title into Custom grand total title. Clear Itemize every instance so beams on the same level with the same section collapse into one row.
Step 7 — Turn on totals on Formatting
Skip this and the footer only counts beams. On Formatting, select Volume and change No calculation to Calculate totals. Do the same for Cut Length.
In Heading, rename the column to include the unit, for example V concrete (m³). Then click Field Format.
The Format dialog follows the project settings by default: cubic metres, two decimal places, and an m³ symbol after every value. Clear Use project settings and set Unit symbol to None so each cell holds a bare number; step 15 explains why. Click OK twice.
Step 8 — Read the beam schedule by level
The sample model gives: level 1F 14 beams, 4.74 m³; 2F 16 beams, 3.92 m³; 3F 17 beams, 3.49 m³; 4F 24 beams, 5.11 m³. The whole schedule sums to 76 elements and 21.02 m³. The block with no level at the top is the five in-place elements from step 1, 3.76 m³ in total. The estimator has to check that block and assign it to the right item.
Columns, slabs and structural walls
Step 9 — Repeat for columns with Base Level
Repeat steps 2 to 7 with the Structural Columns category. Columns have no Reference Level; the field for grouping by level is Base Level.
The sample model's column schedule: 30 columns, 7.49 m³. A column belongs to the level of its base, so a column running from level 1 to level 2 sits in the 1F block.
Step 10 — Filter structural slabs on the Filter tab
For slabs, use the Floors category, group by Level, and total both Area and Volume. The category also holds architectural finish floors, so it needs a filter.
Add the Structural field on Fields, then on Filter set Structural equals Yes. The tab has eight condition rows joined by And.
The sample model's slab schedule gives 11 slabs and 23.38 m³, and all 11 are marked Structural, including the 1.68 m³ blinding layer. So this filter removes finish floors but cannot separate blinding concrete; Material Takeoff does that in step 12. The Area column rounds to whole square metres by default, so reset its Field Format to two decimals if you need areas.
Structural walls work the same way with the Walls category. That category has no Structural field but has Structural Usage, which is the one to filter on.
Material Takeoff: splitting quantities by concrete grade
Element schedules tell you how much goes into beams and how much into columns. When the estimator asks "how much B20 concrete in the whole building", the answer is a Material Takeoff.
Step 11 — Create a multi-category Material Takeoff
Go back to View › Schedules and choose Material Takeoff. In New Material Takeoff, pick <Multi-Category> at the top of the list.
That line is hidden while the search box contains text; clear Category name search and it comes back.
Step 12 — Add Material: Name and Material: Volume
On Fields, add Material: Name, Material: Volume and Category. On Sorting/Grouping, group by Material: Name then by Category; on Formatting, set Calculate totals for Material: Volume.
The @P21=BetongB20 group in the sample model: floors 21.70 m³, columns 7.49 m³, foundations 8.74 m³, framing 21.02 m³, 58.94 m³ in total. Blinding concrete @Po-BTLot is 1.68 m³ in a group of its own, just as an estimate separates it. The column and framing figures match the schedules from steps 8 and 9 to two decimals.
Autodesk's Material Takeoff Schedules page notes that Revit approximates when computing the volume of individual material layers, so small discrepancies can appear under some join conditions.
Step 13 — Keep only concrete on the Filter tab
The unfiltered takeoff also lists roof tiles, aluminium and paint. On Filter, set Material: Name contains followed by the part shared by the names of your concrete materials.
Filtering the sample model on BetongB leaves exactly the B20 group with 58.94 m³. With a shared naming convention for materials, one filter row covers every grade.
Revit quantity takeoff versus hand takeoff
Revit never counts the concrete shared by two elements twice; it belongs to whichever element "wins" where the two solids join.
Step 14 — Check one beam against a hand takeoff
Select a beam on the plan and read the Dimensions group in Properties.
Beam DY2.1, section 220x400, on grid B of the sample model has System Length 14,465 mm, Cut Length 14,370 mm and Volume 0.859 m³. A hand takeoff of section times axis length gives 0.22 × 0.40 × 14.465 = 1.273 m³, almost half as much again as Revit.
The difference has three parts:
| Part | How Revit handles it |
|---|---|
| Beam end framing into a column | Trimmed at the column face, so Cut Length is 95 mm shorter than System Length |
| Beam depth inside the 120 mm slab | Counted in the slab; the beam keeps only the part below it, 0.22 × 0.28 × 14.37 = 0.885 m³ |
| Intersections with columns along the beam | The small remainder, about 0.026 m³ |
Columns behave the same way: column C2.2, 220x400 and 3,900 mm long, gives 0.343 m³ by hand, while Revit reports 0.322 m³ because the part inside beams and slab is counted in those elements.
To change which element wins, use Modify › Geometry › Join › Switch Join Order: click the first element, then the second.
Switching the join between beam DY2.1 and slab S120 on level 2 gives: beam up from 0.859 to 1.148 m³; slab down from 5.903 to 5.576 m³, slab area down from 49.19 to 46.47 m². The total of the two barely moves, 6.762 against 6.724 m³. Switching join order only moves quantity from one item to another.
To read the figures correctly, add up the Revit volumes of all elements and compare with a hand total that already deducts the overlaps. If beams and slabs are priced differently, agree first which item owns the overlap, then set the join order in the model to match.
Export quantities from Revit to Excel
Step 15 — Export the schedule to CSV
Open the schedule view and go to File › Export › Reports › Schedule. The save dialog is preset to CSV (delimited); click Save and Revit asks for options.
Exporting the beam schedule while the volume column still follows the project settings writes each cell as 1.51 m³: the number carries the unit symbol, and Excel reads it as text that cannot be summed. After step 7, the export writes plain 1.51. The file uses a decimal point, so on a machine set to decimal commas check the number columns after opening.
Rebar schedules fall into a thousands-separator trap that makes Excel split columns; the fix is in rebar schedules in Revit. Concrete schedules leave Use digit grouping off by default, so that trap is rarer here.
When the quantity schedule does not add up
| Symptom | Cause | Fix |
|---|---|---|
| Beam rows with no level and zero length | In-place elements in the Structural Framing category | Give them their own item, or remodel with a real beam family |
| Volume column disagrees with Properties | Estimated Reinforcement Volume picked, the first result for Volume | Switch to the Volume field at the bottom of the list |
| Footer shows only a count | No Calculate totals on Formatting | Select Volume, change No calculation to Calculate totals |
| Slab schedule larger than the estimate | Finish floors or blinding included | Filter Structural equals Yes; separate blinding with Material Takeoff |
| Volume column cannot be summed after CSV export | m³ symbol attached to every value | Field Format: clear Use project settings, set Unit symbol to None |
| Beam and slab totals differ between two people | Different join order in the two models | Compare combined totals, then agree on Switch Join Order |
| Demolished elements in the schedule | Schedule Phase Filter set to Show All | Set Phase Filter and Phase to the stage being measured |
Four common misconceptions
| What people say | What Revit 2027 actually does |
|---|---|
| Revit double-counts the beam inside the slab | No; the overlap belongs to one of the two elements by join order |
| A Revit figure below the hand takeoff means missing elements | Usually the overlap has simply moved to the neighbouring element |
| Totals by grade mean adding several schedules by hand | A multi-category Material Takeoff groups by material in one schedule |
| Switching join order corrupts the concrete total | The total barely changes; only the split between items moves |
In short, how accurate concrete quantities in Revit are depends on the model: the right categories, assigned materials, and a join order that follows the estimating convention.
Frequently asked questions
How do I take off concrete in Revit level by level?
Group by level on Sorting/Grouping: beams by Reference Level, columns by Base Level, slabs by Level. Tick Footer and set Calculate totals for Volume.
How does Material Takeoff differ from Schedule/Quantities?
Schedule/Quantities lists elements, while Material Takeoff lists the materials inside them. For a total by concrete grade across the building, use a Multi-Category Material Takeoff.
Can blinding concrete be separated from slab concrete?
Yes, if the blinding layer has its own material. In the sample model the blinding uses a separate material, so the Material Takeoff puts it in its own 1.68 m³ group.