← all playbooks

Post one role to every ATS you run, with one approval before it goes live

The role created as a draft in every ATS you have connected, published on your go-ahead, and a ledger with the id and the state of the role in each system, so a run that half finished can be completed without duplicating anything.

use when
the same role has to be opened in more than one applicant tracking system and you are tired of typing it out in each
starts from
A job spec

The prompt

Paste it into Claude Code or the Claude desktop app with Hyreflow connected. The first line tells your agent to use Hyreflow, so it reads the play, asks before it spends anything, and hands the work back to you.

paste this into Claude
Use hyreflow and post this role to every ATS I have connected.

The role: <PASTE THE SPEC, OR GIVE A FILE PATH / URL>
Department: <DEPARTMENT_OR_TEAM>. Location: <LOCATION>. Work model:
<ONSITE_HYBRID_OR_REMOTE>. Salary to publish: <SALARY_RANGE_OR_NONE>.

How I want it run:
- Tell me which of my ATSes are connected and which you are skipping.
- Ask me for anything a system needs that I have not given you, in one
  batch. Never invent an id. If one is missing, skip that ATS and say so.
- Show me the exact fields you will write to each ATS before you create
  anything there.
- Create the draft in one ATS first and show me the result. Tell me whether
  any part of the full run costs Hyreflow credits before you do the rest.
- Creating is not publishing. Once the drafts exist, list them and ask me
  once whether to take them live. Publish nothing without that answer.
- If a call times out, check the ATS before you try again.

Finish with a table: each ATS, live or draft or failed or skipped, and the id.

Replace every <PLACEHOLDER> with your own detail. Everything else can stay as written.

What you need first

  • The role: title, description, requirements, location, work model, employment type, department and salary if you publish it
  • Each ATS connected in Integrations with your own API key
  • The internal ids each ATS asks for, or access to the admin screens where they are shown

Tools it can reach for

The agent picks per step from what your workspace has. Nothing here is required by name.

What happens when you run it

Free steps are marked free. Anything that spends credits is marked, and the agent asks before the first paid run of any size.

  1. 1

    Check which ATSes are connected

    free

    The target set is read from your workspace, never assumed. Each ATS you are skipping is named with the reason, so an unconnected system shows up as a line in the report and not as a silent gap.

  2. 2

    Collect the role once

    free

    Title, description, requirements, location, work model, employment type, department and salary are gathered in one pass and reused for every system. Anything a target ATS requires that you have not given is asked for in one batch.

  3. 3

    Resolve the ids nobody can guess

    free

    Each ATS keys a job to its own internal ids. Ashby teams, Lever users and the departments in SmartRecruiters and Recruitee can be read for free. Ashby location ids, SmartRecruiters industry, function and experience level, and Recruitee location ids come from you. A missing id means that ATS is skipped and reported.

  4. 4

    Map the role to each system

    free

    The same role becomes one payload per ATS, because no two of them share a schema. Where a system has no field for something, such as salary in Recruitee, the field is dropped for that ATS and you are told what to finish by hand.

  5. 5

    Create a draft in each ATS

    free

    One call per system, with your approval, carrying on past a failure in any one of them. A call that times out is never repeated blind, because none of these systems guards against a duplicate requisition.

  6. 6

    Report the drafts and ask once

    free

    You see what exists, what failed and why, before anything is public. Then one question covers the whole set: publish these drafts, yes or no.

  7. 7

    Publish on your go-ahead

    free

    Taking a role live is a different call in every system. Ashby needs the job opened and then a published posting with a description, Lever and Recruitee change the state, and SmartRecruiters has its own publish call.

  8. 8

    Hand over the ledger

    free

    One row per ATS: live, draft only, failed or skipped, with the id of the role in that system. If anything is left in draft, the report says what you need to do about it.

What a run costs

Nothing in this play spends credits.

Free before anything is charged

  • Check which ATSes are connected
  • Collect the role once
  • Resolve the ids nobody can guess
  • Map the role to each system
  • Create a draft in each ATS
  • Report the drafts and ask once
  • Publish on your go-ahead
  • Hand over the ledger

What moves the number

  • How many roles survive the free filters. Everything dropped before the paid steps costs nothing.
  • Providers you connect with your own key. Those calls bill your account, not your credits.

An estimate, not a quote, priced at the volume credit rate. Your agent sizes the run against your own workspace and tells you what it will cost before it spends anything.

The same role, typed out four times

An agency that works inside its clients' systems, or a group that runs a different ATS per brand, opens the same role several times over. Each system wants it in its own shape. One asks for a team id, another for a named user to attribute the posting to, a third will not save without an industry, a function and an experience level. The copy is identical. The forms are not, and the fourth version is the one with the typo in the salary.

This play collects the role once and does the translating. What it will not do is decide when the role becomes public. Every system here creates a draft, and drafts are private. Publishing is a separate call, made after you have seen the drafts and said yes once for the whole set.

What you get back

A draft of the role in each connected ATS, then the live role once you approve. And the ledger: a short table with one row per system showing live, draft only, failed or skipped, with the id of the role in that system and the vendor's error where there was one.

The ledger is the part that matters on a bad day. When three systems published and one refused, the ids are what let you finish the fourth without creating the first three again.

Variations worth knowing

One ATS only. The same discipline works for a single system: ids resolved first, a draft, then an approved publish.

Drafts and no further. Ask for the drafts and stop. A hiring manager can review the role inside their own ATS and publish it themselves.

Internal only. Lever publishes to both its public and internal channels unless told otherwise. If the role is for internal candidates, say so before the publish step.

Fill it afterwards. Sourcing for the same role is a separate job: turn a job spec into a ranked shortlist starts from the same spec.

Where this goes wrong

An id that does not exist. A wrong team or location id fails the write, and most of these vendors do not say which field was wrong. The agent asks. It does not guess.

Ashby will not open the job. A job in Ashby cannot be opened without a default interview plan. Give that id at the start if you intend to publish.

SmartRecruiters refuses to publish. Your plan's limit on live ads, a job that needs internal approval first, or a missing compensation band all block the publish call. These are settings on your side, so they are relayed to you and not retried.

Expecting the API to set everything. Recruitee does not accept a salary or an employment type when a role is created. Those are finished inside Recruitee.

A timeout read as a failure. The role may have been created anyway. The agent checks with you or in the ATS before calling again.

Questions

Does this put the role on LinkedIn and Indeed?

Not directly. Publishing puts the role live on your own careers site, the one each ATS hosts. Where a role travels after that is whatever you have set up inside that ATS. The one exception is SmartRecruiters, where publishing can also push the role to the free job aggregators, and that option is only used if you ask for it.

Which systems does it work with?

Ashby, Lever, SmartRecruiters and Recruitee, each connected with your own API key. TrackerRMS is supported as well, but it is switched on by the Hyreflow team and is not something you connect yourself. Breezy HR cannot be connected at the moment, so it is left out of every run.

What does it cost?

No Hyreflow credits. Every read and write runs on your own ATS account, under your plan and your rate limits. What it does need is each ATS connected in Integrations, which is not part of the free plan.

What happens if one ATS fails halfway through?

The others carry on, and that is the normal shape of a multi-post. The failed one is reported with the error the vendor gave, and the ledger keeps the ids of the ones that worked. The fix is to complete the stragglers. Starting again would duplicate the roles that already exist.

Can it create the role and publish it in one step?

No, and that is deliberate. Creating a job publishes nothing in any of these systems. Going public is a second call that waits for your answer, because a live job ad is awkward to take back and it carries your client's name.