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

# Linear Integration

> Sync Rootly incidents to Linear issues for seamless issue tracking, follow-up management, and engineering context from incident response to delivery.

Rootly's Linear integration connects your incident workflow to Linear. When an incident is declared, a Linear issue is automatically created. As the incident progresses, the issue stays in sync. When resolved, the Linear issue moves to Done.

Follow-up action items become Linear sub-issues under the parent incident issue, keeping post-incident work organized in one place.

## What You Can Do

<CardGroup cols={2}>
  <Card title="Incidents → Linear Issues" icon="arrow-right">
    Automatically create a Linear issue when an incident is declared, with title, description, severity, and assignee populated from incident data
  </Card>

  <Card title="Action Items → Sub-Issues" icon="list-tree">
    Every follow-up action item created during an incident becomes a Linear sub-issue under the parent incident issue
  </Card>

  <Card title="Status Sync" icon="rotate">
    When an incident resolves in Rootly, the linked Linear issue automatically moves to Done
  </Card>

  <Card title="On-Call → Triage" icon="user-clock">
    Connect Rootly on-call schedules to Linear's Triage Responsibility so new issues auto-assign to whoever is on call
  </Card>
</CardGroup>

## How It Works

<Steps>
  <Step title="Incident declared">
    An incident is created in Rootly, either manually or via an alert from PagerDuty, Datadog, or another source.
  </Step>

  <Step title="Workflow runs">
    Your configured workflow fires and creates a Linear issue in the specified team and project, with fields populated from incident data.
  </Step>

  <Step title="Issue linked">
    The Linear issue URL is automatically attached to the incident in Rootly. Teams can navigate between both systems.
  </Step>

  <Step title="Updates flow">
    As the incident progresses, action items become sub-issues. When the incident resolves, the Linear issue status updates automatically.
  </Step>
</Steps>

Connecting Linear to Rootly is a one-time OAuth setup that takes a few minutes. Once complete, Rootly can create and update Linear issues on your behalf as incidents move through their lifecycle — no manual copy-pasting between tools.

<Frame>
  <iframe src="https://www.loom.com/embed/67c8a1aaf8f94d09862f97431a957e11?sid=db43a871-892d-4e95-95a4-531967410f42" frameborder="0" allowfullscreen width="100%" height="400px" />
</Frame>

## Before You Begin

This setup involves authorizing Rootly inside your Linear workspace. Make sure you have the right access in both systems before starting — the OAuth flow will fail silently if your Linear account doesn't have the correct permissions.

<Warning>
  You need:

  * **Rootly:** Admin or Owner role to create and manage integrations
  * **Linear:** Membership in at least one team with write permissions — read-only roles cannot create issues
</Warning>

## Installation

The connection is established through Linear's OAuth flow — Rootly redirects you to Linear, you approve access, and you're brought back to Rootly with the integration active. You won't need to handle any API keys or tokens manually.

<Steps>
  <Step title="Open Rootly Integrations">
    Navigate to **Configuration → Integrations** in your Rootly dashboard. This is where all third-party integrations are managed.

    <Frame>
      <img alt="Rootly sidebar showing Configuration and Integrations menu" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/installation/image-1.1.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=af4c63d3119f3fe87707a1c1651a6b02" width="331" height="509" data-path="images/integrations/linear/installation/image-1.1.png" />
    </Frame>
  </Step>

  <Step title="Find Linear and click Setup">
    Search for **Linear** in the integrations catalog and click **Setup** to begin the OAuth authorization flow.

    <Frame>
      <img alt="Integrations page with Linear search result" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/installation/image-1.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=3ad74e357ad950a0b7d0eba978e9a76e" width="504" height="393" data-path="images/integrations/linear/installation/image-1.png" />
    </Frame>
  </Step>

  <Step title="Authorize Rootly in Linear">
    You'll be redirected to Linear's authorization page. Review the requested permissions — Rootly needs write access to create and update issues on your behalf. Click **Allow Access** to proceed.

    <Frame>
      <img alt="Linear OAuth authorization page" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/installation/image-2.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=8ac53c3dbe1d06536251a137f53d0c08" width="552" height="554" data-path="images/integrations/linear/installation/image-2.png" />
    </Frame>
  </Step>

  <Step title="Select your workspace">
    If you belong to multiple Linear workspaces, choose the one you want to connect to Rootly and click **Authorize**. You can only connect one workspace per Rootly account.

    <Frame>
      <img alt="Linear workspace selection screen" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/installation/image-3.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=72359f17101e1b87760387709461277a" width="552" height="554" data-path="images/integrations/linear/installation/image-3.png" />
    </Frame>
  </Step>

  <Step title="Confirm the connection">
    You'll be redirected back to Rootly and see a confirmation: *"Great! We've added that Linear account to your Rootly account!"* The integration is now active.

    <Frame>
      <img alt="Rootly confirmation showing Linear connected successfully" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/installation/image-4.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=d46875e5e258bdc3d7ac3f756cbea90e" width="938" height="459" data-path="images/integrations/linear/installation/image-4.png" />
    </Frame>
  </Step>
</Steps>

<Tip>
  Linear is now connected. The [workflow actions](#workflow-actions) below configure automated issue creation for your incidents.
</Tip>

## Verify the Connection

Once connected, it's worth confirming the integration is active on both sides before building workflows.

**In Rootly:** The integration should show **Connected** status on the Integrations page.

**In Linear:** Open your workspace menu, go to **Settings → Integrations**, and confirm Rootly appears in your connected apps list. If it's missing, the OAuth flow may not have completed successfully — try reconnecting.

<Frame>
  <img alt="Linear workspace settings menu" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/installation/image-5.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=04b3ec98a599f8bd0ba2ca442a034ae6" width="487" height="243" data-path="images/integrations/linear/installation/image-5.png" />
</Frame>

<Frame>
  <img alt="Linear integrations list showing Rootly connected" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/installation/image-6.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=48fe983d02a3cf08b70fe1cd45dc4907" width="246" height="231" data-path="images/integrations/linear/installation/image-6.png" />
</Frame>

<Frame>
  <img alt="Rootly listed as a connected app in Linear" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/installation/image-7.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=41852993f76cce0290fd3b6c60bf9e17" width="692" height="349" data-path="images/integrations/linear/installation/image-7.png" />
</Frame>

Once Linear is connected, you configure workflows that automatically create and update Linear issues as incidents move through their lifecycle. This page covers the three main workflow actions — creating issues, updating them, and creating sub-issues for action items — as well as setting up Triage Responsibility to keep your Linear queue synced with whoever is on call.

## Workflow Actions

### Create a Linear Issue

This is the core workflow: whenever an incident is declared in Rootly, a corresponding Linear issue is created automatically with incident data populated into the fields you configure.

<Steps>
  <Step title="Open Workflows and create a new workflow">
    Go to **Rootly → Workflows → Create Workflow**.

    <Frame>
      <img alt="Rootly Workflows page" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-1.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=fd571652b39bbc356922ab669e86d8ec" width="186" height="491" data-path="images/integrations/linear/workflows/image-1.png" />
    </Frame>

    <Frame>
      <img alt="Create Workflow button" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-2.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=ff3ca4ecb0e89ad177d35ddbae2d7a5e" width="1165" height="578" data-path="images/integrations/linear/workflows/image-2.png" />
    </Frame>
  </Step>

  <Step title="Choose a workflow type">
    Select the event type that should trigger this workflow — for example, **Incident**, **Retrospective**, or **Pulse**.

    <Frame>
      <img alt="Workflow type selection showing Incident, Retrospective, and Pulse options" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-3.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=66856627743afaf6462232d22412b3cd" width="1365" height="630" data-path="images/integrations/linear/workflows/image-3.png" />
    </Frame>
  </Step>

  <Step title="Configure triggers">
    Triggers define when this workflow fires. Choose the event that should kick off Linear issue creation.

    <Frame>
      <img alt="Workflow trigger configuration options" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-triggers.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=d068ff78ad702841b5f26a43b8b10c82" width="621" height="305" data-path="images/integrations/linear/workflows/image-triggers.png" />
    </Frame>

    | Trigger                         | When It Fires                            |
    | ------------------------------- | ---------------------------------------- |
    | **Incident Created**            | A new incident opens                     |
    | **Incident Updated**            | Severity, status, or other fields change |
    | **Incident Commander Assigned** | Someone takes ownership of the incident  |
    | **Manual Trigger**              | Run on demand from the Rootly UI         |
  </Step>

  <Step title="Add conditions (optional)">
    Conditions let you filter which incidents trigger the workflow — for example, only SEV-1 incidents, only specific teams, or only production environments.

    <Frame>
      <img alt="Workflow conditions panel showing filter options" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-condition.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=fd22712ae704cd8db60c406457c21a00" width="626" height="334" data-path="images/integrations/linear/workflows/image-condition.png" />
    </Frame>
  </Step>

  <Step title="Add a Linear action">
    Click **Add Action**, search for **Linear**, and select **Create Linear Issue**.

    <Frame>
      <img alt="Add Action button with Linear search" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-4.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=ef71434d2e9cd8e24c26da9ab464b77e" width="677" height="221" data-path="images/integrations/linear/workflows/image-4.png" />
    </Frame>

    <Frame>
      <img alt="Linear action picker showing Create Linear Issue option" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-5.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=d2f64b294b2b8b98b3af8c20a04128c9" width="893" height="525" data-path="images/integrations/linear/workflows/image-5.png" />
    </Frame>

    <Frame>
      <img alt="Create Linear Issue action configuration panel" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-6.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=e2dd804a146a554cbbfe22f3767b0e71" width="446" height="536" data-path="images/integrations/linear/workflows/image-6.png" />
    </Frame>
  </Step>

  <Step title="Configure the action fields">
    Fill in the fields to control how the Linear issue is created:

    <ParamField body="Team" type="required">
      The Linear team where the issue will be created.
    </ParamField>

    <ParamField body="State" type="string">
      The initial workflow state for the issue — for example, **Todo** or **In Progress**.
    </ParamField>

    <ParamField body="Project" type="string">
      Optional. Associate the issue with a specific Linear project.
    </ParamField>

    <ParamField body="Labels" type="array">
      Add labels to the issue for filtering and triage.
    </ParamField>

    <ParamField body="Title" type="string">
      The issue title. Supports Liquid — use `{{ incident.title }}` to default to the incident title.
    </ParamField>

    <ParamField body="Description" type="string">
      The issue body. Supports Liquid — use `{{ incident.summary }}` to populate with the incident summary.
    </ParamField>

    <ParamField body="Priority" type="string">
      The issue priority. Select **Auto** to automatically map incident severity to a corresponding Linear priority, or choose **Urgent**, **High**, **Medium**, or **Low** manually.
    </ParamField>

    <ParamField body="Assignee" type="string">
      Email address of the Linear user to assign the issue to.
    </ParamField>

    <ParamField body="Custom fields mapping" type="string">
      Optional. Map Linear custom fields using JSON. Values support Liquid, so you can populate Linear fields from Rootly context — in an [action item workflow](/workflows/action-item-workflows), reference the follow-up's [custom field values](/incidents/action-items/action-item-custom-fields):

      ```json theme={null}
      {"customFieldKey": "{{ action_item.custom_fields_by_slug.your-field-slug }}"}
      ```
    </ParamField>
  </Step>

  <Step title="Save the workflow">
    Click **Add**, give your workflow a name, and click **Create Workflow**.
  </Step>
</Steps>

### Update a Linear Issue

Use the **Update Linear Issue** action to keep the Linear issue in sync as the incident progresses — for example, moving it to Done when the incident resolves, or updating priority when severity changes.

<Warning>
  Create a **separate workflow** for updates. Do not add the Update action to your Create workflow — they need to trigger on different events.
</Warning>

Configure the action with:

<ParamField body="Linear Issue ID" type="string">
  Use `{{ incident.linear_issue_id }}` to reference the issue that was created when the incident was declared.
</ParamField>

<ParamField body="Custom fields mapping" type="string">
  Optional. JSON mapping of Linear custom fields, with Liquid support — same format as on the Create Linear Issue action.
</ParamField>

Common use cases:

* Move to **Done** when the incident is resolved
* Update **priority** when severity escalates
* Change **assignee** as ownership transfers
* Sync a follow-up's [custom field values](/incidents/action-items/action-item-custom-fields) into Linear custom fields (in action item workflows, via `{{ action_item.custom_fields_by_slug.your-field-slug }}`)

### Create Linear Sub-Issues

To track action items as Linear sub-issues, create a separate workflow triggered by **Action Item Created** and use the **Create Linear Sub-Issue** action.

<ParamField body="Parent Issue" type="string">
  Use `{{ incident.linear_issue_id }}` to nest the sub-issue under the parent incident issue.
</ParamField>

<ParamField body="Title" type="string">
  Use `{{ action_item.summary }}` to populate the sub-issue title from the action item.
</ParamField>

The Create Linear Sub-Issue action also supports the **Custom fields mapping** input described above, so sub-issues can carry the action item's [custom field values](/incidents/action-items/action-item-custom-fields) into Linear.

This keeps all follow-up work organized under the parent incident issue in Linear.

***

### Triage Responsibility

Connect Linear's [Triage Responsibility](https://linear.app/docs/triage#triage-responsibility) feature to your Rootly on-call schedules so new Linear issues are automatically assigned to whoever is currently on call. This keeps your triage queue aligned with your incident response rotation.

<Steps>
  <Step title="Create a schedule in Rootly">
    Go to **Schedules** and click **Create Schedule**.

    <Frame>
      <img alt="Rootly Schedules page" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-7.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=840735b3d19ef7c0d410631303a2d552" width="432" height="527" data-path="images/integrations/linear/workflows/image-7.png" />
    </Frame>

    <Frame>
      <img alt="Create Schedule button" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-8.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=5487a813cb5eb7b32191467b1eb812ea" width="1172" height="407" data-path="images/integrations/linear/workflows/image-8.png" />
    </Frame>
  </Step>

  <Step title="Enable Linear sync on the schedule">
    In the **Integrations** tab, toggle on **Sync with Linear**.

    <Frame>
      <img alt="Integrations tab in schedule creation" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-9.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=5c754686d7416cbd47220ec91de23121" width="1174" height="438" data-path="images/integrations/linear/workflows/image-9.png" />
    </Frame>

    <Frame>
      <img alt="Sync with Linear toggle enabled" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-10.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=ddfceafa66c801f0607dfdd37d9f903c" width="420" height="188" data-path="images/integrations/linear/workflows/image-10.png" />
    </Frame>
  </Step>

  <Step title="Configure and save the schedule">
    Give the schedule a name, add members, and click **Save**.

    <Frame>
      <img alt="Schedule name and members configuration" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-11.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=f56632e20c259a90abea913143e3641a" width="311" height="401" data-path="images/integrations/linear/workflows/image-11.png" />
    </Frame>

    <Frame>
      <img alt="Add members to the schedule" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-12.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=f718bd4eeffa9fd3e3124aa34d9e46cb" width="274" height="551" data-path="images/integrations/linear/workflows/image-12.png" />
    </Frame>
  </Step>

  <Step title="Open your team settings in Linear">
    In Linear, navigate to **Settings → Teams** and select the team you want to configure.

    <Frame>
      <img alt="Linear Settings menu" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-12.1.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=01d0c9cb8d8f6e19b754f5ccb8d1b886" width="537" height="257" data-path="images/integrations/linear/workflows/image-12.1.png" />
    </Frame>

    <Frame>
      <img alt="Linear Teams section in administration" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-13.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=c29916165d0c09485045d0ed73518ada" width="236" height="276" data-path="images/integrations/linear/workflows/image-13.png" />
    </Frame>

    <Frame>
      <img alt="Team selection in Linear settings" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-14.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=c5c504b390cacbe50c0b9d73667b72cb" width="1121" height="222" data-path="images/integrations/linear/workflows/image-14.png" />
    </Frame>
  </Step>

  <Step title="Set Triage Responsibility to your Rootly schedule">
    Under **Workflow → Triage**, find **Triage responsibility** and select **Use schedule**. Choose the Rootly schedule you just created.

    <Frame>
      <img alt="Workflow Triage settings in Linear" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-15.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=2584e2a3bab641dc5fecabe065b4fb9c" width="694" height="291" data-path="images/integrations/linear/workflows/image-15.png" />
    </Frame>

    <Frame>
      <img alt="Triage responsibility assignment settings" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-16.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=07265e3a5ca9fbae3a5888b38c9a9b53" width="685" height="193" data-path="images/integrations/linear/workflows/image-16.png" />
    </Frame>

    <Frame>
      <img alt="Rootly schedule selected for triage responsibility" src="https://mintcdn.com/rootly/OenEeqU87ULdARbO/images/integrations/linear/workflows/image-17.png?fit=max&auto=format&n=OenEeqU87ULdARbO&q=85&s=98df7f81c9e7e70ff927d34b5e70f18e" width="669" height="301" data-path="images/integrations/linear/workflows/image-17.png" />
    </Frame>
  </Step>
</Steps>

<Tip>
  New Linear issues in triage will now be automatically assigned to whoever is on call in Rootly — no manual triage queue management needed.
</Tip>

## Troubleshooting

<AccordionGroup>
  <Accordion title="Rootly not appearing in Linear integrations" icon="circle-xmark">
    Confirm you completed the OAuth flow and granted Rootly access to your workspace. In Linear, go to **Settings → Integrations** and verify Rootly is listed and enabled. If it's missing or showing an error, disconnect the integration in Rootly and reconnect from scratch — the OAuth token may have expired or been revoked.
  </Accordion>

  <Accordion title="No teams or projects available during setup" icon="triangle-exclamation">
    You must be a member of at least one Linear team with write permissions — read-only roles won't allow issue creation. If your workspace uses restricted teams, a Linear admin needs to add you before you can proceed. After your permissions are updated, restart the authorization flow so Linear returns the correct team list.
  </Accordion>
</AccordionGroup>

***

## Uninstall

To remove the Linear integration, go to **Configuration → Integrations**, find **Linear**, and click the **Connected** button to reveal the disconnect option.

<Frame>
  <img src="https://mintcdn.com/rootly/QMD-dNqeYW4BA9dg/images/integrations/common/uninstall-connected.png?fit=max&auto=format&n=QMD-dNqeYW4BA9dg&q=85&s=dbb790e2576c8969bba96bc26c95265f" alt="Click the Connected button to reveal the Disconnect option" width="319" height="188" data-path="images/integrations/common/uninstall-connected.png" />
</Frame>

<Warning>
  Disconnecting stops all Linear-related workflows from running. Existing Linear issues created by Rootly are not affected.
</Warning>
