# Batch Evaluate Offers

Source: https://career-ops.org/docs/introduction/guides/batch-evaluate-offers (canonical HTML, identical content)

> Process 10+ job offers in a single session with parallel AI workers and tailored PDFs.



Use this guide when you have 10 or more job offers to review and want to process them all in one session instead of one by one.

Each offer gets its own Claude worker. That worker reads your CV, scores the match, writes a full report, and saves a tailored PDF — all without you lifting a finger.

## Step 1: Add your offers to the input file [#step-1-add-your-offers-to-the-input-file]

The batch system reads job URLs from a file called **`batch/batch-input.tsv`**. Think of it as a to-do list for the evaluator.

Open **`batch/batch-input.tsv`** in any text editor.

Add one row per offer. Each row has four columns separated by a tab:

| Column   | What to enter                                       |
| -------- | --------------------------------------------------- |
| `id`     | A unique number for this offer (1, 2, 3, …)         |
| `url`    | The full job posting URL                            |
| `source` | Where you found it (e.g., `LinkedIn`, `Greenhouse`) |
| `notes`  | An optional note — leave blank if you have none     |

Save the file.

**Example:**

```text title="batch-input.tsv"
id	url	source	notes
1	https://jobs.example.com/senior-engineer	LinkedIn	
2	https://greenhouse.io/jobs/fullstack-dev	Greenhouse	priority
3	https://builtinaustin.com/job/rails-dev	BuiltIn	
```

> **Tip**
Each ID must be a unique number. Do not skip numbers or repeat them.

## Step 2: Preview your batch (recommended) [#step-2-preview-your-batch-recommended]

Before processing anything, run a quick check to see how many offers are waiting. Nothing gets evaluated yet — this is just a preview.

```bash title="Terminal"
./batch/batch-runner.sh --dry-run
```

You'll see a list of pending offers and their IDs. If something looks wrong, fix the input file now before spending time on a bad list.

## Step 3: Run the batch [#step-3-run-the-batch]

When you're ready, start the batch. You can run one offer at a time or several at once.

**One at a time (slowest, uses the least memory):**

```bash title="Terminal"
./batch/batch-runner.sh
```

**Two at a time (a good default):**

```bash title="Terminal"
./batch/batch-runner.sh --parallel 2
```

**Three at a time (faster, but heavier on your machine):**

```bash title="Terminal"
./batch/batch-runner.sh --parallel 3
```

**Skip offers that score below a threshold (e.g., below 4.0 out of 5):**

```bash title="Terminal"
./batch/batch-runner.sh --parallel 2 --min-score 4.0
```

Watch the terminal as the batch runs. Each line tells you which offer is being processed and whether it finished or failed.

## Step 4: Read results as they come in [#step-4-read-results-as-they-come-in]

You don't need to wait for the batch to finish. Results appear as each offer completes.

**Full evaluation reports** → `reports/`

Each report is a file named like `042-company-name-2026-04-14.md`. Open it to see:

* A summary of the role
* How well your CV matches the job
* Salary research
* A suggested interview prep plan

**One-line tracker entries** → `batch/tracker-additions/`

Each offer also drops a short summary file here. These get added to your main tracker in Step 6.

## Step 5: Retry any failed offers [#step-5-retry-any-failed-offers]

Sometimes a worker fails — for example, if a job posting URL stopped loading. Failed offers show up in the terminal with a short error message.

**Retry only the failed offers:**

```bash title="Terminal"
./batch/batch-runner.sh --retry-failed
```

**Retry with up to 3 attempts instead of the default 2:**

```bash title="Terminal"
./batch/batch-runner.sh --retry-failed --max-retries 3
```

The batch skips any offer that already finished successfully — so re-running this is always safe.

## Step 6: Merge results into your tracker [#step-6-merge-results-into-your-tracker]

After the batch finishes, run this command to add all new evaluations to `data/applications.md`:

```bash title="Terminal"
node merge-tracker.mjs
```

This script:

1. Reads the summary files from `batch/tracker-additions/`
2. Checks for duplicates so you never get two rows for the same offer
3. Adds new entries to your applications tracker
4. Archives the processed files into `batch/tracker-additions/merged/`

**To preview the changes without writing anything:**

```bash title="Terminal"
node merge-tracker.mjs --dry-run
```

## What to do next [#what-to-do-next]

Open **`data/applications.md`** to see all your evaluations in one table. From there you can:

* Sort by score to find your best matches
* Open individual reports in `reports/` for a full deep-dive
* Start the application process for your top picks using `/career-ops apply`
