Linear Email to Webhook Integration

Route inbound emails directly into Linear as structured JSON. Linear is a modern issue tracking tool built for speed, with a keyboard-first interface and a clean GraphQL API popular with engineering teams. JsonHook bridges the gap between your inbox and Linear — no custom server required.

Table of Contents
  1. Why Connect Linear to Inbound Email
  2. Setting Up Linear with JsonHook
  3. Example Workflow: When an engineer submits a bug report by email, create a Linear issue with auto-assigned priority
  4. Payload Mapping for Linear
  5. Best Practices for Linear Email Integration

Why Connect Linear to Inbound Email

Project work is often coordinated across email and tools like Linear. Client feedback, bug reports, and approval requests arrive by email, but your team tracks work in Linear. JsonHook bridges this gap by converting inbound emails into structured data that Linear can use to create tasks, update records, and notify team members automatically.

Connecting your inbound email to Linear through JsonHook unlocks a range of high-value automation scenarios:

  • Convert client feedback emails into actionable tasks automatically
  • Create bug reports in your backlog from automated error-notification emails
  • Assign tasks to team members based on the recipient or subject of an email
  • Update task status when an approval email is received from a stakeholder
  • Attach incoming email content to the relevant project record for full context

Linear supports Linear GraphQL API (Issue mutation), which makes it a natural target for JsonHook's outbound POST requests. Every email that hits your JsonHook address is parsed within milliseconds and delivered to Linear as a clean JSON object — no polling, no manual export, no middleware server to maintain.

Setting Up Linear with JsonHook

The following steps walk you through connecting JsonHook to Linear. The entire setup typically takes under ten minutes.

  1. Step 1: Generate a Linear API key from SettingsAPIPersonal API Keys.
  2. Step 2: In n8n or Make, create a workflow triggered by the JsonHook webhook URL. Add an HTTP Request action targeting https://api.linear.app/graphql with the Authorization header set to your API key.
  3. Step 3: In JsonHook, create an inbound address and point it at the automation webhook URL.
  4. Step 4: Map the GraphQL mutation for issue creation: set title from subject, description from text, and teamId to your target Linear team. Use the Linear issueCreate mutation: mutation { issueCreate(input: { teamId: "TEAM_ID", title: "...", description: "..." }) { issue { id } } }.

Once the connection is active, every email sent to your JsonHook address will be automatically parsed and forwarded to Linear. You can test the integration by sending a plain-text email to your JsonHook address and verifying that the payload appears in Linear within a few seconds.

JsonHook supports Linear GraphQL API (Issue mutation) on the Linear side, so no additional configuration is needed in Linear beyond the steps above. If Linear requires header-based authentication for incoming webhooks, add the required headers in the JsonHook endpoint configuration under Advanced Settings.

Automate Linear with Email Webhooks

Free tier: 100 emails/month. Set up in minutes.

Get Free API Key

Example Workflow: When an engineer submits a bug report by email, create a Linear issue with auto-assigned priority

This walkthrough demonstrates one concrete way to use JsonHook with Linear. The scenario: When an engineer submits a bug report by email, create a Linear issue with auto-assigned priority.

When an email matching this scenario arrives, JsonHook parses the raw SMTP message and constructs the following JSON payload before POSTing it to your Linear endpoint:

{
  "messageId": "",
  "from": {
    "name": "Jane Smith",
    "address": "[email protected]"
  },
  "to": [
    { "address": "[email protected]" }
  ],
  "subject": "When an engineer submits a bug report by email, create a Linear issue with auto-assigned priority",
  "text": "Hi, I need help with my account. Please contact me at your earliest convenience.",
  "html": "

Hi, I need help with my account...

", "date": "2026-03-15T10:32:00.000Z", "attachments": [], "headers": { "x-priority": "1" } }

Linear issueCreate input: subjecttitle, textdescription (Markdown supported), from.address → look up Linear member by email for assigneeId. Parse urgency keywords from subject (e.g., 'critical', 'urgent') to set priority (1=Urgent, 2=High, 3=Medium, 4=Low).

Once Linear receives this payload, it can execute any downstream action — whether that is posting a notification, creating a record, updating a field, or triggering an entire multi-step workflow. The key advantage is that the data arrives as structured JSON, so Linear never needs to parse raw email text or deal with MIME encoding.

Payload Mapping for Linear

JsonHook delivers a consistent JSON schema for every parsed email. The table below shows which JsonHook fields map to the equivalent fields in Linear. Use this as a reference when configuring your Linear Linear GraphQL API (Issue mutation).

JsonHook Field Description Linear Field
from.addressSender email addressSender / Contact email
from.nameSender display nameSender / Contact name
subjectEmail subject lineTitle / Subject / Name
textPlain-text email bodyDescription / Body / Message
htmlHTML email bodyRich text field / Notes
dateTimestamp of receipt (ISO 8601)Created date / Received at
attachments[n].filenameAttachment filenameFile name / Attachment label
attachments[n].contentAttachment content (base64)File content / Binary field
headers.*Raw email headersMetadata / Custom properties
messageIdUnique message identifierExternal ID / Deduplication key

Not every field will be present in every email. Always check for null or missing values before mapping to required fields in Linear. For text-only emails, html will be empty; for HTML-only emails, text may be empty or auto-generated from the HTML. The attachments array will be an empty array when no files are attached.

Best Practices for Linear Email Integration

Following these best practices will make your Linear email integration more reliable, easier to debug, and simpler to scale as your email volume grows.

  • Use dedicated addresses per workflow. Create a separate JsonHook inbound address for each distinct Linear workflow you want to trigger. This makes routing explicit and avoids a single endpoint becoming a bottleneck for all email types.
  • Validate the payload before acting. In Linear, add a conditional check at the start of your workflow to confirm that required fields like from.address and subject are present and non-empty before executing downstream actions.
  • Test with real emails first. Use JsonHook's delivery log to inspect the raw JSON payload before wiring up Linear. Confirm that all the fields you plan to map are actually populated by your email source.
  • Handle errors gracefully. Configure Linear to catch webhook delivery failures and send an alert. JsonHook will retry failed deliveries, but your Linear endpoint should return a 2xx status promptly to acknowledge receipt.
  • Keep secrets out of email content. Avoid routing emails that contain passwords, API keys, or PII through workflows unless you have appropriate data-handling controls configured in Linear. Use JsonHook's HTTPS delivery to protect data in transit.

Frequently Asked Questions

Can I send emails to Linear via webhook?
Yes. JsonHook provides a unique inbound email address for each webhook endpoint you configure. When an email is delivered to that address, JsonHook parses the message — extracting the sender, subject, body text, HTML body, and any attachments — and immediately POSTs the result as a structured JSON payload to your Linear Linear GraphQL API (Issue mutation). From there, Linear can trigger any downstream action you have configured.
Do I need to code to connect JsonHook to Linear?
Minimal technical knowledge is needed. Linear accepts webhook payloads through its Linear GraphQL API (Issue mutation). You paste the URL, configure the field mappings in the UI, and JsonHook takes care of the rest. No custom code is necessary for standard email-to-webhook routing.
How do I filter which emails go to Linear?
JsonHook uses address-based routing. Create a dedicated inbound address such as [email protected] and point it exclusively at your Linear webhook URL. You can also create multiple addresses for different email categories — one for support, one for sales leads, one for order notifications — each routed to a different Linear workflow or channel. If Linear supports conditional logic, you can add further filtering on the subject, from, or any custom field in the parsed JSON payload.
Does Linear support Markdown in issue descriptions created via API?
Yes. Linear renders Markdown in issue descriptions. You can format the email body with Markdown before sending it as the description field — for example, wrapping code blocks in triple backticks or using bold headers to structure longer email bodies.
Can I set Linear labels based on email subject keywords?
Yes. First query the Linear issueLabels API to retrieve your label IDs. Then in your automation workflow, use a conditional step to check for keywords in subject and add the matching label ID to the labelIds array in the issueCreate mutation.