External Tool Integration
Connect BetaHub with your project management and development tools for streamlined workflows.
Overview
BetaHub integrates with popular project and task management tools to bridge the gap between bug reporting and development workflows. Send entries from BetaHub directly to your preferred project management system.
Two-Way Sync Available for Jira Cloud: Status and priority changes made in Jira Cloud are automatically synced back to BetaHub when incoming sync is enabled. See Incoming Sync (Two-Way) for setup details. Other integrations currently support one-way sync from BetaHub to external systems.
Supported Platforms
Project Management Tools
- Jira Cloud - Atlassian’s cloud-hosted issue tracking and project management
- Jira Server - Self-hosted Atlassian Jira (on-premise deployments)
- Asana - Team collaboration and task management
- Monday.com - Work operating system and project tracking
- Notion - All-in-one workspace with databases
- ClickUp - Project management and productivity platform
- Fibery - Work management platform with custom databases
- Linear - Issue tracking and project management for software teams
Development Platforms
- GitHub - Code repository with integrated issue tracking
- GitLab - Code repository with integrated issue tracking (gitlab.com and self-hosted)
- Redmine - Open-source project management
Custom Integrations
- API-based - Any system with REST API support
- Webhooks - Real-time notifications to external services (Comprehensive Webhooks Guide)
Need integration with a different tool? Contact us at hello@betahub.io to discuss your requirements.
Setting Up Integrations
Initial Setup Process
- Access Integration Settings
- Navigate to your project page in BetaHub
- Select Settings from the left sidebar
- Click on Integrations
- Choose Platform
- Select your desired integration (e.g., “Connect with Jira”)
- Follow the connection wizard’s authentication steps
- Configure Authentication
- Provide API credentials or complete OAuth flow
- Test connection to verify access
- Map Fields
- Configure how BetaHub fields translate to external fields
- Set default values and dynamic expressions
- Test with sample data
Platform-Specific Setup
Jira Cloud Integration
Prerequisites:
- Jira Cloud instance (*.atlassian.net)
- Admin access to create API tokens
- Project permissions for issue creation
Authentication Options:
- OAuth2 (recommended) — Click “Connect with Jira OAuth2” for a seamless setup. OAuth2 also enables one-click webhook auto-registration for incoming sync.
- Basic Auth — Provide your email and an API token. Generate one at Account Settings → Security → API tokens.
Setup Steps:
- Choose authentication method (OAuth2 or Basic Auth)
- Provide Jira Cloud URL, email, and API token (for Basic Auth) or complete OAuth flow
- Select target project and issue type
- Map BetaHub fields to Jira fields
- Optionally enable incoming sync to receive status and priority updates back from Jira
Common Field Mappings:
- Summary ← Bug title
- Description ← Bug description + steps to reproduce
- Priority ← BetaHub priority level
- Labels ← BetaHub tags
Jira Server Integration
Prerequisites:
- Self-hosted Jira Server or Data Center instance
- OAuth2 application configured in Jira
- Project permissions for issue creation
Setup Steps:
- Configure OAuth2 application in Jira Server administration
- Complete OAuth2 authentication flow in BetaHub
- Select target project and issue type
- Map BetaHub fields to Jira fields
Common Field Mappings:
- Summary ← Bug title
- Description ← Bug description + steps to reproduce
- Priority ← BetaHub priority level
- Labels ← BetaHub tags
GitHub Integration
Prerequisites:
- GitHub repository access
- Personal access token with repository permissions
Setup Steps:
- Generate personal access token on GitHub
- Provide repository owner and name
- Configure issue templates and labels
- Map fields to GitHub issue format
Common Field Mappings:
- Title ← Bug title
- Body ← Formatted description with links
- Labels ← BetaHub tags and priority
- Assignees ← Project developers
GitLab Integration
Prerequisites:
- GitLab account (gitlab.com or self-hosted instance)
- For gitlab.com: Use OAuth2 authentication (recommended)
- For self-hosted: Personal Access Token with
apiscope
Setup Steps (gitlab.com - OAuth2):
- Click “Connect with GitLab” button
- Authorize BetaHub in GitLab OAuth flow
- Select target GitLab project
- Configure field mappings
Setup Steps (Self-hosted or PAT):
- Enter your GitLab instance URL (leave blank for gitlab.com)
- Generate Personal Access Token with
apiscope in GitLab (User Settings → Access Tokens) - Enter the token and click “Connect with Token”
- Select target GitLab project
- Configure field mappings
Common Field Mappings:
- Title ← Bug title
- Description ← Formatted description with links
- Labels ← BetaHub tags (labels must exist in GitLab project first)
Features:
- Attachments (screenshots, videos, logs) are automatically uploaded to GitLab
- Supports both gitlab.com and self-hosted GitLab instances
Asana Integration
Prerequisites:
- Asana workspace access
- API token or OAuth application
Setup Steps:
- Authenticate with Asana account
- Select workspace and project
- Configure task fields and custom fields
- Set up automatic assignee rules
Common Field Mappings:
- Name ← Bug title
- Notes ← Detailed description
- Priority ← Asana priority levels
- Tags ← BetaHub categories
ClickUp Integration
Prerequisites:
- ClickUp workspace access
- API token from ClickUp settings
Setup Steps:
- Generate API token in ClickUp (Settings → Apps → API)
- Provide API token to BetaHub
- Select workspace, space, and list
- Map BetaHub fields to ClickUp task fields
Common Field Mappings:
- Name ← Bug title
- Description ← Detailed description
- Priority ← ClickUp priority levels
- Tags ← BetaHub tags
Fibery Integration
Prerequisites:
- Fibery workspace access
- API key from Fibery settings
Setup Steps:
- Generate API key in Fibery (Settings → API Keys)
- Provide API key to BetaHub
- Select space and database type
- Map BetaHub fields to Fibery entity fields
Common Field Mappings:
- Name ← Bug title
- Description ← Detailed description
- State ← BetaHub status
- Custom fields ← BetaHub custom fields
Linear Integration
Prerequisites:
- Linear account with access to the target team
- API key with write permissions (Settings → API → Personal API Keys in Linear)
Setup Steps:
- Generate a personal API key in Linear (Settings → API → Personal API Keys)
- Enter the API key in BetaHub and save — BetaHub verifies the connection automatically
- Select the target Linear team from the dropdown
- Map BetaHub fields to Linear issue fields
- Optionally enable auto-push to send new bug reports to Linear automatically
Common Field Mappings:
| Linear Field | BetaHub Source | Notes |
|---|---|---|
| Title | Bug title | Required |
| Description | Bug description | Supports Markdown |
| Priority | Priority level | Maps to Linear’s No Priority, Urgent, High, Medium, Low |
| Status | Bug status | Maps to your team’s workflow states (e.g., Triage, In Progress, Done) |
| Labels | Tags | Must match existing labels in your Linear team |
| Assignee | Team member | Maps to Linear team members |
| Estimate | Estimate or custom field | Numeric value for story points |
| Due Date | Due date | Date format (YYYY-MM-DD) |
Features:
- Attachments (screenshots, videos, log files, and other binary files) are automatically uploaded to Linear alongside the issue
- Supports both manual push and automatic push via background jobs
- Subsequent pushes update the existing Linear issue instead of creating duplicates
Field Mapping Configuration
Mapping Modes
BetaHub supports four field mapping modes:
| Mode | Description | Use Case | Example |
|---|---|---|---|
| Not Mapped | Field is skipped | Irrelevant fields | Internal IDs |
| Constant Value | Fixed value used | Default categories | Priority: “High” |
| Map From Field | Direct field mapping | Simple translations | Title → Summary |
| Dynamic Expression | Template-based | Rich formatting | Description with links |
Available Fields: When mapping fields, you can choose from standard fields (title, description, priority, etc.) and your custom fields. Custom fields appear with human-readable identifiers like custom_field_platform.
Dynamic Expression Examples
Dynamic expressions use triple braces {{{ field_name }}} to insert values from BetaHub entries. The expression engine automatically resolves field names without requiring a namespace prefix.
Rich Description Template:
# {{{ title }}}
**Reported:** {{{ created_at }}}
**Version:** {{{ version }}}
## Description
{{{ description }}}
## Steps to Reproduce
{{{ steps_to_reproduce }}}
## Device Information
{{{ device }}}
## BetaHub Link
[View in BetaHub]({{{ issue_url }}})
Formatted Title:
[{{{ priority }}}] {{{ title }}}
Tag Combination:
{{{ tag_names }}} beta-testing {{{ priority }}}-priority
Including Custom Fields:
Custom fields use identifiers in the format custom_field_{identifier}. See Custom Field Identifiers for more details.
Bug Report: {{{ title }}}
Platform: {{{ custom_field_platform }}}
Game Mode: {{{ custom_field_game_mode }}}
Affected System: {{{ custom_field_affected_system }}}
Version: {{{ version }}}
Description:
{{{ description }}}
Steps to Reproduce:
{{{ steps_to_reproduce }}}
[View in BetaHub]({{{ issue_url }}})
Finding Available Fields: When configuring dynamic expressions in BetaHub, you’ll see a grouped list of available fields including all your custom fields with their identifiers. Standard fields (title, description, priority) and custom fields are shown separately for easy reference.
Available Template Variables
The following variables are available for use in dynamic expressions:
Entry Fields:
| Variable | Description | Example Value |
|---|---|---|
title |
Entry title | “Game crashes on level 3” |
description |
Full description | “When I enter the cave…” |
steps_to_reproduce |
Reproduction steps | “1. Open game\n2. Go to…” |
priority |
Priority level | “Critical”, “High”, “Medium”, “Low” |
status |
Current status | “Open”, “In Progress”, “Resolved” |
heat |
Bug heat/popularity score | “5” |
tag_names |
Applied tags (comma-separated) | “UI, Graphics” |
issue_url |
BetaHub entry URL | “https://app.betahub.io/…” |
created_at |
Creation timestamp | “2024-01-15 10:30:00” |
due_date |
Due date if set | “2024-02-01” |
Device & Environment:
| Variable | Description | Example Value |
|---|---|---|
device |
Formatted device details (CPU, GPU, OS, memory) | “Intel Core i7, NVIDIA RTX 3080, Windows 11” |
version |
Release/game version label | “1.2.3” |
Discord Integration:
| Variable | Description | Example Value |
|---|---|---|
discord_message |
Original Discord message (if reported via Discord) | “The game keeps crashing…” |
discord_link |
Link to Discord message/thread | “https://discord.com/…” |
Duplicate Tracking:
| Variable | Description | Example Value |
|---|---|---|
duplicates_count |
Number of duplicate reports | “3” |
duplicate_releases |
Releases with duplicate counts | “v1.2.0 (2), v1.1.0 (1)” |
duplicate_links |
Links to duplicate issues | “https://app.betahub.io/…” |
Custom Fields:
Custom fields use the format custom_field_{identifier}:
| Variable | Description |
|---|---|
custom_field_platform |
Your “Platform” custom field |
custom_field_game_mode |
Your “Game Mode” custom field |
custom_field_affected_system |
Your “Affected System” custom field |
See Custom Field Identifiers for how to find your custom field identifiers.
Best Practices for Mapping
Include Context:
- Add links back to BetaHub entries
- Include reporter information
- Reference game version and platform
Maintain Traceability:
- Use consistent formatting across tools
- Include unique identifiers
- Cross-reference related items
Optimize for Workflow:
- Map to appropriate priority levels
- Use relevant categories and labels
- Set up automatic assignments
Using Integrations
Sending Individual Items
From List View:
- Navigate to Bugs, Suggestions, or Tickets list
- Click the three-dots menu (…) next to the entry
- Select Send to…
- Choose your configured integration
From Detail View:
- Open the entry details page
- Click the three-dots menu (…) in the top-right corner
- Select Send to…
- Choose your configured integration
Bulk Operations
Multi-Select Sending:
- Use checkboxes to select multiple entries
- Click bulk actions menu
- Choose Send to… for selected items
- Select target integration
Entry Linking and Updates
Automatic Linking:
- BetaHub creates bidirectional links between entries
- External item IDs are stored for reference
- Status sync (where supported by external tool)
Update Behavior:
- Subsequent “Send to…” actions update existing items
- No duplicate creation in external systems
- Manual trigger required (no automatic sync)
Incoming Sync (Two-Way)
Jira Cloud supports two-way sync — when someone changes a ticket’s status or priority in Jira, the linked BetaHub bug updates automatically. This is useful when developers work in Jira and want status changes to flow back to BetaHub without manual updates.
Two-way sync is currently available for Jira Cloud only. Other integrations support one-way sync (BetaHub → external tool).
What Gets Synced
Incoming sync covers two fields:
| Jira Change | BetaHub Update | Example |
|---|---|---|
| Status change | Bug status updates | Jira “Done” → BetaHub “Resolved” |
| Priority change | Bug priority updates | Jira “Highest” → BetaHub “Critical” |
Other changes (title, description, comments, assignee) are not synced back.
Enabling Incoming Sync
- Open your Jira integration’s edit page (Settings → Integrations → click your Jira integration)
- Scroll to the Incoming Sync (Two-Way) section
- Check Enable incoming sync from Jira
- Click Save Incoming Sync Settings — this generates your webhook URL and secret
Setting Up the Webhook
After saving, BetaHub displays a Webhook URL and Webhook Secret. You need to tell Jira to send events to this URL.
Option A: Auto-Register (OAuth2 only)
If you connected with OAuth2, click the Auto-register webhook in Jira button. BetaHub registers the webhook in your Jira project automatically — no manual configuration needed.
Auto-registration requires the manage:jira-webhook OAuth scope. Integrations connected before this feature was added may need to re-authorize with Jira by clicking “Connect with Jira OAuth2” again.
Option B: Manual Setup
- Copy the Webhook URL from BetaHub
- In Jira, go to Settings → System → Webhooks (requires Jira admin access)
- Click Create Webhook
- Paste the BetaHub webhook URL
- Under events, select Issue: updated
- Optionally paste the Webhook Secret for HMAC signature verification
- Save the webhook
Configuring Status Mapping
The status mapping table shows all statuses from your Jira project on the left and BetaHub statuses on the right. For each Jira status, choose the corresponding BetaHub status:
| Jira Status | BetaHub Status |
|---|---|
| To Do | Open |
| In Progress | In progress |
| Done | Resolved |
| In Review | – Do not sync – |
Select – Do not sync – for Jira statuses that should be ignored.
If your project uses custom issue statuses, they will appear in the mapping dropdown alongside the built-in statuses.
Configuring Priority Mapping
Similar to status mapping, the priority table maps Jira priorities to BetaHub priorities:
| Jira Priority | BetaHub Priority |
|---|---|
| Highest | Critical |
| High | High |
| Medium | Medium |
| Low | Low |
| Lowest | Low |
How It Works
When a Jira ticket linked to a BetaHub bug is updated:
- Jira sends a webhook event to BetaHub
- BetaHub identifies the linked bug via the external reference
- The status and/or priority change is mapped using your configured mappings
- The BetaHub bug is updated — this update does not push back to Jira (loop prevention)
- Team members receive the usual notifications (Discord, email) about the status change
Loop Prevention
BetaHub has built-in safeguards to prevent infinite update loops between Jira and BetaHub. When a change originates from Jira, BetaHub updates the bug locally without pushing the change back to Jira.
Advanced Configuration
Custom Field Mapping
Jira Custom Fields:
{
"customfield_10001": "{{{ device }}}",
"customfield_10002": "{{{ version }}}",
"customfield_10003": "BetaHub Import"
}
GitHub Issue Templates:
---
title: {{{ title }}}
labels: {{{ tag_names }}}, bug
---
**Bug Report from BetaHub**
{{{ description }}}
**Steps to Reproduce:**
{{{ steps_to_reproduce }}}
**Environment:**
- Version: {{{ version }}}
- Device: {{{ device }}}
[View in BetaHub]({{{ issue_url }}})
Template Engine
BetaHub uses the Mustache template engine for dynamic expressions. This provides simple, logic-less templating focused on variable substitution.
Supported Syntax:
- Variable substitution:
{{{ variable_name }}} - All variables are converted to strings automatically
- Empty variables render as blank strings
Unsupported Features:
- Conditional logic (if/else statements)
- Loops and iterations
- Filters or transformations
- Liquid-style syntax
Need conditional routing? Use multiple integrations with different configurations, or implement conditional logic in your external system (e.g., Jira automation rules, GitHub Actions).
Webhook Configuration
For comprehensive webhook setup, configuration, and examples, see the dedicated Webhooks Documentation.
Key Features:
- Real-time notifications to external services
- Custom payload formatting with variable substitution
- Multiple event types (issues, feature requests, tickets)
- Built-in testing and debugging tools
- Retry logic for failed deliveries
- Security headers and authentication support
Integration Monitoring
Success Tracking
Integration Dashboard:
- Success/failure rates for each integration
- Recent sync activity logs
- Error message analysis
- Performance metrics
Audit Trail:
- Track which items were sent where
- Monitor user actions and timestamps
- Maintain compliance records
Error Handling
Common Error Types:
- Authentication failures
- Network connectivity issues
- Field validation errors
- Rate limiting responses
Resolution Strategies:
- Automatic retry with exponential backoff
- User notification for manual intervention
- Fallback to alternative integrations
- Error log aggregation for analysis
Troubleshooting
Authentication Issues
Token Expiration:
- Check token validity in external system
- Regenerate tokens as needed
- Update BetaHub configuration
Permission Problems:
- Verify account permissions in target system
- Check project-specific access rights
- Confirm API scope and capabilities
Field Mapping Errors
Validation Failures:
- Review required fields in target system
- Check data format requirements
- Test with minimal field mappings
Template Syntax Errors:
- Validate dynamic expression syntax
- Test templates with sample data
- Check for missing or invalid variables
Performance Issues
Slow Sync Times:
- Review network connectivity
- Check external system status
- Optimize field mapping complexity
Rate Limiting:
- Implement request throttling
- Spread sync operations over time
- Contact external service for rate increases
Security Considerations
Credential Management
Best Practices:
- Use dedicated service accounts
- Rotate credentials regularly
- Apply principle of least privilege
- Monitor access logs
Token Security:
- Store tokens securely
- Never expose in logs or UI
- Use encrypted storage
- Implement token rotation
Data Privacy
Information Transfer:
- Review what data is sent to external systems
- Ensure compliance with privacy regulations
- Implement data retention policies
- Document data flows
Getting Help
Support Resources
Documentation:
- Platform-specific integration guides
- API reference documentation
- Field mapping examples
Community Support:
- Join our Discord server
- Community knowledge base
- User-contributed examples
Direct Support:
- Technical support for complex integrations
- Custom integration development
- Enterprise integration consulting
Common Questions
Q: Can I sync data back from external tools to BetaHub? A: Yes — Jira Cloud supports two-way sync for status and priority changes. Enable it in your Jira integration’s edit page under “Incoming Sync (Two-Way).” Other integrations currently support one-way sync only.
Q: How often does synchronization occur? A: Sync is manual and triggered by user action. Automatic sync is not currently supported.
Q: Can I integrate with multiple tools simultaneously? A: Yes, you can configure multiple integrations and choose which tool to send each item to.
See Also
- Webhooks – Real-time event notifications
- API Access – REST API and authentication
- AI Assistants – AI-powered workflow automation
- Advanced Features – Webhooks, API, and automation