Placement pricing desk for recruiting and staffing agencies

By General Input

Open a live deal, see the market pay range for that role and city, set your markup, and write the agreed numbers straight back onto the deal.

Integrations

  • Job Salary Data
  • HubSpot

Type

App

Categories

  • Sales
  • HR & People

I run a recruiting and staffing agency. Build me a placement pricing desk: one screen where a recruiter opens a live HubSpot deal and prices the placement before sending the quote. Today the market lookup, the margin math and the deal record live in three different places, so quotes get built in a throwaway spreadsheet and the numbers never make it back onto the deal. This app closes that gap.

Layout: a two pane working screen. The left pane is the deal list, the right pane is the pricing workspace for whichever deal is selected. Recruiters live in this screen while quoting, and account leads open it to sanity check a price before it goes out.

Left pane, the deal list. Use HubSpot Search Deals to load open deals in our staffing pipeline, sorted by close date with the soonest first. Each row shows the role title (the deal name), the client company, the city, the current stage and the close date. Use HubSpot List Pipelines so I can pick which pipeline is the staffing pipeline and which stages count as open, and remember that choice. Where a deal is associated with a company, use HubSpot Get Company to show the real client name and, if the deal has no city of its own, fall back to the company's city. Add a search box and a stage filter at the top of the list. Selecting a row loads the right pane.

Market pay panel, top of the right pane. When a deal is selected, call Job Salary Data Get Job Salary Estimate with that deal's role title and city, and show the minimum, median and maximum side by side along with the confidence value the service returns. This is a hard rule: never show a single salary number as fact. The range and the confidence value always travel together, and every figure is labelled as an estimate. The service can return up to three estimates from different publishers for the same query, so show each of them with its publisher name rather than only reading the first one. If the lookup returns nothing usable, say so plainly and give the recruiter an inline way to retype the job title in a more standard form or try a nearby city and run the lookup again. Cache the result per deal so switching between deals does not burn a lookup every time.

Pricing panel, the heart of the app. A mode toggle switches the deal between contract and direct hire. In contract mode the inputs are pay rate (hourly), markup percentage and burden percentage, and the panel computes in real time as I type: bill rate = pay rate x (1 + markup); gross margin in dollars = bill rate minus pay rate; gross margin percent = gross margin divided by bill rate; and net margin after burden is subtracted from the pay side. In direct hire mode the inputs are first year salary and fee percentage, and the panel computes the placement fee in dollars. Seed the fields with sane defaults and show a soft warning, not a hard block, when an input falls outside the normal bands: contract markup 30 to 75 percent, direct hire fee 15 to 30 percent of first year salary, and a healthy gross margin target of 25 to 35 percent with 10 to 20 percent net after burden. Show every computed figure next to the market range above it so the recruiter can see whether the pay rate they are quoting sits at the bottom, middle or top of the market.

Budget flag. Compare the client's stated budget, taken from the deal amount or a budget property on the deal, against the market median for that role and city. If the stated budget sits below the median, flag it clearly on the deal card in the left pane and again at the top of the pricing panel, with copy telling the account lead to reset expectations with the client before the search starts. Make this flag visible without opening the deal, so someone scanning the list can see which searches are priced to fail.

Saving. A save button writes the agreed numbers back to the deal with HubSpot Update Deal (agreed pay rate, markup, burden, bill rate, gross margin, placement fee and deal amount) and then logs the full breakdown as a timeline note with HubSpot Create Note associated with that deal. The note is the audit trail, so write it as readable client facing math: role and city, the market range with its confidence value and publisher, every input the recruiter entered, every computed output, and who saved it and when. Let me map which HubSpot deal properties each number writes into, since custom property names vary between agencies, and if a mapped property is missing, still save the note rather than failing the whole save. When I reopen a deal that was priced before, read the saved values back so the panel opens on the last agreed numbers instead of blank defaults.

Draft rate justification button, powered by a background agent. From the pricing panel I click Draft rate justification and a background agent runs while I keep working. The agent takes the role title, the city and the agreed rate, benchmarks the same title in two or three nearby markets and at the adjacent seniority level using more Job Salary Data Get Job Salary Estimate calls, then writes one short client facing paragraph explaining why the rate we are quoting is fair given what that role costs in comparable markets and at the next level up. It posts that paragraph back onto the deal as a HubSpot note with Create Note. The app shows the agent's progress and the finished paragraph in the panel with a copy button, so the recruiter can paste it straight into the proposal. Same rule applies to the agent: it cites ranges with confidence values, never a single number as fact, it never invents a figure for a market where the lookup came back empty, and it keeps the output to one tight paragraph in plain client facing language with no internal margin figures in it.

Persistence: store per user defaults for markup, burden and fee percentage, the chosen pipeline and open stages, and the field mapping. Everything else about a placement lives in HubSpot on the deal and its notes, so the CRM stays the single source of truth.

Related prompts

Explore more prompts
Turn Mailjet email clicks into ranked HubSpot follow-upsiMessage campaign console with pre-flight checks and delivery boardA searchable RFP answer library your bid team drafts fromSee which target accounts just started advertising on LinkedInAccount health board that puts product usage next to your CRMLook up a customer's full chat history mid conversationLusha prospecting workbench with credit-safe revealsWhich companies your LinkedIn ads reach, matched to your CRMLead response desk with a running clock on every new leadApprove Lusha enrichment field by field before HubSpot saves it