Daily pay transparency check for new Ashby job postings

Every weekday at 8am ET, compare yesterday's new Ashby postings to live market pay and drop a compliance digest in your recruiting Slack channel.

Agentic Task
AshbyJob Salary DataSlackHR & PeopleOperationsDaily DigestsNotifications & AlertsResearch & Monitoring
PromptCreate

Build me an agent workflow that keeps my recruiting team ahead of pay transparency laws by sanity-checking every new Ashby job posting against live market pay.

Trigger: cron. Run every weekday (Monday through Friday) at 8:00am America/New_York.

On each run, use Ashby's List Job Postings to pull every job posting that was created or updated in the last 24 hours. If a posting from the list is missing the fields you need (title, primary location, compensation range, and a direct link back to the posting), fall back to Ashby's Get Job Posting Info for that one posting to fill in the gaps.

For each posting, normalize the free-text job title into a clean canonical role (drop seniority suffixes if needed, expand abbreviations) and identify the posting's primary city and state or country. Then call job-salary-data's Get Job Salary Estimate with that canonical title and location to fetch the market min, median, and max.

Compare the posted compensation band against the market band and assign one of four verdicts:

- compliant: the posted range overlaps the market band in a reasonable way - low: the posted max is meaningfully below the market median - high: the posted min is meaningfully above the market max - unpriced: the posting has no compensation range at all

For anything that isn't compliant, generate a recommended range using the market min and max (rounded to sensible numbers). If the salary estimate confidence is low or the location isn't recognized, mark the row as low confidence rather than forcing a verdict.

Finish by sending exactly one Slack message via Slack's Send a Message to the #recruiting channel. The message should be a short digest with one row per posting containing: role title, city, posted range (or "missing"), market band (min–median–max), verdict, recommended range if off-market, and a direct link back to the Ashby posting. Sort rows so unpriced and low come first. If there were zero new or updated postings in the last 24 hours, send a one-line message saying so instead of a table.

Do not edit anything in Ashby. This workflow is read-only against Ashby; recruiters update the postings themselves using the links in the digest.

Additional information

What does this prompt do?
  • Pulls every job posting your recruiters opened or updated in Ashby over the last 24 hours.
  • Looks up the current market salary range for each role and city, then labels the posting compliant, below market, above market, or missing a range entirely.
  • Posts a single digest to your recruiting Slack channel with the role, city, your posted range, the market band, a verdict, a recommended range for anything off, and a direct link back to the Ashby posting.
  • Runs on a schedule so pay transparency review is a background habit, not a fire drill after a legal complaint.
What do I need to use this?
  • An Ashby admin account so we can read your job postings.
  • A Slack workspace and the channel you want the digest posted to (for example, #recruiting).
  • A subscription to our salary data provider so we can pull live market pay by role and city.
How can I customize it?
  • Change the time or cadence, such as running twice a day, only on Mondays, or right after your standup.
  • Point the digest at a different Slack channel, or send it to a specific hiring manager as a direct message.
  • Adjust the tolerance for what counts as off market, or scope the check to a specific department, office, or job board.

Frequently asked questions

Which pay transparency laws does this help with?
It helps you stay on top of the growing list of states and cities that require a pay range on job postings, including Colorado, California, Washington, New York, Illinois, and others. The workflow flags any posting that is missing a range or that looks off market so your team can fix it before a candidate or regulator notices.
What if a posting doesn't have a compensation range in Ashby?
Those postings get flagged as missing a range in the digest, with a recommended market range attached so the recruiter can drop it into the posting in one edit.
Can I run this on my own schedule instead of 8am ET?
Yes. You can change the time, timezone, and days it runs. A lot of teams pick a time right before their morning recruiting standup so the digest is fresh.
Does it edit our Ashby postings automatically?
No. The workflow only reads from Ashby. It sends the digest to Slack with a direct link to each posting so a recruiter can review and update the range themselves.
What if we hire globally and the market data doesn't cover a city?
When a location doesn't have reliable market data, the workflow notes low confidence in the digest instead of forcing a verdict, so your team can decide whether to hand-check it.

Stop chasing pay ranges after the fact.

Connect Ashby and Slack once, and Geni sanity-checks every new posting against live market pay before your recruiters get to their desks.