Importing Components from CSV
When you have a take-off or vendor quote already in spreadsheet form, you can bulk-import components into an estimate area instead of typing each row individually.
This feature is available when your company is using Detailed Estimating. It is not available on assembly-only estimates, and the menu option is disabled once an estimate is sold.
To import components
- Open the estimate you want to add to.
- Click the More menu (the three-dot button in the estimate header).
- Select Import from CSV.
- In the Import Estimate from CSV dialog:
- Click Download Template to get a starter CSV with the correct column headers and an example row.
- Choose the Target Area the imported rows should be added to. (Areas must already exist on the estimate — create them first if needed.)
- Click Select CSV and pick your file (
.csvonly, up to 100 MB).
- The dialog parses your file and shows a preview table (first 200 rows).
- Review any errors highlighted in the preview, fix them in your file, and re-select it.
- When the file is error-free, click Upload.
The import runs in the background. You'll receive an email summarizing how many rows were imported, how many matched the component database, how many became custom entries, and any rows that failed.
How Matching Works
For each row, Readybuild looks for an existing component in your component database with the same name, size, color, and options (case-insensitive). If a match is found, the row is added as a component entry linked to that database record — this is a matched row. If no match is found, the row is added as a custom entry and shows the Custom badge in the estimate.
Matched and custom rows have different column requirements: a matched row inherits most defaults from the linked database component, so only name is required; a custom row has to supply everything needed to build a usable entry.
CSV Columns
name is the only column required for every row. The other "Required for custom" columns only need to be populated on rows that don't match a database component. Columns can appear in any order; the importer accepts a few aliases per column (e.g. qty for quantity, unit cost for unit_cost, mark up / markup for mark_up).
| Column | Required | Description |
|---|---|---|
name | Always | Component name. Used (with size, color, options) to find a database match. |
size | No | Part of the match key. |
color | No | Part of the match key. |
options | No | Part of the match key. Alias: option_name. |
quantity | Required for custom | Numeric quantity. Alias: qty. |
unit_cost | Required for custom | Per-unit cost. If supplied on a matched row, overrides the database component's price. Alias: unit cost. |
mark_up | No | Markup percentage. Aliases: markup, mark up. |
unit | No | Unit of measure (e.g. EA, SF, LF). Resolved against your unit list. |
category | Required for custom (unless cost_code supplied) | Estimate category name. Must match an existing category on this estimate's type. If omitted, the importer falls back to the category associated with the cost_code. |
cost_code | Required for custom | Either the cost code number (e.g. 1000, EST-001) or its name (e.g. General Labor). The importer resolves against the number first and falls back to the name, so using the number is recommended when two codes share similar names. Aliases: costcode, cost code. |
type | Required for custom | One of Material, Labor, Subcontractor, Equipment. |
subcontractor_type | No | SubcontractorMaterial, SubcontractorLabor, or SubcontractorLaborAndMaterial. Alias: subcontractor type. |
action | Required for custom | + or Install for installs, - / Demo / Demolition for removals. |
tax | No | Tax percentage. |
allowance | No | yes/no/true/false/1/0/y/n. |
po_required | No | Same boolean values as allowance. Alias: po required. |
notes | No | Free-text notes (custom rows only). |
Price behavior
unit_costsupplied → that price is used, regardless of whether the row matched.unit_costblank on a matched row → the database component's price is used.unit_costblank on a custom row → the price defaults to $0.
Fixing Import Errors
The preview screen flags problems before you upload, including:
- Missing
namecolumn in the CSV header row. - Empty
nameon any row. - Non-numeric
quantity,unit_cost,mark_up, ortax. categorythat does not match an existing estimate category.unit,cost_code,type,action,subcontractor_type,allowance, orpo_requiredvalues that cannot be resolved.- Missing required fields on custom (unmatched) rows:
quantity,unit_cost,cost_code,type,action, andcategory(unlesscost_codeprovides one).
Upload is blocked until every row is error-free. Fix the issues in your spreadsheet, save it as CSV, and select the file again.