@extends('layouts.app') @section('title', 'Job Sync | '.$org->display_name.' | healthcareers.app') @section('robots', 'noindex, nofollow') @php $pill = fn ($s) => ['active' => 'on', 'paused' => 'wait', 'failing' => 'bad'][$s] ?? 'off'; $itemPill = ['live' => 'on', 'held' => 'wait', 'pending' => 'wait', 'attn' => 'bad', 'over' => 'wait']; @endphp @section('content')
Connect your applicant tracking system or a job feed once. New openings post here on their own, filled jobs come down on their own, and edits flow through. · Organization · My posts
Job Sync can post many jobs at once, so it's only open to verified organizations. Verification takes one of a company email, a DNS record or a small file on your website, and then a quick review by our team.
Posting jobs by hand stays free. Job Sync is a monthly plan for verified organizations: we keep your jobs in step with your hiring system so your team doesn't have to.
Billed monthly by card. Change plan any time (the difference is prorated), or cancel and it runs to the end of the month you paid for. Questions? Contact us.
@if ($billing['status'] === 'canceling') Ends on {{ $org->sync_period_end?->timezone('America/New_York')->format('F j, Y') }}. Until then everything keeps syncing; after that your synced jobs come down. You won't be charged again. @elseif ($next) Next charge {{ \App\Support\Pricing::money($next[1]) }} on {{ $next[0]->timezone('America/New_York')->format('F j, Y') }}. @endif @if ($billing['launch_until'] && $billing['status'] !== 'canceling') Launch price until {{ $billing['launch_until']->timezone('America/New_York')->format('F j, Y') }}, then {{ \App\Support\Pricing::money((int) $org->sync_price_cents) }} a month. @endif
Plan: {{ $billing['plan']['name'] ?? $org->sync_plan }}, set up by our team{{ $org->sync_until ? ' until '.$org->sync_until->timezone('America/New_York')->format('F j, Y') : '' }}. Contact us to change it.
@endif @if ($sources->isEmpty() && ! $blocker)Nothing connected yet. Paste your careers page and we'll find the system behind it.
{{ $s->status_reason }}
@endif{{ $c['live'] }} live @if ($c['held']) · {{ $c['held'] }} waiting for our review @endif · {{ $c['attn'] }} {{ $c['attn'] === 1 ? 'needs' : 'need' }} a fix @if ($c['over']) · {{ $c['over'] }} over your job limit @endif @if ($c['pending']) · {{ $c['pending'] }} being prepared @endif
{{ $limit === null ? 'No job limit' : $used.' of '.$limit.' job slots used' }} · Last read {{ $s->last_visit_at?->diffForHumans() ?? 'not yet' }}@if ($s->last_visit_at && $s->last_success_at && $s->last_success_at->lt($s->last_visit_at)) (last good read {{ $s->last_success_at->diffForHumans() }})@endif @if ($s->status === 'active' && $s->next_visit_at) · next {{ $s->next_visit_at->isPast() ? 'any minute' : $s->next_visit_at->diffForHumans() }}@endif · posted as {{ $s->owner_email }}
| Synced jobs live now | {{ number_format($liveSynced) }} |
| Apply clicks to your site | {{ number_format($applyClicks) }} |
| Jobs closed by sync | {{ number_format($closed30) }} |
Apply clicks count candidates who left for your site from a synced job. We can't see whether they finished applying there.
Nothing. Every job we read is up, or on its way.
@elseThese jobs wait; the rest are live. Fix them in your system and they come through at the next read.
| Job | What's needed |
|---|---|
| {{ \Illuminate\Support\Str::limit((string) (((array) $i->raw)['title'] ?? $i->external_id), 80) }}
@if ($i->url) Open in {{ $i->source?->kindLabel() }}@endif |
{{ $i->reason }} |
Nothing yet.
@else @if ($reports->isNotEmpty())| Job | Now | When |
|---|---|---|
| @if ($d['url']){{ \Illuminate\Support\Str::limit((string) (((array) $i->raw)['title'] ?? $i->external_id), 80) }}@else{{ \Illuminate\Support\Str::limit((string) (((array) $i->raw)['title'] ?? $i->external_id), 80) }}@endif | {{ $d['label'] }}@if ($i->reason && $i->state !== 'live') {{ $i->reason }}@endif |
{{ $i->updated_at?->diffForHumans() }} |
Synced jobs are changed in your own system, not here: anything edited on healthcareers.app would be replaced at the next read.
@endif