Offer desk that prices one role against the live market

By General Input

Open one screen per requisition to see market pay, peer employer rates and live posted ranges next to your own band before you name a number.

Integrations

  • JSearch
  • Google Sheets
  • Google Docs

Type

App

Categories

  • HR & People
  • Operations

I am a recruiter, and every time I am about to put a number in front of a candidate I rebuild the same compensation research by hand. Build me an offer desk app that I open per requisition, so that one screen holds everything I need to justify a number in the moment before the offer goes out. This is not a report that runs on a schedule and it is not about our existing employees or payroll. It is an on demand surface for one open role and one hiring decision.

At the top of the screen I set up the requisition: a job title, a location, an optional requisition name or ID, and a short list of peer employers I want to benchmark against, typically the three or four companies we lose candidates to. Let me edit that peer list inline. Save each requisition setup in the app so that when I reopen it the title, location and peer list come back, and give me a simple list of my saved requisitions to pick from. Loading a requisition refreshes all the market data.

The core of the screen is three market views side by side. First, the market range for the title and location from the JSearch Estimate Salary operation, showing the low, median and high figures so I can see the spread rather than a single average. Second, a peer employer panel that calls JSearch Get Company Job Salary once per employer on my peer list, for that same job title and location, so I see named companies and what each of them pays rather than an anonymous blend. Third, a live postings panel using JSearch Search Jobs to pull what competitors are advertising for that title right now, listing each posting with its employer, the posted range where one exists, and a link to the ad. That third panel matters to me because posted ranges are what candidates are actually seeing, not survey averages, so show me the individual postings and not just a rolled up number.

Against those three views, show our own band for the role. Read it from the compensation band tab of a Google Sheet using the Google Sheets Get Values operation. The tab has a row per role with a band minimum, midpoint and maximum, so match the row on job title and pull those three figures. Let me point the app at my spreadsheet, tab name and range in a settings screen. Then do the comparison that I actually care about: work out where our midpoint sits as a percentile of the market range, and flag it loudly and unmistakably when our midpoint falls below the market median. That is the case where an offer is about to get declined, so it should be impossible to miss on the screen, not a subtle colour change. Show the size of the gap in both money and percentage terms, and if a role has no matching row in the band tab, say so plainly rather than silently showing nothing.

Give me a "Build the offer case" button that kicks off a background agent. The agent writes a one page justification aimed at the hiring manager and finance, and it should lay out the recommended number, where that number sits against market percentile and against our internal band, the peer employer comparison with the named companies, the live posted ranges we found, and the risk of coming in low, including what happens to time to fill and decline rates if we anchor under the market median. It creates the document with the Google Docs Create Document operation and then fills it in with Batch Update Document, using real headings and a comparison table rather than one wall of text. When the agent finishes, show the document link in the app next to that requisition so I can open or share it, and show the run status while it is working so I know it is in progress.

When I commit to a number, let me enter the figure I am going out with and an optional note on why, then append the decision back to the Sheet with the Google Sheets Append Values operation, onto a decision log tab. The row should carry the supporting market evidence as it stood at that moment, not just the number: the date, the requisition and job title, the location, the number I committed to, our band minimum, midpoint and maximum, the market low, median and high, the peer employer figures, how many live postings we found and how many of them published a range, the percentile our offer lands at, and the link to the justification document. The point is a running record of what we offered and what the market said at the time, so that six months from now I can see whether we were pricing correctly.

A few details to get right. Normalise pay periods before comparing anything, since the job data returns hourly, monthly and yearly figures and I need everything on an annual basis to line up against our band. When searching live postings, the location has to be included inline in the search query text because that search has no separate location field. Many postings publish no salary at all, so only compute the posted range from listings that actually have one, and always show me the count of postings found alongside the count that included a range, so I can judge how much to trust it. Handle a peer employer with no data for that title gracefully by marking it as no data rather than dropping it from the panel or showing a zero. Show every figure with its currency, and make the whole screen readable at a glance, because I open this with a hiring manager waiting on the other end of a call.

Related prompts

Explore more prompts
Call overdue Xero customers with an AI collections agentLocal listing health board for every location you manageLet support send one-off Loops emails without an engineerStop cold emails to anyone with a live deal in PipedriveiMessage campaign console with pre-flight checks and delivery boardA searchable RFP answer library your bid team drafts fromLinkedIn Ads budget pacing dashboard for every client accountFront desk appointment confirmation board for the next 3 daysGive your team Looker numbers without buying more seatsBuild audience segments from product usage and push to Loops