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

# LeadMagic: Job Change Detector

> Check whether a person still works at the company you expect, from their LinkedIn profile URL and that company's name, returning their current company and role.

Check whether a person still works at the company you expect, from their LinkedIn profile URL and that company's name, returning their current company and role.

> [!NOTE]
>
> Tool ID: `leadmagic_job_change_detector`

## Run this action

This action has conditional or dynamic inputs. A static example cannot describe these inputs reliably.

Read the live contract before you execute this action:

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline describe leadmagic_job_change_detector --json
```

## Example response

The SDK returns this shape at `result.toolResponse.raw`. The example values illustrate the response.

```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
{
  "data": {
    "job_change_detected": true,
    "status": "NO_CHANGE",
    "resolution_reason": "CURRENT_COMPANY_MATCHES_EXPECTED"
  }
}
```

Use `deepline describe leadmagic_job_change_detector --json` for the latest machine-readable contract.

## Input reference

Monitor employee transitions and detect when someone has changed jobs. The submitted company\_name is authoritative. A company\_domain lookup only adds matcher aliases. job\_change\_detected is true only when status is JOB\_CHANGE\_DETECTED. When the profile URL does not resolve, the response is status PROFILE\_NOT\_FOUND with resolution\_reason PROFILE\_NOT\_FOUND and credits\_consumed 0 — nothing is charged.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.profile_url` | `string` | Yes | — | Professional profile URL or identifier |
| `payload.company_name` | `string` | No | — | Expected company name (either company\_name or company\_domain is required) |
| `payload.company_domain` | `string` | No | — | Expected company domain (either company\_name or company\_domain is required) |

<details>
  <summary>Show raw input schema</summary>

  ### Input JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Monitor employee transitions and detect when someone has changed jobs. The submitted company_name is authoritative; a company_domain lookup only adds matcher aliases. job_change_detected is true only when status is JOB_CHANGE_DETECTED. When the profile URL does not resolve, the response is status PROFILE_NOT_FOUND with resolution_reason PROFILE_NOT_FOUND and credits_consumed 0 — nothing is charged.",
    "properties": {
      "profile_url": {
        "type": "string",
        "description": "Professional profile URL or identifier"
      },
      "company_name": {
        "type": "string",
        "description": "Expected company name (either company_name or company_domain is required)"
      },
      "company_domain": {
        "type": "string",
        "description": "Expected company domain (either company_name or company_domain is required)"
      }
    },
    "required": [
      "profile_url"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Output reference

Standard tool result payload.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.data` | `object` | Yes | — | Provider response payload. |
| `result.data.job_change_detected` | `boolean` | No | — | true only when status is JOB\_CHANGE\_DETECTED. |
| `result.data.status` | `"NO_CHANGE" \| "JOB_CHANGE_DETECTED" \| "NEVER_WORKED_THERE" \| "AMBIGUOUS_CURRENT_EMPLOYMENT" \| "CURRENT_EMPLOYMENT_UNKNOWN" \| "PROFILE_NOT_FOUND"` | No | — | NO\_CHANGE — the expected employer is a current role. JOB\_CHANGE\_DETECTED — a different primary employer is current, or the matched role has an explicit end date with nothing current, or the expected employer is absent from history while another primary employer is current. NEVER\_WORKED\_THERE — the expected employer is absent from history and no primary current role is listed. AMBIGUOUS\_CURRENT\_EMPLOYMENT — multiple substantive current roles. Not safe to call. CURRENT\_EMPLOYMENT\_UNKNOWN — the See the live schema for the complete constraint. |
| `result.data.resolution_reason` | `"CURRENT_COMPANY_MATCHES_EXPECTED" \| "CURRENT_COMPANY_DIFFERS_FROM_EXPECTED" \| "EXPECTED_COMPANY_NOT_FOUND_IN_HISTORY" \| "NO_CURRENT_POSITION_FOUND" \| "NO_EXPERIENCE_HISTORY_FOUND" \| "MULTIPLE_CURRENT_POSITIONS_FOUND" \| "PROFILE_NOT_FOUND"` | No | — | Why the status was chosen. PROFILE\_NOT\_FOUND accompanies status PROFILE\_NOT\_FOUND. Allowed: `CURRENT_COMPANY_MATCHES_EXPECTED`, `CURRENT_COMPANY_DIFFERS_FROM_EXPECTED`, `EXPECTED_COMPANY_NOT_FOUND_IN_HISTORY`, `NO_CURRENT_POSITION_FOUND`, `NO_EXPERIENCE_HISTORY_FOUND`, `MULTIPLE_CURRENT_POSITIONS_FOUND`, `PROFILE_NOT_FOUND`. |
| `result.data.summary` | `string` | No | — | — |
| `result.data.employee_name` | `string` | No | — | — |
| `result.data.expected_company` | `string` | No | — | — |
| `result.data.current_company` | `string` | No | — | — |
| `result.data.current_position` | `object` | No | — | — |
| `result.data.current_position.title` | `string` | No | — | — |
| `result.data.current_position.company` | `string` | No | — | — |
| `result.data.current_position.start_date` | `string` | No | — | — |
| `result.data.current_position.days_at_job` | `integer` | No | — | — |
| `result.data.current_position.tenure_formatted` | `string` | No | — | — |
| `result.data.current_position.is_current_position` | `boolean` | No | — | — |
| `result.data.tenure_stats` | `object` | No | — | — |
| `result.data.tenure_stats.average_tenure_months` | `integer` | No | — | — |
| `result.data.tenure_stats.average_tenure_formatted` | `string` | No | — | — |
| `result.data.tenure_stats.total_positions` | `integer` | No | — | — |
| `result.data.tenure_stats.longest_tenure_months` | `integer` | No | — | — |
| `result.data.tenure_stats.longest_tenure_formatted` | `string` | No | — | — |
| `result.data.tenure_stats.shortest_tenure_months` | `integer` | No | — | — |
| `result.data.tenure_stats.shortest_tenure_formatted` | `string` | No | — | — |
| `result.data.work_history` | `array` | No | — | — |
| `result.data.work_history[].title` | `string` | No | — | — |
| `result.data.work_history[].company` | `string` | No | — | — |
| `result.data.work_history[].duration` | `string` | No | — | — |
| `result.data.work_history[].is_present` | `boolean` | No | — | — |
| `result.data.profile_found` | `boolean` | No | — | — |
| `result.data.profile_url` | `string` | No | — | — |
| `result.meta` | `object` | No | — | Additional response metadata (status, paging). |

<details>
  <summary>Show raw output schema</summary>

  ### Output JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Standard tool result payload.",
    "properties": {
      "data": {
        "type": "object",
        "description": "Provider response payload.",
        "properties": {
          "job_change_detected": {
            "type": "boolean",
            "description": "true only when status is JOB_CHANGE_DETECTED."
          },
          "status": {
            "type": "string",
            "description": "NO_CHANGE — the expected employer is a current role. JOB_CHANGE_DETECTED — a different primary employer is current, or the matched role has an explicit end date with nothing current, or the expected employer is absent from history while another primary employer is current. NEVER_WORKED_THERE — the expected employer is absent from history and no primary current role is listed. AMBIGUOUS_CURRENT_EMPLOYMENT — multiple substantive current roles; not safe to call. CURRENT_EMPLOYMENT_UNKNOWN — the expected employer matched but the role carries no dates; unknown, not a change. PROFILE_NOT_FOUND — the profile URL did not resolve; credits_consumed is 0.",
            "enum": [
              "NO_CHANGE",
              "JOB_CHANGE_DETECTED",
              "NEVER_WORKED_THERE",
              "AMBIGUOUS_CURRENT_EMPLOYMENT",
              "CURRENT_EMPLOYMENT_UNKNOWN",
              "PROFILE_NOT_FOUND"
            ]
          },
          "resolution_reason": {
            "type": "string",
            "description": "Why the status was chosen. PROFILE_NOT_FOUND accompanies status PROFILE_NOT_FOUND.",
            "enum": [
              "CURRENT_COMPANY_MATCHES_EXPECTED",
              "CURRENT_COMPANY_DIFFERS_FROM_EXPECTED",
              "EXPECTED_COMPANY_NOT_FOUND_IN_HISTORY",
              "NO_CURRENT_POSITION_FOUND",
              "NO_EXPERIENCE_HISTORY_FOUND",
              "MULTIPLE_CURRENT_POSITIONS_FOUND",
              "PROFILE_NOT_FOUND"
            ]
          },
          "summary": {
            "type": "string"
          },
          "employee_name": {
            "type": "string"
          },
          "expected_company": {
            "type": "string"
          },
          "current_company": {
            "type": "string"
          },
          "current_position": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "company": {
                "type": "string"
              },
              "start_date": {
                "type": "string"
              },
              "days_at_job": {
                "type": "integer"
              },
              "tenure_formatted": {
                "type": "string"
              },
              "is_current_position": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          },
          "tenure_stats": {
            "type": "object",
            "properties": {
              "average_tenure_months": {
                "type": "integer"
              },
              "average_tenure_formatted": {
                "type": "string"
              },
              "total_positions": {
                "type": "integer"
              },
              "longest_tenure_months": {
                "type": "integer"
              },
              "longest_tenure_formatted": {
                "type": "string"
              },
              "shortest_tenure_months": {
                "type": "integer"
              },
              "shortest_tenure_formatted": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "work_history": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "title": {
                  "type": "string"
                },
                "company": {
                  "type": "string"
                },
                "duration": {
                  "type": "string"
                },
                "is_present": {
                  "type": "boolean"
                }
              },
              "additionalProperties": false
            }
          },
          "profile_found": {
            "type": "boolean"
          },
          "profile_url": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "meta": {
        "type": "object",
        "description": "Additional response metadata (status, paging).",
        "additionalProperties": true
      }
    },
    "required": [
      "data"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Deepline cost

* Pricing model: `per_result` (per result).
* Estimated Deepline credits: `1.01` per pricing unit.

## Related documentation

* [Connect integrations](https://deepline.com/docs/integrations.md)
* [SDK V2 quickstart](https://deepline.com/docs/sdk-v2/quickstart.md)
* [SDK reference](https://deepline.com/docs/sdk-v2/sdk-reference.md)
* [Run tools across a CSV](https://deepline.com/docs/sdk-v2/batch-csv.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.