Release RadarNative sync coming soon

Turn app reviews into Jira or GitHub issues

Bug reports in App Store and Google Play reviews belong in the tracker your engineers already use. Review Expert can send filtered reviews to Jira or GitHub Issues today through a webhook and a few lines of code. Native integrations are on the way.

Webhooks on Enterprise · 14-day free trial · cancel anytime

Where things stand

No native Jira or GitHub integration yet
There is no "Connect Jira" or "Connect GitHub" button in Review Expert today. If you need reviews in Jira or GitHub now, use a webhook as described below. If you'd rather wait for native sync, join the waitlist and tell us which tracker and plan (Jira Cloud, Data Center, GitHub.com, GHES) you use.

Build the webhook bridge

  1. 1

    Deploy a small HTTPS endpoint

    A serverless function is enough. Store a Jira API token or a GitHub token with issue write access as a secret.
  2. 2

    Add a webhook destination

    In Automation, add a Webhook destination with your URL. Filter it the same way as any destination, for example a maximum rating of 3 and keywords like crash, bug, login, since the update.
  3. 3

    Map the review to an issue

    For GitHub, call POST /repos/{owner}/{repo}/issues. For Jira Cloud, call POST /rest/api/3/issue (description in Atlassian Document Format) or /rest/api/2/issue (plain-text description) with your project key and issue type.
  4. 4

    De-duplicate

    Write review.id into the issue and skip reviews you've already filed. Optionally add a comment to an open issue instead of creating a new one when the complaint matches.

Example receiver for GitHub Issues

Illustrative sketch; adapt and test before useWebhook → GitHub issue
// Sketch of a receiver, e.g. a Next.js route handler.
// Keep the URL hard to guess and validate the payload.
export async function POST(req: Request) {
  const { event_type, review, property } = await req.json();
  if (event_type !== "new_review" || !review?.id) {
    return new Response(null, { status: 204 });
  }

  // GitHub: POST /repos/{owner}/{repo}/issues
  const res = await fetch(
    `https://api.github.com/repos/${process.env.GITHUB_REPO}/issues`,
    {
      method: "POST",
      headers: {
        Authorization: `Bearer ${process.env.GITHUB_TOKEN}`,
        Accept: "application/vnd.github+json",
      },
      body: JSON.stringify({
        title: `[${review.rating}★] ${property.name}: ${(review.content ?? "").slice(0, 70)}`,
        body: [
          review.content ?? "(no text)",
          `Store: ${property.type} · Review: ${review.url ?? "n/a"}`,
          `review-expert-id: ${review.id}`,
        ].join("\n\n"),
        labels: ["app-review"],
      }),
    },
  );
  return new Response(null, { status: res.ok ? 200 : 502 });
}

The payload fields (review.id, review.rating, review.content, review.url, property.name, property.type) are documented on the webhooks page. Fields can be null and new fields may be added, so write the receiver defensively. The payload doesn't include the app version today.

Tips

Respond fast, work later
Return 2xx once the review is queued, then call Jira or GitHub in a background job.
Label everything
An app-review label (plus store and app) makes it easy to triage and report on review-sourced bugs.

Frequently asked questions

Get review bugs into your tracker

Webhooks, Linear, Slack, Teams and Zendesk are all on Enterprise. Try it free for 14 days, or join the waitlist for native Jira and GitHub.