Skip to main content
Checked against the product · 2026-10-05

Price a New Proposal End to End

This guide walks you through pricing a proposal from a blank slate to a defensible price: create the proposal, enter labor by LCAT or position, apply your wrap and indirect rates, and read the resulting price, gross profit, and margin. A controller or pricing analyst can follow it start to finish on day one.

The workspace is organized as a five-stage flow — Build, Price, Validate, Compare, and Submit. This guide covers the first two stages, which is where the price is actually built. Everything you enter cascades automatically from the base period into every option year, so you price the base year once and the engine carries it forward.

Where it lives​

Open FP&A → Operations → Pricing.

The page opens on the Proposals tab. Along the top you will also see Support / Informal (prices you built for another firm to submit, or exercises that will not go out — kept out of pipeline value and win rates), Vehicles, Bid History, Audit, and Change Log tabs — and, if you have admin-config access, a Settings tab that holds the provisional rate card. There is also a Tour button that replays the guided walkthrough and an Import CSV button for bulk-loading positions from a spreadsheet.

Step 1 — Create or select a pricing scenario​

Each proposal is its own pricing scenario.

To create a new one:

  1. On the Proposals tab, click New Proposal (top right of the toolbar).
  2. In the Create Proposal dialog, fill in the fields. Four are required and marked with an asterisk:
    • Proposal Name * — at least three characters.
    • Contract Type * — choose FFP, T&M, CPFF, or another type from the list. This drives how the engine builds the price: T&M prices from bill rates, FFP and cost-plus derive revenue differently.
    • Set-Aside * — the set-aside designation. If you set Role * to Sub, this collapses to Full and Open, since the prime carries the designation.
    • PoP Start * — the period-of-performance start date. Required since 2026-07-30, and the reason is worth knowing rather than working around: this date resolves each period to a published schedule year, and that year selects the ceiling rate a position may bill. A proposal that reaches Won with no start date is pro-rated into the new-business pipeline as if it began on January 1 of the fiscal year. Create Proposal stays disabled until you set it, and you cannot advance past the first stage without it.
  3. Fill in the optional metadata that applies: Solicitation #, Agency, Customer / Sub-Agency, Contracting Office, Vehicle, and NAICS Code. The Vehicle dropdown ties the proposal to a contract vehicle (for example a GSA schedule), which drives ceiling-rate lookups on each position.
  4. Set the structure fields, which cannot be changed after creation because they drive period generation and rate snapshots:
    • PoP End — the period-of-performance end date. (PoP Start is required and is set in step 2. Unlike the other fields in this step, it is NOT locked after creation — see the note below.)
    • Base Period (months) — defaults to 12.
    • Option Years — 0 to 9.
    • Default Escalation Rate (%) — applied to both price and labor as the proposal default. You can override it per period or per position later in Price; those overrides win over this value.
    • Standard Work Hrs / Yr per Person — defaults to 1920 (8 hr x 5 days x 48 wk). Used to flag part-time positions.
  5. Click Create Proposal to save. (Cancel discards.)

To open an existing scenario: on the Proposals tab, use Search proposals... or the status filter (All Statuses, Draft, In Review, Submitted, Won, Lost) to find it, then click its row. This opens the pricing workspace.

note

The PoP start date IS editable through Edit Details — if someone keyed it wrong, fix it in place. Do not clone to correct a date: cloning mints a new proposal and orphans the original's NEO link, version history and change log. Base and option period lengths are editable there too: hours filled in automatically re-derive for the new length and hours you typed are kept. What genuinely is locked once the proposal exists is the number of option years, because changing it regenerates the periods and adds or deletes option-year positions — clone the proposal if you need to change it. The vehicle stays editable through Edit Details while the proposal is a Draft: changing it re-snapshots your indirect rates and re-points each position's labor category onto the new vehicle by LCAT code, flagging any position with no matching category on the new vehicle so you can re-select it. Once the proposal leaves Draft, the vehicle locks too — clone to change it. Business metadata — name, agency, and the indirect rates covered in Step 3 — stays editable through Edit Details.

Step 2 — Enter labor by LCAT or position​

When the workspace opens you land on the Build stage. Its sub-tabs are Positions, Subcontractors, Other Direct Costs and Deliverables. Start on Positions. On Subcontractors, give each line a Cost type: a non-recurring seat, such as a transition-in team, is priced once, while a seat left unclassified is priced again in every option year when option pricing is generated.

The Labor Positions panel offers three views, toggled at the top left: Grid (the default, one expandable section per period), Tuning (a dense editable grid of base-period positions with per-period escalation), and Matrix (all positions across every period side by side). Use Grid while you build.

Add a position:

  1. Click Add Position (top right of the panel). A drawer opens from the right.

  2. If your vehicle is SIN-organized, pick the SIN first. Then use the LCAT search box to type an LCAT code or title and select the matching labor category. The drawer shows the selected LCAT and, where the vehicle supplies one, its ceiling rate. On open-market or custom vehicles with no LCAT list, type a Position title directly instead.

  3. If you do not already know which labor category fits, click See all labor categories beside the search box. The search box only finds names you can already spell; this opens the full list for the vehicle, so you can read the choices instead of guessing at them. Each row shows the category's code, its full Title (which the search field truncates, because titles run long), and the base-year rate the engine would actually bill — after any vehicle discount, so it is the number the proposal will carry. Filter by code or title, or sort by rate to find what fits a target price. Click a row to select it.

    Two further columns appear only on vehicles that publish qualification requirements, which in practice means the GSA schedules:

    • Min education — the least education the vehicle accepts for that category. It constrains who you may staff against the line before it constrains price, so check it before promising a named person.
    • Min YoE — the least relevant experience, in years. Proposing someone below it is a technical-evaluation risk even when the rate is right.

    On agency IDIQ and BPA vehicles these columns are absent and the pane says so underneath the table. That means we hold no requirement on record, not that the category has none — read the vehicle's own labor-category attachment before relying on the silence. If a value is wrong or missing on a GSA category, correct it on the vehicle's labor-category record; the pane reads it and does not store its own copy.

    Categories outside the proposal's SIN are hidden. Tick Show N outside SIN to see them for reference — they stay unselectable, because bidding one would put a category on the proposal that its SIN does not permit.

  4. Set Pay Type — Salary or Hourly.

  5. Enter the compensation in the salary or hourly rate field (its label changes with pay type — for example, the salaried field reads "Salary (today, agreed)"). Set Base-year escalation % to age today's rate forward to the base year; the drawer shows the derived base-year figure the engine will use.

  6. Enter # of Personnel (decimals are allowed for part-time — 0.5 is half-time). Productive hours per year derive from this and the proposal's standard-hours convention.

  7. On non-cost-plus contracts, optionally enter a Discount % off the ceiling rate. For time-and-materials lines with non-standard billing, tick Override bill hours to bill on hours that differ from the productive-hours calculation.

  8. Check the OT Rate toggle only for a dedicated overtime line — it pre-fills the bill ceiling at 1.5x and expects a 1.5x pay rate.

  9. Watch the Live Preview box as you type. It shows Hourly Rate, Comp Cost, Ceiling Rate, Ext Rate (after disc), Est Revenue, and Implied Wrap for the line before you commit it.

  10. Click Add Position (cascades to all option years). The position is written into the base period and every option year at once.

Repeat for every labor line in your bid. Each period section in Grid view shows a running Revenue and Cost total in its header, and a Copy control to clone a period forward.

tip

To load a full staffing plan at once instead of adding lines one by one, use Import CSV from the top tab bar. It maps spreadsheet columns to LCAT, hours, rate, personnel count, and more, then imports every row into the proposal.

If you need to fine-tune many lines quickly, switch to the Tuning view. It surfaces the base-period grid with editable Comp $, bill rate, Disc%, # People, and Hrs/Person columns, alongside read-only Revenue, Cost, GP%, CM%, NP%, and Wrap per line. Base-period edits cascade to option years with compounding escalation.

The grid shows three separate margin columns and they answer different questions — reading the wrong one is how a bid gets mispriced.

  • GP% is GROSS margin — revenue less direct labor, before indirects. This is the headline margin on the bid.
  • CM% is CONTRIBUTION margin — revenue less direct labor and fringe, the costs that actually vary with winning this work. It deliberately excludes overhead and G&A, because those pools are largely fixed and winning work is what lowers their rates rather than the other way round. Read CM% as "what this bid contributes before the fixed pools."
  • NP% is NET margin — after indirects. Do not derive this yourself as (revenue − cost) ÷ revenue off the other columns; that produces a misleadingly small single-digit figure for a perfectly healthy bid.

Hover any of the three column headers in the app for the same definitions, and see the Absorption tab for how winning the work moves your indirect rates.

Step 2b — Add deliverable lines (products, licenses, subscriptions)​

If the solicitation buys things as well as people, open the Deliverables tab beside Other Direct Costs and click Add deliverable line. A deliverable carries a price the customer is quoted and a cost you pay, stated separately -- the margin on resale is the point.

The drawer asks for what is being sold (Description, Manufacturer, Part number, Vendor part number, CLIN (optional), Quantity, Unit of measure), the price with its Price basis (it starts empty, so you choose where the price came from) -- Unit price ($), or List price ($) and Discount (%) when the basis is list less discount -- the cost (Unit cost ($), Cost basis (optional)), the quote behind it (Quote reference, Quote expires), the Country of origin, the cost-volume fields (Cost type -- recurring or non-recurring -- Option-year quantities and their per-year CLIN when the proposal has option periods, and Not separately priced - price carried under CLIN), and for a monthly-billed line the Term (months), Service start and Service end. Cost type is the split FAR 15.408 Table 15-2 reports on: mark tooling, first articles and qualification work non-recurring so they are priced on the NRC line instead of being buried in the unit price the government compares. Fill Not separately priced only for a line the solicitation asks for and does not price -- name the CLIN whose price covers it, and the schedule prints NSP rather than $0.00, which would read as an offer to supply the item for nothing.

A saved component under a deliverable can also carry the vendor's tiered quote. Open the component and add a tier with its Min qty and Unit cost ($): the engine prices the part at the deepest tier the order reaches and falls back to the component's own unit cost when none applies. Min qty is total pieces purchased across the whole order -- gross per unit times the units already built plus this lot -- not the per-unit quantity and not this year alone, which is what lets an option year reach a tier the base year cannot. Tick Firm through the option years when a blanket order locks the price, or the tier escalates with the rest of the material.

The table then shows, per line: Period, Line, Qty, Unit price, Extended, Unit cost, Burdened, Net profit, NP %, Basis, Origin and Quote. Burdened is the engine's figure (direct cost plus material handling and G&A); fee is not a cost. Net profit is the extended price less that burdened cost, so it is after burden, not a gross figure; the proposal's gross margin is in the totals above the tabs. Country of origin is required on every line before the proposal can be submitted, and a quote that expires before the submission date is flagged by the audit run.

Step 3 — Apply wrap rates and indirect rates​

The "wrap" is the multiple your bill rate carries over raw labor — it is the combined effect of your fringe, overhead, G&A, and fee. You do not type a single wrap number; you enter the underlying indirect rates, and the engine computes the resulting wrap on every line. You will see it in the Implied Wrap preview when adding a position and in the Wrap column on the grid.

Set the indirect rates:

  1. In the workspace header, click Edit Details. If any of fringe, overhead, or G&A is still missing, a small amber dot appears on this button — those three are required for any cost build-up.
  2. In the details form, enter your rates as percentages:
    • Fringe Non-SCA (%) and Fringe SCA (%)
    • Overhead (%)
    • G&A (%)
    • M&H (%) — material handling
    • Fee (%)
    • H&W ($/hr) — health and welfare, entered as a dollar amount per hour
  3. To pull your DCAA-approved provisional rates instead of typing them, click Pull from Pricing Rate Settings. This fills the fringe, overhead, G&A, and H&W fields from the fiscal-year rate card, which you configure on the Pricing page's Settings tab (previously in the Admin console).
  4. Set Salary Escalation (%/yr) and Price Escalation (%/yr) if they should differ from the default you entered at creation. Saving re-cascades existing option-year positions to the new rates. Give each ODC a CLIN and a Cost type as you enter it: tooling, special test equipment and qualification testing belong to the NRE CLIN and are non-recurring, so they are reported on the NRC line rather than folded into the recurring unit price the government compares. An ODC left unclassified is reported in the Table 15-2 unclassified column, and the NRC line is short by whatever part of it was non-recurring.

Three settings on Edit Details, under Cost Volume, decide how the bid presents its costs. Freight-in (% of material) and Warranty reserve (% of burdened cost) are applied per period by the engine, so they follow a quantity change, attrition and yield instead of being computed off-line and typed once; the warranty reserve is taken on burdened cost rather than on price, because a price-based reserve would depend on a price that depends on the reserve. Non-recurring treatment decides whether the Table 15-2 sheet shows a recurring unit price plus its own NRC line (Separate CLIN, the default and what FAR prefers) or one all-in unit price with non-recurring cost spread into it (Amortized) -- the sheet states the election in its own header, so it has to match the solicitation. Under Amortized, give each one-time ODC an Amortize over (units) quantity; blank charges it as a lump, which is the only behavior under Separate CLIN.

  1. Under Rate Application, decide how ODCs, travel, and materials are treated. Approved indirect rates allows M&H and G&A markup on those cost elements; Apply markup is a secondary switch — leave it unchecked to pass ODCs through at cost even when approved rates are on.
  2. Click Save Changes.
note

Cost-plus contracts derive revenue from cost x (1 + fee rate), so the Fee (%) field is what turns cost into price on those bids. Time-and-materials and FFP bids instead earn their margin in the wrap over labor.

Fine-tune escalation by year (optional): in the Positions panel, switch to the Tuning view to open the Escalation by Period table. Enter a Salary % and Price % per option year, or use the quick-fill row to set every option year at once, then click Save & Recompute. Re-apply Escalation re-cascades salaries and bill rates to all option-year positions without changing your rate entries.

Flat bids: for SCA-style bids that request an equitable price adjustment each year rather than a built-in escalation, click Escalation: Lock Flat in the header. It zeros all escalation across every period; the pill then reads Escalation: FLAT (locked). Recompute to see 0% applied everywhere.

Step 4 — Read the price, GP, and margin​

Advance to the pricing stage: click the pinned Advance to Price → button at the bottom of the left rail. (You must have at least one position with salary first; until then the button prompts you to add one.)

Across the top of the workspace, four KPI cards summarize the whole proposal at all times:

  • Total Revenue — the proposed price across every period.
  • Total Cost — fully burdened cost.
  • Gross Margin — GP as a percentage of revenue.
  • Total Profit — dollars of profit.

The Price stage sub-tabs give you the detail behind those numbers: Margin Analysis, Ceiling Compare, What-If, Absorption, Market Rates, and Period Summary.

On Margin Analysis you get:

  • A Revenue to Profit Bridge waterfall — revenue on the left, each cost reduction stepping down, profit on the right, so you can see exactly where the money goes.
  • A Margin Trend line showing GP% across the base year and each option year, colored against your target.

Read the per-line detail back on the Positions grid: each line shows Total Cost, Total Price, Gross Margin, Net Margin, and Wrap, along with its SCA classification and CLIN.

tip

If the numbers ever look stale after an edit, click Recompute in the header. You can snapshot the current state with Save Version and pull the full pricing model to a spreadsheet with Export to Excel.

Step 5 — Price to a target margin (optional)​

If you have a margin goal rather than fixed rates, use the Margin Targeting panel:

  1. It shows your Current GP%. Enter your goal in Target GP%.
  2. Click Compute. The panel returns the required rate adjustment, the target revenue, and a plain-language readout of how far your bill rates need to move.
  3. If the adjustment looks right, click Apply Rate Adjustment and confirm. This shifts every position's bill rate by the computed percentage and recomputes the proposal.

What happens next​

Once the price, GP, and margin read the way you want, continue through the flow with Advance to Validate → to benchmark your rates against market, then Compare and Submit. Marking a proposal Won or Lost at the end feeds your win-rate and pricing history for future bids.

note

Indirect costs and revenue are rounded to cents at every cascade step. Government Excel templates that round only at displayed totals may show cent-level drift per line and a total variance under 0.01% — both conventions are FAR-acceptable; the difference reflects rounding method, not a math error.

Building a deliverable's cost from components​

A deliverable line's cost can be built up from a component tree instead of typed. Open the tree with the boxes control on the line. Each row shows the Component (indented by where it sits in the assembly), its Qty/unit (per one unit of its parent), Scrap / Yield, material Unit cost, touch-labor Hours and Rate, the learning Curve, the OH pool that burdens its labor, and Burdened (build) — the part's fully burdened cost across the whole build, computed by the engine on save.

Adding or editing a component asks for its Description, Qty per parent unit, Scrap % and Yield % (both raise the gross material bought per good unit — a yield at or below zero is refused), Material unit cost, Touch labor hours and Labor rate, the Learning curve % (Wright unit curve: average hours fall to that percent each time the build quantity doubles), and the Overhead pool for its labor. A line with components has its unit cost derived by the engine — a typed unit cost is refused while components exist — and a leaf component with no material cost and no priceable labor blocks submission the same way an unpriced line does.

When the accounting structure defines more than one overhead pool, positions carry the same choice in the grid's OH Pool column: blank applies the proposal's single overhead rate, and the choices are the pools with a rate in the proposal's snapshot. Rates are filed per pool on Admin > Pricing Rates; Refresh rates on the proposal re-snapshots and reprices, and refuses if it would strand an assignment.