Linear + Mobile App Testing: Bidirectional Issue Sync

Engineering teams that use Linear love it for a reason. It is fast, opinionated, and designed for teams that want to move quickly. Sprint planning in Linear is clean. Issue tracking is frictionless. The keyboard shortcuts alone save hours over a sprint.

But here is where things break down: your developers live in Linear, and your QA process lives somewhere else. A tester finds a critical bug during a testing session. They log it in the testing tool. Now someone has to manually create a matching issue in Linear so the developer sees it. The developer fixes it and moves the Linear issue to "Done." Someone has to go back to the testing tool and update the status there too.

Multiply that by every bug, every status change, every priority update across an entire release cycle, and you have a significant amount of time spent on busywork that adds zero value.

TestApp.io integrates directly with Linear to eliminate this entirely. Bidirectional sync via webhooks keeps both tools in lockstep, in real time, without anyone manually bridging the gap.

The Old Way vs. The Connected Way

Let us be specific about what changes when you connect Linear and TestApp.io.

The Old Way (Manual)

  1. Tester finds a bug during a mobile app test session
  2. Tester logs it in the testing tool with screenshots and reproduction steps
  3. Tester copies the details and creates a matching Linear issue
  4. Developer picks up the issue in Linear, fixes the bug
  5. Developer moves the Linear issue to "Done"
  6. Someone (who?) updates the testing tool to reflect the fix
  7. Tester verifies the fix on a new build and updates both systems again

Every step that involves "copies the details" or "updates the other tool" is a failure point. Details get lost. Statuses drift. And nobody trusts either tool to have the current truth.

The Connected Way (Synced)

  1. Tester finds a bug during a mobile app test session
  2. Tester logs it in TestApp.io with screenshots and reproduction steps
  3. The issue automatically appears in Linear within seconds
  4. Developer picks up the issue in Linear, fixes the bug
  5. Developer moves the Linear issue to "Done"
  6. TestApp.io automatically updates the task status
  7. Tester sees the updated status and verifies on the next build

No copying. No pasting. No "hey, can you update the ticket" messages. Both tools always reflect the same reality.

Setting Up the Integration

The setup takes about five minutes. Here is the complete walkthrough.

Step 1: Initiate the OAuth Connection

In your TestApp.io dashboard, navigate to your version's settings and open the Integrations tab. Find the Linear integration card and click Connect.

This launches Linear's OAuth authorization flow. You will be asked to:

  1. Sign in to your Linear account (if not already authenticated)
  2. Select the Linear workspace you want to connect
  3. Review and approve the permissions TestApp.io is requesting

The permissions allow TestApp.io to read and write issues, comments, and team metadata in the workspace you select. It does not request admin-level access to your entire Linear organization.

Click Authorize, and you will be redirected back to TestApp.io with the connection established.

Step 2: Select Your Linear Team

Linear organizes work into teams, and TestApp.io needs to know which team's issues to sync with. After authorization, you will see a dropdown listing the teams in your connected workspace.

Select the team that manages your mobile app development. This creates a one-to-one link between your TestApp.io version and the Linear team.

A few considerations:

  • If you have separate Linear teams for iOS and Android, connect each to the corresponding TestApp.io version.
  • Changing the connected team later is possible, but historical sync data from the previous team does not migrate automatically.
  • The dropdown only shows teams the authorizing user belongs to. If you do not see a team, check your Linear membership.

Step 3: Configure Field Mappings

Linear and TestApp.io use different status and priority schemas. Field mappings tell the integration how to translate between them.

Status Mapping

Linear's default workflow statuses are Backlog, Todo, In Progress, In Review, and Done. TestApp.io has its own set of statuses tailored for QA workflows. You need to define the correspondence:

Linear StatusTestApp.io Status
BacklogOpen
TodoOpen
In ProgressIn Progress
In ReviewIn Review
DoneClosed
CancelledClosed

This mapping is bidirectional. Moving a task to "Closed" in TestApp.io transitions the Linear issue to "Done." Moving a Linear issue to "In Progress" updates the TestApp.io task accordingly.

If your Linear team uses custom statuses (and many do), map those as well. Every unmapped status becomes a potential sync gap.

Priority Mapping

Linear uses Urgent, High, Medium, Low, and No Priority. TestApp.io uses Blocker, Critical, High, Normal, and Low. Map them according to your team's understanding of severity:

Linear PriorityTestApp.io Priority
UrgentBlocker
HighCritical
MediumHigh
LowNormal
No PriorityLow

Get agreement from both your developers and testers on these mappings before finalizing. When a tester marks something as "Blocker," they need to know it shows up as "Urgent" in Linear, and the developer needs to treat it accordingly.

Step 4: Enable the Sync

With field mappings configured, the integration is ready. Webhook-based sync activates automatically. From this point forward:

  • New tasks created in TestApp.io that match the sync criteria appear in Linear
  • New issues created in Linear appear as tasks in TestApp.io
  • Status changes, priority changes, and other mapped field updates propagate in both directions
  • All sync events happen in near real-time via webhooks, not on a polling schedule

Importing Existing Linear Issues

If your Linear team already has a backlog of issues, you do not have to start from scratch. The import feature lets you pull existing Linear issues into TestApp.io.

Navigate to the integration's pull tasks option and select which issues to import. You can filter by status, assignee, label, or other criteria. Preview the import to verify the field mappings look right, then confirm.

Each imported issue becomes a synced TestApp.io task. Future changes to that issue in either system flow bidirectionally.

A practical approach: start by importing only issues in active statuses (Todo, In Progress). There is no need to import every closed issue from six months ago. You can always import more later.

Migrating Local Tasks to Linear

The opposite scenario is equally common. You have been using TestApp.io's built-in task management, and now you want those tasks visible in Linear so developers can work with them in their normal workflow.

The migration feature handles this:

  1. Select the TestApp.io tasks you want to migrate
  2. Configure how TestApp.io statuses should map to Linear statuses for this migration
  3. Review the preview and confirm

Migrated tasks are created as new issues in your Linear team with all the relevant details (title, description, priority, status). From the moment of migration, bidirectional sync is active for those tasks.

The original TestApp.io tasks are not deleted. They become synced tasks linked to their new Linear counterparts.

The Sync History: Your Audit Trail

Every sync event is logged and visible in the integration settings. The sync history records:

  • Direction — Linear to TestApp.io, or TestApp.io to Linear
  • Status — Success, failure, or retried
  • Timestamp — When the sync event occurred
  • Changed fields — What specifically was updated

This audit trail is critical for two scenarios:

Debugging sync issues: If a task's status does not match between the two tools, the sync history tells you exactly what happened. Maybe the sync failed due to a permissions issue. Maybe it succeeded but the field mapping produced an unexpected result. Either way, you have the data to diagnose the problem.

Compliance and accountability: For teams that need to demonstrate who changed what and when, the sync history provides a complete record of all automated changes. You can trace any field change back to its source system and timestamp.

Failed sync events can be retried directly from the history view, which is useful for transient errors like network timeouts.

Power Features

Beyond the core sync, there are several capabilities worth knowing about:

Enable/Disable Without Disconnecting

Need to pause sync temporarily? Maybe your team is doing a major sprint reorganization in Linear and you do not want a flood of sync events. Toggle the integration off without losing your configuration, mappings, or history. Toggle it back on when things stabilize, and sync resumes from where it left off.

Selective Sync

Not every task needs to live in both tools. You can control which tasks sync and which stay local. This is useful for internal QA tasks that developers do not need visibility into, or for Linear issues that are not relevant to the testing workflow.

Webhook Reliability

The integration uses webhooks for real-time sync rather than periodic polling. This means changes appear in seconds rather than minutes. Webhook deliveries that fail (due to network issues, temporary outages) are tracked in the sync history and can be retried.

Tips for Engineering Teams

Having worked with teams that run this integration in production, here are patterns that work well:

  • Let testers own TestApp.io, let developers own Linear. The integration exists so that each group stays in their preferred tool. Do not force testers into Linear or developers into TestApp.io. Let each team use what they are comfortable with, and let the sync handle the bridge.
  • Use Linear labels to categorize synced issues. Add a "QA" or "Mobile Testing" label in Linear to issues that originated from TestApp.io. This helps developers quickly identify testing-related issues on their board without cluttering their standard workflow views.
  • Review mappings when Linear workflows change. If your team adds custom statuses or modifies the workflow in Linear, update your field mappings immediately. Unmapped statuses cause sync events to fail silently.
  • Check sync history during standups. A 10-second glance at the sync history during your daily standup catches any failed syncs before they become stale. It is a small habit that prevents bigger problems.
  • Migrate gradually. If you are moving from local tasks to Linear-synced tasks, do it in batches. Migrate one sprint's worth of tasks, verify everything syncs correctly, and then continue. A bulk migration of hundreds of tasks can be hard to verify.
  • Communicate the priority mapping. Print or share the priority mapping table with your team. When a tester sets "Critical" in TestApp.io and a developer sees "High" in Linear, everyone should know that is the same severity level, not a discrepancy.

Getting Started

If your engineering team runs on Linear and your QA process involves mobile app distribution and testing, this integration eliminates the manual overhead of keeping both systems in sync. Setup takes about five minutes. The time savings compound with every sprint.

Connect your Linear workspace at portal.testapp.io and check the help center for detailed guides on field mapping configurations and advanced sync options.