Offer templates

For HR administrators

An offer template is reusable job-offer copy that your workspace authors once and reuses for every candidate you make an offer to. It replaces a hardcoded, generic offer letter with wording your workspace controls — including the salary figures, which used to render as a literal [TBD] placeholder.

Where to find it

/{orgSlug}/app/settings/hire/offers — the third tab of hire settings, alongside Email templates and Automation. HR Administrator only.

The tab is a two-pane editor: your saved templates on the left (grouped Arabic / English), the selected template's editor on the right — name, locale, an Enabled switch, an Offer values panel, the offer body, and a variable reference. It mirrors the stage-email editor you already know, with one improvement: variables are click-to-insert at your cursor position instead of a static hint string.

The two-layer variable model

Offer copy draws on two different kinds of value, and it's worth being clear about which is which before you start editing:

  • Template values — you type these once, on the template itself, at authoring time. Salary, contract period, annual increase, probation, working hours, offer validity, and so on. They're the same for every candidate offered this template until you change them.
  • Candidate data — the platform fills these in automatically, per candidate, at the moment you issue the offer. Name, position title, organisation name, start date, national ID, and so on. You never type these; you only reference them.

Both are written into the offer body the same way: single braces, {likeThis} — the exact same substitution syntax the stage email templates already use. If you've edited an email template before, you already know how to edit an offer template.

Template values (OFFER_FIELDS)

Set once per template, in the Offer values panel:

VariableWhat it is
{basicSalary}Basic salary — SAR / month (read automatically from the position; see the note below)
{housingAllowance}Housing allowance — SAR / month
{transportAllowance}Transport allowance — SAR / month
{otherAllowances}Other allowances — SAR / month
{contractPeriod}Contract period (e.g. "Unlimited duration", "One year, renewable")
{probationPeriod}Probation period, in days (Saudi Labor Law caps this at 90)
{annualIncrease}Annual increase — a percentage, amount, or policy statement
{workingHours}Weekly working hours (Saudi Labor Law maximum is 48)
{annualLeave}Annual leave, in days (statutory minimum is 21; 30 after 5 years of service)
{noticePeriod}Termination notice period, in days
{contractType}Contract type (e.g. "Full-time", "Part-time")
{workLocation}Work location (e.g. "Riyadh, Olaya District")
{offerValidityDays}How many days the candidate has to respond before the offer expires — default 14

All money fields are stated in SAR per month — the same monthly basis as an employee's salary record, not the annual basis used elsewhere for salary-range planning. The label on every money field says "SAR / month" for exactly this reason; don't paste in an annual figure.

Basic salary is read from the position, not the template. At the moment an offer is issued, {basicSalary} is filled automatically from the position's specified pay — the seat's own pay grade if it has one, otherwise the job description's default grade — and it overrides whatever number you typed on the template. If the position specifies a grade (a range) with no step pinned, the minimum of the range (the step-1 base) is used. The number typed on the template is only a fallback, for legacy positions that carry no pay grade at all. To set a position's scale/grade/step, see Positions and Pay scales.

Optional values left blank drop their whole line. A money field or the work location left at its [يُحدَّد / TBD] default — or a runtime value like {startDate} that has no data yet — is not printed as a stub on the issued offer. The entire line it sits on (its label, its bullet, and any unit text) is removed, so the candidate never sees an unfilled term. A line is only kept when it has at least one real value; fill the field to make its line appear.

Candidate data (OFFER_RUNTIME_VARIABLES)

Filled in automatically, per candidate, when you issue the offer — never editable on the template:

VariableWhat it is
{candidateName}The candidate's full name
{candidateFirstName}The candidate's first name
{candidateFullName}The candidate's full name (same as candidateName)
{positionTitle}The position title they're being offered
{roleTitle}The job description title
{orgName}Your workspace / organisation name
{startDate}Their start date
{dateTime}The current date and time
{issueDate}The issue date of the document
{hijriDate}The Hijri equivalent of the issue date
{nationalId}National ID / Iqama number
{nationality}Nationality
{salaryBand}The job description's salary band, if one is set

Because candidate data always wins when a key exists in both layers, a stale name or role title typed into a template can never survive into a printed offer — the real candidate's data always overrides it at issue time.

The standard template

Every workspace has a bilingual Standard offer of employment template seeded automatically the first time you open the offers tab or issue an offer — you never start from a blank picker. It carries the same wording that previously lived hardcoded in the offer-letter generator, now fully editable, with the salary line reading as a real {basicSalary} variable instead of a placeholder.

Click New template to start a fresh one. It opens prefilled with the same starter body and field defaults as the standard template — locale, wording, and Saudi-labour-law defaults (90-day probation, 21-day annual leave, 48-hour week, 30-day notice, 14-day offer validity) all filled in — and everything is editable before you save. Change the locale only while the draft is unsaved; once a template is saved its locale is fixed. Duplicate copies the current template's body and values into a new draft — handy for a variant that only tweaks a couple of lines.

Deleting a template

Delete removes the selected template permanently. This includes the seeded standard templates: once your workspace has written its own offer copy, you're not stuck with ours sitting in the list. A deleted standard template is not re-created on the next page load — deleting it means it's gone.

The one template you can't delete is the last one left. A workspace with no offer copy at all can't issue an offer, so the Delete button is disabled when a single template remains; create or duplicate a replacement first, then delete the one you don't want.

Deleting a template does not affect offers already issued from it — those are finished PDFs attached to the candidate's application, and they stay exactly as they were. If you only want to take a template out of circulation while keeping it around, turn off Enabled instead: a disabled template stops appearing in the offer dialog but is still there to edit or re-enable later.

Issuing the offer

When you move a candidate to the OFFERED stage — by dragging their card, from the person menu, or as a bulk action — a dialog opens before the move completes. Pick a template from the dropdown, and the dialog shows a live preview of the offer with that candidate's real data already substituted in, so you can check the wording before it becomes a document. Confirm, and the move happens together with the offer: the platform renders the template, generates a PDF, and attaches it to the candidate's application — visible to the candidate immediately in their candidate portal.

The candidate also receives the OFFERED email with that PDF attached, so the offer letter lands directly in their inbox rather than only living in the portal. (If the PDF can't be generated for some reason, the email is still sent, just without the attachment.) When you move a candidate to OFFERED without picking a template, no PDF exists, so the OFFERED email goes out on its own as before. You, as the admin, can open or download the same PDF from the candidate's card in the pipeline — the small document icon appears once the offer has been generated.

Picking a template is optional. If you skip it, the candidate still moves to OFFERED exactly as before — no document is generated, and nothing about the move changes. A bulk move to OFFERED applies the one template you pick to every candidate in the selection.

How a candidate accepts

There's no signing inside Jadiroon, and no approval step holding the offer back from the candidate — confirming the move issues the offer as final, and it reaches the candidate right away. That reflects how the business actually works: the candidate reads the offer in their candidate portal (My applications → the application → Your job offer) and downloads the PDF. If they want to accept, that conversation happens outside the platform — you invite them to come in and complete signing and any remaining paperwork in person, then move them from OFFERED to HIRED once that's done.

Next

Making the hire covers what happens when a candidate accepts and you move them from OFFERED to HIRED.