> For the complete documentation index, see [llms.txt](https://docs.jobfront.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.jobfront.io/jobs-data-file-exports/configuration.md).

# Configuration

## Blocked Sources

Each organization can maintain a single **block list** of `source_id`s. A blocked source is suppressed everywhere JobFront emits that organization's job data — across every export format and every API response — without having to edit individual export configurations.

### Managing the block list

Manage your block list from the JobFront dashboard: **Data → Blocked Sources** (`/settings/blocked-sources`). Each entry has a required `source_id` and an optional free-text comment, and the list is always scoped to your own organization.

### What blocking does

Once a source is blocked, its jobs are removed from:

* **Every export** your organization produces — XML, JSON, S3, SFTP, and Parquet.
* **Every JobFront API response** (e.g. `/v3/jobs`).

The block is applied **in addition to** any per-export `exclude_source_ids` filter, and for exports it is enforced even beyond the 100-entry `exclude_source_ids` cap.

### Export metrics card

Every export writes a metrics sidecar (`jobs-active-latest-metrics-<N>.json`). When a block actually removes jobs from that file, the card reports the impact (**impact-only** — only blocked sources that had jobs in that file's scope are listed):

| Field                          | Meaning                                                |
| ------------------------------ | ------------------------------------------------------ |
| `count_blocked_sources`        | Number of blocked sources that had jobs in this export |
| `blocked_source_ids`           | The blocked `source_id`s whose jobs were suppressed    |
| `count_blocked_jobs_estimated` | Estimated number of jobs removed by the block          |

These three fields are omitted when no blocked source affected the file.

The companion `source_ids` sidecar (`jobs-active-latest-source_ids-<N>.json`) and the metrics card's `count_total_sources` always **exclude** blocked sources, so the source list and counts stay consistent with the data file.

Example JSON metrics card showing blocked sources/jobs from being included in the export

```
{
  "count_total_jobs": 334126,
  "count_total_sources": 6943,
  "count_base_jobs": 310101,
  "created_at": 1781792108,
  "export_duration_seconds": 582.2,
  "file_index": 9,
  "is_test": false,
  "count_blocked_sources": 1,
  "blocked_source_ids": [
    "S3h5dsyhgx2amt2upru4o2e6qvcz9vwyb"
  ],
  "count_blocked_jobs_estimated": 1
}
```

### Behavior notes

* **Idempotent:** re-blocking an already-blocked source just updates its comment.
* **Fail-open:** if the block list cannot be read, exports and API responses are never broken — the request proceeds as if nothing were blocked, rather than blocking everything.
