> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inploi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom data via the job description

> A no-code way to pass extra job data from your ATS to inploi by adding it to the job description.

Some ATS integrations cannot pass every field inploi needs. When that happens, you can add the extra data **inside the job description** in your ATS, and inploi will pull it out into the job's `custom_data` during [Job Import](/integrations/ats/job-import) — no integration changes required.

This is a no-code workaround: the only thing that changes is the job description text in your ATS. It is available across all ATS integrations.

## When to use it

* Your ATS cannot send a field that inploi's standard import expects.
* You need to tag jobs for filtering (for example, sponsorship eligibility or internal-only roles) without a code change.

## How it works

<Steps>
  <Step title="You add a marker to the description">
    In your ATS, add `-inploi-` to the job description, followed by your `key: value` pairs.
  </Step>

  <Step title="inploi parses everything after the marker">
    During the next import, inploi reads everything after `-inploi-` and turns each `key: value` pair into a field in the job's `custom_data`.
  </Step>

  <Step title="The marker and data are stripped from the public description">
    Everything from `-inploi-` onwards is removed from the description shown to candidates. The marker block never appears on the public job page.
  </Step>
</Steps>

## Example

Set the job description in your ATS to:

```text theme={null}
Regular job description that candidates will see.

-inploi-
sponsor: 100
is_internal: false
```

After the next import, the job is updated to:

* **`custom_data`** → `{ "sponsor": "100", "is_internal": "false" }`
* **Description** → `Regular job description that candidates will see.`

You can then use a **Segment** to filter jobs on a `key: value` match — for example, only showing jobs where `is_internal` is `false`.

## Formatting rules

The parser is strict, so the structure matters:

| Rule                          | Detail                                                                                                                                                  |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Marker**                    | Use the exact text `-inploi-` to start the data block. Everything before it stays in the public description; everything after it is parsed and removed. |
| **Pair format**               | Each entry is `key: value`. Keys may contain letters, numbers, and underscores only — no spaces or hyphens.                                             |
| **Values stop at whitespace** | A value ends at the first space, comma, or semicolon, so values cannot contain spaces. Use single tokens like `100` or `false`.                         |
| **Separators**                | Separate multiple pairs with new lines, commas, or semicolons.                                                                                          |
| **Stored as strings**         | Every value is stored as a string. `100` becomes `"100"` and `false` becomes `"false"` — there are no numbers or booleans in `custom_data`.             |
| **Overwrites on match**       | If `custom_data` already has a key with the same name, the value from the description overwrites it.                                                    |

<Warning>
  Adhere to the `key: value` structure exactly. Pairs that do not match (for example, a value containing a space, or a missing colon) are silently skipped — they will not appear in `custom_data` and you will not see an error.
</Warning>

## What to expect

* Changes appear after the next import — typically within 15 minutes, the same cadence as any other [Job Import](/integrations/ats/job-import) update.
* The data block is never shown to candidates.
* If the data does not appear in `custom_data`, the most common cause is a value containing a space or a malformed pair.

<Note>
  Speak to your **Customer Success Manager** before rolling this out, so the keys you choose line up with how you intend to use them.
</Note>

<Snippet file="contact-support.mdx" />
